Configurar os recursos do Amazon EC2 Auto Scaling com o AWS CloudFormation - AWS CloudFormation

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.

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: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.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.

  1. A propriedade VPCZoneIdentifier especifica os nomes lógicos de dois recursos AWS::EC2::Subnet em que as instâncias do EC2 do grupo do Auto Scaling serão criadas: myPublicSubnet1 e myPublicSubnet2.

  2. A propriedade LaunchTemplate especifica um recurso AWS::EC2::LaunchTemplate com o nome lógico myLaunchTemplate.

  3. 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 recurso AWS::ElasticLoadBalancingV2::TargetGroup com o nome lógico myTargetGroup.

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 - !Ref myPublicSubnet2 LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !Ref myTargetGroup

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: !Ref logicalName Version: !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

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: !Ref logicalName Version: !GetAtt logicalName.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: !Ref logicalName 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: !Ref logicalName Version: !GetAtt logicalName.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: - !Ref logicalName - 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: !Ref mySimpleConfig MaxSize: '1' MinSize: '1'