Fn::Cidr 是随机的吗?

Is Fn::Cidr random?

如果使用相同的输入调用,Fn::Cidr 是否总是输出相同的值? 我想从同一个 Vpc ip 块获取三个不同子网的 3 个子地址,如果我如下使用它们,我能否保证我会为这 3 个子网获取不同的地址:

我正在为每个参数更改 Fn::Select 的第一个参数。

"SubBlock1" : { "Fn::Select" : [ 0, { "Fn::Cidr" : ["10.0.1.0/16", 3, 24]} ] }

"SubBlock2" : { "Fn::Select" : [ 1, { "Fn::Cidr" : ["10.0.1.0/16", 3, 24]} ] }

"SubBlock3" : { "Fn::Select" : [ 2, { "Fn::Cidr" : ["10.0.1.0/16", 3, 24]} ] }

为了对此进行测试,我使用此模板创建了一个堆栈:

AWSTemplateFormatVersion: 2010-09-09

Resources:

  Bucket:
    Type: AWS::S3::Bucket

Outputs:
  
  Block1:
    Value: !Select 
        - 0
        - Fn::Cidr: 
          - 10.0.0.0/16
          - 3
          - 8

  Block2:
    Value: !Select 
        - 1
        - Fn::Cidr: 
          - 10.0.0.0/16
          - 3
          - 8

  Block3:
    Value: !Select 
        - 2
        - Fn::Cidr: 
          - 10.0.0.0/16
          - 3
          - 8

(包含桶只是因为至少需要一个资源。)

输出为:

  • 块 1:10.1.0.0/24
  • 区块 2:10.1.1.0/24
  • 区块 3:10.1.2.0/24

所以,是的,它每次都会输出相同的块,因为它只是按要求划分给定的 CIDR。

一些注意事项:

  • 我必须提供 cidrBits=8 才能生成 /24 区块
  • 10.0.1.0/16 在您的示例中不是有效的 /16 块,因此我将其更改为 10.1.0.0/16