【发布时间】:2015-04-16 13:35:52
【问题描述】:
例如,是否可以创建一个 Amazon CloudFormation 堆栈模板来实例化 ap-southeast-1 中的 AWS::EC2::Instance 和 us-west-2 中的另一个 AWS::EC2::Instance?
我怀疑不是,但我还没有找到明确的“是/否”说法,即堆栈不能拥有跨越多个区域的资源。
【问题讨论】:
例如,是否可以创建一个 Amazon CloudFormation 堆栈模板来实例化 ap-southeast-1 中的 AWS::EC2::Instance 和 us-west-2 中的另一个 AWS::EC2::Instance?
我怀疑不是,但我还没有找到明确的“是/否”说法,即堆栈不能拥有跨越多个区域的资源。
【问题讨论】:
接受的答案已过期。现在可以使用CloudFormation StackSets 跨账户和区域创建堆栈。
【讨论】:
一个很好的问题;但我认为您无法创建分布在多个区域的资源。
CloudFormation 的端点 URL 是基于区域的,AFAIK 没有地方是否可以指定区域特定(差异区域)信息。
从今天开始,您可以通过利用映射部分和get::region 函数以使其区域独立的方式编写 CloudFormation 模板;但是使模板同时分布在多个区域是不可能的;但可以预期。
【讨论】:
您现在最好的选择是使用调用 Lambda 函数的 Cloudformation 自定义资源来创建其他区域中的资源。当您运行 CFN 模板时,它将调用 Lambda 函数,您将在其中创建代码(Python、Node.js 或 Java),利用 AWS 开发工具包创建您需要的资源。 CFN 自定义资源允许您将参数传递给函数并从中获取“输出”,因此从 CFN 的角度来看,您可以像对待任何其他资源一样对待它。
这是来自 AWS 文档的演练示例:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html
【讨论】:
您可以创建一个 lambda 函数来调用以在另一个区域中创建资源,甚至可以让您的 lambda 函数调用另一个区域中的另一个堆栈。
为了让您的生活更轻松,在这种情况下,您可以使用 lambda cli2cloudformation (https://github.com/lucioveloso/cli2cloudformation)。
使用它,您可以在 lambda 中执行 CLI 命令,通过这种方式,您可以在命令中指定 --region。
这也很有趣,因为您可以在创建、更新和删除堆栈时设置命令。
"myCustomResource": {
"Type": "Custom::LocationConstraint",
"Properties": {
"ServiceToken": "arn:aws:lambda:eu-west-1:432811670411:function:cli2cfn_proxy2",
"CliCommandCreate": "s3api get-bucket-location --bucket my-test-bucket --region eu-west-1",
"CliCommandUpdate": "",
"CliCommandDelete": ""
}
},
【讨论】: