簡體   English   中英

如何在cf模板中設置出口時使用fn :: att或fn :: select或任何其他內置函數獲取當前VPC CIDR

[英]How to get current VPC CIDR using fn::att or fn::select or anyother builtin functions while setting egress in cf template

我看到有Fn :: GetAtt和Fn :: Select函數,但我怎么能使用這樣或任何其他可以返回VPC CIDR並在下面列出的Egress上設置為CidrIp屬性(cf tempalate)

  "OutboundRule": {
  "Type": "AWS::EC2::SecurityGroupEgress",
  "Properties":{
    "IpProtocol": "tcp",
    "FromPort": "80",
    "ToPort": "80",
    "CidrIp" : "<VPC Cidr>"
  }
}

如果您已經將VPC聲明為同一模板中的另一個資源,則可以使用Fn::GetAtt像這樣引用其CIDR(假設“MyVPC”是您為該VPC資源提供的邏輯名稱):

{
  "OutboundRule": {
  "Type": "AWS::EC2::SecurityGroupEgress",
  "Properties":{
    "IpProtocol": "tcp",
    "FromPort": "80",
    "ToPort": "80",
    "CidrIp" : { "Fn::GetAtt" : [ "MyVPC", "CidrBlock" ] }
  }
}

Fn::GetAtt可以返回的屬性特定於它返回的資源類型,並且它支持的資源類型和屬性有限。 您可以在此處找到支持的資源和屬性列表

如果您未在同一模板中聲明VPC,則另一個選項是將CIDR作為CloudFormation參數傳遞,並使用{ "Ref": "<parmeterName>" }代替Fn::GetAtt

更新: 於2016年9月19日發布 ,您可以通過導出導入值來使用跨堆棧引用來共享堆棧之間的值而不是參數。

示例(在YAML而不是JSON中,在同一公告中可用):

部分模板1

...

Outputs:

  VpcCidrBlock:
    Description: My VPC's CIDR block.
    Value:
      Fn::GetAtt:
        - MyVpc
        - CidrBlock
    Export:
      Name: MyVpcCidrBlock

部分模板2

...

Resources:

  Type: "AWS::EC2::SecurityGroupEgress"
  Properties:
    CidrIp:
      Fn::ImportValue: MyVpcCidrBlock
    FromPort: 80
    IpProtocol: tcp
    ToPort: 80

注意:在從模板2創建堆棧之前,必須在同一區域中從模板1創建堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM