我在云形成方面有问题。将 Fn::Join 与参数一起使用时出错
I have a problem in cloud formation. Error when using Fn::Join with a parameter
我正在尝试创建一个安全组并使用 cloudformation 从参数调用其他安全组。我将其用作资源,但是我从 cloudfromation
收到以下错误消息
Template validation error: Template error: every Fn::Join object
requires two parameters, (1) a string delimiter and (2) a list of
strings to be joined or a function that returns a list of strings
(such as Fn::GetAZs) to be joined.
AWSTemplateFormatVersion : 2010-09-09
Description: "simple web layer"
Parameters:
Securitygroupid:
Description: enter sc
Type: List<AWS::EC2::SecurityGroup::Id>
NoEcho: false
Default: sg-05323df39f12d8034
Resources:
Lpsecurity:
Type: AWS::EC2::SecurityGroup
Properties:
Securitygroupid:
Description: enter sc
Type: List<AWS::EC2::SecurityGroup::Id
NoEcho: false
Default: sg-05323df39f12d8034
VpcId: !Ref Vpc
GroupDescription: Sample target security group
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref Securitycab
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Ref Securitycab
MyEC2Instance1:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref ImageId
InstanceType: t2.micro
SubnetId: !Select [ 0, !Ref Subnets ]
SecurityGroupIds: !Join [ ",", [ !Ref Securitygroupid, !Ref Lpsecurity ]]
我做错了什么?
SecurityGroupIds应该是列表类型。
尝试以下方法
Resources:
Lpsecurity:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref Vpc
GroupDescription: Sample target security group
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref Securitycab
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Ref Securitycab
MyEC2Instance1:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref ImageId
InstanceType: t2.micro
SubnetId: !Select [ 0, !Ref Subnets ]
SecurityGroupIds:
- !Ref Securitygroup
- !GetAtt Lpsecurity.GroupId
我找到了解决方案。
SecurityGroupIds: !Split
- ","
- !Sub
- "${idList},${Lpsecurity}"
- idList: !Join [",",!Ref "SecurityGroup"]
我正在尝试创建一个安全组并使用 cloudformation 从参数调用其他安全组。我将其用作资源,但是我从 cloudfromation
收到以下错误消息Template validation error: Template error: every Fn::Join object requires two parameters, (1) a string delimiter and (2) a list of strings to be joined or a function that returns a list of strings (such as Fn::GetAZs) to be joined.
AWSTemplateFormatVersion : 2010-09-09
Description: "simple web layer"
Parameters:
Securitygroupid:
Description: enter sc
Type: List<AWS::EC2::SecurityGroup::Id>
NoEcho: false
Default: sg-05323df39f12d8034
Resources:
Lpsecurity:
Type: AWS::EC2::SecurityGroup
Properties:
Securitygroupid:
Description: enter sc
Type: List<AWS::EC2::SecurityGroup::Id
NoEcho: false
Default: sg-05323df39f12d8034
VpcId: !Ref Vpc
GroupDescription: Sample target security group
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref Securitycab
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Ref Securitycab
MyEC2Instance1:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref ImageId
InstanceType: t2.micro
SubnetId: !Select [ 0, !Ref Subnets ]
SecurityGroupIds: !Join [ ",", [ !Ref Securitygroupid, !Ref Lpsecurity ]]
我做错了什么?
SecurityGroupIds应该是列表类型。
尝试以下方法
Resources:
Lpsecurity:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref Vpc
GroupDescription: Sample target security group
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref Securitycab
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Ref Securitycab
MyEC2Instance1:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref ImageId
InstanceType: t2.micro
SubnetId: !Select [ 0, !Ref Subnets ]
SecurityGroupIds:
- !Ref Securitygroup
- !GetAtt Lpsecurity.GroupId
我找到了解决方案。
SecurityGroupIds: !Split
- ","
- !Sub
- "${idList},${Lpsecurity}"
- idList: !Join [",",!Ref "SecurityGroup"]