我想创建具有多个区域资源的 CloudFormation 堆栈。这可能吗?

I'd like to create CloudFormation stack with resources in multiple regions. Is this possible?

是否可以创建单个 Amazon CloudFormation 堆栈模板,例如在 ap-southeast-1 中实例化一个 AWS::EC2::Instance 并在 us-west-2 中实例化另一个 AWS::EC2::Instance

我怀疑不是,但我还没有找到明确的 yes/no 说堆栈不能拥有跨越多个区域的资源。

一个很好的问题;但我认为您无法创建跨多个区域的资源。

CloudFormation 的终点 URL 是基于区域的,据我所知,没有地方可以指定区域特定(差异区域)信息。

从今天开始,您可以通过利用映射部分和 get::region 功能,以使其独立于区域的方式编写 CloudFormation 模板;但是让模板同时分布在多个区域是不可能的;但可以预料到。

您现在最好的选择是使用调用 Lambda 函数的 Cloudformation 自定义资源来创建其他区域中的资源。当您 运行 CFN 模板时,它会调用 Lambda 函数,您可以在其中创建代码(Python、Node.js 或 Java),利用 AWS 开发工具包创建资源你需要。 CFN 自定义资源允许您将参数传递给函数并从中返回 "outputs",因此从 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": ""
    }
  },

已接受的答案已过时。现在可以使用 CloudFormation StackSets 跨帐户和区域创建堆栈。