5

是否有人知道执行部署后功能的方法。以下是一个休闲 CDK 应用程序的示例。

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

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

谢谢

4

4 回答 4

6

编辑:CDK 现在有https://github.com/cdklabs/cdk-triggers,它允许在资源/堆栈创建之前/之后调用 Lambda 函数


目前你不能从 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 "$@"

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

于 2019-07-05T04:46:41.303 回答
3

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

是一篇关于它的非常好的帖子。

就个人而言,我找不到更优雅的方法来做到这一点。

于 2019-10-07T14:44:59.353 回答
1

我发现不是将命令包装在 bash 脚本中,而是在文件下添加和部署脚本并通过文件在 CDK 部署命令之前和之后调用它cdk deploy更方便。通过这种方式,您可以继续使用该命令,而无需手动调用自定义脚本。prepostcdk_hooks.shcdk.jsoncdk 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
于 2020-10-20T16:50:53.780 回答
0

简短的回答:你不能。我也一直在等待这个功能。

您可以做的是将您的部署包装在执行所有其他逻辑的自定义脚本中,这也是有道理的,因为您想要做的可能不是严格意义上的“部署事情”,而更像是“配置这个和那个,现在部署完成”。

另一种解决方案是依靠 codebuild 来执行您的部署并在那里定义您的所有步骤以及在部署后要运行哪些自定义脚本(我个人使用这个解决方案,使用特定的堆栈来部署这个特定的 codedeploy 项目)。

于 2020-05-11T10:06:47.090 回答