繁体   English   中英

具有来自当前CFT的变量的AWS Cloudformation模板

[英]AWS Cloudformation Template with variable from current CFT

我很难确定在应用新的变更集模板时如何使用当前堆栈中的值。 可以想象,要重新应用新集合,将需要使用堆栈的许多当前配置参数。 但是,我真的找不到关于如何执行此操作的权威文档。

到目前为止,我正在寻找类似的东西。

  "DomainName": {
    "Value": {"Ref": "AWS::S3::Bucket::DomainName"}
  }

我希望变更集生成器将使用该Ref值来获取已配置S3存储桶的当前域名。

也许这根本不是变更集的工作方式? 我可以想象该配置在运行时与先前的配置合并,因此您应该可以访问某些先前的实例变量?

谢谢。

您在CloudFormation模板中定义的内容称为Resources 资源示例为:

  • AWS :: S3 :: Bucket
  • AWS :: EC2 ::实例
  • AWS :: EC2 :: VPC

每个资源都有在CloudFormation模板中声明它们时定义的Properties 让我们以AWS::S3::Bucket资源为例。

{
  "Resources" : {

    "MyBucket" : {
      "Type" : "AWS::S3::Bucket",
      "Properties" : {
        "BucketName" : "my-bucket-name"
      }
    }

  }
}

BucketName是“ MyBucket”资源的属性。

资源通常还具有Return Values 您可以在CloudFormation模板中使用返回值来建立交叉引用逻辑和资源之间的关系。 每个资源通常都有一个“默认”返回值,当您使用模板中的Ref内在函数引用某个资源时,将返回此值。 对于AWS::S3::Bucket资源,此“默认”返回值只是BucketName 这意味着,如果您想在模板的其他位置使用my-bucket-name ,则可以在MyBucket资源上使用Ref内部函数。 例如,我们可以创建AWS::S3::BucketPolicy资源, BucketName (实际上是Bucket )是AWS::S3::BucketPolicy的属性之一。 然后让我们这样做:

{
  "Resources" : {

    "MyBucket" : {
      "Type" : "AWS::S3::Bucket",
      "Properties" : {
        "BucketName" : "my-bucket-name"
      }
    },

    "MyBucketPolicy" : {
      "Type" : "AWS::S3::BucketPolicy",
      "Properties" : {
        "Bucket" : { "Ref" : "MyBucket" },
        "PolicyDocument" : JSON_STRUCTURE_SKIPPED_FOR_CLARITY
      }
    }

  }
}

请注意"Bucket" : "my-bucket-name",在上面的MyBucketPolicy资源中,我没有写"Bucket" : "my-bucket-name",实际上我想在那里引用MyBucket 部署模板时, { "Ref" : "MyBucket" }引擎会将{ "Ref" : "MyBucket" }值替换为"my-bucket-name"

某些资源提供了额外的Return Values (属性),可以使用Fn::GetAtt内部函数访问这些值。 AWS :: S3 :: Bucket额外的返回值/属性为:

  • 域名
  • DualStackDomainName
  • 网址

Fn::GetAtt内在函数的语法如下所示:

{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }

为了从"AWS::S3::Bucket资源"AWS::S3::Bucket获取DomainName ,您需要这样做:

{ "Fn::GetAtt" : [ "MyBucket", "DomainName" ] }

例如,您可以在CloudFormation堆栈输出部分中使用DomainName 完整的示例如下:

{
  "Resources" : {

    "MyBucket" : {
      "Type" : "AWS::S3::Bucket",
      "Properties" : {
        "BucketName" : "my-bucket-name"
      }
    },

    "MyBucketPolicy" : {
      "Type" : "AWS::S3::BucketPolicy",
      "Properties" : {
        "Bucket" : { "Ref" : "MyBucket" },
        "PolicyDocument" : JSON_STRUCTURE_SKIPPED_FOR_CLARITY
      }
    }

  },

  "Outputs" : {

    "MyBucketDomainName" : {
      "Description" : "Domain name of my bucket",
      "Value" : { "Fn::GetAtt" : [ "MyBucket", "DomainName" ] }
    }
  }
}

您将在AWS Resource Types Reference中找到有关所有Resources ,其PropertiesReturn Values (可通过Ref以及Fn::GetAtt函数访问)的信息。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM