【问题标题】:Resolving status callback in AWS codedeploy hook解决 AWS codedeploy 挂钩中的状态回调
【发布时间】:2019-07-10 14:23:43
【问题描述】:

我在运行 codedeploy 时收到此错误

这是我的 appspec.yaml 文件

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "arn:aws:ecs:ap-southeast-1:xxx:task-definition/xxxx-def:latest"
        LoadBalancerInfo:
          ContainerName: "yyyyy"
          ContainerPort: 80
# Optional properties
        PlatformVersion: "LATEST"
        NetworkConfiguration:
          AwsvpcConfiguration:
            Subnets: ["subnet-xxx","subnet-yyy"]
            SecurityGroups: ["sg-zzz"]
Hooks:
  - BeforeInstall: "drush-updb"

这就是 drush-updb 在 AWS lambda 中所做的事情

def lambda_handler(event,context):
    client = boto3.client('ecs')
    response = client.run_task(
        overrides={
            'containerOverrides': [
            {
                'name': 'AAA-BBB',
                'command': [
                    "ccdd"
                ],
            }
        ]
        }
    )
    return {
        'statusCode': 200,
        'body': str(response)
    }

最后是运行代码部署的 IAM。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ecs:DescribeServices",
                "ecs:CreateTaskSet",
                "ecs:UpdateServicePrimaryTaskSet",
                "ecs:DeleteTaskSet",
                "elasticloadbalancing:DescribeTargetGroups",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:ModifyListener",
                "elasticloadbalancing:DescribeRules",
                "elasticloadbalancing:ModifyRule",
                "lambda:InvokeFunction",
                "cloudwatch:DescribeAlarms",
                "sns:Publish",
                "s3:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": [
                        "ecs-tasks.amazonaws.com"
                    ]
                }
            }
        }
    ]
}

我确实有一个基于此link 的返回回调的状态代码,但它似乎不起作用。那么 codedeploy 接受什么样的回调呢?

【问题讨论】:

    标签: aws-lambda amazon-iam aws-code-deploy


    【解决方案1】:

    我设法解决了这个问题。我需要在 run_task 语句之后显式调用codedeploy.putLifecycleEventHookExecutionStatus

    所以 lambda 函数看起来像这样

    def lambda_handler(event,context):
        client = boto3.client('ecs')
        response = client.run_task(
            overrides={
                'containerOverrides': [
                {
                    'name': 'AAA-BBB',
                    'command': [
                        "ccdd"
                    ],
                }
            ]
            }
        )
        if response:
            status='Succeeded'
    
        try:
            codedeploy.put_lifecycle_event_hook_execution_status(
                deploymentId=event["DeploymentId"],
                lifecycleEventHookExecutionId=event["LifecycleEventHookExecutionId"],
                status=status
            )
            return True
        except ClientError as e:
            print("Unexpected error: %s" % e)
            return False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-11
      • 2019-01-03
      • 2016-05-28
      • 2023-02-15
      • 2020-01-18
      • 2020-04-27
      • 2016-07-10
      • 1970-01-01
      相关资源
      最近更新 更多