Wie stelle ich sicher, dass der CodeDeploy-Agent bereitgestellt wird, wenn ich CloudFormation zur Bereitstellung von Amazon EC2-Instances verwende?

Lesedauer: 4 Minute
0

Ich stelle meine Infrastruktur und meine AWS CodeDeploy-Ressourcen mithilfe von AWS CloudFormation bereit. Wie stelle ich sicher, dass der CodeDeploy-Agent auf meinen Amazon Elastic Compute Cloud (Amazon EC2)-Instances installiert ist und ausgeführt wird?

Kurzbeschreibung

Wenn Sie eine der folgenden Ressourcen als Ziel einer CodeDeploy-Bereitstellung erstellen, verwenden Sie die cfn-init- und cfn-signal-Hilfsskripte:

  • AWS::EC2::Instanz
  • AWS::AutoScaling::AutoScaling-Gruppe

Bevor Sie Ihre Infrastrukturbereitstellung bereitstellen, können Sie die Hilfsskripts verwenden, um Ihre Zielinstanzen mit dem CodeDeploy-Agenten vollständig bereitzustellen.

Lösung

Um die Hilfsskripte cfn-init und cfn-signal zur Bereitstellung des CodeDeploy-Agenten zu verwenden, führen Sie die folgenden Schritte aus, um die AWS CloudFormation-Vorlage korrekt zu konfigurieren.

1.    Erstellen Sie in einem Code-Editor eine JSON- oder YAML-Datei, die Sie als AWS CloudFormation-Vorlage für Ihre Ressourcen verwenden möchten.

2.    Verwenden Sie für den Metadatenschlüssel den Typ AWS::CloudFormation::Init, um Metadaten für Ihre Instanz- oder Startkonfiguration einzubeziehen.

Beispiel für einen Metadatenschlüssel, der den Typ AWS::CloudFormation::Init verwendet

"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" : {
                ...
            }
        }

Hinweis: Der Typ AWS::CloudFormation::Init umfasst Installationsschritte für den CodeDeploy-Agenten. Er enthält auch den Befehl, nach Abschluss der folgenden Schritte ein Signal an den CloudFormation-Stack zurückzugeben.

3.    Stellen Sie die Eigenschaft UserData ein, um das cfn-init-Skript aufzurufen.

Beispiel für eine UserData-Eigenschaft, die das cfn-init-Skript aufruft

"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.    Konfigurieren Sie für die Instanzressource das CreationPolicy-Attribut, um Folgendes zu tun: Fordern Sie die Amazon EC2-Instance oder die Amazon EC2 Auto Scaling-Gruppe auf, innerhalb eines bestimmten Zeitraums Erfolgssignale an CloudFormation zu senden.

Beispiel für ein CreationPolicy-Attribut, das erfordert, dass eine Amazon EC2-Instance innerhalb eines bestimmten Zeitraums Erfolgssignale an CloudFormation sendet

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

5.    Verwenden Sie das DependsOn-Attribut, um eine explizite Abhängigkeit für Ihre Bereitstellungsgruppenressource von der Amazon EC2-Instance oder der Amazon EC2 Auto Scaling-Gruppe zu erstellen.

Beispiel für ein DependsOn-Attribut, das eine explizite Abhängigkeit für eine Deployment-Gruppenressource erstellt

"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.    Um die CloudFormation-Vorlage zu vervollständigen, fügen Sie alle anderen zusätzlichen Ressourcen, Eigenschaften oder Ausgaben hinzu, die für Ihre Umgebung erforderlich sind.

7.    Verwenden Sie die ausgefüllte Vorlage, um einen CloudFormation-Stack zu erstellen.


Ähnliche Informationen

Referenz zu AWS CloudFormation-Vorlagen für CodeDeploy

Erstellen einer Amazon EC2-Instance für CodeDeploy (AWS CloudFormation-Vorlage)

Wie kann ich Startkonfigurationen verwenden, um den CodeDeploy-Agenten automatisch auf einer EC2-Instance zu installieren, auf der Amazon Linux oder Ubuntu ausgeführt wird?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren