AWS Virtual Private Cloud (VPC)を設定する必要がある場合、AWS Management Consoleを使用して設定することもできますが、自動化することの方がはるかに楽しいです! DevOpsシナリオでは、Terraformのようなツールを使用してAWSサービスを構築することは、クラウドリソースのプロビジョニングにおいてよりスケーラブルで自動化されたアプローチです。
このチュートリアルでは、Terraform構成をビルドして実行し、ゼロからTerraform VPCを構築する方法を学びます!
前提条件
この記事はステップバイステップのチュートリアルです。一緒に進める場合は、以下のものが準備されていることを確認してください:
- Terraform – このチュートリアルでは、Ubuntu 18.04.5 LTSで動作するTerraform v0.14.9を使用しますが、Terraformがインストールされている任意のオペレーティングシステムで動作します。
- A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.
AWS VPCの理解
AWSクラウドには、コンピューティング、ストレージ、ネットワーキングなど、さまざまなサービスがあります。これらのサービスは、オンプレミスのデータセンターのサービスと同様に互いに通信することができますが、それぞれのサービスは互いに独立しており、他のサービスから必ずしも隔離されているわけではありません。AWS VPCはこれを変えます。
AWS VPCは、単一のネットワークであり、単一の隔離されたネットワーク内でAWSサービスを起動することができます。技術的には、AWS VPCはデータセンターを所有しているのとほぼ同じですが、スケーラビリティ、障害耐性、無制限のストレージなど、組み込まれた追加の利点があります。

AWS VPCはリージョンごとに制限されています。1つのVPCは複数のリージョンにまたがることはできず、1つのリージョンあたり最大5つのVPCがサポートされています。
AWS VPCのTerraform構成をビルドする
話は十分です、ビルドに取り掛かりましょう!
1. まず、Terraform構成ファイルを保存するためのフォルダを作成します。このチュートリアルでは、ホームディレクトリにterraform-vpc-demoというフォルダを作成します。
2. 好きなコードエディタを開き、以下の構成をコピー&ペーストし、main.tfという名前で~/terraform-vpc-demoディレクトリに保存します。作成する各リソースの情報はインラインで提供されます。
main.tfファイルには、プロビジョニングする必要のあるすべてのリソースが含まれています。
Terraformは、いくつかの異なる種類の構成ファイルを使用します。各ファイルは、プレーンテキスト形式またはJSON形式で書かれています。それらは、.tfまたは.tfjson形式の特定の命名規則を持っています。
以下は、Terraformの構成です:
- VPCを作成
- Internet Gatewayを作成し、VPCにアタッチして、VPC内のトラフィックが外部から到達可能になるようにします。
- パブリックおよびプライベートサブネットを作成します
サブネットは、ネットワーク内のネットワークです。これらは、ネットワークトラフィックの流れをより効率的にするために設計されており、より小さな、より管理しやすいIPアドレスの「かたまり」を提供します。
- パブリックおよびプライベートサブネット用のルートテーブルを作成し、テーブルを両方のサブネットに関連付けます
- プライベートサブネットが各リソースに外部から到達可能なIPアドレスを割り当てる必要なくインターネットに到達できるように、NAT Gatewayを作成します。
3. 続いて、~/terraform-vpc-demoディレクトリの中に別のファイルを作成し、vars.tfという名前を付け、以下の内容を貼り付けます。
vars.tfは、構成ファイルで参照されるすべての変数を含むTerraform変数ファイルです。
構成ファイル内で変数の参照を確認するには、以下を使用します:
var.region
var.main_vpc_cidr
var.public_subnets
var.private_subnets
すべての構成値を単一の構成ファイルに含めることができます。開発者と管理者にわかりやすくし、簡単にするために、事を分けることが重要です。
4. ~/terraform-vpc-demoディレクトリ内にさらに1つのファイルを作成し、次のコードを貼り付け、provider.tfとして名前を付けてAWSプロバイダを定義します。チュートリアルでは、us-east-2
リージョンにリソースを作成します。
プロバイダファイルは、AWS、Oracle、Azureなどのプロバイダを定義し、Terraformが正しいクラウドサービスに接続できるようにします。
provider "aws" { region = "us-east-2" }
5. 最後に、~/terraform-vpc-demoディレクトリ内にさらに1つのファイルを作成し、terraform.tfvarsという名前を付け、以下のコードを貼り付けます。この変数ファイルには、構成ファイル内の変数参照を置き換えるためにTerraformが使用する値が含まれています。
さて、お好きなターミナル(この場合はBash)を開き、以下のコマンドでフォルダに必要なすべてのファイルが含まれていることを確認してください。tree
コマンドを実行します。

AWS VPCを作成するためにTerraformを実行する
今、Terraform構成ファイルと変数ファイルが準備できましたので、Terraformを起動してVPCを作成する時が来ました! Terraform構成をプロビジョニングするために、Terraformは通常、次の3段階のアプローチを使用します terraform init → terraform plan → terraform apply。それでは、各段階を詳しく見てみましょう。
1. ターミナルを開き、~\terraform-vpc-demoディレクトリに移動します。
2. 同じディレクトリでterraform init
コマンドを実行します。 terraform init
コマンドは、リソースとの作業に必要なプラグインとプロバイダを初期化します。
すべてがうまくいけば、出力でメッセージTerraform has been successfully initialized
が表示されるはずです。

3. 次に、terraform plan
コマンドを実行します。これは、構成の構文が正しいことを確認し、インフラストラクチャにプロビジョンされるリソースの概要を把握するためのオプションです。 terraform plan
成功した場合、Plan: "X"を追加する、"Y"を変更する、または"Z"を破棄する
のようなメッセージが出力されるはずです。また、Terraformが作成しようとしているすべてのAWSリソースが表示されます。

4. 次に、Terraformに実際にAWS VPCおよびリソースのプロビジョニングを指示します。 terraform apply
を使用します。 terraform apply
を呼び出すと、Terraformは構成(main.tf)とその他のファイルを読み取り、構成をコンパイルします。それから、その構成をAWSに送信して、VPCおよびその他のコンポーネントの構築の指示を行います。

Terraformの出力で定義されたIDに注意してください。次のセクションで作成されたリソースとの関連付けにこれらのIDが必要になります。
Terraformコマンドが正常に実行されたので、AWS Management Consoleに切り替えて、VPCとコンポーネントが正常に作成されたことを確認しましょう。
AWS Terraform VPCの検証
これまでに、TerraformでVPCを作成しているはずです。AWS Management ConsoleでVPCを手動で確認してみましょう。
1. 好きなWebブラウザを開き、AWS Management Consoleに移動し、ログインします。
2. コンソール内で、上部の検索バーをクリックし、’vpc’を検索し、VPCメニューアイテムをクリックします。

3. VPCページに移動したら、Your VPCsをクリックします。以前にTerraformが返したIDと同じIDでVPCが作成されているはずです。

4. TerraformがVPCリソースだけでなく、VPCに必要なすべてのリソースを作成したため、このページでそれぞれのリソースを見つける必要があります。




すべてのコンポーネントがTerraformを使用して正常に作成されたので、このVPCはすぐに使用できます!
結論
このチュートリアルでは、Terraformを使用してAWS VPCとそのコンポーネントを展開する方法を学びました。
Terraformを使用してAmazon Virtual Private Cloudを構築することで、リソースを迅速かつ簡単に予測可能に作成することができます。これで、この知識を他のAWSサービスと組み合わせて強力なサービスを構築する準備が整いました。