【AWS】CloudFormationのデザイナーを使ってEC2インスタンス環境(VPC+Subnet+IGW+RouteTable含む)を構築する手順

CloudFormation にはテンプレートに1行ずつ定義していくやり方と、デザイナーというツールを使って視覚的にアイコンを組み合わせて作るやり方があります。

今までデザイナーの使い方がよくわからなくて使ったことがなかったですが、今回はそのデザイナーを使ってEC2インスタンス環境を構築する手順を解説します。

 

 

過去の CloudFormation の記事一覧です。

 

【AWS】CloudFormation の基本的な解説(VPCの作成手順)

 

【AWS】CloudFormation で Amazon EC2 インスタンスを作成する手順【単純な作成】【Part.1】

 

【AWS】CloudFormation で Amazon EC2 インスタンスを作成する手順【VPC&サブネット&セキュリティグループ&EC2インスタンス】【Part.2】

 

【AWS】CloudFormation と CloudWatch のスケジュール機能を使ってタグ付けされた EC2 と RDS をまとめて自動停止する設定手順

 

【AWS】CloudFormation のスタックのバックアップ及びリストア手順

 

 

 

最終的なイメージ

最終的には下図のような環境を構築します。

 

CloudFormation 設計

以下の設計で構築します。

 

 

 

 

 

スタックを作成する

最初にスタックを作成します。

 

AWS 管理コンソールから「CloudFormation」に移動します。

 

 

 

「スタックの作成」ボタンをクリックします。

 

 

 

 

「スタックの作成」画面で「デザイナーでテンプレートを作成」をクリックします。

 

 

 

 

 

 

初期のデザイナーの画面は下図のようになっています。

 

 

 

最低限のオブジェクトを作成する

今回は EC2 インスタンスに ssh ログインができるという必要最低限の構成で構築します。

 

デザイナーを起動したら、以下のように必要最低限のオブジェクトを作成します。

 

 

 

 

 

デザイナーで作成途中でプロパティを保存する方法

デザイナーで構成を作る場合、慣れない最初のうちは時間がかかります。

そのため、作成途中でプロパティを保存すると最初から作り直す必要がありません。

 

 

デザイナーの画面の左上の保存のアイコンをクリックします。

 

 

「保存」をクリックします。

 

 

テンプレートの保存で「ローカルファイル」を選択し任意のファイル名を記載して「保存」ボタンをクリックします。

 

 

 

以下のようなテンプレートで保存されます。

 

 

 

 

 

 

VPC の作成

まず最初に大枠の VPC から作成します。

 

 

左側ペインより「リソースタイプ」「EC2」を選択します。

 

 

 

 

 

「VPC」を選択してドラッグ&ドロップします。

 

 

 

 

下図のように VPC が作成されることを確認します。

VPC の枠をクリックすることで VPC の枠を広げたり、形を変えることができます。

 

 

 

 

 

「VPC」を選択して下図のように「プロパティ」タブをクリックすると、細かく設定を入れることができます。

 

 

 

 

 

テンプレートの言語を「JSON」から「YAML」に変更することもできます。

 

 

 

 

Propertiesのカッコの中にカーソルを入れて「Ctrl+Space」を押下します。

 

 

 

 

 

「Ctrl+Space」を押下すると、設定できる項目一覧が表示されます。

AWS::EC2::VPC

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html

 

 

プロパティ設定後は下図のようになります。

 

 

■プロパティの内容

Resources: 
  EC2VPC5C7MU: 
    Type: 'AWS::EC2::VPC' 
    Properties: { 
        CidrBlock: 192.168.0.0/24 
        } 

 

 

 

 

 

Subnet の作成

次に Subnet(サブネット)を作成します。

 

左側ペインより「Subnet」を選択してドラッグ&ドロップします。

 

 

 

AWS::EC2::Subnet

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html

 

 

 

プロパティを入力すると「Designerが最新のものではないので、リフレッシュをクリックしてください。」と表示されるので、「リフレッシュ」ボタンをクリックします。

 

 

 

 

 

プロパティは以下のようになります。

 

 

 

 

■プロパティの内容

Resources: 
  EC2S1L2J3: 
    Type: 'AWS::EC2::Subnet' 
    Properties: 
      VpcId: !Ref EC2VPC5C7MU 
      CidrBlock: 192.168.0.0/24 

 

 

 

 

 

SecurityGroup の作成

次にセキュリティグループを指定します。

 

左側ペインより「SecurityGroup」をドラッグ&ドロップします。

 

 

下図のようにドラッグ&ドロップします。

 

 

AWS::EC2::SecurityGroup

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html

 

 

プロパティは以下のようになります。

 

 

 

■プロパティの内容

Resources:  
  EC2SGTIX1: 
    Type: 'AWS::EC2::SecurityGroup' 
    Properties: 
      GroupDescription: ssh login  
      VpcId: !Ref EC2VPC5C7MU 
      SecurityGroupIngress: 
      - IpProtocol: tcp 
        FromPort: 22 
        ToPort: 22 
        CidrIp: 0.0.0.0/0

 

 

 

設定すると下図のようにセキュリティグループと VPC が線でつながります。

 

 

 

 

 

EC2Instance の作成

次に CE2 インスタンスを作成します。

 

 

 

 

ドラッグ&ドロップすると下図のようになります。

 

 

 

 

AWS::EC2::Instance

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html

 

 

 

■イメージID

イメージ ID はインスタンスの作成時に AMI の ID が表示されるので、これをコピーします。

 

 

 

プロパティは以下のようになります。

 

 

 

■プロパティの内容

Resources: 
  EC2I3PIMR: 
    Type: 'AWS::EC2::Instance' 
    Properties: 
      ImageId: ami-096553c82f2f3fa8c 
      KeyName: basic-network 
      InstanceType: t3.micro 
      SubnetId: !Ref EC2S3ARYY 
      NetworkInterfaces: 
        - GroupSet: 
            - !Ref EC2SG3O51D 
          AssociatePublicIpAddress: 'true' 
          DeviceIndex: '0'

          SubnetId: !Ref 

 

 

 

下図のように EC2 インスタンスとセキュリティグループが線でつながります。

 

 

 

 

 

 

EIP の作成

次に EIP を作成します。

 

 

 

 

ドラッグ&ドロップすると下図のようになります。

 

 

 

AWS::EC2::EIP

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html

 

 

 

プロパティは以下のようになります。

 

 

 

 

■プロパティの内容

Resources: 
  EC2EIP50O02: 
    Type: 'AWS::EC2::EIP' 
    Properties: { 
        InstanceId: !Ref EC2I3PIMR 
        } 

 

 

 

下図のように EC2 インスタンスと線がつながります。

 

 

 

InternetGateway の作成

次にインターネットゲートウェイを作成します。

 

 

 

ドラッグ&ドロップすると下図のようになります。

 

 

 

AWS::EC2::InternetGateway

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html

 

 

 

InternetGateway の場合、プロパティは以下のように何もない状態になります。

 

 

 

■プロパティの内容

Resources: 
  EC2IG54PVV: 
    Type: 'AWS::EC2::InternetGateway' 
    Properties: {}

 

 

 

 

VPCGatewayAttachment の作成

次に VPCGatewayAttachment を作成します。

 

InternetGatewayの●にマウスを合わせ、VPCGatewayAttachmentを表示させます。

 

 

 

 

ドラッグして対象の VPC と接続させます。

 

 

AWS::EC2::VPCGatewayAttachment

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html

 

 

 

プロパティは以下のようになります。

 

■プロパティの内容

Resources: 
  EC2VPCG4UWYA: 
    Type: 'AWS::EC2::VPCGatewayAttachment' 
    Properties: 
      InternetGatewayId: !Ref EC2IG54PVV 
      VpcId: !Ref EC2VPCEWYP

 

 

 

 

 

RouteTable の作成

次にルートテーブルを作成します。

 

 

 

 

ドラッグすると下図のようになります。

 

 

 

 

AWS::EC2::RouteTable

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route-table.html

 

 

 

 

プロパティは以下のようになります。

 

 

■プロパティの内容

Resources: 
  EC2RTTEXK: 
    Type: 'AWS::EC2::RouteTable' 
    Properties: 
      VpcId: !Ref EC2VPCEWYP

 

 

 

 

 

Route の作成

次にルートを作成します。

 

 

 

ドラッグすると下図のようになります。

 

 

AWS::EC2::Route

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html

 

 

 

 

プロパティは以下のようになります。

 

 

 

■プロパティの内容

Resources: 
  EC2R3PAHH: 
    Type: 'AWS::EC2::Route' 
    Properties: 
      RouteTableId: !Ref EC2RT2N379 
      GatewayId: !Ref EC2IG54PVV 
      DestinationCidrBlock: 0.0.0.0/0

 

 

 

 

SubnetRouteTableAssociation の作成

ルートテーブルとサブネットを関連付ける「SubnetRouteTableAssociation」を作成します。

 

ルートテーブルの●をクリックして「SubnetRouteTableAssociation」を表示させます。

 

 

 

ドラッグ&ドロップしてサブネットに関連付けます。

 

 

プロパティは以下のようになります。

 

 

 

 

■プロパティの内容

Resources: 
  EC2SRTA11SO3: 
    Type: 'AWS::EC2::SubnetRouteTableAssociation' 
    Properties: 
      RouteTableId: !Ref EC2RT2N379 
      SubnetId: !Ref EC2S3ARYY

 

 

 

 

スタックの作成

設定が完了したらスタックを作成します。

 

 

数の「スタックの作成」アイコンをクリックします。

 

 

 

 

「スタックの作成」画面でテンプレートソースで「Amazon S3 URL」を選択して、S3 のパスが入っていることを確認し「次へ」ボタンをクリックします。

 

 

 

 

「スタックの詳細を指定」画面で「スタックの名前」を設定して「次へ」ボタンをクリックします。

 

 

 

 

「スタックオプションの設定」画面で必要なら設定して「次へ」ボタンをクリックします。

 

 

 

 

 

「スタックの作成」ボタンをクリックします。

 

 

 

 

 

 

下図のようにスタータスが「CREATE_COMPLETE」となることを確認します。

 

 

 

作成したスタックのテンプレート

参考例として今回作成したスタックのテンプレートです。

 

AWSTemplateFormatVersion: 2010-09-09 
Metadata: 
  'AWS::CloudFormation::Designer': 
    84ea3c02-9f7f-486c-b8ee-6df5705a4b3d: 
      size: 
        width: 480 
        height: 300 
      position: 
        x: 170 
        'y': 100 
      z: 0 
      embeds: 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
    a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00: 
      size: 
        width: 270 
        height: 170 
      position: 
        x: 340 
        'y': 160 
      z: 1 
      parent: 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
      embeds: 
        - cd0f272a-1388-4301-bde2-f0975eb7cf8d 
        - 07fe6cc5-2ae5-438b-aef3-66a17cb75dca 
      iscontainedinside: 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
    cd0f272a-1388-4301-bde2-f0975eb7cf8d: 
      size: 
        width: 60 
        height: 60 
      position: 
        x: 390 
        'y': 250 
      z: 2 
      parent: a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
      embeds: [] 
      iscontainedinside: 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
    07fe6cc5-2ae5-438b-aef3-66a17cb75dca: 
      size: 
        width: 60 
        height: 60 
      position: 
        x: 500 
        'y': 210 
      z: 2 
      parent: a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
      embeds: [] 
      iscontainedinside: 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
        - a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
    8ffd937f-f85f-4cd2-afab-15dc1c714f5b: 
      size: 
        width: 60 
        height: 60 
      position: 
        x: 700 
        'y': 240 
      z: 0 
      embeds: [] 
      isassociatedwith: 
        - 07fe6cc5-2ae5-438b-aef3-66a17cb75dca 
    49363f25-51c8-447d-acc8-cf6fcbfeff9c: 
      size: 
        width: 60 
        height: 60 
      position: 
        x: 70 
        'y': 220 
      z: 0 
      embeds: [] 
    53b7c6ed-45b2-4d9b-a8c9-8185c2e51b2e: 
      source: 
        id: 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
      target: 
        id: 49363f25-51c8-447d-acc8-cf6fcbfeff9c 
      z: 0 
    1297c55b-6ac3-4732-a61d-3a0f83cf2074: 
      size: 
        width: 120 
        height: 120 
      position: 
        x: 200 
        'y': 210 
      z: 1 
      parent: 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
      embeds: 
        - 296392af-72b6-47cd-8765-9de283b6cc2d 
      iscontainedinside: 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
        - 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
    296392af-72b6-47cd-8765-9de283b6cc2d: 
      size: 
        width: 60 
        height: 60 
      position: 
        x: 230 
        'y': 240 
      z: 2 
      parent: 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
      embeds: [] 
      isassociatedwith: 
        - 49363f25-51c8-447d-acc8-cf6fcbfeff9c 
      iscontainedinside: 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
        - 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
    6b3f58f8-61cb-4c31-aefc-33ca1d415527: 
      source: 
        id: 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
      target: 
        id: a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
      z: 3 
Resources: 
  EC2VPCEWYP: 
    Type: 'AWS::EC2::VPC' 
    Properties: 
      CidrBlock: 192.168.0.0/24 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 84ea3c02-9f7f-486c-b8ee-6df5705a4b3d 
  EC2S3ARYY: 
    Type: 'AWS::EC2::Subnet' 
    Properties: 
      VpcId: !Ref EC2VPCEWYP 
      CidrBlock: 192.168.0.0/24 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: a31b5f3d-bdb2-40b8-81ce-3e5bacc96e00 
  EC2SG3O51D: 
    Type: 'AWS::EC2::SecurityGroup' 
    Properties: 
      GroupDescription: ssh login 
      VpcId: !Ref EC2VPCEWYP 
      SecurityGroupIngress: 
        - IpProtocol: tcp 
          FromPort: 22 
          ToPort: 22 
          CidrIp: 0.0.0.0/0 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: cd0f272a-1388-4301-bde2-f0975eb7cf8d 
  EC2I3PIMR: 
    Type: 'AWS::EC2::Instance' 
    Properties: 
      ImageId: ami-07dd14faa8a17fb3e 
      KeyName: basic-network 
      InstanceType: t3.micro 
      NetworkInterfaces: 
        - GroupSet: 
            - !Ref EC2SG3O51D 
          AssociatePublicIpAddress: 'true' 
          DeviceIndex: '0' 
          SubnetId: !Ref EC2S3ARYY 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 07fe6cc5-2ae5-438b-aef3-66a17cb75dca 
  EC2EIP50O02: 
    Type: 'AWS::EC2::EIP' 
    Properties: 
      InstanceId: !Ref EC2I3PIMR 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 8ffd937f-f85f-4cd2-afab-15dc1c714f5b 
  EC2IG54PVV: 
    Type: 'AWS::EC2::InternetGateway' 
    Properties: {} 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 49363f25-51c8-447d-acc8-cf6fcbfeff9c 
  EC2VPCG4UWYA: 
    Type: 'AWS::EC2::VPCGatewayAttachment' 
    Properties: 
      InternetGatewayId: !Ref EC2IG54PVV 
      VpcId: !Ref EC2VPCEWYP 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 53b7c6ed-45b2-4d9b-a8c9-8185c2e51b2e 
  EC2RT2N379: 
    Type: 'AWS::EC2::RouteTable' 
    Properties: 
      VpcId: !Ref EC2VPCEWYP 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 1297c55b-6ac3-4732-a61d-3a0f83cf2074 
  EC2R3PAHH: 
    Type: 'AWS::EC2::Route' 
    Properties: 
      RouteTableId: !Ref EC2RT2N379 
      GatewayId: !Ref EC2IG54PVV 
      DestinationCidrBlock: 0.0.0.0/0 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 296392af-72b6-47cd-8765-9de283b6cc2d 
  EC2SRTA11SO3: 
    Type: 'AWS::EC2::SubnetRouteTableAssociation' 
    Properties: 
      RouteTableId: !Ref EC2RT2N379 
      SubnetId: !Ref EC2S3ARYY 
    Metadata: 
      'AWS::CloudFormation::Designer': 
        id: 6b3f58f8-61cb-4c31-aefc-33ca1d415527 

 

 

 

 

 

 

確認

EC2 インスタンス一覧を確認して新規で EC2 インスタンスが作成されていることを確認します。

 

 

 

 

ログイン確認

sshでログインできることを確認します。

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/ 
To register this system, run: insights-client --register 
 
[ec2-user@ip-192-168-0-181 ~]$ 
[ec2-user@ip-192-168-0-181 ~]$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa) 
[ec2-user@ip-192-168-0-181 ~]$

 

 

 

 

スタックのテンプレートをバックアップし、リストアする場合の手順です。

 

【AWS】CloudFormation のスタックのバックアップ及びリストア手順

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください