¿Cómo puedo asegurarme de que el agente de CodeDeploy esté implementado cuando use CloudFormation para aprovisionar las instancias de Amazon EC2?

4 minutos de lectura
0

Estoy aprovisionando mi infraestructura y los recursos de AWS CodeDeploy mediante AWS CloudFormation. ¿Cómo puedo asegurarme de que el agente de CodeDeploy esté instalado y en ejecución en mis instancias de Amazon Elastic Compute Cloud (Amazon EC2)?

Breve descripción

Si crea alguno de los siguientes recursos como destino de un despliegue de CodeDeploy, utilice los scripts auxiliares cfn-init y cfn-signal:

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

Antes de aprovisionar el despliegue de su infraestructura, puede utilizar los scripts auxiliares para aprovisionar completamente las instancias de destino con el agente de CodeDeploy.

Solución

Para utilizar los scripts auxiliares cfn-init y cfn-signal con el fin de desplegar el agente de CodeDeploy, siga estos pasos para configurar correctamente la plantilla de AWS CloudFormation.

1.    En un editor de código, cree un archivo JSON o YAML para usarlo como plantilla de AWS CloudFormation para sus recursos.

2.    Como clave Metadata, utilice el tipo AWS::CloudFormation::Init para incluir metadatos en la configuración de su instancia o lanzamiento.

Ejemplo de clave Metadata que utiliza el 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" : {
                ...
            }
        }

Nota: El tipo AWS::CloudFormation::Init incluye pasos de instalación para el agente de CodeDeploy. También incluye el comando para devolver la señal a la pila de CloudFormation después de completar los siguientes pasos.

3.    Defina la propiedad UserData para invocar el script cfn-init.

Ejemplo de propiedad UserData que invoca el 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.    En el caso del recurso de instancia, configure el atributo CreationPolicy para hacer lo siguiente: Requiera que la instancia de Amazon EC2 o el grupo de Amazon EC2 Auto Scaling envíen señales de éxito a CloudFormation dentro de un período de tiempo específico.

Ejemplo de atributo CreationPolicy que requiere que una instancia de Amazon EC2 envíe señales de éxito a CloudFormation dentro de un período de tiempo específico

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

5.    Para crear una dependencia explícita para el recurso del grupo de despliegue en la instancia de Amazon EC2 o en el grupo de Amazon EC2 Auto Scaling, utilice el atributo DependsOn.

Ejemplo en que el atributo DependsOn crea una dependencia explícita para un recurso de un grupo de despliegue

"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 completar la plantilla de CloudFormation, incluya cualquier otro recurso, propiedad o resultado adicional que se necesite en su entorno.

7.    Una vez completada la plantilla, utilícela para crear una pila de CloudFormation.


Información relacionada

Plantillas de AWS CloudFormation para referencia en CodeDeploy

Creación de una instancia de Amazon EC2 para CodeDeploy (plantilla de AWS CloudFormation)

¿Cómo puedo utilizar las configuraciones de lanzamiento para instalar automáticamente el agente de CodeDeploy en una instancia de EC2 que ejecute Amazon Linux o Ubuntu?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años