2017-10-04 43 views
0

AWS爲VPC生成ipv6 CIDR塊,因此無法提前確定。生成的CIDR塊如下所示:2a05:d018:84c:c500::/56並始終爲56.如何在VPC上創建子網時確定AWS Cloudformation中的ipv6 CIDR塊前綴

創建子網時,必須使用完整的前綴值指定64大小的塊。例如。 2a05:d018:84c:c501::/64

可以在cloudformation中查找VPC的ipv6 CIDR塊,但是這會返回完整值,而不僅僅是前綴。要創建子網,我們需要能夠將01::/64附加到前綴中,以便爲子網創建64大小的塊。

我見過使用lambda函數的解決方案,但這會使模板非常複雜。我想使用模板中提供的內置內部函數來完成此操作。

在同一個堆棧中部署帶有ipv6子網的VPC時,如何爲子網生成有效的ipv6 CIDR塊?

回答

1

下面就來計算YAML第一個子網的方式:

Fn::Sub: 
    - "${VpcPart}${SubnetPart}" 
    - SubnetPart: 01::/64 
     VpcPart: !Select [0, !Split ['00::/56', !Select [0,!GetAtt YourVpc.Ipv6CidrBlocks]]] 
+0

這是一個非常清晰的解決方案。謝謝! –

1

您可以使用Fn::Split(在00::/56)和Fn::Select的組合來確定前綴以獲取前綴。然後你可以附加你自己的值來使用Fn::Join創建子網CIDR塊。以下示例假定您擁有一個VPC,並且具有一個或多個與其關聯的Ipv6 CIDR塊。

將此值用於子網上的Ipv6CidrBlock屬性。

{ 
    "Fn::Join": [ 
     "", 
     [ 
      { 
       "Fn::Select": [ 
        0, 
        { 
         "Fn::Split": [ 
          "00::/56", 
          { 
           "Fn::Select": [ 
            0, 
            { 
             "Fn::GetAtt": [ 
              "Vpc", 
              "Ipv6CidrBlocks" 
             ] 
            } 
           ] 
          } 
         ] 
        } 
       ] 
      }, 
      "01::/64" 
     ] 
    ] 
}