🍣

Terraformのsubnet用のモジュール

2023/10/26に公開

subnetのモジュールファイル

subnet.tfファイル
# Public サブネットを作成
resource "aws_subnet" "public" {
  count = length(var.public_subnets)  # 公開サブネットの数だけリソースを作成
  vpc_id                  = var.vpc_id  # VPC ID
  cidr_block              = var.public_subnets[count.index].cidr  # CIDR ブロック
  availability_zone       = var.public_subnets[count.index].az  # 利用可能ゾーン
  map_public_ip_on_launch = true  # EC2 インスタンスにパブリック IP を自動割り当て

  tags = {
    Name = var.public_subnets[count.index].name  # タグ名
  }
}

# Protected サブネットを作成
resource "aws_subnet" "protected" {
  count = length(var.protected_subnets)  # 保護されたサブネットの数だけリソースを作成
  vpc_id                  = var.vpc_id  # VPC ID
  cidr_block              = var.protected_subnets[count.index].cidr  # CIDR ブロック
  availability_zone       = var.protected_subnets[count.index].az  # 利用可能ゾーン

  tags = {
    Name = var.protected_subnets[count.index].name  # タグ名
  }
}

# Datastore サブネットを作成
resource "aws_subnet" "datastore" {
  count = length(var.datastore_subnets)  # データストアサブネットの数だけリソースを作成
  vpc_id                  = var.vpc_id  # VPC ID
  cidr_block              = var.datastore_subnets[count.index].cidr  # CIDR ブロック
  availability_zone       = var.datastore_subnets[count.index].az  # 利用可能ゾーン

  tags = {
    Name = var.datastore_subnets[count.index].name  # タグ名
  }
}

variables.tfファイル
# VPCのID
variable "vpc_id" {
  description = "VPCのID"
  type        = string
}

# Publicサブネットの設定
variable "public_subnets" {
  description = "Publicサブネットの設定"
  type        = list(object({ name = string, cidr = string, az = string }))
}

# Protectedサブネットの設定
variable "protected_subnets" {
  description = "Protectedサブネットの設定"
  type        = list(object({ name = string, cidr = string, az = string }))
}

# Datastoreサブネットの設定
variable "datastore_subnets" {
  description = "Datastoreサブネットの設定"
  type        = list(object({ name = string, cidr = string, az = string }))
}


output.tfファイル
# PublicサブネットIDを出力
output "public_subnet_ids" {
  value = aws_subnet.public[*].id
}

# ProtectedサブネットIDを出力
output "protected_subnet_ids" {
  value = aws_subnet.protected[*].id
}

# DatastoreサブネットIDを出力
output "datastore_subnet_ids" {
  value = aws_subnet.datastore[*].id
}


providers.tfファイル
# 必要なプロバイダとそのバージョンを定義
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"  // AWSプロバイダのソース
      version = "~> 5.0"          // バージョン指定
    }
  }
}

# AWSプロバイダの設定
provider aws {
  region = "ap-northeast-1"  // AWSリージョン(東京リージョン)
}


README.mdファイル

subnet.tfファイル

項目 説明
aws_subnet AWSのサブネットを定義するTerraformリソースです。
count サブネットを作成する数を指定します。var.public_subnetsの要素数に依存します。
vpc_id このサブネットが所属するVPCのIDを指定します。
cidr_block サブネットのCIDRブロックを指定します。
availability_zone サブネットが存在するAWSの可用性ゾーン(AZ)を指定します。
map_public_ip_on_launch 新しいインスタンスに公開IPアドレスを自動割り当てるかどうかを指定します。

variables.tfファイル

項目 説明
variable 外部から値を受け取るための変数定義です。
type 受け取る変数のデータ型を定義します。例えば、stringlistなど。
description 変数の説明です。これはオプションであり、文書化に役立ちます。

output.tfファイル

項目 説明
output Terraformが適用(apply)された後に出力する値を定義します。
value 出力する値を指定します。ここでは各サブネットのIDを出力しています。

Discussion