簡體   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