[小ネタ]パブリックサブネットとプライベートサブネットを持つVPCのテンプレートを作ってみた

最近はサーバレスアーキテクチャが増え、VPCを意識せずに環境構築できるケースが多いです。AWS環境からインターネット経由で別のサーバにアクセスする場合等には、依然としてVPCが必要です。VPC構築用のCloud Formationテンプレートをご紹介します。
2021.11.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部の藤川です。

AWS公式ページに、パブリックサブネットとプライベートサブネットを持つ VPC (NAT) - Amazon Virtual Private Cloudがあります。 が、図の紹介までで、Cloud Formationテンプレートは紹介されていません。 最近はサーバレスなのでVPCを意識しなくても構築できるケースが多くなりましたが、AWS環境からインターネットや別のVPCにアクセスするLambda(俗称、VPC Lambda)でテストする場合には、やはり必要です。

あると便利なので、筆者が普段検証用に使用しているVPC構築用のCloud Formationテンプレートをご紹介したいと思います。

概要

パブリックサブネットとプライベートサブネットを持つ VPC (NAT) - Amazon Virtual Private Cloudを参考に、次の図のようなVPC環境を構築します。
なお、VPC構築用のCloud Formationテンプレートファイルは、こちらにあります。

パブリックサブネットとプライベートサブネットを持つVPC(NAT)

  • NatSG
    • Inbound rules
      タイプ プロトコル ポート範囲 ソース
      すべてのトラフィック すべて すべて SecureSG
      SSH TCP 22 0.0.0.0/0
    • Outbound rules
      タイプ プロトコル ポート範囲 送信先
      すべてのトラフィック すべて すべて 0.0.0.0/0
  • DmzSG

    • Inbound rules
      タイプ プロトコル ポート範囲 ソース
      HTTPS TCP 443 0.0.0.0/0
      SSH TCP 22 NatSG
    • Outbound rules

      タイプ プロトコル ポート範囲 送信先
      すべてのトラフィック すべて すべて 0.0.0.0/0
  • SecureSG

    • Inbound rules
      タイプ プロトコル ポート範囲 ソース
      HTTP TCP 80 DmzSG
      SSH TCP 22 NatSG
    • Outbound rules

      タイプ プロトコル ポート範囲 送信先
      すべてのトラフィック すべて すべて 0.0.0.0/0

手順

キーペアを作成

  1. AWSマネジメントコンソールからキーペアを作成します。既存のキーペアでも構いません。
  2. キーペア名を控えておきます。

スタックを作成

テンプレートからスタックを作成

  1. AWSマネジメントコンソールからスタックを作成します。
  2. または、次のAWS CLIコマンドでスタックを作成します。ParameterValueを控えておいたキーペア名に置換します。

    aws cloudformation create-stack --stack-name MyVpc --template-body file://myvpc.template \
        --parameters ParameterKey='KeyName',ParameterValue='HOGEHOGE' \
        --profile HOGEHOGE

スタック作成後の手動作業

CFn(Cloud Formation)テンプレートでMainRouteTableを編集できないため、NATインスタンスIDを手動で登録します。
※参考:AWS CloudFormation を使い、メイン VPC ルートテーブルにルートを追加する

  1. AWSマネジメントコンソールを開きます。
  2. VPCを開きます。
  3. 作成したVPCのVPC IDリンクをクリックします。
  4. メインルートテーブルに表示されているルートテーブルIDリンクをクリックします。
  5. ルートテーブルIDリンクをクリックします。
  6. ルートを編集ボタンをクリックします。
  7. ルートを追加(Add route)ボタンをクリックします。
  8. 0.0.0.0/0を選択します。
  9. インスタンス(Instance)を選択し、表示されるNATインスタンスIDを選択します。
  10. 変更を保存ボタンをクリックします。

NatInstanceを設定

  1. SCPコマンド等でキーペアファイルをNatInstance~/.sshディレクトリにアップロードします。
  2. sshクライアントでNatInstanceパブリックIPv4アドレスにSSH接続します。
  3. キーペアファイルのパーミッションを変更します。
    chmod 600 ~/.ssh/HOGEHOGE.pem
  4. セキュリティのため、NatInstanceのパッケージを最新化しておきましょう。
    sudo yum -y update

スタックを削除

使い終わった場合、次の手順でスタックを削除できます。

  1. AWSマネジメントコンソールからスタックを削除します。
  2. または、次のAWS CLIコマンドでスタックを削除します。
    aws cloudformation delete-stack --stack-name MyVpc --profile HOGEHOGE

さいごに

今回ご紹介したCloud Formationテンプレートは、NATインスタンスを使用しています。
NATインスタンス用のAMIが提供されていますが、今後はAWSから更新版AMIが提供されなくなります。古いAMIを使用し続けることはセキュリティ上好ましくありません。
また、NATインスタンスに替えて、AWSからはNAT Gatewayの利用が推奨されています。NAT Gatewayを導入することで、スタック作成後の手動作業は不要になり、さらに簡単にVPC環境を構築できます。
いずれ、NAT Gatewayを導入したVPCを構築するCloud Formationテンプレートをご紹介したいと思います。