はじめに
初心者向けのメモです。
内容
上図のような相互通信を許可する場合、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
参考