Migre pilhas da AWS CloudFormation para modelos de execução - Amazon EC2 Auto Scaling

Migre pilhas da AWS CloudFormation para modelos de execução

Você pode migrar seus modelos de pilha CloudFormation existentes das configurações de execução para os modelos de execução. Para fazer isso, adicione um modelo de execução diretamente a um modelo de pilha existente e, em seguida, associe o modelo de execução ao grupo do Auto Scaling no modelo de pilha. Em seguida, use seu modelo modificado para atualizar sua pilha.

Ao migrar para modelos de execução, este tópico economiza seu tempo ao fornecer instruções para reescrever as configurações de execução em seus modelos de pilha do CloudFormation como modelos de execução. Para obter mais informações sobre migração de configurações de lançamento para modelos de execução, consulte Migre seus grupos do Auto Scaling para modelos de execução.

Encontre grupos do Auto Scaling que usam uma configuração de execução

Para localizar grupos do Auto Scaling que usam uma configuração de execução
  • Use o comando describe-auto-scaling-groups a seguir para listar os nomes dos grupos do Auto Scaling que estão usando configurações de execução na região especificada. Inclua a opção --filters de restringir os resultados aos grupos associados a uma pilha do CloudFormation (filtrando pela chave da tag aws:cloudformation:stack-name).

    aws autoscaling describe-auto-scaling-groups --region REGION \ --filters Name=tag-key,Values=aws:cloudformation:stack-name \ --query 'AutoScalingGroups[?LaunchConfigurationName!=`null`].AutoScalingGroupName'

    Veja a seguir um exemplo de saída.

    [ "{stack-name}-group-1", "{stack-name}-group-2", "{stack-name}-group-3" ]

    Você pode encontrar outros comandos AWS CLI úteis para localizar grupos do Auto Scaling para migrar e filtrar a saída em Migre seus grupos do Auto Scaling para modelos de execução.

Importante

Se os recursos da sua pilha tiverem AWSEB em seu nome, isso significa que eles foram criados por meio de AWS Elastic Beanstalk. Nesse caso, é necessário atualizar o ambiente do Beanstalk para que o Elastic Beanstalk remova a configuração de execução e a substitua por um modelo de execução.

Atualizar uma pilha para usar um modelo de execução

Siga as etapas desta seção para fazer o seguinte:

  • Reescreva a configuração de execução como um modelo de execução usando as propriedades equivalentes do modelo de execução.

  • Associe o novo modelo de execução ao grupo do Auto Scaling.

  • Implemente essas atualizações.

Para modificar o modelo da pilha e atualizar a pilha
  1. Siga os mesmos procedimentos gerais para modificar o modelo de pilha descritos em Modificar um modelo de pilha no Guia do usuário AWS CloudFormation.

  2. Reescreva a configuração de execução como um modelo de execução. Veja o exemplo a seguir:

    Exemplo: uma configuração de execução simples

    --- Resources: myLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroups: - !Ref EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    Exemplo: O modelo de execução equivalente

    --- Resources: myLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Sub ${AWS::StackName}-launch-template LaunchTemplateData: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroupIds: - Ref! EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -x yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    Para obter informações de referência sobre todas as propriedades compatíveis com o Amazon EC2, consulte AWS::EC2::LaunchTemplate no Guia do usuário AWS CloudFormation.

    Observe como o modelo de execução inclui a propriedade LaunchTemplateName com um valor de !Sub ${AWS::StackName}-launch-template. Isso é necessário se você quiser que o nome do modelo de execução inclua o nome da pilha.

  3. Se a propriedade IamInstanceProfile estiver presente em sua configuração de execução, será necessário convertê-la em uma estrutura e especificar o nome ou o ARN do perfil de instância. Para ver um exemplo, consulte AWS::EC2::LaunchTemplate.

  4. Se as propriedades,AssociatePublicIpAddress InstanceMonitoring ou PlacementTenancy estiverem presentes em sua configuração de execução, será necessário convertê-las em uma estrutura. Para exemplos consulte AWS::EC2::LaunchTemplate.

    Uma exceção é quando o valor da propriedade MapPublicIpOnLaunch nas sub-redes que você usou para seu grupo do Auto Scaling coincide com o valor da propriedade AssociatePublicIpAddress em sua configuração de execução. Neste caso, você pode ignorar a propriedadeAssociatePublicIpAddress. A propriedade AssociatePublicIpAddress só é usada para substituir a propriedade MapPublicIpOnLaunch para alterar se as instâncias recebem um endereço IPv4 público na execução.

  5. Você pode copiar grupos de segurança da propriedade SecurityGroups para um dos dois lugares em seu modelo de execução. Normalmente, você copia os grupos de segurança para a propriedadeSecurityGroupIds. No entanto, se você criar uma estrutura NetworkInterfaces em seu modelo de execução para especificar a propriedade,AssociatePublicIpAddress será necessário copiar os grupos de segurança para a propriedade Groups da interface de rede.

  6. Se alguma estrutura BlockDeviceMapping estiver presente em sua configuração de execução com NoDevice definido como,true será necessário especificar uma string vazia para NoDevice em seu modelo de execução para que o Amazon EC2 omita o dispositivo.

  7. Se a propriedade SpotPrice estiver presente em sua configuração de execução, recomendamos que você a omita do seu modelo de execução. Suas instâncias spot serão executadas pelo preço spot atual. Este preço nunca excederá o preço sob demanda.

    Para solicitar instâncias spot, você tem duas opções mutuamente exclusivas:

    • A primeira é usar a estrutura InstanceMarketOptions em seu modelo de execução (não recomendado). Para obter mais informações, consulte AWS::EC2::LaunchTemplate InstanceMarketOptions no Guia do usuário AWS CloudFormation.

    • A outra é adicionar uma estrutura MixedInstancesPolicy ao seu grupo do Auto Scaling. Isto oferece mais opções de como você faz a solicitação. Uma solicitação de instância spot em seu modelo de execução não é compatível com mais de uma seleção de tipo de instância por grupo do Auto Scaling. No entanto, uma política de instâncias mistas oferece suporte a mais de uma seleção de tipo de instância por grupo do Auto Scaling. As solicitações de Instância spot se beneficiam de ter mais de um tipo de instância para escolher. Para obter mais informações, consulte AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy no Guia do usuário AWS CloudFormation.

  8. Remova a propriedade LaunchConfigurationName do recurso AWS::AutoScaling::AutoScalingGroup. Adicione o modelo de execução em seu lugar.

    Nos exemplos a seguir, a função intrínseca Ref obtém o ID do recurso AWS::EC2::LaunchTemplate com o ID lógicomyLaunchTemplate. A função GetAtt obtém o número da versão mais recente (por exemplo, 1) do modelo de execução para a propriedade Version.

    Exemplo: sem uma política de instâncias mistas

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    Exemplo: com uma política de instâncias mistas

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    Para obter informações de referência sobre todas as propriedades compa´tiveis com o Amazon EC2 Auto Scaling, consulte AWS::AutoScaling::AutoScalingGroup no Guia do usuário AWS CloudFormation.

  9. Quando estiver pronto para implementar essas atualizações, siga os procedimentos do CloudFormation para atualizar a pilha com seu modelo de pilha modificado. Para obter mais informações, consulte Modificar um modelo de pilha no Guia do usuário AWS CloudFormation.

Compreender atualização de comportamentos de recursos da pilha

O CloudFormation atualiza os recursos da pilha comparando as alterações entre o modelo atualizado que você fornece e as configurações de recursos que você descreveu na versão anterior do seu modelo de pilha. As configurações de recursos que não foram alteradas permanecem inalteradas durante o processo de atualização.

O CloudFormation oferece suporte ao atributo UpdatePolicy para grupos do Auto Scaling. Durante uma atualização, se UpdatePolicy estiver definido como,AutoScalingRollingUpdate o CloudFormation substituirá as instâncias InService depois que você executar as etapas deste procedimento. Se UpdatePolicy estiver definido como,AutoScalingReplacingUpdate o CloudFormation substituirá o grupo do Auto Scaling e seu pool ativo (se houver).

Se você não especificou um atributo UpdatePolicy para o seu grupo do Auto Scaling, a correção do modelo de execução será verificada, mas o CloudFormation não implementa qualquer alteração nas instâncias do grupo do Auto Scaling. Todas as novas instâncias receberão seu modelo de execução, mas as instâncias existentes continuarão a ser executadas com a configuração de execução com a qual foram executadas originalmente (apesar da inexistência da configuração de execução). A exceção é quando você altera suas opções de compra, por exemplo, adicionando uma política de instâncias mistas. Neste caso, seu grupo do Auto Scaling substitui gradualmente as instâncias existentes por novas instâncias para corresponder às novas opções de compra.

Se você precisar reverter uma alteração para passar de configurações de execução para modelos de execução, certifique-se de testar a operação de reversão.

Rastrear a migração

Para rastrear a migração
  1. No console do CloudFormation, selecione a pilha que você atualizou e, em seguida, escolha a guia Eventos para visualizar eventos de pilhas.

  2. Para atualizar a lista de eventos com os mais recentes, selecione o botão "atualizar" no console do CloudFormation.

  3. Enquanto sua pilha estiver sendo atualizada, você notará vários eventos para cada atualização de recurso. Se você ver uma exceção na coluna Motivo do status que indica um problema ao tentar criar o modelo de execução, consulte Solucionar problemas do Amazon EC2 Auto Scaling: modelos de execução para as possíveis causas.

  4. (Opcional) Dependendo do uso do atributo,UpdatePolicy você pode monitorar o progresso do seu grupo do Auto Scaling na página de grupos do Auto Scaling do console do Amazon EC2. Selecione o grupo do Auto Scaling. Na guia Activity (Atividade), em Activity history (Histórico de atividades), a coluna Status (Status) mostra se o seu grupo do Auto Scaling iniciou ou encerrou instâncias com êxito, ou se a ação de escalabilidade ainda está em andamento.

  5. Quando a atualização da pilha estiver concluída, o CloudFormation emite um evento de pilhaUPDATE_COMPLETE. Para obter mais informações, consulte Monitorar o andamento de uma atualização de pilha no Guia do usuário AWS CloudFormation.

  6. Depois que a atualização da pilha estiver concluída, abra a página de modelos de execução e a página de configurações de execução do console do Amazon EC2. Você notará que um novo modelo de execução foi criado e a configuração de execução foi excluída.

Referência do mapeamento de configuração de execução

Para fins de referência, a tabela a seguir lista todas as propriedades de nível superior no recurso AWS::AutoScaling::LaunchConfiguration com suas propriedades correspondentes no recurso AWS::EC2::LaunchTemplate.

Propriedade da fonte de configuração de execução Propriedade target do modelo de execução
AssociatePublicIpAddress NetworkInterfaces.AssociatePublicIpAddress
BlockDeviceMappings BlockDeviceMappings
ClassicLinkVPCId Não disponível¹
ClassicLinkVPCSecurityGroups Não disponível¹
EbsOptimized EbsOptimized
IamInstanceProfile Especifique IamInstanceProfile.Arn ou,IamInstanceProfile.Name mas não ambos
ImageId ImageId
InstanceId InstanceId
InstanceMonitoring Monitoring.Enabled
InstanceType InstanceType
KernelId KernelId
KeyName KeyName
LaunchConfigurationName LaunchTemplateName
MetadataOptions MetadataOptions
PlacementTenancy Placement.Tenancy
RamDiskId RamDiskId
SecurityGroups Especifique SecurityGroupIds ou,NetworkInterfaces.Groups mas não ambos
SpotPrice InstanceMarketOptions.SpotOptions.MaxPrice
UserData UserData

¹ As propriedades ClassicLinkVPCId e ClassicLinkVPCSecurityGroups não estão disponíveis para uso em um modelo de execução porque o EC2-Classic não está mais disponível.