AWS Terraform VPCのステップバイステップの構築

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 architecture

AWS VPCはリージョンごとに制限されています。1つのVPCは複数のリージョンにまたがることはできず、1つのリージョンあたり最大5つのVPCがサポートされています。

AWS VPCのTerraform構成をビルドする

話は十分です、ビルドに取り掛かりましょう!

1. まず、Terraform構成ファイルを保存するためのフォルダを作成します。このチュートリアルでは、ホームディレクトリにterraform-vpc-demoというフォルダを作成します。

mkdir ~/terraform-vpc-demo
 cd ~/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を作成します。
Create the VPC
 resource "aws_vpc" "Main" {                # ここでVPCを作成します
   cidr_block       = var.main_vpc_cidr     # デモ用にCIDRブロックとして10.0.0.0/24を使用します
   instance_tenancy = "default"
 }
 Create Internet Gateway and attach it to VPC
 resource "aws_internet_gateway" "IGW" {    # インターネットゲートウェイを作成します
    vpc_id =  aws_vpc.Main.id               # VPCを作成した後にvpc_idが生成されます
 }
 Create a Public Subnets.
 resource "aws_subnet" "publicsubnets" {    # パブリックサブネットを作成します
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.public_subnets}"        # パブリックサブネットのCIDRブロック
 }
 Create a Private Subnet                   # プライベートサブネットを作成します
 resource "aws_subnet" "privatesubnets" {
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.private_subnets}"          # プライベートサブネットのCIDRブロック
 }
 Route table for Public Subnet's
 resource "aws_route_table" "PublicRT" {    # パブリックサブネット用のルートテーブルを作成します
    vpc_id =  aws_vpc.Main.id
         route {
    cidr_block = "0.0.0.0/0"               # パブリックサブネットからのトラフィックはインターネットゲートウェイを介してインターネットに到達します
    gateway_id = aws_internet_gateway.IGW.id
     }
 }
 Route table for Private Subnet's
 resource "aws_route_table" "PrivateRT" {    # プライベートサブネット用のルートテーブルを作成します
   vpc_id = aws_vpc.Main.id
   route {
   cidr_block = "0.0.0.0/0"             # プライベートサブネットからのトラフィックはNATゲートウェイを介してインターネットに到達します
   nat_gateway_id = aws_nat_gateway.NATgw.id
   }
 }
 Route table Association with Public Subnet's
 resource "aws_route_table_association" "PublicRTassociation" {
    subnet_id = aws_subnet.publicsubnets.id
    route_table_id = aws_route_table.PublicRT.id
 }
 Route table Association with Private Subnet's
 resource "aws_route_table_association" "PrivateRTassociation" {
    subnet_id = aws_subnet.privatesubnets.id
    route_table_id = aws_route_table.PrivateRT.id
 }
 resource "aws_eip" "nateIP" {
   vpc   = true
 }
 Creating the NAT Gateway using subnet_id and allocation_id
 resource "aws_nat_gateway" "NATgw" {
   allocation_id = aws_eip.nateIP.id
   subnet_id = aws_subnet.publicsubnets.id
 }

3. 続いて、~/terraform-vpc-demoディレクトリの中に別のファイルを作成し、vars.tfという名前を付け、以下の内容を貼り付けます。

vars.tfは、構成ファイルで参照されるすべての変数を含むTerraform変数ファイルです。

構成ファイル内で変数の参照を確認するには、以下を使用します:

  • var.region
  • var.main_vpc_cidr
  • var.public_subnets
  • var.private_subnets
variable "region" {}
 variable "main_vpc_cidr" {}
 variable "public_subnets" {}
 variable "private_subnets" {}

すべての構成値を単一の構成ファイルに含めることができます。開発者と管理者にわかりやすくし、簡単にするために、事を分けることが重要です。

4. ~/terraform-vpc-demoディレクトリ内にさらに1つのファイルを作成し、次のコードを貼り付け、provider.tfとして名前を付けてAWSプロバイダを定義します。チュートリアルでは、us-east-2リージョンにリソースを作成します。

プロバイダファイルは、AWS、Oracle、Azureなどのプロバイダを定義し、Terraformが正しいクラウドサービスに接続できるようにします。 provider "aws" { region = "us-east-2" }

provider "aws" {
   region = "us-east-2"
 }

5. 最後に、~/terraform-vpc-demoディレクトリ内にさらに1つのファイルを作成し、terraform.tfvarsという名前を付け、以下のコードを貼り付けます。この変数ファイルには、構成ファイル内の変数参照を置き換えるためにTerraformが使用する値が含まれています。

main_vpc_cidr = "10.0.0.0/24"
 public_subnets = "10.0.0.128/26"
 private_subnets = "10.0.0.192/26"

さて、お好きなターミナル(この場合はBash)を開き、以下のコマンドでフォルダに必要なすべてのファイルが含まれていることを確認してください。treeコマンドを実行します。

tree terraform-vpc-demo  
Folder structure of terraform files

AWS VPCを作成するためにTerraformを実行する

今、Terraform構成ファイルと変数ファイルが準備できましたので、Terraformを起動してVPCを作成する時が来ました! Terraform構成をプロビジョニングするために、Terraformは通常、次の3段階のアプローチを使用します terraform initterraform planterraform apply。それでは、各段階を詳しく見てみましょう。

1. ターミナルを開き、~\terraform-vpc-demoディレクトリに移動します。

cd ~\terraform-vpc-demo

2. 同じディレクトリでterraform initコマンドを実行します。 terraform initコマンドは、リソースとの作業に必要なプラグインとプロバイダを初期化します。

terraform init

すべてがうまくいけば、出力でメッセージTerraform has been successfully initializedが表示されるはずです。

Terraform initialized successfully

3. 次に、terraform planコマンドを実行します。これは、構成の構文が正しいことを確認し、インフラストラクチャにプロビジョンされるリソースの概要を把握するためのオプションです。 terraform plan

terraform plan

成功した場合、Plan: "X"を追加する、"Y"を変更する、または"Z"を破棄するのようなメッセージが出力されるはずです。また、Terraformが作成しようとしているすべてのAWSリソースが表示されます。

Plan command execution

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

terraform apply
Terraform apply command execution

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メニューアイテムをクリックします。

Navigating to the VPC service

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

VPC created

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

Subnets created
Route tables created
Internet Gateway created
NAT Gateway created

すべてのコンポーネントがTerraformを使用して正常に作成されたので、このVPCはすぐに使用できます!

結論

このチュートリアルでは、Terraformを使用してAWS VPCとそのコンポーネントを展開する方法を学びました。

Terraformを使用してAmazon Virtual Private Cloudを構築することで、リソースを迅速かつ簡単に予測可能に作成することができます。これで、この知識を他のAWSサービスと組み合わせて強力なサービスを構築する準備が整いました。

Source:
https://adamtheautomator.com/terraform-vpc/