在AWS CodePipeline中指定用于Blue / Green部署的AWS CodeDeploy目标实例

问题描述 投票:0回答:1

我正在尝试创建CodePipeline,以使用Blue / Green Deployment将应用程序部署到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如何工作的信息。

谢谢

amazon-web-services aws-cli aws-code-deploy aws-codepipeline blue-green-deployment
1个回答
0
投票

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

“部署失败,因为在绿色舰队中未找到实例”

[基于此假设,由于您在CodeDeploy配置中使用手动标记,因此无法使用带有手动标记的Blue / Green进行部署,因为CodeDeploy希望看到tagSet来查找“ Green”实例,并且没有通过CodePipeline提供此信息的方法。

要解决此问题,请使用'Copy AutoScaling'选项,以使用CodePipeline在CodeDeploy中实施蓝/绿部署。请参阅此处的步骤10 [1]

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

这里是一个示例,介绍了如何在CodePipeline [2]中的管道中调用AWS lambda函数。

Ref:

[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

© www.soinside.com 2019 - 2024. All rights reserved.