Come posso assicurarmi che l'agente CodeDeploy sia distribuito quando utilizzo CloudFormation per il provisioning delle istanze Amazon EC2?

4 minuti di lettura
0

Sto effettuando il provisioning della mia infrastruttura e delle risorse AWS CodeDeploy utilizzando AWS CloudFormation. Come posso assicurarmi che l'agente CodeDeploy sia installato e in esecuzione sulle mie istanze Amazon Elastic Compute Cloud (Amazon EC2)?

Breve descrizione

Se crei una delle seguenti risorse come destinazione di un’implementazione di CodeDeploy, utilizza gli script di supporto cfn-init and cfn-signal:

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

Prima di effettuare il provisioning dell’implementazione dell'infrastruttura, puoi utilizzare gli script di supporto per eseguire il provisioning completo delle istanze di destinazione con l'agente CodeDeploy.

Risoluzione

Per utilizzare gli script di supporto cfn-init e cfn-signal per distribuire l'agente CodeDeploy, completa i seguenti passaggi per configurare correttamente il modello AWS CloudFormation.

1.    In un editor di codice, crea un file JSON o YAML da utilizzare come modello AWS CloudFormation per le tue risorse.

2.    Per la chiave dei metadati, usa il tipo AWS::CloudFormation::Init per includere i metadati per la tua istanza o la configurazione di avvio.

Esempio di chiave di metadati che utilizza il 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:**Il tipo AWS::CloudFormation::Init include i passaggi di installazione per l'agente CodeDeploy. Include anche il comando per restituire il segnale allo stack CloudFormation dopo aver completato i seguenti passaggi.

3.    Imposta la proprietà UserData per richiamare lo script cfn-init.

Esempio di proprietà UserData che richiama lo 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.    Per la risorsa di istanza, configura l'attributo CreationPolicy per effettuare le seguenti operazioni: Richiedi all'istanza Amazon EC2 o al Gruppo con dimensionamento automatico Amazon EC2 di inviare segnali di successo a CloudFormation entro un periodo di tempo specifico.

Esempio di attributo CreationPolicy che richiede un'istanza Amazon EC2 per inviare segnali di successo a CloudFormation entro un periodo di tempo specifico

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

5.    Per creare una dipendenza esplicita per la risorsa del tuo gruppo di istanze implementate sull'istanza Amazon EC2 o sul gruppo con dimensionamento automatico Amazon EC2, utilizza l'attributo DependsOn.

Esempio di attributo DependsOn che crea una dipendenza esplicita per una risorsa del gruppo di istanze implementate

"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.    Per completare il modello CloudFormation, includi tutte le altre risorse, proprietà o output aggiuntivi necessari per il tuo ambiente.

7.    Usa il modello completo per creare uno stack CloudFormation.


Informazioni correlate

Modelli di riferimento di AWS CloudFormation per CodeDeploy

Crea un'istanza Amazon EC2 per CodeDeploy (modello AWS CloudFormation)

Come posso utilizzare le configurazioni di avvio per installare automaticamente l'agente CodeDeploy su un'istanza EC2 che esegue Amazon Linux o Ubuntu?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa