5
3

More than 1 year has passed since last update.

[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ~ 2/6

Last updated at Posted at 2022-08-16

第2回 CloudFormationテンプレートの実行(Network)

さて第2回の今回は、本記事に記載の「CloudFormationテンプレートを用いて、自動デプロイで利用するVPCを構築していきます。

前回:[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ~ 1/6

CloudFormationで作成するリソース

  • CloudFormationテンプレートを使って、以下のAWSリソースを作成します
    • VPC × 1
    • Public Subnet × 2
    • InternetGateway × 1
    • セキュリティグループ
      • CommonSecurityGroup:SSH(port:22)アクセス用
      • PublicSecurityGroup:HTTP(port:80)、HTTPS(port:443)アクセス用

CloudFormationテンプレート

network.yaml

AWSTemplateFormatVersion: 2010-09-09
Description: network configration template

Parameters:
  ProjectEnvironment:
    Type: String
    Default: 'usecase-auto-deploy'
  PrimaryAZ:
    Type: AWS::EC2::AvailabilityZone::Name
    MinLength: 1
    Default: ap-northeast-1a
  SecondaryAZ:
    Type: AWS::EC2::AvailabilityZone::Name
    MinLength: 1
    Default: ap-northeast-1c
  VPCCidr:
    Type: String
    MinLength: 9
    MaxLength: 18
    Default: 10.0.0.0/16
    AllowedPattern: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/(?:3[0-2]|[12][0-9]|[0-9])$
  App1Cidr:
    Type: String
    MinLength: 9
    MaxLength: 18
    Default: 10.0.100.0/24
    AllowedPattern: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/(?:3[0-2]|[12][0-9]|[0-9])$
    Description: on Primary AZ
  App2Cidr:
    Type: String
    MinLength: 9
    MaxLength: 18
    Default: 10.0.101.0/24
    AllowedPattern: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/(?:3[0-2]|[12][0-9]|[0-9])$
    Description: on Secondary AZ
  AllowSSH:
    Type: String
    MinLength: 9
    MaxLength: 18
    Default: 123.50.201.40/29
    AllowedPattern: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/(?:3[0-2]|[12][0-9]|[0-9])$

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VPCCidr
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - { Key: Name, Value: !Sub "${ProjectEnvironment}-vpc" }
  App1Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Ref App1Cidr
      AvailabilityZone: !Ref PrimaryAZ
      Tags:
        - { Key: Name, Value: !Sub "${ProjectEnvironment}-app-1" }
  App2Subnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Ref App2Cidr
      AvailabilityZone: !Ref SecondaryAZ
      Tags:
        - { Key: Name, Value: !Sub "${ProjectEnvironment}-app-2" }
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - { Key: Name, Value: !Sub "${ProjectEnvironment}-internet-gateway" }
  AttachInternetGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - { Key: Name, Value: !Sub "${ProjectEnvironment}-public" }
  PublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
  AssociateApp1Subnet:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PublicRouteTable
      SubnetId: !Ref App1Subnet
  AssociateApp2Subnet:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PublicRouteTable
      SubnetId: !Ref App2Subnet
  CommonSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref VPC
      GroupName: !Sub "${ProjectEnvironment}-common-sg"
      GroupDescription: Allow All in VPC
      SecurityGroupIngress:
        - { IpProtocol: -1, CidrIp: !Ref VPCCidr }
        - { IpProtocol: tcp, FromPort: 22, ToPort: 22, CidrIp: !Ref AllowSSH }
      Tags:
        - { Key: Name, Value: !Sub "${ProjectEnvironment}-common" }
  PublicSecurityGroup:
      Type: AWS::EC2::SecurityGroup
      Properties:
        VpcId: !Ref VPC
        GroupName: !Sub "${ProjectEnvironment}-public-sg"
        GroupDescription: Allow http(s)
        SecurityGroupIngress:
          - { IpProtocol: tcp, FromPort: 443, ToPort: 443, CidrIp: 0.0.0.0/0 }
          - { IpProtocol: tcp, FromPort: 80, ToPort: 80, CidrIp: 0.0.0.0/0 }
        Tags:
          - { Key: Name, Value: !Sub "${ProjectEnvironment}-public-sg" }

Outputs:
  VPCARN:
    Value: !Ref VPC
    Export:
      Name: !Sub "${ProjectEnvironment}-vpc"
  VPCCIDR:
    Value: !Ref VPCCidr
    Export:
      Name: !Sub "${ProjectEnvironment}-vpc-cidr"
  ALBSubnetId1:
    Value: !Ref App1Subnet
    Export:
      Name: !Sub "${ProjectEnvironment}-ALBSubnetId1"
  ALBSubnetId2:
    Value: !Ref App2Subnet
    Export:
      Name: !Sub "${ProjectEnvironment}-ALBSubnetId2"
  ECSSubnetId1:
    Value: !Ref App1Subnet
    Export:
      Name: !Sub "${ProjectEnvironment}-ECSSubnetId1"
  ECSSubnetId2:
    Value: !Ref App2Subnet
    Export:
      Name: !Sub "${ProjectEnvironment}-ECSSubnetId2"
  ECSSecurityGroupId:
    Value: !Ref CommonSecurityGroup
    Export:
      Name: !Sub "${ProjectEnvironment}-ECSSecurityGroupId"
  ALBSecurityGroupId:
    Value: !Ref PublicSecurityGroup
    Export:
      Name: !Sub "${ProjectEnvironment}-ALBSecurityGroupId"

CloudFormationの実行

  1. AWSコンソールにログインし、「CloudFormation」の画面に移動する
  2. 「CloudFormation」の画面で「スタックの作成」を実行する
    capture1.PNG
  3. VPC構築用のCloudFormationテンプレートをアップロードする
    capture2.PNG
    3-1. テンプレートの準備:「テンプレートの準備完了」
    3-2. テンプレートの指定:「テンプレートファイルのアップロード」
    3-3. テンプレートファイルのアップロード:「ファイルの選択」でCloudFormationテンプレートファイルを選択する
    3-4. 「次へ」を選択する
  4. スタックの詳細を指定
    image.png
    4-1. 「スタックの名前」には usecase-auto-deploy-network を設定してください
    4-2. 画面の一番下まで移動して「次へ」を選択する
    image.png
  5. スタックのオプション
    5-1. スタックのオプションは変更せず、そのまま「スタックの作成」を選択してください
    image.png
  6. CloudFormationスタックの実行
    6-1. 「スタックの作成」まで実行されると、スタックの一覧に作成したCloudFormationスタックの進捗状況が表示されます
    image.png
    6-2. スタックの作成が成功すると、「CREATE_COMPLETE」のステータスになります
    image.png
    6-3. スタックの「リソース」タブから作成されたリソースの内容を確認できます
    image.png

連載の第2回となる今回はここまで。

次回第3回は、自動デプロイのデプロイ先となるECSとECRを構築していきます。

次回:[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ~ 3/6

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3