AWS::Include 转换 - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::Include 转换

使用 AWS::Include 转换(它是由 AWS CloudFormation 托管的宏)可将插入样板文件内容到您的模板中。AWS::Include 转换可让您在 Amazon S3 存储桶中创建对模板代码段的引用。当创建更改集使用更改集更新堆栈,并且模板引用 AWS::Include 时,AWS CloudFormation 会将指定文件的内容插入到转换在模板中的位置。AWS::Include 函数的功能类似于编程语言中的 includecopyimport 指令。

例如,您可能会有想在一个或多个 AWS CloudFormation 模板中重用的 Lambda 函数。

与自定义宏不同,AWS::Include 转换不需要特殊权限即可使用它,因为它由 AWS CloudFormation 托管。它可以由 AWS CloudFormation 内的任何账户中的模板使用。此外,使用此转换时不会产生任何费用。AWS CloudFormation 在评估顺序和范围方面将 AWS::Include 转换视为与任何其他宏相同。有关宏的更多信息,请参阅使用 AWS CloudFormation 宏对模板执行自定义处理

用量

除了模板参数部分和模板版本字段以外,您可以在 AWS CloudFormation 模板中的任意位置使用 AWS::Include 转换。例如,您可以在映射部分中使用 AWS::Include

模板顶层的语法

要在模板顶层的 Transform 部分中包含 AWS::Include 转换,请使用以下语法。

JSON

{ "Transform" : { "Name" : "AWS::Include", "Parameters" : { "Location" : "s3://MyAmazonS3BucketName/MyFileName.json" } } }

YAML

Transform: Name: 'AWS::Include' Parameters: Location: 's3://MyAmazonS3BucketName/MyFileName.yaml'

将转换嵌入到模板中某个部分内的语法

要包含嵌入在一个部分中的转换,请使用 Fn::Transform 内部函数和以下语法。

JSON

{ "Fn::Transform" : { "Name" : "AWS::Include", "Parameters" : { "Location" : "s3://MyAmazonS3BucketName/MyFileName.json" } } }

YAML

'Fn::Transform': Name: 'AWS::Include' Parameters: Location: s3://MyAmazonS3BucketName/MyFileName.yaml

参数

位置

位置是 Amazon S3 URI,包含 S3 存储桶中的特定文件名。例如:s3://MyBucketName/MyFile.yaml

备注

在使用 AWS::Include 时,请记住以下注意事项:有关使用宏的一般注意事项,请参阅创建 AWS CloudFormation 宏定义时的注意事项

  • 目前,我们支持 Amazon S3 URI,不支持其他 Amazon S3 格式(如 Amazon S3 ARN)。它必须是 Amazon S3 存储桶,而不是 GitHub 存储库等其他存储。

  • 任何有权访问 Amazon S3 URL 的人都可以在其模板中包含该代码段。

  • 您的模板代码段必须是有效的 YAML 或 JSON。

  • 您的模板代码段必须是有效的键值对象,例如 "KeyName": "keyValue"

  • 不能使用 AWS::Include 来引用同时也使用 AWS::Include 的模板代码段。

  • 如果代码段发生更改,堆栈不会自动获取这些更改。要获取这些更改,您必须使用更新的代码段更新堆栈。更新堆栈时,请确保所包含的代码段未在您不知情的情况下发生更改。要在更新堆栈前进行验证,请检查更改集。

  • 创建模板和代码段时,您可以混用 YAML 和 JSON 模板语言。

  • 目前,我们不支持为 YAML 代码段使用简写形式。

  • 您可以提供具有 AWS::Include 的跨区域复制 Amazon S3 URI。确保在访问跨区域复制对象时检查 Amazon S3 存储桶名称。有关更多信息,请参阅跨区域复制

示例

以下示例演示如何使用 AWS::Include 转换来执行等待条件句柄。

JSON 和 YAML 版本都使用了下面的等待条件代码段。将该文件保存为 single_wait_condition.yaml,并将其存储在与 MyAmazonS3BucketName 同名的 S3 存储桶中。

WebServerWaitHandle: Type: 'AWS::CloudFormation::WaitConditionHandle'

JSON

{ "Resources": { "MyWaitHandle": { "Type": "AWS::CloudFormation::WaitConditionHandle" }, "Fn::Transform": { "Name": "AWS::Include", "Parameters": { "Location": "s3://MyAmazonS3BucketName/single_wait_condition.yaml" } } } }

YAML

Resources: MyWaitHandle: Type: 'AWS::CloudFormation::WaitConditionHandle' 'Fn::Transform': Name: 'AWS::Include' Parameters: Location : "s3://MyAmazonS3BucketName/single_wait_condition.yaml"