Je provisionne mon infrastructure et les ressources AWS CodeDeploy à l'aide d'AWS CloudFormation. Je veux m'assurer que l'agent CodeDeploy est installé et s'exécute sur mes instances Amazon Elastic Compute Cloud (Amazon EC2).
Brève description
Si vous créez l'une des ressources suivantes en tant que cible d'un déploiement CodeDeploy, utilisez les scripts d'assistance cfn-init et cfn-signal :
- AWS::EC2::Instance
- AWS::AutoScaling::AutoScalingGroup
Avant de provisionner le déploiement de votre infrastructure, vous pouvez utiliser les scripts d'assistance pour provisionner entièrement vos instances cibles à l'aide de l'agent CodeDeploy.
Résolution
Pour utiliser les scripts d'assistance cfn-init et cfn-signal afin de déployer l'agent CodeDeploy, procédez comme suit pour configurer correctement le modèle AWS CloudFormation.
1. Dans un éditeur de code, créez un fichier JSON ou YAML à utiliser comme modèle AWS CloudFormation pour vos ressources.
2. Pour la clé de Métadonnées, utilisez le type AWS::CloudFormation::Init afin d'inclure des métadonnées pour votre instance ou votre configuration de lancement.
Exemple de clé de métadonnées utilisant le type AWS::CloudFormation::Init type
"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" : {
...
}
}
Remarque : Le type AWS::CloudFormation::Init inclut les étapes d'installation de l'agent CodeDeploy. Il inclut également la commande permettant de renvoyer le signal à la pile CloudFormation une fois que vous avez effectué les étapes suivantes.
3. Définissez la propriété UserData pour invoquer le script cfn-init.
Exemple de propriété UserData qui invoque le 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"}
}
]
}
- Pour la ressource d'instance, configurez l'attribut CreationPolicy pour effectuer les opérations suivantes : Demandez à ce que l'instance Amazon EC2 ou le groupe Amazon EC2 Auto Scaling envoie des signaux de réussite à CloudFormation dans un délai spécifique.
Exemple d'attribut CreationPolicy qui nécessite qu'une instance Amazon EC2 envoie des signaux de réussite à CloudFormation dans un délai spécifique
"SampleLinuxInstance" : {
"Type" : "AWS::EC2::Instance",
"CreationPolicy" : {
"ResourceSignal" : {
"Count" : "1",
"Timeout" : "PT5M"
}
},
5. Pour créer une dépendance explicite pour la ressource de votre groupe de déploiement sur l'instance Amazon EC2 ou le groupe Amazon EC2 Auto Scaling, utilisez l'attribut DependsOn.
Exemple d'attribut DependsOn qui crée une dépendance explicite pour une ressource de groupe de déploiement
"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. Pour achever le modèle CloudFormation, incluez toutes les autres ressources, propriétés ou sorties supplémentaires requises pour votre environnement.
7. Utilisez le modèle achevé pour créer une pile CloudFormation.
Informations connexes
Référence des modèles AWS CloudFormation pour CodeDeploy
Créer une instance Amazon EC2 pour CodeDeploy (modèle AWS CloudFormation)