CloudFormationを使ってVPCの構築を自動化

awsアプリケーション開発

当記事では、AWS CloudFormationを利用してVPC環境の構築を自動化する方法を紹介します。

Z-A-K-I
Z-A-K-I

少し設定値が違うだけのVPCを手動でいくつも設定する面倒だ!

と、思ってる方におすすめです。

この記事では、以下のことを紹介してます。

  • CloudFormationとは
  • AWS VPCとは
  • CloudFormationの自動化方法
  • CloudFormationの実行方法


昨今ではVPCに限らず、IaCでインフラを自動構築することがトレンドとなっています。今回はVPCを構築するCloudFormationを作成し、IaCがどんなものかを検証していきます

CloudFormationとは

AWSが提供する自動化サービスです。AWSのリソースを自動構築できます。

インフラの構築作業を自動化するIaC(Infrastructure as Code)を実現するサービスです。自動構築する対象のサービスや設定値はjsonやyaml形式のファイルで作成します。

Z-A-K-I
Z-A-K-I

IaCは、開発環境をベースに本番環境を自動で構築できるので、作業時間が削減できます。

CloudFormation自体の利用は無料で、CloudFormationで構築するリソースの料金のみがかかるサービスです。

AWS VPCとは

本記事で自動構築するVPCについて紹介します。

正式名称は「Amazon Virtual Private Cloud」です。このサービスはAWSが提供する仮想ネットワーク環境のサービスです。

クラウドネイティブ開発者からするとイメージつかないかもしれませんが、仮想ネットワークという技術が登場する前は、データセンターにルーターを配置し、ネットワーク内のサーバにアクセスできるように設定する必要がありました。

物理的な場所で物理的なルーターを配置・設定し、設定作業を現地で実施する必要がありましたが、仮想ネットワークの技術の登場でブラウザを介してリモートで構築することができます。

詳細は下記AWSの公式サイトを参照ください。

【公式】Amazon VPCとは(仮想ネットワーク内での AWS リソースの起動)| AWS
Amazon Virtual Private Cloud (VPC) は、定義した論理的に分離された仮想ネットワークで AWS リソースを起動できるようにするサービスです。

AWS Console上で実際に作ってみる

CloudFormationを利用する前に、構築対象のサービスであるVPCにどんな設定項目があるかを確認してみます。

自動化する前に、AWS Management Consoleから手動でVPCを作成してみます。

VPCの設定

作成の目的としては、設定項目がどんなものかを確認することなので、一部をのぞいてデフォルト設定で作成していきます。VPC関連のリソース一式を作るので、以下の項目のみ変更します。

変更値は以下です。

  • 項目「作成するリソース」を「VPC」から「VPCなど」に変更します。
  • 項目「アベイラビリティゾーン」を「2」から「1」に変更します。

パブリックサブネット、プライベートサブネットはひとつずつで作成します。(デフォルトと同じ)
DBS関連も有効状態とします。(デフォルトと同じ)

上記設定でVPCを作成すると以下画像の通り関連するリソースが自動で生成されます。

作成するリソースを「VPCなど」で作成するとメインルートテーブル、メインネットワークACLの一式が作成されます。

Cloud Formationを使ってVPCを作る

本記事の本題となるCloudFormationの検証です。

CloudFormationを使うことで、複数台のサーバやネットワークの設定作業を自動化できるようになり、作業時間を削減でき、ヒューマンエラーによる設定ミスを防止することができるようになります。

AWSのサイトで使い方を確認する

まずは使い方を確認します。

AWS ConsoleでCloudFormationのサービスに移動します。

「スタックの作成」ボタンを押下し、CloudFormationのコードを作成していきます。

作成する時には以下の3種類のうち一つを選択することができます。

1. 自分が保持しているテンプレートの利用
2. サンプルテンプレートを使用
3. 自分で独自テンプレートを作成

今回は検証目的のため、AWSが提供しているサンプルテンプレートを使って作成していきます。

ドロップダウンには以下のサンプルの選択肢があります。

目的のVPCのサンプルがなかったので「その他のサンプルテンプレートを表示する」のリンクを確認します。以下のAWS公式サイトにその他の情報も色々記載されています。

CloudFormation のテンプレート

ChatGPTに作ってもらう

AWSサイトのドキュメントを軽く読むとJSON形式で作ると言うことはわかったのですが、初学者にとって実際に作るにはドキュメントをじっくり読まないとむずかしそうです。

なのでChatGPTにまずは作成してもらい、それをカスタマイズして目的のコードを完成させることにします。
以下のプロンプトで作ってもらいます。

プロンプト文

AWS CloudFormationでAWS VPCを自動生成するJSON形式のサンプルを作成して欲しい。
作成するVPCの設定は、AWSConsole上で作成するリソースで「VPCなど」を選択した時に生成される設定内容を作成して欲しい。

ChatGPTからの返答

AWS CloudFormationでAWS VPCを自動生成するためのJSON形式のサンプルを作成します。以下の設定は、AWS Management Console上でVPCを作成する際に選択する一般的な設定を基にしています。

{
  "Resources": {
    "MyVPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsHostnames": true,
        "EnableDnsSupport": true,
        "InstanceTenancy": "default",
        "Tags": [
          {
            "Key": "Name",
            "Value": "MyVPC"
          }
        ]
      }
    },
    "MySubnet": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {
          "Ref": "MyVPC"
        },
        "CidrBlock": "10.0.0.0/24",
        "AvailabilityZone": "us-east-1a,
        "Tags": [
          {
            "Key": "Name",
            "Value": "MySubnet"
          }
        ]
      }
    },
    "MyInternetGateway": {
      "Type": "AWS::EC2::InternetGateway",
      "Properties": {
        "Tags": [
          {
            "Key": "Name",
            "Value": "MyInternetGateway"
          }
        ]
      }
    },
    "MyAttachGateway": {
      "Type": "AWS::EC2::VPCGatewayAttachment",
      "Properties": {
        "VpcId": {
          "Ref": "MyVPC"
        },
        "InternetGatewayId": {
          "Ref": "MyInternetGateway"
        }
      }
    }
  }
}

このサンプルでは、以下のリソースを作成します。

  1. VPC (MyVPC)
  • CIDRブロック: 10.0.0.0/16
  • DNSホスト名を有効にする
  • DNSサポートを有効にする
  • インスタンステナンシー: デフォルト
  • タグ: Name=MyVPC
  1. サブネット (MySubnet)
  • VPC ID: MyVPC の参照
  • CIDRブロック: 10.0.0.0/24
  • 利用可能なアベイラビリティゾーン: us-east-1a
  • タグ: Name=MySubnet
  1. インターネットゲートウェイ (MyInternetGateway)
  • タグ: Name=MyInternetGateway
  1. VPCゲートウェイアタッチメント (MyAttachGateway)
  • VPC ID: MyVPC の参照
  • インターネットゲートウェイ ID: MyInternetGateway の参照

これにより、VPC、サブネット、インターネットゲートウェイが作成され、VPCとインターネットゲートウェイがアタッチされます。このサンプルは必要に応じて拡張やカスタマイズが可能です。

CloudFormationの実行方法

CloudFormationの実行方法は二通り存在します。

AWS Console上で実行する方法と、AWS CLIを利用したコマンドで実行する方法です。
今回はAWS Console上で実行してみます。「スタックの作成」=「CloudFormationの実行」という位置付けらしいです。

以下の流れで実行します。

1.作成してもらったコードをS3上にアップロードする

上記のコードをS3にアップロードしておきます。

2. AWS Console上でVPCのメニューからスタックを作成する

AWS Console上でスタックを作成(=CloudFormationの実行)していきます。

作成したスタックを実行する

AWSコンソール上でCloudFormationのサービスに移動し実行します。

ChatGPTにテンプレートを準備してもらったので「テンプレートの準備完了」を選択します。

テンプレートの指定に、アップロードしたs3オブジェクトのURLを指定します。

スタック名を入力して「次へ」ボタンをクリックします。

オプションが色々設定できますが、全てデフォルトで「次へ」ボタンをクリックします。

最後に設定内容がプレビューされるので問題なければ「送信」ボタンをクリックします。

これでCloudFormationが実行されます。

作成状況は、以下画像のように確認できます。

更新マークを押すと最新の情報が確認できます。

失敗したらしいです。

失敗時には、イベントタブの情報から、失敗した原因を確認します。

Subnetの作成とインターネットゲートウェイの作成で失敗してます。

ログを確認すると、アベイラビリティゾーンの設定が間違えてるみたいでした。以下のように修正し、再度コードを実行します。

{
    "Resources": {
      "MyVPC": {
        "Type": "AWS::EC2::VPC",
        "Properties": {
          "CidrBlock": "10.0.0.0/16",
          "EnableDnsHostnames": true,
          "EnableDnsSupport": true,
          "InstanceTenancy": "default",
          "Tags": [
            {
              "Key": "Name",
              "Value": "MyVPC"
            }
          ]
        }
      },
      "MySubnet": {
        "Type": "AWS::EC2::Subnet",
        "Properties": {
          "VpcId": {
            "Ref": "MyVPC"
          },
          "CidrBlock": "10.0.0.0/24",
          "AvailabilityZone": "ap-northeast-1a",
          "Tags": [
            {
              "Key": "Name",
              "Value": "MySubnet"
            }
          ]
        }
      },
      "MyInternetGateway": {
        "Type": "AWS::EC2::InternetGateway",
        "Properties": {
          "Tags": [
            {
              "Key": "Name",
              "Value": "MyInternetGateway"
            }
          ]
        }
      },
      "MyAttachGateway": {
        "Type": "AWS::EC2::VPCGatewayAttachment",
        "Properties": {
          "VpcId": {
            "Ref": "MyVPC"
          },
          "InternetGatewayId": {
            "Ref": "MyInternetGateway"
          }
        }
      }
    }
  }
  

今度は成功しました。

CloudFormationの実行が成功したので、作成されたVPCを確認してみます。

ChatGPTに作成してもらったコードでは、PrivateSubnetの作成コードが書いてなかったのでPublicSubnetのみの作成となっていますがいい感じに作成できてます。

あとはPrivateSubnetの設定など、追加の内容をChatGPTに依頼していけば目的のコードの作成まで辿り着けそうです。

まとめ

CloudFormationを使ってVPCの構築を自動化する方法のまとめ

本記事では、AWS CloudFormationを利用してVPCを自動構築する方法について紹介しました。

IaCを利用することで、一度自動化のリソースを作成してしまえば、VPCなどのインフラの構築作業を省力化できます。

本記事が皆様の参考になれば幸いです。

この記事を書いた人
z_a_k_i

z_a_k_iと申します。

富山でITエンジニアとして働いています。
0歳児と3歳児を持つ30代メンズです。

このブログでは、以下の内容を紹介しています。

 ⚫︎アプリケーション開発
 ⚫︎富山県の情報発信

皆様に役立つ内容を紹介できるよう精進していきますので、
どうぞよろしくお願いします。

z_a_k_iをフォローする
awsアプリケーション開発

コメント