BETA

AWS CloudFormation練習帖:パブリックサブネットとプライベートサブネットを持つVPCを作成する

投稿日:2019-07-11
最終更新:2019-07-19

何をする?

前提条件

  • AWSアカウントは開設済み
  • アジアパシフィック(東京)リージョンを利用
  • VPCは未作成(デフォルトVPCのみ)

やってみた

テンプレート作成

  • お決まりの部分(ここは以前のテンプレートと同じ)
    AWSTemplateFormatVersion: "2010-09-09"  
    Description: "Create VPC"  
    Resources:  
  • VPC作成部分(ここも以前のテンプレートと同じ)
    # VPCを作成  
    VPC:  
      Type: "AWS::EC2::VPC"  
      Properties:  
        CidrBlock: "10.0.0.0/16"  
        Tags:  
          - Key: "Name"  
            Value: "MyVPC"  
  • サブネット作成部分(ここからが拡張部分)
    VpcIdは、VPC作成の部分で作成されるVPCのIDを参照(!Ref)しています
    この段階ではまだどちらもインターネットゲートウェイにルーティングされていないため、プライベートサブネットの状態です
    # Public Subnetを作成  
    PublicSubnet:  
      Type: "AWS::EC2::Subnet"  
      Properties:  
        VpcId: !Ref VPC  
        CidrBlock: "10.0.10.0/24"  
        AvailabilityZone: "ap-northeast-1a"  
        Tags:  
          - Key: "Name"  
            Value: "PublicSubnet"  
    # Private Subnetを作成  
    PrivateSubnet:  
      Type: "AWS::EC2::Subnet"  
      Properties:  
        VpcId: !Ref VPC  
        CidrBlock: "10.0.20.0/24"  
        AvailabilityZone: "ap-northeast-1a"  
        Tags:  
          - Key: "Name"  
            Value: "PrivateSubnet"  
  • インターネットゲートウェイ作成部分
    パブリックサブネット用にインターネットゲートウェイを作成し、VPCにアタッチします
    VPCGatewayAttachmentのInternetGatewayIdには、作成されるInternetGatewayのIDを参照(!Ref)しています
    # InternetGatewayを作成  
    InternetGateway:  
      Type: "AWS::EC2::InternetGateway"  
      Properties:  
        Tags:  
          - Key: "Name"  
            Value: "CloudFormationInternetGateway"  
    # InternetGatewayをVPCにアタッチ  
    VPCGatewayAttachment:  
      Type: "AWS::EC2::VPCGatewayAttachment"  
      Properties:  
        InternetGatewayId: !Ref InternetGateway  
        VpcId: !Ref VPC  
  • パブリックサブネット用のルートテーブル設定部分
    ルートテーブルを作成してVPCにアタッチします
    0.0.0.0/0の場合にインターネットゲートウェイへ向かうルートテーブルを作成し、パブリックサブネットにアタッチします
    VpcId、RouteTableId、GatewayId、SubnetIdは作成される各IDを(!Ref)しています
    # Public Subnet用のルートテーブルを作成  
    PublicRouteTable:  
      Type: "AWS::EC2::RouteTable"  
      Properties:  
        VpcId: !Ref VPC  
        Tags:  
          - Key: "Name"  
            Value: "PublicRouteTable"  
    PublicRouting:  
      Type: "AWS::EC2::Route"   
      Properties:  
        RouteTableId: !Ref PublicRouteTable  
        GatewayId: !Ref InternetGateway  
        DestinationCidrBlock: "0.0.0.0/0"  
    # ルートテーブルをサブネットにアタッチ  
    PublicRouteTableAttachToPublicSubnetA:  
      Type: "AWS::EC2::SubnetRouteTableAssociation"  
      Properties:  
        RouteTableId: !Ref PublicRouteTable  
        SubnetId: !Ref PublicSubnet  

実行

動作確認

  • パブリックサブネットとプライベートサブネットにEC2を立てて動作確認をします
  • 各EC2の設定は以下の通り
    • パブリックサブネット用EC2
      • サブネット「PublicSubnet」に配置
      • ElasticIPをアタッチ
      • セキュリティグループでインターネットからのSSHを許可
    • プライベートサブネット用EC2
      • サブネット「PrivateSubnet」に配置
      • セキュリティグループでPublicSubnetからのSSHを許可
  • 各EC2にSSHし、インターネットに繋がるか確認します
    • パブリックサブネット用EC2でyum updateを実行(インターネットに繋がるのでyum updateが成功)
    • プライベートサブネット用EC2でyum updateを実行(インターネットに繋がらないのでyum updateが失敗)

おまけ

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

AWSやAzureについて勉強したことをつらつらと。 基本的には未来の自分に向けたメモ的な何か。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!