Crea una instancia de Application Load Balancer (ALB).
Sintaxis
{
"Type": "ALIYUN::ALB::LoadBalancer",
"Properties": {
"BandwidthPackageId": String,
"LoadBalancerName": String,
"LoadBalancerEdition": String,
"VpcId": String,
"ResourceGroupId": String,
"LoadBalancerBillingConfig": Map,
"AddressType": String,
"AddressAllocatedMode": String,
"ZoneMappings": List,
"DeletionProtectionEnabled": Boolean,
"AddressIpVersion": String,
"ModificationProtectionConfig": Map,
"Tags": List,
"AccessLogConfig": Map,
"SecurityGroupIds": List,
"Ipv6AddressType": String
}
}
Propiedades
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
AddressType |
String |
Sí |
No |
Tipo de dirección de la instancia ALB. |
Valores válidos:
|
|
LoadBalancerBillingConfig |
Map |
Sí |
No |
Configuración de facturación. |
Para más información, consulte LoadBalancerBillingConfig properties. |
|
LoadBalancerEdition |
String |
Sí |
Sí |
Edición de la instancia ALB. |
Valores válidos:
|
|
VpcId |
String |
Sí |
No |
ID de la VPC. |
Ninguna |
|
ZoneMappings |
List |
Sí |
No |
Lista de zonas y vSwitches. |
Debe especificar como mínimo dos zonas. Para más información, consulte ZoneMappings properties. |
|
AccessLogConfig |
Map |
No |
Sí |
Configuración del registro de acceso. |
Para más información, consulte AccessLogConfig properties. |
|
AddressAllocatedMode |
String |
No |
No |
Modo de asignación de direcciones. |
Valores válidos:
|
|
AddressIpVersion |
String |
No |
No |
Versión de IP de la instancia ALB. |
Valores válidos:
|
|
BandwidthPackageId |
String |
No |
Sí |
ID de la instancia de Internet Shared Bandwidth asociada a la instancia ALB. |
Este parámetro solo es válido cuando AddressType se establece en Internet. |
|
DeletionProtectionEnabled |
Boolean |
No |
Sí |
Indica si se habilita la protección contra eliminación. |
Valores válidos:
|
|
Ipv6AddressType |
String |
No |
Sí |
Tipo de dirección IPv6 de la instancia ALB. |
Valores válidos: Internet: la instancia ALB utiliza una dirección IPv6 pública. El nombre de dominio de la instancia ALB se resuelve a la dirección IPv6 pública. Intranet: la instancia ALB utiliza una dirección IPv6 privada. El nombre de dominio de la instancia ALB se resuelve a la dirección IP privada. |
|
LoadBalancerName |
String |
No |
Sí |
Nombre de la instancia ALB. |
El nombre debe tener entre 1 y 80 caracteres. Puede contener letras, dígitos, guiones (-), barras diagonales (/), puntos (.) y guiones bajos (_). Si no especifica este parámetro, el sistema asigna automáticamente un nombre a la instancia. |
|
ModificationProtectionConfig |
Map |
No |
Sí |
Configuración de protección contra modificaciones. |
Para más información, consulte ModificationProtectionConfig properties. |
|
ResourceGroupId |
String |
No |
Sí |
ID del resource group. |
Ninguna |
|
SecurityGroupIds |
List |
No |
Sí |
IDs de los security groups asociados a la instancia ALB. |
La función de security group no está habilitada de forma predeterminada. Para utilizar esta función, contacte a su gerente de cuenta. |
|
Tags |
List |
No |
Sí |
Etiquetas de la instancia ALB. |
Puede agregar hasta 20 etiquetas. Para más información, consulte Tags properties. |
Sintaxis de AccessLogConfig
"AccessLogConfig": {
"Enable": Boolean,
"LogStore": String,
"LogProject": String
}
Propiedades de AccessLogConfig
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
LogProject |
String |
Sí |
No |
Proyecto de registros. |
Ninguna |
|
LogStore |
String |
Sí |
No |
Logstore. |
Ninguna |
|
Enable |
Boolean |
No |
Sí |
Indica si se habilita la función de registro de acceso. |
Valores válidos:
|
Sintaxis de LoadBalancerBillingConfig
"LoadBalancerBillingConfig": {
"PayType": String
}
Propiedades de LoadBalancerBillingConfig
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
PayType |
String |
Sí |
No |
Método de facturación de la instancia ALB. |
Valor válido: PostPay. Este valor especifica el método de facturación pay-as-you-go. |
Sintaxis de ZoneMappings
"ZoneMappings": [
{
"ZoneId": String,
"VSwitchId": String,
"AllocationId": String,
"LoadBalancerAddresses": List,
"IntranetAddress": String,
"EipType": String
}
]
Propiedades de ZoneMappings
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
VSwitchId |
String |
Sí |
No |
ID del vSwitch. |
Cada zona puede contener solo un vSwitch. |
|
ZoneId |
String |
Sí |
No |
ID de la zona. |
Ninguna |
|
AllocationId |
String |
No |
No |
ID de la elastic IP address (EIP) asociada a la instancia ALB. |
Ninguna |
|
EipType |
String |
No |
No |
Tipo de EIP pública. |
Valores válidos:
Nota
Para obtener información sobre las regiones donde ALB admite EIP Anycast, consulte Associate an Anycast EIP with an ALB instance to accelerate access across regions. |
|
LoadBalancerAddresses |
List |
No |
No |
Direcciones de la instancia ALB. |
Para más información, consulte LoadBalancerAddresses properties. |
|
IntranetAddress |
String |
No |
No |
Dirección IPv4 privada. |
Ninguna |
Sintaxis de LoadBalancerAddresses
"ModificationProtectionConfig": {
"AllocationId": String,
"IntranetAddress": String,
"EipType": String
}
Propiedades de LoadBalancerAddresses
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
AllocationId |
String |
Sí |
No |
ID de la EIP asociada a la instancia ALB. |
Ninguna |
|
EipType |
String |
No |
No |
Tipo de EIP pública. |
Valores válidos:
Nota
Para obtener información sobre las regiones donde ALB admite EIP Anycast, consulte Associate an Anycast EIP with an ALB instance to accelerate access across regions. |
|
IntranetAddress |
String |
No |
No |
Dirección IPv4 privada. |
Ninguna |
Sintaxis de ModificationProtectionConfig
"ModificationProtectionConfig": {
"Status": String,
"Reason": String
}
Propiedades de ModificationProtectionConfig
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
Status |
String |
Sí |
Sí |
Estado de la protección contra modificaciones. |
Valores válidos:
|
|
Reason |
String |
No |
Sí |
Motivo para habilitar la protección contra modificaciones. |
La cadena debe tener entre 2 y 128 caracteres, comenzar con una letra inglesa o un carácter chino, y contener únicamente letras inglesas, caracteres chinos, dígitos, puntos (.), guiones bajos (_) y guiones (-). Nota
Este parámetro solo es válido cuando Status se establece en ConsoleProtection. |
Sintaxis de Tags
"Tags": [
{
"Value": String,
"Key": String
}
]
Propiedades de Tags
|
Nombre de la propiedad |
Tipo |
Obligatorio |
Actualización permitida |
Descripción |
Restricciones |
|
Key |
String |
Sí |
No |
Clave de la etiqueta. |
La clave de la etiqueta debe tener entre 1 y 128 caracteres. No puede comenzar con |
|
Value |
String |
No |
No |
Valor de la etiqueta. |
El valor de la etiqueta debe tener entre 0 y 128 caracteres. No puede comenzar con |
Valores de retorno
Fn::GetAtt
LoadBalancerEdition: edición de la instancia ALB.
VpcId: ID de la VPC.
LoadBalancerId: ID de la instancia ALB.
AddressType: tipo de dirección de la instancia ALB.
DNSName: nombre de dominio de la instancia ALB.
ZoneMappings: lista de zonas y vSwitches.
Arn: Alibaba Cloud Resource Name (ARN) del recurso.
Ejemplos
Escenario 1: Instancia de Application Load Balancer (ALB).
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VpcId:
Type: String
AssociationProperty: ALIYUN::ECS::VPC::VPCId
ZoneMappings:
Type: Json
Description: The zones and the vSwitches in the zones. You must specify at least two zones.
Default:
- ZoneId: cn-hangzhou-h
VSwitchId: vsw-bp1jhj254nwc7i0ge****
- ZoneId: cn-hangzhou-i
VSwitchId: vsw-bp1llps83qqb30znp****
Resources:
LoadBalancer:
Type: ALIYUN::ALB::LoadBalancer
Properties:
LoadBalancerName: TestLoadBalancer
LoadBalancerEdition: Basic
VpcId:
Ref: VpcId
LoadBalancerBillingConfig:
PayType: PostPay
ZoneMappings:
Ref: ZoneMappings
AddressType: Internet
Outputs:
LoadBalancerEdition:
Description: The edition of the ALB instance.
Value:
Fn::GetAtt:
- LoadBalancer
- LoadBalancerEdition
VpcId:
Description: The ID of the virtual private cloud (VPC) where the ALB instance is deployed.
Value:
Fn::GetAtt:
- LoadBalancer
- VpcId
LoadBalancerId:
Description: The ID of the ALB instance.
Value:
Fn::GetAtt:
- LoadBalancer
- LoadBalancerId
AddressType:
Description: The type of IP address that the ALB instance uses to provide services.
Value:
Fn::GetAtt:
- LoadBalancer
- AddressType
DNSName:
Description: The domain name of the ALB instance.
Value:
Fn::GetAtt:
- LoadBalancer
- DNSName
ZoneMappings:
Description: The zones, vSwitches and addresses which are mapped to the zones.
Value:
Fn::GetAtt:
- LoadBalancer
- ZoneMappings {
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"VpcId": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::VPC::VPCId"
},
"ZoneMappings": {
"Type": "Json",
"Description": "The zones and the vSwitches in the zones. You must specify at least two zones.",
"Default": [
{
"ZoneId": "cn-hangzhou-h",
"VSwitchId": "vsw-bp1jhj254nwc7i0ge****"
},
{
"ZoneId": "cn-hangzhou-i",
"VSwitchId": "vsw-bp1llps83qqb30znp****"
}
]
}
},
"Resources": {
"LoadBalancer": {
"Type": "ALIYUN::ALB::LoadBalancer",
"Properties": {
"LoadBalancerName": "TestLoadBalancer",
"LoadBalancerEdition": "Basic",
"VpcId": {
"Ref": "VpcId"
},
"LoadBalancerBillingConfig": {
"PayType": "PostPay"
},
"ZoneMappings": {
"Ref": "ZoneMappings"
},
"AddressType": "Internet"
}
}
},
"Outputs": {
"LoadBalancerEdition": {
"Description": "The edition of the ALB instance.",
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"LoadBalancerEdition"
]
}
},
"VpcId": {
"Description": "The ID of the virtual private cloud (VPC) where the ALB instance is deployed.",
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"VpcId"
]
}
},
"LoadBalancerId": {
"Description": "The ID of the ALB instance.",
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"LoadBalancerId"
]
}
},
"AddressType": {
"Description": "The type of IP address that the ALB instance uses to provide services.",
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"AddressType"
]
}
},
"DNSName": {
"Description": "The domain name of the ALB instance.",
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"DNSName"
]
}
},
"ZoneMappings": {
"Description": "The zones, vSwitches and addresses which are mapped to the zones.",
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"ZoneMappings"
]
}
}
}
}Escenario 2: Crear una instancia ALB de zona dual con ESS para escalado automático.
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: Create a dual-zone Application Load Balancer (ALB) with Auto Scaling (ESS) for automatic scaling to ensure high application availability. The template includes security groups and configurations for automatic NGINX installation.
en: Create a dual-Availability-Zone ALB (Application Load Balancer) along with ESS
(Elastic Scale Service) for automatic scaling, ensuring high application availability,
inclusive of security groups and automated installation of nginx configurations.
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
InstanceType1:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::InstanceType'
AssociationPropertyMetadata:
InstanceChargeType: PostPaid
SystemDiskCategory: cloud_essd
ZoneId: ${ZoneId}
Label:
en: Instance Type
zh-cn: Instance Type 1
InstanceType2:
Type: String
AssociationProperty: 'ALIYUN::ECS::Instance::InstanceType'
AssociationPropertyMetadata:
InstanceChargeType: PostPaid
SystemDiskCategory: cloud_essd
ZoneId: ${ZoneId}
Label:
en: Instance Type
zh-cn: Instance Type 2
InstancePassword:
NoEcho: true
Type: String
Description:
en: >-
Server login password, Length 8-30, must contain three(Capital letters,
lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special
symbol in)
zh-cn: >-
The logon password of the server. The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
Label:
en: Instance Password
zh-cn: Instance Password
ConstraintDescription:
en: >-
Length 8-30, must contain three(Capital letters, lowercase letters,
numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 'The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;''<>,.?/'
AssociationProperty: 'ALIYUN::ECS::Instance::Password'
Default: null
ScalingTime:
Type: String
Label:
en: Automatic expansion execution time
zh-cn: Automatic scale-out time
AssociationProperty: DateTime
AssociationPropertyMetadata:
Format: 'YYYY-MM-DDThh:mmZ'
Description:
zh-cn: This solution takes 3 to 5 minutes to create. We recommend that you wait at least 5 minutes to view the scale-out effect.
en: >-
It is estimated that it will take 3-5 minutes to complete the creation of this solution.
It is recommended to choose a time after 5 minutes to observe the expansion effect.
ScalingTime2:
Type: String
Label:
en: Automatic scaling execution time
zh-cn: Automatic scale-in time
AssociationProperty: DateTime
AssociationPropertyMetadata:
Format: 'YYYY-MM-DDThh:mmZ'
Description:
zh-cn: We recommend that you wait 5 to 10 minutes after the scale-out is complete to view the scale-in effect.
en: It is recommended to observe the shrinkage effect 5-10 minutes after the expansion time.
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_20231219.vhd
InstanceName:
Fn::Sub: ${CommonName}-ecs-1
InstanceType:
Ref: InstanceType1
SystemDiskCategory: cloud_essd
MaxAmount: 1
InternetMaxBandwidthOut: 0
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 "This is instance1, the instance id 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_20231219.vhd
InstanceName:
Fn::Sub: ${CommonName}-ecs-2
InstanceType:
Ref: InstanceType2
SystemDiskCategory: cloud_essd
MaxAmount: 1
InternetMaxBandwidthOut: 0
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 "This is instance2, the instance id 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
EssScalingGroup:
Type: 'ALIYUN::ESS::ScalingGroup'
Properties:
VSwitchIds:
- Ref: VSwitch1
- Ref: VSwitch2
ScalingGroupName:
Fn::Sub: ${CommonName}-${ALIYUN::StackId}
RemovalPolicys:
- NewestInstance
MinSize: 0
MaxSize: 4
DefaultCooldown: 300
MultiAZPolicy: COMPOSABLE
AzBalance: true
DependsOn: SecurityGroup
EssServerGroupAttachment:
Type: 'ALIYUN::ESS::ServerGroupAttachment'
DependsOn: EssScalingGroupEnable
Properties:
ScalingGroupId:
Ref: EssScalingGroup
ForceAttach: true
ServerGroups:
- Type: ALB
Port: 80
ServerGroupId:
Ref: AlbServerGroup
Weight: 100
EssScalingConfiguration:
Type: 'ALIYUN::ESS::ScalingConfiguration'
Properties:
SecurityGroupId:
Ref: SecurityGroup
ImageId: aliyun_3_9_x64_20G_alibase_20231219.vhd
ScalingConfigurationName:
Fn::Sub: ${CommonName}-asc
ScalingGroupId:
Ref: EssScalingGroup
InstanceTypes:
- Ref: InstanceType1
- Ref: InstanceType2
SystemDiskCategory: cloud_essd
SystemDiskSize: 40
Password:
Ref: InstancePassword
InstanceName:
Fn::Sub: ${CommonName}-ess
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 "This instance from ess, the instance id is $instanceId" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
EssScalingGroupEnable:
Type: 'ALIYUN::ESS::ScalingGroupEnable'
Properties:
ScalingGroupId:
Ref: EssScalingGroup
ScalingConfigurationId:
Ref: EssScalingConfiguration
EssScalingRule:
Type: 'ALIYUN::ESS::ScalingRule'
Properties:
ScalingRuleName:
Fn::Sub: ${CommonName}-asr-rule
ScalingGroupId:
Ref: EssScalingGroup
ScalingRuleType: SimpleScalingRule
AdjustmentType: QuantityChangeInCapacity
AdjustmentValue: 1
Cooldown: 60
EssScalingRule2:
Type: 'ALIYUN::ESS::ScalingRule'
Properties:
ScalingRuleName:
Fn::Sub: ${CommonName}-asr-rule2
ScalingGroupId:
Ref: EssScalingGroup
ScalingRuleType: SimpleScalingRule
AdjustmentType: QuantityChangeInCapacity
AdjustmentValue: -1
Cooldown: 60
EssScheduledTask:
Type: 'ALIYUN::ESS::ScheduledTask'
Properties:
ScheduledTaskName:
Fn::Sub: ${CommonName}-task1-${ALIYUN::StackId}
LaunchTime:
Ref: ScalingTime
ScheduledAction:
Fn::Sub: '${EssScalingRule.ScalingRuleAri}'
LaunchExpirationTime: 10
EssScheduledTask2:
Type: 'ALIYUN::ESS::ScheduledTask'
Properties:
ScheduledTaskName:
Fn::Sub: ${CommonName}-task2-${ALIYUN::StackId}
LaunchTime:
Ref: ScalingTime2
ScheduledAction:
Fn::Sub: '${EssScalingRule2.ScalingRuleAri}'
LaunchExpirationTime: 10
Outputs:
WebUrl:
Description:
zh-cn: The web endpoint.
en: The Addresses of Web.
Value:
'Fn::Sub': 'http://${Alb.DNSName}'
Metadata:
'ALIYUN::ROS::Interface':
ParameterGroups:
- Parameters:
- ZoneId1
- ZoneId2
- InstanceType1
- InstanceType2
- InstancePassword
- ScalingTime
- ScalingTime2
TemplateTags:
- acs:technical-solution:high-availability-architecture:Improve application availability using ALB and ESS-tech_solu_117
Hidden:
- CommonName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "Create a dual-zone Application Load Balancer (ALB) with Auto Scaling (ESS) for automatic scaling to ensure high application availability. The template includes security groups and configurations for automatic NGINX installation.",
"en": "Create a dual-Availability-Zone ALB (Application Load Balancer) along with ESS (Elastic Scale Service) for automatic scaling, ensuring high application availability, inclusive of security groups and automated installation of nginx configurations."
},
"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"
}
},
"InstanceType1": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"InstanceChargeType": "PostPaid",
"SystemDiskCategory": "cloud_essd",
"ZoneId": "${ZoneId}"
},
"Label": {
"en": "Instance Type",
"zh-cn": "Instance Type 1"
}
},
"InstanceType2": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"InstanceChargeType": "PostPaid",
"SystemDiskCategory": "cloud_essd",
"ZoneId": "${ZoneId}"
},
"Label": {
"en": "Instance Type",
"zh-cn": "Instance Type 2"
}
},
"InstancePassword": {
"NoEcho": true,
"Type": "String",
"Description": {
"en": "Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)",
"zh-cn": "The logon password of the server. The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/"
},
"Label": {
"en": "Instance Password",
"zh-cn": "Instance Password"
},
"ConstraintDescription": {
"en": "Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)",
"zh-cn": "The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/"
},
"AssociationProperty": "ALIYUN::ECS::Instance::Password",
"Default": null
},
"ScalingTime": {
"Type": "String",
"Label": {
"en": "Automatic expansion execution time",
"zh-cn": "Automatic scale-out time"
},
"AssociationProperty": "DateTime",
"AssociationPropertyMetadata": {
"Format": "YYYY-MM-DDThh:mmZ"
},
"Description": {
"zh-cn": "This solution takes 3 to 5 minutes to create. We recommend that you wait at least 5 minutes to view the scale-out effect.",
"en": "It is estimated that it will take 3-5 minutes to complete the creation of this solution. It is recommended to choose a time after 5 minutes to observe the expansion effect."
}
},
"ScalingTime2": {
"Type": "String",
"Label": {
"en": "Automatic scaling execution time",
"zh-cn": "Automatic scale-in time"
},
"AssociationProperty": "DateTime",
"AssociationPropertyMetadata": {
"Format": "YYYY-MM-DDThh:mmZ"
},
"Description": {
"zh-cn": "We recommend that you wait 5 to 10 minutes after the scale-out is complete to view the scale-in effect.",
"en": "It is recommended to observe the shrinkage effect 5-10 minutes after the expansion time."
}
}
},
"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_20231219.vhd",
"InstanceName": {
"Fn::Sub": "${CommonName}-ecs-1"
},
"InstanceType": {
"Ref": "InstanceType1"
},
"SystemDiskCategory": "cloud_essd",
"MaxAmount": 1,
"InternetMaxBandwidthOut": 0,
"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 \"This is instance1, the instance id 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_20231219.vhd",
"InstanceName": {
"Fn::Sub": "${CommonName}-ecs-2"
},
"InstanceType": {
"Ref": "InstanceType2"
},
"SystemDiskCategory": "cloud_essd",
"MaxAmount": 1,
"InternetMaxBandwidthOut": 0,
"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 \"This is instance2, the instance id 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"
}
},
"EssScalingGroup": {
"Type": "ALIYUN::ESS::ScalingGroup",
"Properties": {
"VSwitchIds": [
{
"Ref": "VSwitch1"
},
{
"Ref": "VSwitch2"
}
],
"ScalingGroupName": {
"Fn::Sub": "${CommonName}-${ALIYUN::StackId}"
},
"RemovalPolicys": [
"NewestInstance"
],
"MinSize": 0,
"MaxSize": 4,
"DefaultCooldown": 300,
"MultiAZPolicy": "COMPOSABLE",
"AzBalance": true
},
"DependsOn": "SecurityGroup"
},
"EssServerGroupAttachment": {
"Type": "ALIYUN::ESS::ServerGroupAttachment",
"DependsOn": "EssScalingGroupEnable",
"Properties": {
"ScalingGroupId": {
"Ref": "EssScalingGroup"
},
"ForceAttach": true,
"ServerGroups": [
{
"Type": "ALB",
"Port": 80,
"ServerGroupId": {
"Ref": "AlbServerGroup"
},
"Weight": 100
}
]
}
},
"EssScalingConfiguration": {
"Type": "ALIYUN::ESS::ScalingConfiguration",
"Properties": {
"SecurityGroupId": {
"Ref": "SecurityGroup"
},
"ImageId": "aliyun_3_9_x64_20G_alibase_20231219.vhd",
"ScalingConfigurationName": {
"Fn::Sub": "${CommonName}-asc"
},
"ScalingGroupId": {
"Ref": "EssScalingGroup"
},
"InstanceTypes": [
{
"Ref": "InstanceType1"
},
{
"Ref": "InstanceType2"
}
],
"SystemDiskCategory": "cloud_essd",
"SystemDiskSize": 40,
"Password": {
"Ref": "InstancePassword"
},
"InstanceName": {
"Fn::Sub": "${CommonName}-ess"
},
"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 \"This instance from ess, the instance id is $instanceId\" > /usr/share/nginx/html/index.html \nsystemctl start nginx \nsystemctl enable nginx"
}
}
},
"EssScalingGroupEnable": {
"Type": "ALIYUN::ESS::ScalingGroupEnable",
"Properties": {
"ScalingGroupId": {
"Ref": "EssScalingGroup"
},
"ScalingConfigurationId": {
"Ref": "EssScalingConfiguration"
}
}
},
"EssScalingRule": {
"Type": "ALIYUN::ESS::ScalingRule",
"Properties": {
"ScalingRuleName": {
"Fn::Sub": "${CommonName}-asr-rule"
},
"ScalingGroupId": {
"Ref": "EssScalingGroup"
},
"ScalingRuleType": "SimpleScalingRule",
"AdjustmentType": "QuantityChangeInCapacity",
"AdjustmentValue": 1,
"Cooldown": 60
}
},
"EssScalingRule2": {
"Type": "ALIYUN::ESS::ScalingRule",
"Properties": {
"ScalingRuleName": {
"Fn::Sub": "${CommonName}-asr-rule2"
},
"ScalingGroupId": {
"Ref": "EssScalingGroup"
},
"ScalingRuleType": "SimpleScalingRule",
"AdjustmentType": "QuantityChangeInCapacity",
"AdjustmentValue": -1,
"Cooldown": 60
}
},
"EssScheduledTask": {
"Type": "ALIYUN::ESS::ScheduledTask",
"Properties": {
"ScheduledTaskName": {
"Fn::Sub": "${CommonName}-task1-${ALIYUN::StackId}"
},
"LaunchTime": {
"Ref": "ScalingTime"
},
"ScheduledAction": {
"Fn::Sub": "${EssScalingRule.ScalingRuleAri}"
},
"LaunchExpirationTime": 10
}
},
"EssScheduledTask2": {
"Type": "ALIYUN::ESS::ScheduledTask",
"Properties": {
"ScheduledTaskName": {
"Fn::Sub": "${CommonName}-task2-${ALIYUN::StackId}"
},
"LaunchTime": {
"Ref": "ScalingTime2"
},
"ScheduledAction": {
"Fn::Sub": "${EssScalingRule2.ScalingRuleAri}"
},
"LaunchExpirationTime": 10
}
}
},
"Outputs": {
"WebUrl": {
"Description": {
"zh-cn": "The web endpoint.",
"en": "The Addresses of Web."
},
"Value": {
"Fn::Sub": "http://${Alb.DNSName}"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"ZoneId1",
"ZoneId2",
"InstanceType1",
"InstanceType2",
"InstancePassword",
"ScalingTime",
"ScalingTime2"
]
}
],
"TemplateTags": [
"acs:technical-solution:high-availability-architecture:Improve application availability using ALB and ESS-tech_solu_117"
],
"Hidden": [
"CommonName"
]
}
}
}Escenario 3: Construir un sitio web NGINX de alta disponibilidad.
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: Build a high-availability NGINX website across two zones. The template includes a VPC, ECS instances, an ALB instance, security groups, and automatic 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 the NGINX service.
en: >-
This solution will create a spot instance and automatically deploy a
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 the NGINX service.
en: >-
This solution will create a spot instance and automatically deploy a
nginx service.
Default: null
InstancePassword:
NoEcho: true
Type: String
Description:
en: >-
Server login password, Length 8-30, must contain three(Capital letters,
lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special
symbol in)
zh-cn: >-
The logon password of the server. The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
Label:
en: Instance Password
zh-cn: Instance Password
ConstraintDescription:
en: >-
Length 8-30, must contain three(Capital letters, lowercase letters,
numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 'The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;''<>,.?/'
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: The web endpoint.
en: The Addresses of Web.
Value:
'Fn::Sub': 'http://${Alb.DNSName}'
Metadata:
'ALIYUN::ROS::Interface':
ParameterGroups:
- Parameters:
- ZoneId1
- InstanceType1
- ZoneId2
- InstanceType2
- InstancePassword
TemplateTags:
- acs:example:elastic-computing:Build a high-availability NGINX website
Hidden:
- CommonName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "Build a high-availability NGINX website across two zones. The template includes a VPC, ECS instances, an ALB instance, security groups, and automatic 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 the NGINX service.",
"en": "This solution will create a spot instance and automatically deploy a 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 the NGINX service.",
"en": "This solution will create a spot instance and automatically deploy a nginx service."
},
"Default": null
},
"InstancePassword": {
"NoEcho": true,
"Type": "String",
"Description": {
"en": "Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)",
"zh-cn": "The logon password of the server. The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/"
},
"Label": {
"en": "Instance Password",
"zh-cn": "Instance Password"
},
"ConstraintDescription": {
"en": "Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)",
"zh-cn": "The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/"
},
"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": "The web endpoint.",
"en": "The Addresses of Web."
},
"Value": {
"Fn::Sub": "http://${Alb.DNSName}"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"ZoneId1",
"InstanceType1",
"ZoneId2",
"InstanceType2",
"InstancePassword"
]
}
],
"TemplateTags": [
"acs:example:elastic-computing:Build a high-availability NGINX website"
],
"Hidden": [
"CommonName"
]
}
}
}Para consultar más ejemplos, consulte las plantillas públicas que contienen este recurso.](https://ros.console.alibabacloud.com/cn-hangzhou/templates/public?resourceType=ALIYUN::ALB::LoadBalancer)