AWS CDK应用程序中app.synth()
行的用途是什么?例如,可以在第29行看到:https://github.com/aws-samples/aws-cdk-examples/blob/master/typescript/ecs/fargate-application-load-balanced-service/index.ts
我看过CDK文档,但我找不到该函数的实际用途。据我所知,该应用程序是在cdk deploy
或cdk synth
上自动合成的。我还采用了上面链接的repo中所示的示例,注解掉了app.synth()
行,部署了它,并且它看起来像预期的那样工作。因此,我想知道,当谈到app.synth()的用途时,我是否遗漏了一些东西。
2条答案
按热度按时间rjee0c151#
cdk synth只构建您的CloudFormation模板。它不会将其部署(创建实际资源)到AWS。您可以使用构建的模板,在CFN控制台中手动部署,编辑或检查。
cdk deploy将构建模板并将其部署到AWS。
人们将
synth
与deploy
一起使用,因为这是一个很好的做法:在部署之前进行合成是可选的(尽管是一个很好的做法)。AWS CDK在每次部署之前合成您的堆栈。
e5nqia272#
我知道这个问题已经有一段时间没有被问到了,但是我很好奇,我自己也研究了一下,所以我会和你分享。
(我还认为,目前公认的答案是关于CDK CLI,而不是CDK应用程序代码。)
App
类有一个名为autoSynth
的选项,默认情况下设置为true
,因此即使在代码中省略了app.synth()
,它也会自动执行。https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.AppProps.html#autosynth
正如文档中提到的,此功能在某些语言中可能不起作用,因此在许多示例代码中似乎都明确指定了此功能。
根据文档,可以多次运行
app.synth()
。https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.App.html#synthoptions
autoSynth
在Node.js上运行良好。它是在Node.js中使用process.once("beforeExit", listener)
实现的。https://github.com/aws/aws-cdk/blob/v2.51.1/packages/@aws-cdk/core/lib/app.ts#L166-L170
我开始这项调查是因为当我在Deno中运行CDK时,我必须显式运行
app.synth()
来生成CDK程序集。作为这项调查的结果,我发现这是因为Deno中的节点兼容层目前不支持“beforeExit”事件。https://github.com/denoland/deno_std/blob/113435ada1948b90188586f022d55745c6d2d19b/node/process.ts#L51-L52
根据这一经验,最好按照建议显式调用
app.synth()
。