Como faço para garantir que o agente CodeDeploy seja implantado quando uso o CloudFormation para provisionar instâncias do Amazon EC2?

4 minuto de leitura
0

Estou provisionando minha infraestrutura e os recursos do AWS CodeDeploy usando o AWS CloudFormation. Como faço para garantir que o agente CodeDeploy esteja instalado e em execução nas minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2)?

Breve descrição

Se você criar um dos seguintes recursos como destino de uma implantação do CodeDeploy, use os scripts auxiliares cfn-init e cfn-signal:

  • AWS::EC2::Instance
  • AWS::AutoScaling::AutoScalingGroup

Antes de provisionar sua implantação de infraestrutura, você pode usar os scripts auxiliares para provisionar totalmente suas instâncias de destino com o agente CodeDeploy.

Resolução

Para usar os scripts auxiliares cfn-init e cfn-signal para implantar o agente CodeDeploy, conclua as etapas a seguir para configurar corretamente o modelo do AWS CloudFormation.

1.    Em um editor de código, crie um arquivo JSON ou YAML para usar como modelo do AWS CloudFormation para seus recursos.

2.    Para a chave Metadata, use o tipo AWS::CloudFormation::Init para incluir metadados em sua instância ou configuração de lançamento.

Exemplo de chave Metadata que usa o tipo AWS::CloudFormation::Init

"SampleLinuxInstance" : {
            "Type" : "AWS::EC2::Instance",
            "Metadata" : {
                "AWS::CloudFormation::Init" : {
                    "config" : {
                        "packages" : {
                            "yum" : {
                                "ruby" : []
                            }
                        },
                        "files" : {
                            "/home/ec2-user/install" : {
                                "source" : {"Fn::Join" : ["", ["https://aws-codedeploy-", {"Ref" : "AWS::Region"}, ".s3.amazonaws.com/latest/install"]]},
                                "mode" : "000755"
                            }
                        },
                        "commands" : {
                            "00-install-agent" : {
                                "command" : "./install auto",
                                "cwd" : "/home/ec2-user/"
                            },
                            "01-cfn-signal" : {
                                "command" : {"Fn::Join" : ["", ["/opt/aws/bin/cfn-signal -e 0 --stack ", { "Ref": "AWS::StackName" }, " --resource SampleLinuxInstance --region ", { "Ref" : "AWS::Region" }]]}
                            }
                        }
                    }
                }
            },
            "Properties" : {
                ...
            }
        }

Observação: o tipo AWS::CloudFormation::Init inclui etapas de instalação para o agente CodeDeploy. Ele também inclui o comando para retornar à pilha do CloudFormation depois de concluir as etapas a seguir.

3.    Defina a propriedade UserData para invocar o script cfn-init.

Exemplo de propriedade UserData que invoca o script cfn-init

"Properties" : {
                "InstanceType" : "t2.micro",
                "ImageId" : {"Ref" : "AMI"},
                "IamInstanceProfile" : {"Ref" : "SampleInstanceProfile"},
                "KeyName" : {"Ref" : "SSHKey"},
                "UserData" :  {"Fn::Base64" : {
                    "Fn::Join" : ["", [
                        "#!/bin/bash\n",
                        "yum -y update\n",
                        "yum -y install cfn-bootstrap\n",
                        "/opt/aws/bin/cfn-init -v",
                        " --stack ", { "Ref" : "AWS::StackName" },
                        " --resource SampleLinuxInstance",
                        " --region ", { "Ref" : "AWS::Region" },
                        "\n"
                    ]]
                }},
                "Tags" : [
                    {
                        "Key" : {"Ref" : "InstanceTagKey"},
                        "Value" : {"Ref" : "InstanceTagValue"}
                    }
                ]
            }

4.    Para o recurso de instância, configure o atributo CreationPolicy para fazer o seguinte: Exigir que a instância do Amazon EC2 ou o grupo Amazon EC2 Auto Scaling envie sinais de sucesso para o CloudFormation dentro de um período de tempo específico.

Exemplo de atributo CreationPolicy que exige que uma instância do Amazon EC2 envie sinais de sucesso para o CloudFormation em um período de tempo específico

"SampleLinuxInstance" : {
            "Type" : "AWS::EC2::Instance",
            "CreationPolicy" : {
                "ResourceSignal" : {
                    "Count" : "1",
                    "Timeout" : "PT5M"
                }
            },

5.    Para criar uma dependência explícita para seu recurso de grupo de implantação na instância do Amazon EC2 ou no grupo do Amazon EC2 Auto Scaling, use o atributo DependsOn.

Exemplo de atributo DependsOn que cria uma dependência explícita para um recurso do grupo de implantação

"SampleLinuxCDDeploymentGroup" : {
            "Type" : "AWS::CodeDeploy::DeploymentGroup",
            "DependsOn" : "SampleLinuxInstance",
            "Properties" : {
                "ApplicationName" : {"Ref" : "SampleCDApp"},
                "ServiceRoleArn" : {"Ref" : "ServiceRole"},
                "Ec2TagFilters" : [
                    {
                        "Key" : {"Ref" : "InstanceTagKey"},
                        "Value" : {"Ref" : "InstanceTagValue"},
                        "Type" : "KEY_AND_VALUE"
                    }
                ],
                "Deployment" : {
                    "Revision" : {
                        "RevisionType" : "S3",
                        "S3Location" : {
                            "Bucket" : {"Ref" : "BucketName"},
                            "BundleType" : {"Ref" : "BundleType"},
                            "Key" : {"Ref" : "BundleKey"}
                        }
                    }
                }
            }
        }

6.    Para preencher o modelo do CloudFormation, inclua quaisquer outros recursos, propriedades ou saídas adicionais necessários para seu ambiente.

7.    Use o modelo concluído para criar uma pilha do CloudFormation.


Informações relacionadas

Modelos do AWS CloudFormation para referência do CodeDeploy

Criar uma instância do Amazon EC2 para o CodeDeploy (modelo do AWS CloudFormation)

Como faço para usar as configurações de inicialização para instalar automaticamente o agente CodeDeploy em uma instância do EC2 executando Amazon Linux ou Ubuntu?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos