当我尝试在 CloudFormation 中创建带有子网的 VPC 时出现此错误。
Subnet CREATE_FAILED Resource handler returned message: "The CIDR '10.0.1.0/22' is invalid. (Service: Ec2, Status Code: 400, Request ID: 97af4b96-80dd-4092-910c-5d11e5b9ca72, Extended Request ID: null)" (RequestToken: bed19eb5-2309-589e-98bf-9dacc656462a, HandlerErrorCode: InvalidRequest)
这是我的 VPC 和子网在 yaml 中的设置:
VPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: 10.0.2.0/24
Metadata:
'AWS::CloudFormation::Designer':
id: 45e7f38e-c4b6-4a19-9d54-b74e36ef53de
Subnet:
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/22
Metadata:
'AWS::CloudFormation::Designer':
id: 58cd6d64-1f79-4dbe-a981-c9238975f154
答案1
CIDR/22
块涵盖 1024 个主机。因此,IP 地址块必须以 1024 个块为边界。
10.0.1.0/22
是属于 IP 地址空间的 IP 地址10.0.0.1 - 10.0.3.254
。因此10.0.1.0
不是/22
子网的有效起始地址。
一些有效块/22
大小的示例为:
10.0.0.0/22
10.0.4.0/22
10.0.8.0/22
答案2
消息是正确的。10.0.1.0 不是 /22 网络的有效基地址。最接近的合法值是 10.0.0.0 和 10.0.4.0。
考虑 10.0.1.0 和 /22 网络掩码的二进制表示:
10.0.1.0 = 00001010 00000000 00000001 00000000
/22 = 11111111 11111111 11111100 00000000
您可以看到,在第三个八位字节的末尾,地址中设置了一个位,但在掩码中却被清除了。这是非法的。