在 AWS CodePipeline 中指定 AWS CodeDeploy Target 实例以进行蓝/绿部署



我正在尝试创建一个代码管道,以使用蓝/绿部署将应用程序部署到 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 如何工作的内容。

谢谢

你没有提到调用管道时遇到哪个错误?您是否收到此错误:

"部署失败,因为在您的绿色队列中找不到实例">

假设此假设,由于您在 CodeDeploy 配置中使用手动标记,因此使用带有手动标记的蓝/绿进行部署是行不通的,因为 CodeDeploy 希望看到一个 tagSet 来查找"绿色"实例,并且无法通过 CodePipeline 提供此信息。

要解决此问题,请使用"复制自动缩放"选项,使用 CodePipeline 在 CodeDeploy 中实现蓝/绿部署。请参阅此处的步骤 10 [1]

另一种解决方法是,您可以创建在代码管道中作为操作调用的 lambda 函数。此 lambda 函数可用于触发 CodeDeploy 部署,您可以在其中使用绿色 AutoScalingGroup 的值指定目标实例。然后,您需要频繁地对 CodeDeploy API 进行描述调用,以获取部署状态。部署完成后,您的 lambda 函数将需要根据部署状态向 CodePipeline 发送回信号。

下面是一个示例,演示如何在 CodePipeline 中的管道中调用 AWS lambda 函数 [2]。

裁判:

[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

相关内容

  • 没有找到相关文章

最新更新