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
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 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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplateVersion: !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 VPCZoneIdentifierespecifica os nomes lógicos de dois recursosAWS::EC2::Subnetem que as instâncias do EC2 do grupo do Auto Scaling serão criadas:myPublicSubnet1emyPublicSubnet2.
- 
          A propriedade LaunchTemplateespecifica um recursoAWS::EC2::LaunchTemplatecom o nome lógicomyLaunchTemplate.
- 
          A propriedade TargetGroupARNslista 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::TargetGroupcom 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: - !RefmyPublicSubnet1- !RefmyPublicSubnet2LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplateVersion: !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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !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 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.
Para obter mais informações sobre os atributos CreationPolicy e UpdatePolicy, consulte a Referência de atributos de recursos.
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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !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: !ReflogicalNamePolicyType: 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: !ReflogicalNameComparisonOperator: 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-subnetIdAz3MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min:2Max:4MemoryMiB: Min:2048MaxSize: '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-02354e95b3exampleInstanceType:t3.microSecurityGroups: - !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-subnetIdAz3LaunchConfigurationName: !RefmySimpleConfigMaxSize: '1' MinSize: '1'