LoginSignup
0
0

Terraformでネットワークを作成 module使用

Posted at

はじめに

初めまして、こうへいです。今回からTerraformの記事を作成していきます。
Terraformを用いてAWSのアーキテクチャを構築することで、AWSのコンソールから確認することなくコードを見るだけでAWSの構成がわかるので、非常に便利だと思います。

記事の概要

TerraformでAWSのネットワークを作成したいと思います。今回はRegistryにあるmoduleを使用します。

記事執筆の背景

趣味でregistryのmoduleを使用してネットワークを作成しようとしたときに、
せっかくなら記事にしてみようと考えました。

想定読者

  • AWSのネットワークをTerraformで構築しようと考えてる方
  • registryのmoduleを使用して、構築したい方

今回作成するアーキテクチャ

ネットワーク.png

今回作成するAWSリソース

  • VPC
  • Subnet
  • Route-Table
  • Internet-Gateway
  • Elastic-Ip
  • Nat-Gateway

ディレクトリ構成

.
├── modules
│   └── network
│       └── main.tf # networkを作成
└── provider.tf # networkのmoduleを呼び出し

Terraformのコードと解説

provider.tfではこのようにnetworkのmoduleを呼び出しています。

provider.tf
terraform {
  required_version = "1.3.9"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~>5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

module "network" {
  source = "./modules/network"
}

modules/network/main.tfではこのようなコードを作成しました。

modules/network/main.tf
module "network" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.1.1"

  cidr                    = "10.0.0.0/24"                              # VPCのcidr
  azs                     = ["ap-northeast-1a", "ap-northeast-1c"]     # 展開するAZ
  public_subnets          = ["10.0.0.0/26", "10.0.0.64/26"]            # public-subnetのcidr
  private_subnets         = ["10.0.0.128/26", "10.0.0.192/26"]         # private-subnetのcidr
  public_subnet_names     = ["public-subnet-1a", "public-subnet-1c"]   # public-subnetの名前
  private_subnet_names    = ["private-subnet-1a", "private-subnet-1c"] # private-subnetの名前
  enable_dns_hostnames    = true                                       # DNSホスト名を有効化
  enable_dns_support      = true                                       # DNS解決を有効化
  enable_nat_gateway      = true                                       # NatGatewayを有効化
  one_nat_gateway_per_az  = true                                       # 1AZに対してNatGatewayを作成
  map_public_ip_on_launch = true                                       # publicサブネットにIPv4を自動割り当てる

  vpc_tags                 = { Name = "vpc" }
  public_route_table_tags  = { Name = "route-table-public" }
  private_route_table_tags = { Name = "route-table-private" }
  igw_tags                 = { Name = "internet-gateway" }
  nat_gateway_tags         = { Name = "nat-gateway" }
  nat_eip_tags             = { Name = "elatic-ip" }
}
コード解説
  • cidr : VPCのcidr
  • azs : 展開するAZ名
  • public_subnets : public-subnetのcidr
  • private_subnets : private-subnetのcidr
  • public_subnet_names : public-subnetの名前
  • private_subnet_names : private-subnetの名前
  • enable_dns_hostnames : DNSホスト名を有効化
  • enable_dns_support : DNS解決を有効化
  • enable_nat_gateway : NatGatewayを有効化
  • one_nat_gateway_per_az : 1AZに対してNatGatewayを作成
  • map_public_ip_on_launch : publicサブネットにIPv4を自動割り当てる

Nat-GatewayをAZごとに作成するのではなく、
一つしか作成したくないという場合はこのようにコードを書くと作成できます。

Nat-Gatewayを1つしか作成しない
  enable_dns_hostnames    = true                                       # DNSホスト名を有効化
  enable_dns_support      = true                                       # DNS解決を有効化
  enable_nat_gateway      = true                                       # NatGatewayを有効化
  one_nat_gateway_per_az  = false                                      # 1AZに対してNatGatewayを作成しない
  single_nat_gateway      = true                                       # NatGatewayを1つしか作成しない
  map_public_ip_on_launch = true                                       # publicサブネットにIPv4を自動割り当てる

振り返り

今回はRegistryにあるmoduleを使用してネットワークを作成しました。
NatGatewayは料金がかかりますので、不要なら必ずリソースを削除してください。

こちらのサイトを元に料金計算すると、1つのNatGatewayあたり6,703円かかりますのでご注意ください。(2023/9/10現在)

今回作成したgithubのリポジトリ : https://github.com/hikobend/terraform-qiita
ブランチ : https://github.com/hikobend/terraform-qiita/pull/1

今後作成予定の記事

  • セキュリティグループの作成
  • Terraform Plan ・ ApplyのCIを作成
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0