実践CloudFormation SG編

続き！！

まずはさっきの流れでスタックを作成しましょう！！

# スタックの作成

## その１
![スクリーンショット 2020-10-05 22.42.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253981/ca632570-0c1e-a82b-da3a-8c2efd49e9ec.png)


今回は指定するのは特にないのでPJPrefixのみを指定します。
この値はVPCで指定したPJPrefixの値と同じにする必要があります。

他はそのまま次へ、次へでスタックの作成をクリック

## 今回作成したのは
FSxSecurityGroup（FSxのセキュリティグループ）
RDPSecurityGroup（RDPインスタンスのセキュリティグループ）
FSxClientSecurytiGroup（FSxClientのセキュリティグループ）

ここら辺は結構雑ですが、この辺りを極めて見るのもいいかと思います。
この方法はあまり推奨されていません。（時間の都合上結構ガバガバのSGになっています。ご了承ください）


FSx（Windowsのファイルサーバーを使用するためには結構ポートを開けないと行けないそうです。）

[セキュリティグループのドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)


# ソース確認

```yaml
AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  PJPrefix:
    Description: Enter a prefix of this system.
    Type: String
    Default: "test"
    AllowedPattern: "[a-zA-Z][a-zA-Z0-9][ -~]*"
    ConstraintDescription: must begin with a letter and contain only alphanumeric characters.

Resources:
  FSxSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: !Sub "Security group for ${PJPrefix}"
      SecurityGroupIngress:
        - CidrIp: "0.0.0.0/0"
          FromPort: 464
          ToPort: 464
          IpProtocol: UDP
        - CidrIpv6: "::/0"
          FromPort: 464
          ToPort: 464
          IpProtocol: UDP
        - CidrIp: "0.0.0.0/0"
          FromPort: 464
          ToPort: 464
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 464
          ToPort: 464
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 49152
          ToPort: 65535
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 49152
          ToPort: 65535
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 389
          ToPort: 389
          IpProtocol: UDP
        - CidrIpv6: "::/0"
          FromPort: 389
          ToPort: 389
          IpProtocol: UDP
        - CidrIp: "0.0.0.0/0"
          FromPort: 53
          ToPort: 53
          IpProtocol: UDP
        - CidrIpv6: "::/0"
          FromPort: 53
          ToPort: 53
          IpProtocol: UDP
        - CidrIp: "0.0.0.0/0"
          FromPort: 389
          ToPort: 389
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 389
          ToPort: 389
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 123
          ToPort: 123
          IpProtocol: UDP
        - CidrIpv6: "::/0"
          FromPort: 123
          ToPort: 123
          IpProtocol: UDP
        - CidrIp: "0.0.0.0/0"
          FromPort: 445
          ToPort: 445
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 445
          ToPort: 445
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 9389
          ToPort: 9389
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 9389
          ToPort: 9389
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 3268
          ToPort: 3268
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 3268
          ToPort: 3268
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 88
          ToPort: 88
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 88
          ToPort: 88
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 135
          ToPort: 135
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 135
          ToPort: 135
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 636
          ToPort: 636
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 636
          ToPort: 636
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 3269
          ToPort: 3269
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 3269
          ToPort: 3269
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 53
          ToPort: 53
          IpProtocol: TCP
        - CidrIpv6: "::/0"
          FromPort: 53
          ToPort: 53
          IpProtocol: TCP
        - CidrIp: "0.0.0.0/0"
          FromPort: 88
          ToPort: 88
          IpProtocol: UDP
        - CidrIpv6: "::/0"
          FromPort: 88
          ToPort: 88
          IpProtocol: UDP
      VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
      Tags:
        - Key: Name
          Value: !Sub "${PJPrefix}-fsx-sg"

  RDPSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: !Sub Security group for ${PJPrefix}
      SecurityGroupIngress:
        - CidrIp: "0.0.0.0/0"
          FromPort: 3389
          ToPort: 3389
          IpProtocol: tcp
      VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
      Tags:
        - Key: Name
          Value: !Sub "${PJPrefix}-rdp-sg"

  FSxClientSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: "sample"
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 0
          ToPort: 65535
          SourceSecurityGroupId: !Ref FSxSecurityGroup
        - IpProtocol: udp
          FromPort: 0
          ToPort: 65535
          SourceSecurityGroupId: !Ref FSxSecurityGroup
      VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
      Tags: 
        - Key: Name
          Value: !Sub "${PJPrefix}-fsx-client-sg"

Outputs:
  RDPSG:
    Value: !Ref RDPSecurityGroup
    Export:
      Name: !Sub "${PJPrefix}-rdp-sg"

  FSxSG:
    Value: !Ref FSxSecurityGroup
    Export:
      Name: !Sub "${PJPrefix}-fsx-sg"

  ClientSG:
    Value: !Ref FSxClientSG
    Export:
      Name: !Sub "${PJPrefix}-client-sg"

```

## 今回のポイントは

```yaml
FSxClientSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: "sample"
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 0
          ToPort: 65535
          SourceSecurityGroupId: !Ref FSxSecurityGroup
        - IpProtocol: udp
          FromPort: 0
          ToPort: 65535
          SourceSecurityGroupId: !Ref FSxSecurityGroup
      VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
      Tags: 
        - Key: Name
          Value: !Sub "${PJPrefix}-fsx-client-sg"

```

の

```yaml
VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
```

になります。

アウトプットしたリソースを取得するためにこの文法を用いています。
ImportValueには短縮記法でうまくいかなかったところが何箇所か見受けられましたので
しっかりとした書き方にしています。

## できました。
![スクリーンショット 2020-10-05 22.56.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253981/a7d1c176-3e0d-4a24-f1fa-06164dbd49c5.png)

次へいきましょう。
[AD編](https://qiita.com/kazumasamatsumo/private/dbf50dc7f9e47ec27223)