はじめに
初心者向けのメモです。
内容

上図のような相互通信を許可する場合、AWS::EC2::SecurityGroupのみを使うと循環参照となりデプロイできないため、AWS::EC2::SecurityGroupとAWS::EC2::SecurityGroupIngressに分けて書く。
また、分けることで、SecurityGroupのIDを変えずにAWS::EC2::SecurityGroupIngressのみを追加することができるため、ID参照する他リソースに影響しない。
悪い例.yml
Resources:
SecurityGroup1:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
SourceSecurityGroupId: !Ref SecurityGroup2
SecurityGroup2:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
SourceSecurityGroupId: !Ref SecurityGroup1
良い例.yml
Resources:
SecurityGroup1:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VpcId
SecurityGroup1Ingress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
IpProtocol: tcp
FromPort: 80
ToPort: 80
GroupId: !Ref SecurityGroup1
SourceSecurityGroupId: !Ref SecurityGroup2
SecurityGroup2:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VpcId
SecurityGroup2Ingress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
IpProtocol: tcp
FromPort: 80
ToPort: 80
GroupId: !Ref SecurityGroup2
SourceSecurityGroupId: !Ref SecurityGroup1
参考