如何解决解决了AWS CloudFormation创建堆栈未解决的资源依赖性
我正在尝试创建一个具有几个子网,安全组和Internet网关的VPC。我收到错误“模板格式错误:无法解析的资源依赖项[VPCSubnet03]”
这是我的.yml文件的一部分
Parameters:
Subnet03CIDRBlock:
Type: String
Description: CIDR Block range for the public subnet 03 in the VPC if the region has more than 2 Availability Zones.
Conditions:
Has2Azs:
Fn::Or:
- Fn::Equals:
- {Ref: 'AWS::Region'}
- us-west-2
- Fn::Equals:
- {Ref: 'AWS::Region'}
- us-east-1
- Fn::Equals:
- {Ref: 'AWS::Region'}
- me-south-1
HasMore:
Fn::Not:
- Condition: Has2Azs
Resources:
VPCSubnet03:
Condition: HasMore
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref Subnet03CIDRBlock
AvailabilityZone: !Select [ 2,!GetAZs '' ]
Tags:
- Key: Name
Value: !Sub "${ProjectName}-Subnet03CIDRBlock"
供参考,这也是我的.json参数文件
[{
"ParameterKey": "Subnet03CIDRBlock","ParameterValue": "192.168.3.0/24"
},{
"ParameterKey": "ProjectName","ParameterValue": "GreenBlueDeployment"
}]
我在Google上搜索了一段时间,不知道该如何解决。 AFAIK,定义了VPCSubnet03中的所有依赖项。
编辑: 我在VPCSubnet03的定义中建立了一个条件,但是忘记在相应的关联路由表资源中添加相同的条件。现在正在创建堆栈!
在更新我的.yml文件后,最终示例如下所示:
Parameters:
Subnet03CIDRBlock:
Type: String
Description: CIDR Block range for the public subnet 03 in the VPC if the region has more than 2 Availability Zones.
Conditions:
Has2Azs:
Fn::Or:
- Fn::Equals:
- {Ref: 'AWS::Region'}
- us-west-2
- Fn::Equals:
- {Ref: 'AWS::Region'}
- us-east-1
- Fn::Equals:
- {Ref: 'AWS::Region'}
- me-south-1
HasMore:
Fn::Not:
- Condition: Has2Azs
Resources:
VPCSubnet03:
Condition: HasMore
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref Subnet03CIDRBlock
AvailabilityZone: !Select [ 2,!GetAZs '' ]
Tags:
- Key: Name
Value: !Sub "${ProjectName}-Subnet03CIDRBlock"
Subnet03RouteTableAssociation:
Condition: HasMore
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPCSubnet03
RouteTableId: !Ref RouteTable
再次感谢您的帮助!
解决方法
建议尝试在CloudFormation Linter中的VSCode中查看更多详细的内联错误:
需要在完整模板上运行cfn-lint
才能确定
您的模板缺少ProjectName
和VPC
参数。因此应该是:
Parameters:
Subnet03CIDRBlock:
Type: String
Description: CIDR Block range for the public subnet 03 in the VPC if the region has more than 2 Availability Zones.
ProjectName:
Type: String
Default: my-project-name
VPC:
Type: AWS::EC2::VPC::Id
Conditions:
Has2Azs:
Fn::Or:
- Fn::Equals:
- {Ref: 'AWS::Region'}
- us-west-2
- Fn::Equals:
- {Ref: 'AWS::Region'}
- us-east-1
- Fn::Equals:
- {Ref: 'AWS::Region'}
- me-south-1
HasMore:
Fn::Not:
- Condition: Has2Azs
Resources:
VPCSubnet03:
Condition: HasMore
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref Subnet03CIDRBlock
AvailabilityZone: !Select [ 2,!GetAZs '' ]
Tags:
- Key: Name
Value: !Sub "${ProjectName}-Subnet03CIDRBlock"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。