CloudFormation报错:SourceSecurityGroupId需为字符串类型求助
解决CloudFormation栈创建时SourceSecurityGroupId类型错误问题
你的问题出在**SourceSecurityGroupId的取值格式**上:你用数组语法(- !GetAtt ...)把安全组ID包裹成了数组,但CloudFormation要求这个字段必须是字符串类型。!GetAtt ALBSecurityGroup.GroupId本身就会返回字符串格式的安全组ID,不需要额外用数组包裹。
修正后的代码:
AutoscalingSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Security group for autoscaling VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupId: !GetAtt ALBSecurityGroup.GroupId # 去掉数组符号 - IpProtocol: tcp FromPort: 443 ToPort: 443 SourceSecurityGroupId: !GetAtt ALBSecurityGroup.GroupId # 去掉数组符号 SecurityGroupEgress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 ALBSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Security group for Application Load Balancer VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 SecurityGroupEgress: - IpProtocol: -1 CidrIp: 0.0.0.0/0
原因说明:
在CloudFormation的AWS::EC2::SecurityGroup资源定义中,SecurityGroupIngress的每个条目里,SourceSecurityGroupId是字符串类型的属性,用于指定单个源安全组ID。你之前的写法(添加-)会将值转换为数组,不符合参数类型校验规则,因此触发"SourceSecurityGroupId必须为字符串类型"的错误。
内容的提问来源于stack exchange,提问作者MikeMac
相关产品推荐
相关产品推荐

