AWS CDK-部署后操作

时间:2019-07-01 12:16:46

标签: amazon-web-services aws-cdk

是任何人知道执行部署后功能的方法的。 Follwing是休闲CDK应用程序的示例。

app = core.App()
Stack(app, ...)
app.synth()

我正在寻找的是一种在部署模板后应用一些逻辑的方法。问题是应用程序在cdk工具开始部署模板之前就完成了。

谢谢

4 个答案:

答案 0 :(得分:1)

您目前无法通过CDK进行此操作。参见https://github.com/awslabs/aws-cdk/issues/2849。也许在其中添加您的+1,让他们知道您想使用此功能。

您可以做的是将cdk deploy包装在Shell脚本中,该脚本将在CDK完成后运行所需的任何内容。像这样:

#!/bin/sh

cdk deploy "$@"
success=$?
if [ $success != 0 ]; then
    exit $success
fi

run_post_deploy_with_arguments.sh "$@"

将使用给定的参数运行deploy,然后调用Shell脚本,如果部署成功,则将相同的参数传递给它。这是一个非常粗糙的例子。

答案 1 :(得分:1)

您可以使用CustomResource在lambda中运行一些代码(不幸的是,您还需要部署该代码)。 lambda将获取自定义资源的事件(创建,更新,删除),因此您将能够处理不同的情况(假设您要在部署后播种一些表,这样您就可以在例如销毁)。

Here是一篇不错的文章。

我个人找不到更优雅的方式来做到这一点。

答案 2 :(得分:1)

与将cdk deploy命令包装在bash脚本中相比,我发现在pre文件下添加postcdk_hooks.sh部署脚本并在调用之前更方便然后通过cdk.json文件在CDK部署命令之后。这样,您可以继续使用cdk deploy命令,而无需手动调用自定义脚本。

cdk.json

{
    "app": "sh cdk_hooks.sh pre && npx ts-node bin/stacks.ts && sh cdk_hooks.sh post"
    ,
    "context": {
      "@aws-cdk/core:enableStackNameDuplicates": "true",
      "aws-cdk:enableDiffNoFail": "true"
    }
  }

cdk_hooks.sh

#!/bin/bash
PHASE=$1
case "$PHASE" in
    pre)
            # Do something
            ;;
    post)   
            # Do something
            ;;
    *)
            echo "Please provide a valid cdk_hooks phase"
            exit 64
esac

答案 3 :(得分:0)

简短的回答:您不能。我也一直在等待此功能。

您可以做的是将部署打包到执行所有其他逻辑的自定义脚本中,考虑到您想要执行的任务严格意义上并不是“部署任务”,而更像是“配置此任务和那样,现在部署完成。”

另一种解决方案是依靠代码构建来执行部署并定义所有步骤以及部署后要运行的自定义脚本(我个人使用此解决方案,并使用特定的堆栈来部署此特定的代码部署项目)。 / p>

相关问题