amazon-web-services - 访问嵌套堆栈中父 Cloudformation 堆栈的名称

标签 amazon-web-services amazon-s3 aws-cloudformation

我正在使用结构如下的嵌套 Cloudformation 模板:

masterTemplate -> childA -> childB

每个 JSON 模板文件都存储在 S3 中,存储桶名称为“${masterStackName}-env-upload”。这在父模板中工作得很好,我可以简单地这样做:

"TemplateURL":  {
          "Fn::Join": [
            "",
            [
              "https://s3.amazonaws.com/",
              {
                "Ref": "AWS::StackName"
              },
              "-env-upload/device-specific-template-HALO-BUILD-VERSION.json"
            ]
          ]
        },

但是,当 childA 尝试执行相同的操作来启动 childB 模板时,“AWS::StackName”将成为 childA 的生成名称 - 这意味着它正在尝试访问不存在的存储桶。

我的问题是:如何将主/父堆栈的名称传递给子堆栈?我尝试将其作为参数执行此操作,但参数值不允许使用“Ref”(因此我无法对该值执行“Ref”:“AWS::StackName”)。

感谢任何帮助!

最佳答案

实际上可以使用参数将父堆栈名称传递给子堆栈:

这是一个例子:

parent.yml

---
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  ChildA:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: ...test/test-child-a.yml
      Parameters:
        ParentStackName: !Ref AWS::StackName

test-child-a.yml

---
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  ParentStackName:
    Type: String
Resources:
  TestBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref ParentStackName

关于amazon-web-services - 访问嵌套堆栈中父 Cloudformation 堆栈的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48121675/

相关文章:

json - 使用 AWS CloudFormation json 创建堆栈时 AWS::Route53::RecordSet 中出现无效请求错误

amazon-web-services - AWS CLI使用elasticbeanstalk创建环境创建RDS

security - API key 和 key 如何工作?如果我必须将 API 和 key 传递给另一个应用程序,这是否安全?

python - 亚马逊社交网络 : Notify browser client?

security - 亚马逊网络服务 : Setting S3 policy to allow putObject and getObject but deny listBucket

amazon-web-services - 在帐户级别阻止 S3 公共(public)访问

amazon-web-services - "dynamodb:*Reserved*"有什么作用?

amazon-web-services - 如何使用 CloudFormation 在现有 EC2 实例上启动容器?

amazon-web-services - 如何在 AWS Lambda 中创建身份验证中间件

amazon-web-services - 跨两个不同的 AWS 账户将数据从 DynamoDB 复制到 Redshift 中?