【问题标题】:Is it possible to execute deployment of AWS CDK asynchronously?是否可以异步执行 AWS CDK 的部署?
【发布时间】:2021-03-04 07:13:13
【问题描述】:

cdk deploy ... 命令用于部署一个或多个 CloudFormation 堆栈。当它执行时,它会显示由各种堆栈部署产生的消息,这可能需要一些时间。

deploy command 支持 --notification-arns 参数,该参数是 CloudFormation 将通过堆栈相关事件通知的 SNS 主题的 ARN 数组。

是否可以执行cdk deploy 并且不让它向控制台报告其进度(即命令在上传新的 CloudFormation 资产后立即退出)并仅依靠 SNS 主题作为获取进度反馈的手段部署?

【问题讨论】:

  • 据我所知,不可能以适当的方式将其置于背景中。但是您不需要使用 --notification-arns 来获取有关堆栈创建的更新。您只需登录 AWS 控制台并检查“cloudformation”服务即可。您可以在控制台上获得所有相同的信息,以及更多信息。此外,如果没有通过 --require-approval never 禁用,CDK 会要求您在控制台中批准。即使您通过在命令末尾附加“&”将其置于后台(linux 或 mac),sysout 也会打印到控制台。
  • 谢谢,但与控制台的任何交互都意味着无法实现自动化。通过 SNS/SQS 使用通知的全部意义在于避免用户需要登录控制台并允许自动监控 Cfn 部署的进度。

标签: amazon-web-services amazon-cloudformation aws-cdk


【解决方案1】:

一种快速而肮脏的方法(未经测试)是使用nohup

$ nohup cdk ... --require-approval never 1>/dev/null

--require-approval never 仅仅意味着它不会停止请求sercurity 请求的许可,显然nohup 允许命令在不终止的情况下运行。

这是我能想到的唯一快速的解决方案。

另一个长期解决方案是使用CdkToolkit 创建您自己的部署脚本。看看cdk 命令来了解一下。这是我一段时间以来一直想要 aws-cdk 的东西 - 我想要自定义部署脚本而不是使用 shell。

【讨论】:

  • 不幸的是,这并没有真正异步执行变更集,它只是意味着它在通过 bash 运行时在后台运行。背景是我想通过 lambda 启动 CDK 部署并在启动部署后立即退出 lambda 并依靠通过 SQS/SNS 的通知来监视部署的进度。感谢CdkToolkit 的想法,我去看看。
【解决方案2】:

我找到了一个通过 --no-execute 标志异步部署 cdk 应用程序的解决方案:

cdk deploy StackX --no-execute
change_set_name = aws cloudformation list-change-sets --stack-name StackX --query "Summaries[0].ChangeSetId" --output text
aws cloudformation execute-change-set --change-set-name $change_set_name

就我而言,这是可行的,因为我使用此方法仅部署新堆栈,因此该堆栈只会有 1 个更改集,我可以通过查询索引为 0 的条目来检索它。如果您希望更新现有堆栈,您必须从 list-change-sets 命令返回的列表中选择正确的更改集。

【讨论】:

    【解决方案3】:

    我遇到了类似的问题 - 在等待 ec2 实例上长时间运行的初始化脚本完成时,我不想让控制台保持打开状态。发布完成并创建变更集后,我按下了 Ctrl-C。它一直在运行,我在 Cloudformation 视图中检查了状态。不完美且不适合自动化,但我不需要让进程在我的机器上运行。

    【讨论】:

      猜你喜欢
      • 2020-03-05
      • 2019-01-30
      • 2020-05-08
      • 2019-11-12
      • 2020-11-23
      • 1970-01-01
      • 2011-10-06
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多