Crie um listener HTTP, HTTPS ou QUIC para uma instância de Application Load Balancer (ALB).
Sintaxe
{
"Type": "ALIYUN::ALB::Listener",
"Properties": {
"RequestTimeout": Integer,
"ListenerPort": Integer,
"Http2Enabled": Boolean,
"DefaultActions": List,
"Certificates": List,
"IdleTimeout": Integer,
"LoadBalancerId": String,
"ListenerProtocol": String,
"QuicConfig": Map,
"GzipEnabled": Boolean,
"SecurityPolicyId": String,
"ListenerDescription": String,
"XForwardedForConfig": Map,
"CaEnabled": Boolean,
"CaCertificates": List,
"ListenerStatus": String,
"LogConfig": Map
}
}
Propriedades
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
DefaultActions |
List |
Sim |
Sim |
Lista de ações de regra. |
Valor de exemplo:
Para mais informações, consulte Propriedade DefaultActions. |
|
ListenerPort |
Integer |
Sim |
Não |
Porta de escuta. |
Valores válidos: 1 a 65535. |
|
ListenerProtocol |
String |
Sim |
Não |
Protocolo de escuta. |
Valores válidos:
|
|
LoadBalancerId |
String |
Sim |
Não |
ID da instância de Application Load Balancer (ALB). |
Nenhuma |
|
CaCertificates |
List |
Não |
Sim |
Informações do certificado CA. |
Para mais informações, consulte Propriedade CaCertificates. |
|
CaEnabled |
Boolean |
Não |
Sim |
Defina se a autenticação mútua está ativada. |
Valores válidos:
|
|
Certificates |
List |
Não |
Sim |
Certificados do servidor. |
Para mais informações, consulte Propriedade Certificates. |
|
GzipEnabled |
Boolean |
Não |
Sim |
Defina se a compactação Gzip está ativada para tipos específicos de arquivo. |
Valores válidos:
|
|
Http2Enabled |
Boolean |
Não |
Sim |
Defina se o HTTP/2 está ativado. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
IdleTimeout |
Integer |
Não |
Sim |
Tempo limite de ociosidade da conexão. |
Valores válidos: 1 a 60. Valor padrão: 15. Unidade: segundos. Se nenhuma requisição chegar dentro desse período, o balanceador de carga fecha temporariamente a conexão e a restabelece quando a próxima requisição for recebida. |
|
ListenerDescription |
String |
Não |
Sim |
Descrição do listener. |
Comprimento: 2 a 256 caracteres. |
|
ListenerStatus |
String |
Não |
Sim |
Status do listener. |
Valores válidos:
|
|
LogConfig |
Map |
Não |
Sim |
Configuração de log. |
Para mais informações, consulte Propriedade LogConfig. |
|
QuicConfig |
Map |
Não |
Sim |
Configuração do listener QUIC associado. |
Para mais informações, consulte Propriedade QuicConfig. |
|
RequestTimeout |
Integer |
Não |
Sim |
Tempo limite da requisição. |
Valores válidos: 1 a 180. Valor padrão: 60. Unidade: segundos. Caso o servidor backend não responda dentro desse período, o balanceador de carga retorna HTTP 504 ao cliente. |
|
SecurityPolicyId |
String |
Não |
Sim |
ID da política de segurança. |
É possível utilizar políticas de segurança definidas pelo sistema ou personalizadas. Valor padrão: tls_cipher_policy_1_0, que indica uma política de segurança definida pelo sistema. Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForConfig |
Map |
Não |
Sim |
Configuração do campo de cabeçalho X-Forwarded-For. |
Para mais informações, consulte Propriedade XForwardedForConfig. |
Sintaxe de DefaultActions
"DefaultActions": [
{
"Type": String,
"ForwardGroupConfig": Map
}
]
Propriedade DefaultActions
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
ForwardGroupConfig |
Map |
Sim |
Sim |
Configuração da ação de encaminhamento. |
Para mais informações, consulte Propriedade ForwardGroupConfig. |
|
Type |
String |
Sim |
Sim |
Tipo da ação. |
Defina este parâmetro como ForwardGroup para encaminhar requisições a vários grupos de vServer. |
Sintaxe de ForwardGroupConfig
"ForwardGroupConfig": {
"ServerGroupTuples": List
}
Propriedades de ForwardGroupConfig
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
ServerGroupTuples |
List |
Sim |
Sim |
Grupo de vServer de destino para encaminhamento. |
Para mais informações, consulte Propriedade ServerGroupTuples. |
Sintaxe de ServerGroupTuples
"ServerGroupTuples": [
{
"ServerGroupId": String
}
]
Propriedades de ServerGroupTuples
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
ServerGroupId |
String |
Sim |
Sim |
ID do grupo de vServer de destino para encaminhamento. |
Nenhuma |
Sintaxe de Certificates
"Certificates": [
{
"CertificateId": String
}
]
Propriedades de Certificates
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
CertificateId |
String |
Não |
Sim |
ID do certificado do servidor. |
Apenas certificados de servidor são suportados. |
Sintaxe de QuicConfig
"QuicConfig": {
"QuicListenerId": String,
"QuicUpgradeEnabled": Boolean
}
Propriedades de QuicConfig
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
QuicListenerId |
String |
Não |
Sim |
ID do listener QUIC a ser associado. |
Especifique este parâmetro se QuicUpgradeEnabled estiver definido como true. Nota
|
|
QuicUpgradeEnabled |
Boolean |
Não |
Sim |
Defina se o upgrade para QUIC está ativado. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
Sintaxe de LogConfig
"LogConfig": {
"AccessLogTracingConfig": Map,
"AccessLogRecordCustomizedHeadersEnabled": Boolean
}
Propriedades de LogConfig
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
AccessLogTracingConfig |
Map |
Não |
Sim |
Configuração X-Trace para logs de acesso. |
Para mais informações, consulte Propriedade AccessLogTracingConfig. |
|
AccessLogRecordCustomizedHeadersEnabled |
Boolean |
Não |
Sim |
Defina se cabeçalhos personalizados são incluídos nos logs de acesso. |
Valores válidos:
|
Sintaxe de AccessLogTracingConfig
"AccessLogTracingConfig": {
"TracingSample": Integer,
"TracingType": String,
"TracingEnabled": Boolean
}
Propriedades de AccessLogTracingConfig
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
TracingEnabled |
Boolean |
Não |
Sim |
Defina se o X-Trace está ativado. |
Valores válidos:
Nota
Este parâmetro só pode ser definido como true se o recurso de log de acesso (AccessLogEnabled) estiver ativado. |
|
TracingSample |
Integer |
Não |
Sim |
Taxa de amostragem para X-Trace. |
Valor válido: 1 a 10000. Nota
Este valor só entra em vigor se TracingEnabled estiver definido como true. |
|
TracingType |
String |
Não |
Sim |
Tipo do X-Trace. |
Valor válido: Zipkin. Nota
Este valor só entra em vigor se TracingEnabled estiver definido como true. |
Sintaxe de XForwardedForConfig
"XForwardedForConfig": {
"XForwardedForClientCertFingerprintAlias": String,
"XForwardedForClientCertFingerprintEnabled": Boolean,
"XForwardedForClientCertIssuerDNAlias": String,
"XForwardedForClientCertClientVerifyAlias": String,
"XForwardedForSLBIdEnabled": Boolean,
"XForwardedForClientCertSubjectDNEnabled": Boolean,
"XForwardedForClientCertSubjectDNAlias": String,
"XForwardedForProtoEnabled": Boolean,
"XForwardedForClientSrcPortEnabled": Boolean,
"XForwardedForSLBPortEnabled": Boolean,
"XForwardedForEnabled": Boolean,
"XForwardedForClientCertIssuerDNEnabled": Boolean,
"XForwardedForClientCertClientVerifyEnabled": Boolean,
"XForwardedForClientSourceIpsEnabled": Boolean,
"XForwardedForClientSourceIpsTrusted": String,
"XForwardedForProcessingMode": String,
"XForwardedForHostEnabled": Boolean
}
Propriedades de XForwardedForConfig
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
XForwardedForClientCertClientVerifyAlias |
String |
Não |
Sim |
Nome do cabeçalho personalizado usado para obter o resultado da verificação do certificado do cliente. |
Este parâmetro só entra em vigor se XForwardedForClientCertClientVerifyEnabled estiver definido como true. Comprimento: 1 a 40 caracteres. Caracteres válidos: letras minúsculas, dígitos, hífens (-) e sublinhados (_). Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertClientVerifyEnabled |
Boolean |
Não |
Sim |
Defina se o resultado da verificação do certificado do cliente é obtido do campo de cabeçalho X-Forwarded-Clientcert-clientverify. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertFingerprintAlias |
String |
Não |
Sim |
Nome do cabeçalho personalizado usado para obter a impressão digital do certificado do cliente. |
Este parâmetro só entra em vigor se XForwardedForClientCertFingerprintEnabled estiver definido como true. Comprimento: 1 a 40 caracteres. Caracteres válidos: letras minúsculas, dígitos, hífens (-) e sublinhados (_). Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertFingerprintEnabled |
Boolean |
Não |
Sim |
Defina se a impressão digital do certificado do cliente é obtida do campo de cabeçalho X-Forwarded-Clientcert-fingerprint. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertIssuerDNAlias |
String |
Não |
Sim |
Nome do cabeçalho personalizado usado para obter as informações do emissor do certificado do cliente. |
Este parâmetro só entra em vigor se XForwardedForClientCertIssuerDNEnabled estiver definido como true. Comprimento: 1 a 40 caracteres. Caracteres válidos: letras minúsculas, dígitos, hífens (-) e sublinhados (_). Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertIssuerDNEnabled |
Boolean |
Não |
Sim |
Defina se as informações do emissor do certificado do cliente são obtidas do campo de cabeçalho X-Forwarded-Clientcert-issuerdn. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertSubjectDNAlias |
String |
Não |
Sim |
Nome do cabeçalho personalizado usado para obter as informações do assunto do certificado do cliente. |
Este parâmetro só entra em vigor se XForwardedForClientCertSubjectDNEnabled estiver definido como true. Comprimento: 1 a 40 caracteres. Caracteres válidos: letras minúsculas, dígitos, hífens (-) e sublinhados (_). Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientCertSubjectDNEnabled |
Boolean |
Não |
Sim |
Defina se as informações do assunto do certificado do cliente são obtidas do campo de cabeçalho X-Forwarded-Clientcert-subjectdn. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTPS. |
|
XForwardedForClientSourceIpsEnabled |
Boolean |
Não |
Sim |
Defina se a porta de origem do cliente é obtida do campo de cabeçalho X-Forwarded-Client-SourceIps. |
Valores válidos:
|
|
XForwardedForClientSourceIpsTrusted |
String |
Não |
Sim |
Endereço IP do proxy confiável. |
O Application Load Balancer (ALB) percorre o campo de cabeçalho |
|
XForwardedForClientSrcPortEnabled |
Boolean |
Não |
Sim |
Defina se a porta do cliente é obtida do campo de cabeçalho X-Forwarded-Client-Port. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTP e HTTPS. |
|
XForwardedForEnabled |
Boolean |
Não |
Sim |
Defina se o endereço IP de origem é obtido do campo de cabeçalho X-Forwarded-For. |
Valores válidos:
Nota
Este parâmetro é suportado apenas para listeners HTTP e HTTPS. |
|
XForwardedForHostEnabled |
Boolean |
Não |
Sim |
Defina se o nome de domínio do cliente é obtido do campo de cabeçalho |
Valores válidos:
Nota
Este parâmetro é suportado para listeners HTTP, HTTPS e QUIC. |
|
XForwardedForProcessingMode |
String |
Não |
Sim |
Modo de processamento do campo de cabeçalho |
Este valor só entra em vigor se XForwardedForEnabled estiver definido como true. Valores válidos:
Nota
|
|
XForwardedForProtoEnabled |
Boolean |
Não |
Sim |
Defina se o protocolo de escuta é obtido do campo de cabeçalho X-Forwarded-Proto. |
Valores válidos:
|
|
XForwardedForSLBIdEnabled |
Boolean |
Não |
Sim |
Defina se o ID da instância ALB é obtido do campo de cabeçalho SLB-ID. |
Valores válidos:
|
|
XForwardedForSLBPortEnabled |
Boolean |
Não |
Sim |
Defina se a porta de escuta é obtida do campo de cabeçalho X-Forwarded-Port. |
Valores válidos:
|
Sintaxe de CaCertificates
"CaCertificates": [
{
"CertificateId": String
}
]
Propriedades de CaCertificates
|
Nome da propriedade |
Tipo |
Obrigatório |
Atualização permitida |
Descrição |
Restrição |
|
CertificateId |
String |
Não |
Sim |
ID do certificado CA. |
Nenhuma |
Valores de retorno
Fn::GetAtt
ListenerId: o ID do listener.
LoadBalancerId: o ID da instância de Application Load Balancer (ALB).
Exemplos
Cenário 1: Crie um listener HTTP.
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
LoadBalancerId:
Type: String
Description: The ID of the ALB instance.
Default: lb-bp1iilcd9ujny84z8****
Resources:
Listener:
Type: ALIYUN::ALB::Listener
Properties:
ListenerPort: 80
DefaultActions:
- ForwardGroupConfig:
ServerGroupTuples:
- ServerGroupId: sgp-46ndzg2wz4v5mp****
Type: ForwardGroup
LoadBalancerId:
Ref: LoadBalancerId
ListenerProtocol: HTTP
Outputs:
ListenerId:
Description: The ID of the listener.
Value:
Fn::GetAtt:
- Listener
- ListenerId
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"LoadBalancerId": {
"Type": "String",
"Description": "The ID of the ALB instance.",
"Default": "lb-bp1iilcd9ujny84z8****"
}
},
"Resources": {
"Listener": {
"Type": "ALIYUN::ALB::Listener",
"Properties": {
"ListenerPort": 80,
"DefaultActions": [
{
"ForwardGroupConfig": {
"ServerGroupTuples": [
{
"ServerGroupId": "sgp-46ndzg2wz4v5mp****"
}
]
},
"Type": "ForwardGroup"
}
],
"LoadBalancerId": {
"Ref": "LoadBalancerId"
},
"ListenerProtocol": "HTTP"
}
}
},
"Outputs": {
"ListenerId": {
"Description": "The ID of the listener.",
"Value": {
"Fn::GetAtt": [
"Listener",
"ListenerId"
]
}
}
}
}
Cenário 2: Crie uma instância ALB com duas zonas e um listener HTTP.
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: Create a dual-Availability-Zone ALB.
en: Create a dual-Availability-Zone ALB.
Parameters:
CommonName:
Type: String
Default: elastic-app
ZoneId1:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::ZoneId'
AssociationPropertyMetadata:
ExclusiveTo:
- ZoneId2
Label:
en: Availability Zone
zh-cn: Zone 1
ZoneId2:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::ZoneId'
AssociationPropertyMetadata:
ExclusiveTo:
- ZoneId1
Label:
en: Availability Zone
zh-cn: Zone 2
Resources:
Vpc:
Type: 'ALIYUN::ECS::VPC'
Properties:
CidrBlock: 192.168.0.0/16
VpcName:
Fn::Sub: ${CommonName}-vpc
VSwitch1:
Type: 'ALIYUN::ECS::VSwitch'
Properties:
VpcId:
Ref: Vpc
CidrBlock: 192.168.1.0/24
ZoneId:
Ref: ZoneId1
VSwitchName:
Fn::Sub: ${CommonName}-vsw
VSwitch2:
Type: 'ALIYUN::ECS::VSwitch'
Properties:
VpcId:
Ref: Vpc
CidrBlock: 192.168.2.0/24
ZoneId:
Ref: ZoneId2
VSwitchName:
Fn::Sub: ${CommonName}-vsw
Alb:
Type: 'ALIYUN::ALB::LoadBalancer'
Properties:
LoadBalancerName:
Fn::Sub: ${CommonName}-alb
LoadBalancerEdition: Basic
VpcId:
Ref: Vpc
LoadBalancerBillingConfig:
PayType: PostPay
AddressType: Internet
ZoneMappings:
- ZoneId:
Ref: ZoneId1
VSwitchId:
Ref: VSwitch1
- ZoneId:
Ref: ZoneId2
VSwitchId:
Ref: VSwitch2
AlbServerGroup:
Type: 'ALIYUN::ALB::ServerGroup'
Properties:
VpcId:
Ref: Vpc
ServerGroupType: Instance
ServerGroupName:
Fn::Sub: ${CommonName}-server-group
HealthCheckConfig:
HealthCheckConnectPort: 80
HealthCheckCodes:
- http_2xx
- http_3xx
HealthCheckProtocol: HTTP
HealthCheckEnabled: true
HealthCheckPath: /
StickySessionConfig:
StickySessionEnabled: false
AlbListener:
Type: 'ALIYUN::ALB::Listener'
Properties:
ListenerPort: 80
DefaultActions:
- Type: ForwardGroup
ForwardGroupConfig:
ServerGroupTuples:
- ServerGroupId:
Ref: AlbServerGroup
LoadBalancerId:
Ref: Alb
ListenerProtocol: HTTP
Metadata:
'ALIYUN::ROS::Interface':
ParameterGroups:
- Parameters:
- ZoneId1
- ZoneId2
Hidden:
- CommonName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "Create a dual-Availability-Zone ALB.",
"en": "Create a dual-Availability-Zone ALB."
},
"Parameters": {
"CommonName": {
"Type": "String",
"Default": "elastic-app"
},
"ZoneId1": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"AssociationPropertyMetadata": {
"ExclusiveTo": [
"ZoneId2"
]
},
"Label": {
"en": "Availability Zone",
"zh-cn": "Zone 1"
}
},
"ZoneId2": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"AssociationPropertyMetadata": {
"ExclusiveTo": [
"ZoneId1"
]
},
"Label": {
"en": "Availability Zone",
"zh-cn": "Zone 2"
}
}
},
"Resources": {
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"CidrBlock": "192.168.0.0/16",
"VpcName": {
"Fn::Sub": "${CommonName}-vpc"
}
}
},
"VSwitch1": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.1.0/24",
"ZoneId": {
"Ref": "ZoneId1"
},
"VSwitchName": {
"Fn::Sub": "${CommonName}-vsw"
}
}
},
"VSwitch2": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.2.0/24",
"ZoneId": {
"Ref": "ZoneId2"
},
"VSwitchName": {
"Fn::Sub": "${CommonName}-vsw"
}
}
},
"Alb": {
"Type": "ALIYUN::ALB::LoadBalancer",
"Properties": {
"LoadBalancerName": {
"Fn::Sub": "${CommonName}-alb"
},
"LoadBalancerEdition": "Basic",
"VpcId": {
"Ref": "Vpc"
},
"LoadBalancerBillingConfig": {
"PayType": "PostPay"
},
"AddressType": "Internet",
"ZoneMappings": [
{
"ZoneId": {
"Ref": "ZoneId1"
},
"VSwitchId": {
"Ref": "VSwitch1"
}
},
{
"ZoneId": {
"Ref": "ZoneId2"
},
"VSwitchId": {
"Ref": "VSwitch2"
}
}
]
}
},
"AlbServerGroup": {
"Type": "ALIYUN::ALB::ServerGroup",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"ServerGroupType": "Instance",
"ServerGroupName": {
"Fn::Sub": "${CommonName}-server-group"
},
"HealthCheckConfig": {
"HealthCheckConnectPort": 80,
"HealthCheckCodes": [
"http_2xx",
"http_3xx"
],
"HealthCheckProtocol": "HTTP",
"HealthCheckEnabled": true,
"HealthCheckPath": "/"
},
"StickySessionConfig": {
"StickySessionEnabled": false
}
}
},
"AlbListener": {
"Type": "ALIYUN::ALB::Listener",
"Properties": {
"ListenerPort": 80,
"DefaultActions": [
{
"Type": "ForwardGroup",
"ForwardGroupConfig": {
"ServerGroupTuples": [
{
"ServerGroupId": {
"Ref": "AlbServerGroup"
}
}
]
}
}
],
"LoadBalancerId": {
"Ref": "Alb"
},
"ListenerProtocol": "HTTP"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"ZoneId1",
"ZoneId2"
]
}
],
"Hidden": [
"CommonName"
]
}
}
}
Cenário 3: Implantar um site NGINX de alta disponibilidade.
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: Create a dual-Availability-Zone high-availability NGINX website, including a VPC, ECS instances, an ALB, security groups, and automated deployment configurations.
en: Establish a dual-Availability-Zone high-availability NGINX website, encompassing a Virtual Private Cloud (VPC), Elastic Cloud Server (ECS) instances, an Application Load Balancer (ALB), Security Groups, and automated deployment configurations.
Parameters:
CommonName:
Type: String
Default: elastic-app
ZoneId1:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::ZoneId'
AssociationPropertyMetadata:
AutoSelectFirst: true
ExclusiveTo:
- ZoneId2
Label:
en: Availability Zone
zh-cn: Zone 1
ZoneId2:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::ZoneId'
AssociationPropertyMetadata:
AutoSelectFirst: true
ExclusiveTo:
- ZoneId1
Label:
en: Availability Zone
zh-cn: Zone 2
InstanceType1:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::InstanceType'
AssociationPropertyMetadata:
SpotStrategy: SpotAsPriceGo
InstanceChargeType: PostPaid
SystemDiskCategory: cloud_essd
ZoneId: ${ZoneId}
Label:
en: Instance Type
zh-cn: Instance type 1
Description:
zh-cn: This solution creates a spot instance and automatically deploys an NGINX service.
en: This solution will create a spot instance and automatically deploy an NGINX service.
Default: null
InstanceType2:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::InstanceType'
AssociationPropertyMetadata:
SpotStrategy: SpotAsPriceGo
InstanceChargeType: PostPaid
SystemDiskCategory: cloud_essd
ZoneId: ${ZoneId}
Label:
en: Instance Type
zh-cn: Instance type 2
Description:
zh-cn: This solution creates a spot instance and automatically deploys an NGINX service.
en: This solution will create a spot instance and automatically deploy an NGINX service.
Default: null
InstancePassword:
NoEcho: true
Type: String
Description:
en: Server login password. Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
zh-cn: Server logon password. Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
Label:
en: Instance Password
zh-cn: Instance password
ConstraintDescription:
en: Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
zh-cn: Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
AssociationProperty: 'ALIYUN::ECS::Instance::Password'
Default: null
Resources:
Vpc:
Type: 'ALIYUN::ECS::VPC'
Properties:
CidrBlock: 192.168.0.0/16
VpcName:
Fn::Sub: ${CommonName}-vpc
VSwitch1:
Type: 'ALIYUN::ECS::VSwitch'
Properties:
VpcId:
Ref: Vpc
CidrBlock: 192.168.1.0/24
ZoneId:
Ref: ZoneId1
VSwitchName:
Fn::Sub: ${CommonName}-vsw
VSwitch2:
Type: 'ALIYUN::ECS::VSwitch'
Properties:
VpcId:
Ref: Vpc
CidrBlock: 192.168.2.0/24
ZoneId:
Ref: ZoneId2
VSwitchName:
Fn::Sub: ${CommonName}-vsw
SecurityGroup:
Type: 'ALIYUN::ECS::SecurityGroup'
Properties:
VpcId:
Ref: Vpc
SecurityGroupName:
Fn::Sub: ${CommonName}-sg
SecurityGroupIngress:
- PortRange: 443/443
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
- PortRange: 80/80
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
EcsInstance1:
Type: 'ALIYUN::ECS::InstanceGroup'
Properties:
VpcId:
Ref: Vpc
ZoneId:
Ref: ZoneId1
VSwitchId:
Ref: VSwitch1
SecurityGroupId:
Ref: SecurityGroup
ImageId: aliyun_3_9_x64_20G_alibase_
InstanceName:
Fn::Sub: ${CommonName}-ecs-1
InstanceType:
Ref: InstanceType1
SystemDiskCategory: cloud_essd
MaxAmount: 1
InternetMaxBandwidthOut: 0
SpotStrategy: SpotAsPriceGo
Password:
Ref: InstancePassword
UserData:
Fn::Sub: |-
#!/bin/bash
yum -y install nginx-1.20.1
instanceId=`curl http://100.100.100.200/latest/meta-data/instance-id`
echo "Welcome to NGINX. Current instance is $instanceId" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
EcsInstance2:
Type: 'ALIYUN::ECS::InstanceGroup'
Properties:
VpcId:
Ref: Vpc
ZoneId:
Ref: ZoneId2
VSwitchId:
Ref: VSwitch2
SecurityGroupId:
Ref: SecurityGroup
ImageId: aliyun_3_9_x64_20G_alibase_
InstanceName:
Fn::Sub: ${CommonName}-ecs-2
InstanceType:
Ref: InstanceType2
SystemDiskCategory: cloud_essd
MaxAmount: 1
InternetMaxBandwidthOut: 0
SpotStrategy: SpotAsPriceGo
Password:
Ref: InstancePassword
UserData:
Fn::Sub: |-
#!/bin/bash
yum -y install nginx-1.20.1
instanceId=`curl http://100.100.100.200/latest/meta-data/instance-id`
echo "Welcome to NGINX. Current instance is $instanceId" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
Alb:
Type: 'ALIYUN::ALB::LoadBalancer'
Properties:
LoadBalancerName:
Fn::Sub: ${CommonName}-alb
LoadBalancerEdition: Basic
VpcId:
Ref: Vpc
LoadBalancerBillingConfig:
PayType: PostPay
AddressType: Internet
ZoneMappings:
- ZoneId:
Ref: ZoneId1
VSwitchId:
Ref: VSwitch1
- ZoneId:
Ref: ZoneId2
VSwitchId:
Ref: VSwitch2
AlbServerGroup:
Type: 'ALIYUN::ALB::ServerGroup'
Properties:
VpcId:
Ref: Vpc
ServerGroupType: Instance
ServerGroupName:
Fn::Sub: ${CommonName}-server-group
HealthCheckConfig:
HealthCheckConnectPort: 80
HealthCheckCodes:
- http_2xx
- http_3xx
HealthCheckProtocol: HTTP
HealthCheckEnabled: true
HealthCheckPath: /
StickySessionConfig:
StickySessionEnabled: false
AlbBackendServerAttachment:
Type: 'ALIYUN::ALB::BackendServerAttachment'
Properties:
ServerGroupId:
Ref: AlbServerGroup
Servers:
- ServerType: Ecs
ServerId:
Ref: EcsInstance1
Port: 80
- ServerType: Ecs
ServerId:
Ref: EcsInstance2
Port: 80
AlbListener:
Type: 'ALIYUN::ALB::Listener'
Properties:
ListenerPort: 80
DefaultActions:
- Type: ForwardGroup
ForwardGroupConfig:
ServerGroupTuples:
- ServerGroupId:
Ref: AlbServerGroup
LoadBalancerId:
Ref: Alb
ListenerProtocol: HTTP
Outputs:
WebUrl:
Description:
zh-cn: Web access URL.
en: The web access URL.
Value:
'Fn::Sub': 'http://${Alb.DNSName}'
Metadata:
'ALIYUN::ROS::Interface':
ParameterGroups:
- Parameters:
- ZoneId1
- InstanceType1
- ZoneId2
- InstanceType2
- InstancePassword
TemplateTags:
- acs:example:elastic computing:Deploy a high-availability NGINX website
Hidden:
- CommonName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "Create a dual-Availability-Zone high-availability NGINX website, including a VPC, ECS instances, an ALB, security groups, and automated deployment configurations.",
"en": "Establish a dual-Availability-Zone high-availability NGINX website, encompassing a Virtual Private Cloud (VPC), Elastic Cloud Server (ECS) instances, an Application Load Balancer (ALB), Security Groups, and automated deployment configurations."
},
"Parameters": {
"CommonName": {
"Type": "String",
"Default": "elastic-app"
},
"ZoneId1": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"AssociationPropertyMetadata": {
"AutoSelectFirst": true,
"ExclusiveTo": [
"ZoneId2"
]
},
"Label": {
"en": "Availability Zone",
"zh-cn": "Zone 1"
}
},
"ZoneId2": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"AssociationPropertyMetadata": {
"AutoSelectFirst": true,
"ExclusiveTo": [
"ZoneId1"
]
},
"Label": {
"en": "Availability Zone",
"zh-cn": "Zone 2"
}
},
"InstanceType1": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"SpotStrategy": "SpotAsPriceGo",
"InstanceChargeType": "PostPaid",
"SystemDiskCategory": "cloud_essd",
"ZoneId": "${ZoneId}"
},
"Label": {
"en": "Instance Type",
"zh-cn": "Instance type 1"
},
"Description": {
"zh-cn": "This solution creates a spot instance and automatically deploys an NGINX service.",
"en": "This solution will create a spot instance and automatically deploy an NGINX service."
},
"Default": null
},
"InstanceType2": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"SpotStrategy": "SpotAsPriceGo",
"InstanceChargeType": "PostPaid",
"SystemDiskCategory": "cloud_essd",
"ZoneId": "${ZoneId}"
},
"Label": {
"en": "Instance Type",
"zh-cn": "Instance type 2"
},
"Description": {
"zh-cn": "This solution creates a spot instance and automatically deploys an NGINX service.",
"en": "This solution will create a spot instance and automatically deploy an NGINX service."
},
"Default": null
},
"InstancePassword": {
"NoEcho": true,
"Type": "String",
"Description": {
"en": "Server login password. Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/",
"zh-cn": "Server logon password. Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/"
},
"Label": {
"en": "Instance Password",
"zh-cn": "Instance password"
},
"ConstraintDescription": {
"en": "Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/",
"zh-cn": "Length: 8 to 30 characters. Must contain three of the following: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/"
},
"AssociationProperty": "ALIYUN::ECS::Instance::Password",
"Default": null
}
},
"Resources": {
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"CidrBlock": "192.168.0.0/16",
"VpcName": {
"Fn::Sub": "${CommonName}-vpc"
}
}
},
"VSwitch1": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.1.0/24",
"ZoneId": {
"Ref": "ZoneId1"
},
"VSwitchName": {
"Fn::Sub": "${CommonName}-vsw"
}
}
},
"VSwitch2": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.2.0/24",
"ZoneId": {
"Ref": "ZoneId2"
},
"VSwitchName": {
"Fn::Sub": "${CommonName}-vsw"
}
}
},
"SecurityGroup": {
"Type": "ALIYUN::ECS::SecurityGroup",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"SecurityGroupName": {
"Fn::Sub": "${CommonName}-sg"
},
"SecurityGroupIngress": [
{
"PortRange": "443/443",
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
},
{
"PortRange": "80/80",
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
}
]
}
},
"EcsInstance1": {
"Type": "ALIYUN::ECS::InstanceGroup",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"ZoneId": {
"Ref": "ZoneId1"
},
"VSwitchId": {
"Ref": "VSwitch1"
},
"SecurityGroupId": {
"Ref": "SecurityGroup"
},
"ImageId": "aliyun_3_9_x64_20G_alibase_",
"InstanceName": {
"Fn::Sub": "${CommonName}-ecs-1"
},
"InstanceType": {
"Ref": "InstanceType1"
},
"SystemDiskCategory": "cloud_essd",
"MaxAmount": 1,
"InternetMaxBandwidthOut": 0,
"SpotStrategy": "SpotAsPriceGo",
"Password": {
"Ref": "InstancePassword"
},
"UserData": {
"Fn::Sub": "#!/bin/bash\nyum -y install nginx-1.20.1\ninstanceId=`curl http://100.100.100.200/latest/meta-data/instance-id`\necho \"Welcome to NGINX. Current instance is $instanceId\" > /usr/share/nginx/html/index.html \nsystemctl start nginx \nsystemctl enable nginx"
}
}
},
"EcsInstance2": {
"Type": "ALIYUN::ECS::InstanceGroup",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"ZoneId": {
"Ref": "ZoneId2"
},
"VSwitchId": {
"Ref": "VSwitch2"
},
"SecurityGroupId": {
"Ref": "SecurityGroup"
},
"ImageId": "aliyun_3_9_x64_20G_alibase_",
"InstanceName": {
"Fn::Sub": "${CommonName}-ecs-2"
},
"InstanceType": {
"Ref": "InstanceType2"
},
"SystemDiskCategory": "cloud_essd",
"MaxAmount": 1,
"InternetMaxBandwidthOut": 0,
"SpotStrategy": "SpotAsPriceGo",
"Password": {
"Ref": "InstancePassword"
},
"UserData": {
"Fn::Sub": "#!/bin/bash\nyum -y install nginx-1.20.1\ninstanceId=`curl http://100.100.100.200/latest/meta-data/instance-id`\necho \"Welcome to NGINX. Current instance is $instanceId\" > /usr/share/nginx/html/index.html \nsystemctl start nginx \nsystemctl enable nginx"
}
}
},
"Alb": {
"Type": "ALIYUN::ALB::LoadBalancer",
"Properties": {
"LoadBalancerName": {
"Fn::Sub": "${CommonName}-alb"
},
"LoadBalancerEdition": "Basic",
"VpcId": {
"Ref": "Vpc"
},
"LoadBalancerBillingConfig": {
"PayType": "PostPay"
},
"AddressType": "Internet",
"ZoneMappings": [
{
"ZoneId": {
"Ref": "ZoneId1"
},
"VSwitchId": {
"Ref": "VSwitch1"
}
},
{
"ZoneId": {
"Ref": "ZoneId2"
},
"VSwitchId": {
"Ref": "VSwitch2"
}
}
]
}
},
"AlbServerGroup": {
"Type": "ALIYUN::ALB::ServerGroup",
"Properties": {
"VpcId": {
"Ref": "Vpc"
},
"ServerGroupType": "Instance",
"ServerGroupName": {
"Fn::Sub": "${CommonName}-server-group"
},
"HealthCheckConfig": {
"HealthCheckConnectPort": 80,
"HealthCheckCodes": [
"http_2xx",
"http_3xx"
],
"HealthCheckProtocol": "HTTP",
"HealthCheckEnabled": true,
"HealthCheckPath": "/"
},
"StickySessionConfig": {
"StickySessionEnabled": false
}
}
},
"AlbBackendServerAttachment": {
"Type": "ALIYUN::ALB::BackendServerAttachment",
"Properties": {
"ServerGroupId": {
"Ref": "AlbServerGroup"
},
"Servers": [
{
"ServerType": "Ecs",
"ServerId": {
"Ref": "EcsInstance1"
},
"Port": 80
},
{
"ServerType": "Ecs",
"ServerId": {
"Ref": "EcsInstance2"
},
"Port": 80
}
]
}
},
"AlbListener": {
"Type": "ALIYUN::ALB::Listener",
"Properties": {
"ListenerPort": 80,
"DefaultActions": [
{
"Type": "ForwardGroup",
"ForwardGroupConfig": {
"ServerGroupTuples": [
{
"ServerGroupId": {
"Ref": "AlbServerGroup"
}
}
]
}
}
],
"LoadBalancerId": {
"Ref": "Alb"
},
"ListenerProtocol": "HTTP"
}
}
},
"Outputs": {
"WebUrl": {
"Description": {
"zh-cn": "Web access URL.",
"en": "The web access URL."
},
"Value": {
"Fn::Sub": "http://${Alb.DNSName}"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"ZoneId1",
"InstanceType1",
"ZoneId2",
"InstanceType2",
"InstancePassword"
]
}
],
"TemplateTags": [
"acs:example:elastic computing:Deploy a high-availability NGINX website"
],
"Hidden": [
"CommonName"
]
}
}
}
Para mais exemplos, consulte modelos públicos que incluem este recurso.