Configurar os recursos do Amazon EC2 Auto Scaling com o AWS CloudFormation
Os exemplos a seguir mostram snippets diferentes a serem incluídos em modelos para uso com o Amazon EC2 Auto Scaling.
Categorias de snippets
- Criar um grupo do Auto Scaling com uma única instância
- Criar um grupo do Auto Scaling com balanceador de carga anexado
- Criar um grupo do Auto Scaling com notificações
- Criar um grupo do Auto Scaling que usa um CreationPolicy e um UpdatePolicy
- Criar uma política de escalabilidade em etapas
- Exemplos de grupos de instâncias mistas
- Exemplos de configuração de ativação
Criar um grupo do Auto Scaling com uma única instância
Este exemplo mostra um recurso AWS::AutoScaling::AutoScalingGroup
com uma única instância para ajudar você a começar. A propriedade VPCZoneIdentifier
do grupo do Auto Scaling especifica uma lista de sub-redes existentes em três diferentes zonas de disponibilidade. É necessário especificar os IDs de sub-rede aplicáveis da conta antes de criar a pilha. A propriedade LaunchTemplate
faz referência a um recurso AWS::EC2::LaunchTemplate
com o nome lógico myLaunchTemplate
definido em outra parte do modelo.
nota
Para obter exemplos de modelos inicialização, consulte Criar modelos de execução com o AWS CloudFormation na seção de snippets do Amazon EC2 e a seção Exemplos no recurso AWS::EC2::LaunchTemplate
.
JSON
"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "
subnetIdAz1
", "subnetIdAz2
", "subnetIdAz3
" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "myLaunchTemplate
" }, "Version" : { "Fn::GetAtt" : [ "myLaunchTemplate
", "LatestVersionNumber" ] } }, "MaxSize" : "1", "MinSize" : "1" } }
YAML
myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: -
subnetIdAz1
-subnetIdAz2
-subnetIdAz3
LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplate
Version: !GetAttmyLaunchTemplate
.LatestVersionNumber MaxSize: '1' MinSize: '1'
Criar um grupo do Auto Scaling com balanceador de carga anexado
Este exemplo mostra um recurso AWS::AutoScaling::AutoScalingGroup
para balanceamento de carga em diversos servidores. Ele especifica os nomes lógicos dos recursos da AWS declarados em outro lugar no mesmo modelo.
-
A propriedade
VPCZoneIdentifier
especifica os nomes lógicos de dois recursosAWS::EC2::Subnet
em que as instâncias do EC2 do grupo do Auto Scaling serão criadas:myPublicSubnet1
emyPublicSubnet2
. -
A propriedade
LaunchTemplate
especifica um recursoAWS::EC2::LaunchTemplate
com o nome lógicomyLaunchTemplate
. -
A propriedade
TargetGroupARNs
lista os grupos de destino de um Application Load Balancer ou um Network Load Balancer usado para rotear o tráfego para o grupo de Auto Scaling. Neste exemplo, um grupo de destino é especificado, um recursoAWS::ElasticLoadBalancingV2::TargetGroup
com o nome lógicomyTargetGroup
.
JSON
"myServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ { "Ref" : "
myPublicSubnet1
" }, { "Ref" : "myPublicSubnet2
" } ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "myLaunchTemplate
" }, "Version" : { "Fn::GetAtt" : [ "myLaunchTemplate
", "LatestVersionNumber" ] } }, "MaxSize" : "5", "MinSize" : "1", "TargetGroupARNs" : [ { "Ref" : "myTargetGroup
" } ] } }
YAML
myServerGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - !Ref
myPublicSubnet1
- !RefmyPublicSubnet2
LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplate
Version: !GetAttmyLaunchTemplate
.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !RefmyTargetGroup
Consulte também
Para obter um exemplo detalhado que cria um grupo de Auto Scaling com uma política de escalabilidade de rastreamento de destino baseada na métrica ALBRequestCountPerTarget
predefinida para o Application Load Balancer, consulte a seção Exemplos no recurso AWS::AutoScaling::ScalingPolicy
.
Criar um grupo do Auto Scaling com notificações
Este exemplo mostra um recurso AWS::AutoScaling::AutoScalingGroup
que envia notificações do Amazon SNS quando eventos especificados ocorrem. A propriedade NotificationConfigurations
especifica o tópico do SNS em que o AWS CloudFormation envia uma notificação e os eventos farão com que o AWS CloudFormation envie notificações. Quando os eventos especificados por NotificationTypes
ocorrem, o AWS CloudFormation enviará uma notificação para o tópico do SNS especificado pelo TopicARN
. Quando você inicia a pilha, o AWS CloudFormation cria um recurso AWS::SNS::Subscription
que é declarado no mesmo modelo.
A propriedade VPCZoneIdentifier
do grupo do Auto Scaling especifica uma lista de sub-redes existentes em três diferentes zonas de disponibilidade. É necessário especificar os IDs de sub-rede aplicáveis da conta antes de criar a pilha. A propriedade LaunchTemplate
faz referência ao nome lógico de um recurso AWS::EC2::LaunchTemplate
declarado em outro lugar no mesmo modelo.
JSON
"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "DependsOn": [ "snsTopicForAutoScalingGroup" ], "Properties" : { "VPCZoneIdentifier" : [ "
subnetIdAz1
", "subnetIdAz2
", "subnetIdAz3
" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName
" }, "Version" : { "Fn::GetAtt" : [ "logicalName
", "LatestVersionNumber" ] } }, "MaxSize" : "5", "MinSize" : "1", "NotificationConfigurations" : [ { "TopicARN" : { "Ref" : "snsTopicForAutoScalingGroup" }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", "autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR", "autoscaling:TEST_NOTIFICATION" ] } ] } }
YAML
myASG: Type: AWS::AutoScaling::AutoScalingGroup DependsOn: - snsTopicForAutoScalingGroup Properties: VPCZoneIdentifier: -
subnetIdAz1
-subnetIdAz2
-subnetIdAz3
LaunchTemplate: LaunchTemplateId: !ReflogicalName
Version: !GetAttlogicalName
.LatestVersionNumber MaxSize: '5' MinSize: '1' NotificationConfigurations: - TopicARN: !Ref snsTopicForAutoScalingGroup NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR - autoscaling:EC2_INSTANCE_TERMINATE - autoscaling:EC2_INSTANCE_TERMINATE_ERROR - autoscaling:TEST_NOTIFICATION
Criar um grupo do Auto Scaling que usa um CreationPolicy
e um UpdatePolicy
O exemplo a seguir mostra como adicionar os atributos Atributo CreationPolicy e UpdatePolicy a um recurso AWS::AutoScaling::AutoScalingGroup
.
A política de criação de exemplos impede que o grupo do Auto Scaling atinja o status CREATE_COMPLETE
até que AWS CloudFormation receba o número Count
de sinais de êxito quando o grupo estiver pronto. Para sinalizar que o grupo do Auto Scaling está pronto, um script auxiliar cfn-signal adicionado aos dados do usuário do modelo de inicialização (não mostrado) é executado nas instâncias. Se as instâncias não enviarem um sinal dentro do Timeout
especificado, o CloudFormation assumirá que as instâncias não foram criadas, a criação do recurso falhará e o CloudFormation reverterá a pilha.
A política de atualização de exemplo instrui o CloudFormation a executar uma atualização contínua usando a propriedade AutoScalingRollingUpdate
. A atualização contínua faz alterações no grupo de Auto Scaling em pequenos lotes (neste exemplo, instância por instância) com base no MaxBatchSize
e em um tempo de pausa entre lotes de atualizações com base no PauseTime
. O atributo MinInstancesInService
especifica o número mínimo de instâncias que devem estar em serviço no grupo do Auto Scaling e o CloudFormation atualiza instâncias antigas.
O atributo WaitOnResourceSignals
é definido como true
. O CloudFormation deve receber um sinal de cada instância nova dentro do PauseTime
especificado para continuar a atualização. Embora a atualização da pilha esteja em andamento, os seguintes processos de Auto Scaling do EC2 são suspensos: HealthCheck
, ReplaceUnhealthy
, AZRebalance
, AlarmNotification
e ScheduledActions
. Observação: não suspenda os tipos de processo Launch
, Terminate
ou AddToLoadBalancer
(se o grupo de Auto Scaling estiver sendo usado com o Elastic Load Balancing), pois isso pode impedir que a atualização contínua funcione corretamente.
A propriedade VPCZoneIdentifier
do grupo do Auto Scaling especifica uma lista de sub-redes existentes em três diferentes zonas de disponibilidade. É necessário especificar os IDs de sub-rede aplicáveis da conta antes de criar a pilha. A propriedade LaunchTemplate
faz referência ao nome lógico de um recurso AWS::EC2::LaunchTemplate
declarado em outro lugar no mesmo modelo.
JSON
{ "Resources":{ "myASG":{ "CreationPolicy":{ "ResourceSignal":{ "Count":"3", "Timeout":"PT15M" } }, "UpdatePolicy":{ "AutoScalingRollingUpdate":{ "MinInstancesInService":"3", "MaxBatchSize":"1", "PauseTime":"PT12M5S", "WaitOnResourceSignals":"true", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions", "InstanceRefresh" ] } }, "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "
subnetIdAz1
", "subnetIdAz2
", "subnetIdAz3
" ], "LaunchTemplate":{ "LaunchTemplateId":{ "Ref":"logicalName
" }, "Version":{ "Fn::GetAtt":[ "logicalName
", "LatestVersionNumber" ] } }, "MaxSize":"5", "MinSize":"3" } } } }
YAML
--- Resources: myASG: CreationPolicy: ResourceSignal: Count: '3' Timeout: PT15M UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: '3' MaxBatchSize: '1' PauseTime: PT12M5S WaitOnResourceSignals: true SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions - InstanceRefresh Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: -
subnetIdAz1
-subnetIdAz2
-subnetIdAz3
LaunchTemplate: LaunchTemplateId: !ReflogicalName
Version: !GetAttlogicalName
.LatestVersionNumber MaxSize: '5' MinSize: '3'
Criar uma política de escalabilidade em etapas
Este exemplo mostra um recurso AWS::AutoScaling::ScalingPolicy
que aumenta a escala horizontalmente do grupo do Auto Scaling usando uma política de escalabilidade em etapas. A propriedade AdjustmentType
especifica ChangeInCapacity
, o que significa que ScalingAdjustment
representa o número de instâncias para adicionar (se ScalingAdjustment
for positivo) ou excluir (se for negativo). Neste exemplo, ScalingAdjustment
é 1; por isso, a política incrementa o número de instâncias do EC2 no grupo em 1 quando o limite do alarme é atingido.
O recurso CPUAlarmHigh
de AWS::CloudWatch::Alarm
especifica a política de escalabilidade ASGScalingPolicyHigh
como a ação a ser executada quando o alarme está em um estado ALARM (AlarmActions
). A propriedade Dimensions
faz referência ao nome lógico de um recurso AWS::AutoScaling::AutoScalingGroup
declarado em outro lugar no mesmo modelo.
JSON
{ "Resources":{ "ASGScalingPolicyHigh":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AutoScalingGroupName":{ "Ref":"
logicalName
" }, "PolicyType":"StepScaling", "AdjustmentType":"ChangeInCapacity", "StepAdjustments":[ { "MetricIntervalLowerBound":0, "ScalingAdjustment":1 } ] } }, "CPUAlarmHigh":{ "Type":"AWS::CloudWatch::Alarm", "Properties":{ "EvaluationPeriods":"2", "Statistic":"Average", "Threshold":"90", "AlarmDescription":"Scale out if CPU > 90% for 2 minutes", "Period":"60", "AlarmActions":[ { "Ref":"ASGScalingPolicyHigh" } ], "Namespace":"AWS/EC2", "Dimensions":[ { "Name":"AutoScalingGroupName", "Value":{ "Ref":"logicalName
" } } ], "ComparisonOperator":"GreaterThanThreshold", "MetricName":"CPUUtilization" } } } }
YAML
--- Resources: ASGScalingPolicyHigh: Type: AWS::AutoScaling::ScalingPolicy Properties: AutoScalingGroupName: !Ref
logicalName
PolicyType: StepScaling AdjustmentType: ChangeInCapacity StepAdjustments: - MetricIntervalLowerBound: 0 ScalingAdjustment: 1 CPUAlarmHigh: Type: AWS::CloudWatch::Alarm Properties: EvaluationPeriods: 2 Statistic: Average Threshold: 90 AlarmDescription: 'Scale out if CPU > 90% for 2 minutes' Period: 60 AlarmActions: - !Ref ASGScalingPolicyHigh Namespace: AWS/EC2 Dimensions: - Name: AutoScalingGroupName Value: !ReflogicalName
ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization
Consulte também
Para obter mais exemplos de modelos para políticas de escalabilidade, consulte a seção Exemplos no recurso AWS::AutoScaling::ScalingPolicy
.
Exemplos de grupos de instâncias mistas
Criar um grupo do Auto Scaling usando seleção de tipo de instância baseada em atributos
Este exemplo mostra um recurso AWS::AutoScaling::AutoScalingGroup
que contém informações para executar um grupo de instâncias mistas utilizando a seleção de tipos de instâncias baseadas em atributos. Você especifica os valores mínimo e máximo para a propriedade VCpuCount
e o valor mínimo para a propriedade MemoryMiB
. Todos os tipos de instância usados pelo grupo do Auto Scaling devem corresponder aos atributos de instância exigidos.
A propriedade VPCZoneIdentifier
do grupo do Auto Scaling especifica uma lista de sub-redes existentes em três diferentes zonas de disponibilidade. É necessário especificar os IDs de sub-rede aplicáveis da conta antes de criar a pilha. A propriedade LaunchTemplate
faz referência ao nome lógico de um recurso AWS::EC2::LaunchTemplate
declarado em outro lugar no mesmo modelo.
JSON
{ "Resources":{ "myASG":{ "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "
subnetIdAz1
", "subnetIdAz2
", "subnetIdAz3
" ], "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":{ "Ref":"logicalName
" }, "Version":{ "Fn::GetAtt":[ "logicalName
", "LatestVersionNumber" ] } }, "Overrides":[ { "InstanceRequirements":{ "VCpuCount":{ "Min":2
, "Max":4
}, "MemoryMiB":{ "Min":2048
} } } ] } }, "MaxSize":"5", "MinSize":"1" } } } }
YAML
--- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: -
subnetIdAz1
-subnetIdAz2
-subnetIdAz3
MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !ReflogicalName
Version: !GetAttlogicalName
.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min:2
Max:4
MemoryMiB: Min:2048
MaxSize: '5' MinSize: '1'
Exemplos de configuração de ativação
Criar uma configuração de execução
Este exemplo mostra um recurso AWS::AutoScaling::LaunchConfiguration
para um grupo do AutoScaling em que você especifica valores para as propriedades ImageId
, InstanceType
e SecurityGroups
. A propriedade SecurityGroups
especifica o nome lógico de um recurso AWS::EC2::SecurityGroup
especificado em outro local no modelo e um grupo de segurança existente do EC2 chamado myExistingEC2SecurityGroup
.
JSON
"mySimpleConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "ImageId" : "
ami-02354e95b3example
", "InstanceType" : "t3.micro
", "SecurityGroups" : [ { "Ref" : "logicalName
" }, "myExistingEC2SecurityGroup
" ] } }
YAML
mySimpleConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId:
ami-02354e95b3example
InstanceType:t3.micro
SecurityGroups: - !ReflogicalName
-myExistingEC2SecurityGroup
Criar um grupo do Auto Scaling que usa uma configuração de execução
Este exemplo mostra um recurso AWS::AutoScaling::AutoScalingGroup
com uma única instância. A propriedade VPCZoneIdentifier
do grupo do Auto Scaling especifica uma lista de sub-redes existentes em três diferentes zonas de disponibilidade. É necessário especificar os IDs de sub-rede aplicáveis da conta antes de criar a pilha. A propriedade LaunchConfigurationName
faz referência a um recurso AWS::AutoScaling::LaunchConfiguration
com o nome lógico mySimpleConfig
definido em seu modelo.
JSON
"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "
subnetIdAz1
", "subnetIdAz2
", "subnetIdAz3
" ], "LaunchConfigurationName" : { "Ref" : "mySimpleConfig
" }, "MaxSize" : "1", "MinSize" : "1" } }
YAML
myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: -
subnetIdAz1
-subnetIdAz2
-subnetIdAz3
LaunchConfigurationName: !RefmySimpleConfig
MaxSize: '1' MinSize: '1'