我正在尝试创建CodePipeline,以使用“蓝色/绿色部署”将应用程序部署到EC2实例。
我的部署组如下:
aws deploy update-deployment-group \
--application-name MySampleAppDeploy \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--service-role-arn arn:aws:iam::1111111111:role/CodeDeployRole \
--ec2-tag-filters Key=Stage,Type=KEY_AND_VALUE,Value=Blue \
--deployment-style deploymentType=BLUE_GREEN,deploymentOption=WITH_TRAFFIC_CONTROL \
--load-balancer-info targetGroupInfoList=[{name="sample-app-alb-targets"}] \
--blue-green-deployment-configuration file://configs/blue-green-deploy-config.json \
--current-deployment-group-name MySampleAppDeployGroup
blue-green-deploy-config.json
{
"terminateBlueInstancesOnDeploymentSuccess": {
"action": "KEEP_ALIVE",
"terminationWaitTimeInMinutes": 1
},
"deploymentReadyOption": {
"actionOnTimeout": "STOP_DEPLOYMENT",
"waitTimeInMinutes": 1
},
"greenFleetProvisioningOption": {
"action": "DISCOVER_EXISTING"
}
}
我可以使用此命令手动创建蓝色/绿色部署,它有效! :
aws deploy create-deployment \
--application-name MySampleAppDeploy \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--deployment-group-name MySampleAppDeployGroup \
# I can specify the Target Instances here
--target-instances file://configs/blue-green-target-instances.json \
--s3-location XXX
blue-green-target-instances.json
{
"tagFilters": [
{
"Key": "Stage",
"Value": "Green",
"Type": "KEY_AND_VALUE"
}
]
}
现在,在我的CodePipeline部署阶段,我有以下内容:
{
"name": "Deploy",
"actions": [
{
"inputArtifacts": [
{
"name": "app"
}
],
"name": "Deploy",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"version": "1",
"provider": "CodeDeploy"
},
"outputArtifacts": [],
"configuration": {
"ApplicationName": "MySampleAppDeploy",
"DeploymentGroupName": "MySampleAppDeployGroup"
/* How can I specify Target Instances here? */
},
"runOrder": 1
}
]
}
所有EC2实例均已正确标记,并且通过命令行使用CodeDeploy时一切正常,在这种情况下,我缺少有关AWS CodePipeline如何工作的信息。
谢谢
答案 0 :(得分:1)
您没有提到调用管道时遇到哪个错误?您是否收到此错误:
“部署失败,因为在绿色舰队中未找到实例”
基于此假设,由于您在CodeDeploy配置中使用手动标记,因此无法使用带有手动标记的Blue / Green进行部署,因为CodeDeploy希望看到tagSet来查找“ Green”实例,并且存在无法通过CodePipeline提供此信息。
要解决此问题,请使用“复制自动缩放”选项,以使用CodePipeline在CodeDeploy中实施蓝/绿部署。请参阅此处的步骤10 [1]
另一个解决方法是,您可以创建lambda函数,该函数在CodePipeline中作为操作被调用。此lambda函数可用于触发CodeDeploy部署,在该部署中您使用绿色AutoScalingGroup的值指定目标实例。然后,您将需要频繁地对CodeDeploy API进行描述调用,以获取部署状态。部署完成后,您的lambda函数将需要根据部署的状态发信号回CodePipeline。
这里是一个示例,介绍了如何在CodePipeline [2]中的管道中调用AWS lambda函数。
参考:
[1] https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html
[2] https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html