AWS 云形成;将模板分解为多个文件并使用 cfn-include 传入变量

Posted

技术标签:

【中文标题】AWS 云形成;将模板分解为多个文件并使用 cfn-include 传入变量【英文标题】:AWS Cloud Formation; Breaking up template into several files and passing in variables with cfn-include 【发布时间】:2019-02-04 18:45:56 【问题描述】:

我的 aws 云形成模板遇到了一些问题。

我有一个通用的 staging.yaml 文件,我在其中定义了我的所有 lambda 和 api。 问题是,那个文件变得太大了。 所以我决定使用这个包:https://www.npmjs.com/package/cfn-include。 所以我可以把文件分成几个模板。 因此:

Fn::Merge:
 - !Include ./templates/api-lambdas/accounts.yaml
 - !Include ./templates/api-lambdas/officers.yaml
 - !Include ./templates/api-lambdas/branches.yaml

我的问题是,有没有办法将变量传递给这些包含? 即:

- !include ./templates/api-lambdas/accounts/yaml, variables: database: databaseName, environment: staging

accounts.yaml 看起来像这样:

Environment:
 Variables:
  ENV: $environment
  DB_NAME: $databaseName

谢谢!

【问题讨论】:

【参考方案1】:

还有另一种选择:cfpack.js 工具。它允许您将巨大的模板拆分为较小的模板,这些模板将合并为一个并部署到您的 CloudFormation 堆栈中。

【讨论】:

【参考方案2】:

也许你想试试嵌套堆栈 (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) 通常当文件变得太大而无法读取时,它们可能很快就会达到最大模板大小限制。 在那里,您可以将根文件中的所有参数以非常简单的方式传递给子堆栈。

【讨论】:

以上是关于AWS 云形成;将模板分解为多个文件并使用 cfn-include 传入变量的主要内容,如果未能解决你的问题,请参考以下文章

AWS 云形成模板 - 为模板中的堆栈提供标签

如何使用 AWS Cloudformer 为现有 API Gateway 创建云形成模板?

cfn-init 用于 cloudformation 启动模板

AWS opswork 云形成无法导入

Aws云形成模板:如何为Kinesis资源提供保留期?

AWS - SAM cli yaml 模板不适用于 cloudformation 堆栈