💬

TerraformでAWSのリソースを一通り構築

2023/10/30に公開

TerraformでAWSを一通り構築

AWSのCloud9環境でTerraformでAWSを一通り構築してみました〜

※各➤をクリックすると詳細のコマンドやファイルの中身がみれます。

環境構築(cloud9でTerraformの環境を導入)

詳しい内容はリンクの記事を参考にしてください。
Cloud9でTerraformの実行環境の導入

環境構築用のコマンド
#!/bin/bash

git clone https://github.com/tfutils/tfenv.git ~/.tfenv
sudo ln -s ~/.tfenv/bin/* /usr/local/bin
tfenv install 1.5.7
tfenv use 1.5.7
mkdir sample-terraform && cd sample-terraform
touch README.md

Terraformで作成できるAWS構成図

erraformで作成できるAWS構成図

ディレクトリとファイルをまとめて作成

ディレクトリ構造
.
├── env  # 環境ごとの設定を格納するディレクトリ
│   ├── development  # 開発環境用のディレクトリ
│   │   ├── main.tf  # 開発環境のメイン設定ファイル
│   │   ├── backend.tf  # 開発環境のバックエンド設定ファイル
│   │   └── README.md  # 開発環境用のREADME
│   ├── staging  # ステージング環境用のディレクトリ
│   │   ├── main.tf  # ステージング環境のメイン設定ファイル
│   │   ├── backend.tf  # ステージング環境のバックエンド設定ファイル
│   │   └── README.md  # ステージング環境用のREADME
│   └── production  # 本番環境用のディレクトリ
│       ├── main.tf  # 本番環境のメイン設定ファイル
│       ├── backend.tf  # 本番環境のバックエンド設定ファイル
│       └── README.md  # 本番環境用のREADME
└── modules  # モジュールを格納するディレクトリ
    ├── vpc  # VPC関連の設定を格納するディレクトリ
    │   ├── vpc.tf  # VPCのメイン設定ファイル
    │   ├── variables.tf  # VPCの変数設定ファイル
    │   ├── outputs.tf  # VPCの出力設定ファイル
    │   ├── providers.tf  # VPCのプロバイダー設定ファイル
    │   └── README.md  # VPC用のREADME
    ├── subnet  # サブネット関連の設定を格納するディレクトリ
    │   ├── subnet.tf  # サブネットのメイン設定ファイル
    │   ├── variables.tf  # サブネットの変数設定ファイル
    │   ├── outputs.tf  # サブネットの出力設定ファイル
    │   ├── providers.tf  # サブネットのプロバイダー設定ファイル
    │   └── README.md  # サブネット用のREADME
    ├── route-table  # ルートテーブル関連の設定を格納するディレクトリ
    │   ├── route-table.tf  # ルートテーブルのメイン設定ファイル
    │   ├── variables.tf  # ルートテーブルの変数設定ファイル
    │   ├── outputs.tf  # ルートテーブルの出力設定ファイル
    │   ├── providers.tf  # ルートテーブルのプロバイダー設定ファイル
    │   └── README.md  # ルートテーブル用のREADME
    ├── vpc-endpoint  # VPCエンドポイント関連の設定を格納するディレクトリ
    │   ├── vpc-endpoint.tf  # VPCエンドポイントのメイン設定ファイル
    │   ├── variables.tf  # VPCエンドポイントの変数設定ファイル
    │   ├── outputs.tf  # VPCエンドポイントの出力設定ファイル
    │   ├── providers.tf  # VPCエンドポイントのプロバイダー設定ファイル
    │   └── README.md  # VPCエンドポイント用のREADME
    ├── internet-gateway  # インターネットゲートウェイ関連の設定を格納するディレクトリ
    │   ├── internet-gateway.tf  # インターネットゲートウェイのメイン設定ファイル
    │   ├── variables.tf  # インターネットゲートウェイの変数設定ファイル
    │   ├── outputs.tf  # インターネットゲートウェイの出力設定ファイル
    │   ├── providers.tf  # インターネットゲートウェイのプロバイダー設定ファイル
    │   └── README.md  # インターネットゲートウェイ用のREADME
    ├── nat-gateway  # NATゲートウェイ関連の設定を格納するディレクトリ
    │   ├── nat-gateway.tf  # NATゲートウェイのメイン設定ファイル
    │   ├── variables.tf  # NATゲートウェイの変数設定ファイル
    │   ├── outputs.tf  # NATゲートウェイの出力設定ファイル
    │   ├── providers.tf  # NATゲートウェイのプロバイダー設定ファイル
    │   └── README.md  # NATゲートウェイ用のREADME
    ├── network-acl  # ネットワークACL関連の設定を格納するディレクトリ
    │   ├── network-acl.tf  # ネットワークACLのメイン設定ファイル
    │   ├── variables.tf  # ネットワークACLの変数設定ファイル
    │   ├── outputs.tf  # ネットワークACLの出力設定ファイル
    │   ├── providers.tf  # ネットワークACLのプロバイダー設定ファイル
    │   └── README.md  # ネットワークACL用のREADME
    ├── sg  # セキュリティグループ関連の設定を格納するディレクトリ
    │   ├── sg.tf  # セキュリティグループのメイン設定ファイル
    │   ├── variables.tf  # セキュリティグループの変数設定ファイル
    │   ├── outputs.tf  # セキュリティグループの出力設定ファイル
    │   ├── providers.tf  # セキュリティグループのプロバイダー設定ファイル
    │   └── README.md  # セキュリティグループ用のREADME
    ├── ec2  # EC2関連の設定を格納するディレクトリ
    │   ├── ec2.tf  # EC2のメイン設定ファイル
    │   ├── variables.tf  # EC2の変数設定ファイル
    │   ├── outputs.tf  # EC2の出力設定ファイル
    │   ├── providers.tf  # EC2のプロバイダー設定ファイル
    │   └── README.md  # EC2用のREADME
    ├── s3  # S3関連の設定を格納するディレクトリ
    │   ├── s3.tf  # S3のメイン設定ファイル
    │   ├── variables.tf  # S3の変数設定ファイル
    │   ├── outputs.tf  # S3の出力設定ファイル
    │   ├── providers.tf  # S3のプロバイダー設定ファイル
    │   └── README.md  # S3用のREADME
    ├── alb  # ALB関連の設定を格納するディレクトリ
    │   ├── alb.tf  # ALBのメイン設定ファイル
    │   ├── variables.tf  # ALBの変数設定ファイル
    │   ├── outputs.tf  # ALBの出力設定ファイル
    │   ├── providers.tf  # ALBのプロバイダー設定ファイル
    │   └── README.md  # ALB用のREADME
    ├── rds  # RDS関連の設定を格納するディレクトリ
    │   ├── rds.tf  # RDSのメイン設定ファイル
    │   ├── variables.tf  # RDSの変数設定ファイル
    │   ├── outputs.tf  # RDSの出力設定ファイル
    │   ├── providers.tf  # RDSのプロバイダー設定ファイル
    │   └── README.md  # RDS用のREADME



ディレクトリ構造

モジュール用に作成

モジュール用に作成コマンド

#!/bin/bash
set -e  # エラーが発生したらスクリプトを停止

# ベースディレクトリ(modules)を作成
[ ! -d "modules" ] && mkdir -p modules

# 各サブディレクトリとその中のファイルを作成
for dir in vpc \
           subnet \
           route-table \
           vpc-endpoint \
           internet-gateway \
           nat-gateway \
           network-acl \
           sg \
           ec2 \
           s3 \
           alb \
           dlm \
           rds; do
  # 各モジュール用のディレクトリを作成
  [ ! -d "modules/$dir" ] && mkdir -p "modules/$dir"

  # 必要な.tfファイルとREADME.mdを作成
  touch "modules/$dir/${dir}.tf"
  touch "modules/$dir/variables.tf"
  touch "modules/$dir/outputs.tf"
  touch "modules/$dir/providers.tf"
  touch "modules/$dir/README.md"
done

envファイル作成(開発、ステージング、本番環境用に作成)

開発、ステージング、本番環境用に作成コマンド
#!/bin/bash
set -e  # エラーが発生したらスクリプトを停止

# ベースディレクトリ(env)を作成
[ ! -d "env" ] && mkdir -p env

# 各環境のディレクトリを作成(env)
for env in development staging production; do
  [ ! -d "env/$env" ] && mkdir -p "env/$env"
  touch "env/$env/main.tf"
  touch "env/$env/backend.tf"
  touch "env/$env/README.md"
done

S3用

AWSアクセスキー: AWS CLIやSDKを使用する際には、通常、AWSのアクセスキー(Access Key IDとSecret Access Key)が必要です。しかし、Cloud9はAWSに直接統合されているため、IAMロールを介して必要な権限が付与されています。そのため、明示的なアクセスキーは必要ありません。

S3のキー: このコンテキストでの「キー」とは、S3内でのファイルパスを指します(terraform.tfstateなど)。これはTerraformのバックエンド設定で指定するものであり、S3バケット内で一意でなければならない値です。
※S3のバケット名は好きな名前にしてください。下記はあくまでも参考です。

S3用のコマンド
# S3バケットを作成※一意で作成。誰かが同じ名前のS3バケット作成していたら作成できない。
#!/bin/bash
set -e  # エラーが発生したらスクリプトを停止

# 10桁の乱数を生成
RANDOM_NUMBER=$(shuf -i 1000000000-9999999999 -n 1)

# S3バケットを作成
aws s3 mb s3://your-bucket-name-terraform-$RANDOM_NUMBER

# backend設定を動的に生成
echo "terraform {
  backend \"s3\" {
    bucket = \"your-bucket-name-terraform-$RANDOM_NUMBER\"
    region = \"ap-northeast-1\"
    key    = \"dev/sample/terraform.tfstate/terraform.tfstate\"
  }
}" > env/development/backend.tf


モジュール作成

VPC

Terraform用のVPCのモジュールのサンプル

subnet

Terraformのsubnet用のモジュール

Internet-Gateway

Terraformのinternet-gatewayのモジュールファイル

nat-gateway

Terraformのnat-gatewayのモジュール

network-acl

Terraformのnetwork-aclのモジュール

RouteTable

Terraformのroute-tableのモジュール

vpc-endpoint

Terraformのvpc-endpointのモジュール

SG(セキュリティーグループ)

TerraformのSGのモジュールファイル

S3

TerraformのS3のモジュールファイル

ALB

TerraformのALBのモジュールファイル

EC2,AutoScaling

Terraformのec2のモジュールファイル

Aurora MySQL

Terraformのrdsのモジュールファイル

各環境でのファイル作成(開発環境)※env/development/

main.tfファイル
# VPC (Virtual Private Cloud) モジュール
# AWS上にプライベートなネットワーク環境(VPC)を作成するためのモジュール
module "vpc" {
  source   = "../../modules/vpc"  # VPCを作成するTerraformモジュールの相対パス
  vpc_name = "sample-dev-vpc"      # 作成するVPCの名前
  vpc_cidr = "10.0.0.0/16"         # VPCのCIDRアドレスブロック
}

# サブネットモジュール
# 上で作成したVPC内で使用するサブネットを作成するモジュール
module "subnet" {
  source  = "../../modules/subnet"  # サブネットを作成するTerraformモジュールの相対パス
  vpc_id  = module.vpc.vpc_id       # 親となるVPCのID

  # 公開サブネットの設定
  # このサブネットはインターネットと通信可能です
  public_subnets = [
    {
      name = "sample-dev-public-subnet1a",  # サブネットの名前
      cidr = "10.0.0.0/24",                 # サブネットのCIDRアドレスブロック
      az   = "ap-northeast-1a"              # 使用するAWSの利用可能ゾーン
    },
    {
      name = "sample-dev-public-subnet1c",  # サブネットの名前
      cidr = "10.0.1.0/24",                 # サブネットのCIDRアドレスブロック
      az   = "ap-northeast-1c"              # 使用するAWSの利用可能ゾーン
    }
  ]

  # 保護されたサブネットの設定
  # このサブネットは内部通信専用です
  protected_subnets = [
    {
      name = "sample-dev-protected-subnet1a",  # サブネットの名前
      cidr = "10.0.10.0/24",                    # サブネットのCIDRアドレスブロック
      az   = "ap-northeast-1a"                  # 使用するAWSの利用可能ゾーン
    },
    {
      name = "sample-dev-protected-subnet1c",  # サブネットの名前
      cidr = "10.0.11.0/24",                    # サブネットのCIDRアドレスブロック
      az   = "ap-northeast-1c"                  # 使用するAWSの利用可能ゾーン
    }
  ]

  # データストア用サブネットの設定
  # このサブネットはデータストア(例:RDS)専用です
  datastore_subnets = [
    {
      name = "sample-dev-datastore-subnet1a",  # サブネットの名前
      cidr = "10.0.20.0/24",                    # サブネットのCIDRアドレスブロック
      az   = "ap-northeast-1a"                  # 使用するAWSの利用可能ゾーン
    },
    {
      name = "sample-dev-datastore-subnet1c",  # サブネットの名前
      cidr = "10.0.21.0/24",                    # サブネットのCIDRアドレスブロック
      az   = "ap-northeast-1c"                  # 使用するAWSの利用可能ゾーン
    }
  ]
}


# インターネットゲートウェイモジュール
# VPCにインターネット接続を提供するインターネットゲートウェイを作成
module "internet_gateway" {
  source = "../../modules/internet-gateway"  # インターネットゲートウェイを作成するTerraformモジュールの相対パス
  vpc_id = module.vpc.vpc_id                 # 親となるVPCのID
}

# NATゲートウェイ1aモジュール
# 1aゾーンにNATゲートウェイを作成
module "nat_gateway_1a" {
  source    = "../../modules/nat-gateway"    # NATゲートウェイを作成するTerraformモジュールの相対パス
  name      = "sample-dev-ngw1a"             # NATゲートウェイの名前
  subnet_id = module.subnet.public_subnet_ids[0]  # 1aに対応する公開サブネットのID
}

# NATゲートウェイ1cモジュール
# 1cゾーンにNATゲートウェイを作成
module "nat_gateway_1c" {
  source    = "../../modules/nat-gateway"    # NATゲートウェイを作成するTerraformモジュールの相対パス
  name      = "sample-dev-ngw1c"             # NATゲートウェイの名前
  subnet_id = module.subnet.public_subnet_ids[1]  # 1cに対応する公開サブネットのID
}

# ネットワークACLモジュール
# VPCにネットワークアクセス制御リスト(ACL)を作成
module "network_acl" {
  source = "../../modules/network-acl"  # ネットワークACLを作成するTerraformモジュールの相対パス
  vpc_id = module.vpc.vpc_id            # 親となるVPCのID
}

# ルートテーブルモジュール
# VPCにルートテーブルを作成し、インターネットゲートウェイへのルートを追加
module "route_table" {
  source      = "../../modules/route-table"      # ルートテーブルを作成するTerraformモジュールの相対パス
  vpc_id      = module.vpc.vpc_id                # 親となるVPCのID
  name        = "sample-dev-public-rtb"          # ルートテーブルの名前
  destination = "0.0.0.0/0"                      # どのIPアドレス範囲に適用するか(ここではすべて)
  target      = module.internet_gateway.internet_gateway_id  # インターネットゲートウェイのIDを指定
}
# VPCエンドポイントモジュール
# AWSの特定のサービス(この場合はS3)へのプライベート接続を提供するVPCエンドポイントを作成
module "vpc_endpoint" {
  source         = "../../modules/vpc-endpoint"  # VPCエンドポイントを作成するTerraformモジュールの相対パス
  vpc_id         = module.vpc.vpc_id             # 親となるVPCのID
  name           = "sample-dev-s3-gw-endpoint"   # VPCエンドポイントの名前
  service        = "com.amazonaws.ap-northeast-1.s3"  # 接続するAWSサービス(この場合はap-northeast-1リージョンのS3)
  endpoint_type  = "Gateway"                     # エンドポイントのタイプ(この場合はゲートウェイ)
  route_table_ids = [module.route_table.route_table_id]  # このエンドポイントを使用するルートテーブルのID
}


# sample-dev-public-rtbとpublicサブネットの関連付け(最初の定義を使用する場合はこの行を残す)
resource "aws_route_table_association" "public_rtb_association" {
  subnet_id      = module.subnet.public_subnet_ids[0] # publicサブネットのID
  route_table_id = module.route_table.route_table_id
}

# sample-dev-protected-rtb1aとprotectedサブネット1aの関連付け
resource "aws_route_table_association" "protected1a_rtb_association" {
  subnet_id      = module.subnet.protected_subnet_ids[0] # protectedサブネット1aのID
  route_table_id = module.route_table.route_table_id
}

# sample-dev-protected-rtb1cとprotectedサブネット1cの関連付け
resource "aws_route_table_association" "protected1c_rtb_association" {
  subnet_id      = module.subnet.protected_subnet_ids[1] # protectedサブネット1cのID
  route_table_id = module.route_table.route_table_id
}

# sample-dev-datastore-rtbとdatastoreサブネットの関連付け
resource "aws_route_table_association" "datastore_rtb_association" {
  subnet_id      = module.subnet.datastore_subnet_ids[0] # datastoreサブネットのID
  route_table_id = module.route_table.route_table_id
}

# sample-dev-public-subnet1cと対応するルートテーブルの関連付け
resource "aws_route_table_association" "public1c_rtb_association" {
  subnet_id      = module.subnet.public_subnet_ids[1]
  route_table_id = module.route_table.route_table_id
}

# sample-dev-datastore-subnet1cと対応するルートテーブルの関連付け
resource "aws_route_table_association" "datastore1c_rtb_association" {
  subnet_id      = module.subnet.datastore_subnet_ids[1]
  route_table_id = module.route_table.route_table_id
}

# ユーザ用ALBセキュリティグループ
module "user_alb_sg" {
  source = "../../modules/sg"
  name   = "sample-dev-alb-users-sg"
  vpc_id = module.vpc.vpc_id
  tags = {
    "Name"        = "sample-dev-alb-users-sg"
    "Environment" = "Development"
  }
}

# ユーザ用EC2セキュリティグループ
module "user_ec2_sg" {
  source = "../../modules/sg"
  name   = "sample-dev-users-sg"
  vpc_id = module.vpc.vpc_id
  tags = {
    "Name"        = "sample-dev-users-sg"
    "Environment" = "Development"
  }
}

# RDSセキュリティグループ
module "rds_sg" {
  source = "../../modules/sg"
  name   = "sample-dev-rds-sg"
  vpc_id = module.vpc.vpc_id
  tags = {
    "Name"        = "sample-dev-rds-sg"
    "Environment" = "Development"
  }
}

# 10桁のランダムな整数を生成するリソース定義
# この値は、var.some_variable が変更された場合にのみ再生成されます。
resource "random_integer" "rand" {
  min = 1000000000  # 10桁の最小値
  max = 9999999999  # 10桁の最大値
}

# ローカル変数を定義して、バケット名に使用する一意な識別子を生成
locals {
  unique_identifier = random_integer.rand.result
}

# S3バケットのモジュール定義
module "s3_buckets" {
  source = "../../modules/s3"

  # 画像保存用バケット名に一意な識別子を追加
  image_bucket_name = "sample-dev-images-s3-${local.unique_identifier}"
  
  # ALBログ保存用バケット名に一意な識別子を追加
  alb_log_bucket_name = "sample-dev-alb-log-s3-${local.unique_identifier}"
}

module "alb" {
  source = "../../modules/alb"
  vpc_id  = module.vpc.vpc_id   # 親となるVPCのID
  alb_name = "sample-dev-users-alb" # ロードバランサー名
  scheme = "internet-facing" # スキーム
  ip_address_type = "ipv4" # IPアドレスタイプ
  subnet_ids = [module.subnet.public_subnet_ids[0], module.subnet.public_subnet_ids[1]] # 1aと1cに対応する公開サブネットのID
  security_group_ids = [module.user_alb_sg.sg_id] # セキュリティグループ
}

# Auto Scaling Group の設定をするためのモジュールを呼び出します
module "auto_scaling_group" {
  source = "../../modules/ec2"  # モジュールのソースディレクトリ
  vpc_id  = module.vpc.vpc_id   # 親となるVPCのIDを設定
  
  ami_id  = "ami-0bba69335379e17f8"  # 使用するAmazon Machine ImageのID
  instance_type = "t2.micro"  # EC2インスタンスのタイプ
  
  key_name = "your-key-name"  # キーペアの名前
  availability_zones = ["ap-northeast-1a", "ap-northeast-1c"]  # 利用するAZ(Availability Zones)

  asg_name = "my-asg"  # Auto Scaling Groupの名前
  min_size = 2  # 最小インスタンス数
  max_size = 4  # 最大インスタンス数
  
  # サブネットIDのリスト(プライベートサブネット)
  subnets = [module.subnet.protected_subnet_ids[0], module.subnet.protected_subnet_ids[1]]
  
  # スケールイン保護を有効にするサブネットのID
  protected_subnet_ids = module.subnet.protected_subnet_ids
}




backend.tfファイル

環境に合わせて変更してください。

terraform {
  // バックエンドの設定。この例ではAWS S3をバックエンドとして使用。
  backend "s3" {
    bucket = "s3-bucket-name"  // S3バケットの名前
    region = "ap-northeast-1"  // AWSリージョン(この例では東京)
    key    = "dev/sample/terraform.tfstate/terraform.tfstate"  // S3内でのTerraformステートファイルのパス
  }
}


README.MD

main.tfの説明

モジュール/リソース名 説明
module "vpc" AWS上にプライベートなネットワーク環境(VPC)を作成するモジュール。
module "subnet" 作成したVPC内で使用するサブネットを作成。公開、保護、データストア用のサブネットをそれぞれ設定可能。
module "internet_gateway" VPCにインターネット接続を提供するインターネットゲートウェイを作成。
module "nat_gateway_1a" 1aゾーンにNATゲートウェイを作成。公開サブネット内で使用。
module "nat_gateway_1c" 1cゾーンにNATゲートウェイを作成。公開サブネット内で使用。
module "network_acl" VPCにネットワークアクセス制御リスト(ACL)を作成。
module "route_table" VPC内で使用するルートテーブルを作成し、インターネットゲートウェイへのルートを追加。
module "vpc_endpoint" AWS S3などの特定のサービスへのプライベート接続を提供するVPCエンドポイントを作成。
resource "aws_route_table_association" サブネットとルートテーブルの関連付け。公開、保護、データストア用の各サブネットに適用。
module "user_alb_sg" ユーザ用のApplication Load Balancer(ALB)用のセキュリティグループを作成。
module "user_ec2_sg" ユーザ用のEC2インスタンス用のセキュリティグループを作成。
module "rds_sg" RDS用のセキュリティグループを作成。
random_integer.rand 10桁のランダムな整数を生成します。この値は var.some_variable が変更された場合にのみ再生成されます。
unique_identifier random_integer.rand.result から得られたランダムな整数を保持します。この一意な識別子は後でS3バケット名に使用されます。
s3_buckets S3バケットを作成するためのモジュールを呼び出します。
image_bucket_name 画像保存用のS3バケット名に一意な識別子(local.unique_identifier)を追加します。
alb_log_bucket_name ALBログ保存用のS3バケット名に一意な識別子(local.unique_identifier)を追加します。
module "alb" AWS上のApplication Load Balancer(ALB)を作成・管理するTerraformモジュール。
source = "../../modules/alb" module "alb"のソースコードが存在するディレクトリへの相対パス。
vpc_id = module.vpc.vpc_id ALBを作成するVPC(Virtual Private Cloud)のID。
alb_name = "sample-dev-users-alb" 作成するALBの名前。
scheme = "internet-facing" ALBが使用するスキーム。一般にインターネットに公開される場合はinternet-facingを指定。
ip_address_type = "ipv4" ALBが使用するIPアドレスのタイプ。通常はipv4
subnet_ids = [module.subnet.public_subnet_ids[0], module.subnet.public_subnet_ids[1]] ALBに割り当てるサブネットのID。通常、公開サブネットが指定されます。
security_group_ids = [module.user_alb_sg.sg_id] ALBに割り当てるセキュリティグループのID。通常、ALB用に作成したセキュリティグループが使用されます。
source module "auto_scaling_group" のソースコードが存在するディレクトリへの相対パス。
vpc_id 親となる VPC の ID。
ami_id 起動する EC2 インスタンスの AMI ID。
key_name SSH 接続に使用するキーペアの ID。
availability_zones EC2 インスタンスを起動する AZ のリスト。
asg_name Auto Scaling グループの名前。
min_size Auto Scaling グループの最小インスタンス数。
max_size Auto Scaling グループの最大インスタンス数。
subnets Auto Scaling グループに使用するサブネットのリスト。
protected_subnet_ids 保護されたサブネットの ID のリスト。
module "aurora" {...} Aurora用のTerraformモジュールを使用する宣言です。
source = "../../modules/rds" RDS用の共通モジュールのパスを指定します。
vpc_id = module.vpc.vpc_id 親となるVPCのIDを指定します。
subnet_ids = [module.subnet.datastore_subnet_ids[0], ...] 使用するサブネットのIDを指定します。
subnet_group_name = "sample-dev-dbsg" DB用のサブネットグループ名を指定します。
security_group = "sample-dev-rds-sg" RDSに適用するセキュリティグループ名を指定します。
aurora_cluster_name = "sample-dev-cluster" Auroraクラスタの名前を指定します。
aurora_instance_name = "sample-dev-instance" Auroraインスタンスの名前を指定します。
master_username = "yourMasterUsername" マスターユーザー名を指定します。環境に合わせて変更する必要があります。
master_password = "Password123!" マスターパスワードを指定します。環境に合わせて変更する必要があります。
instance_class = "db.r5.large" 使用するDBインスタンスのクラス(タイプ)を指定します。

リソースのデプロイと削除

デプロイ

手順
cd ~/environment/sample-terraform/env/development
  1. Terraform初期化

    terraform init
    
    
  2. 以下のコマンドで計画を作成し、env/development ファイルを適用する。

    terraform plan 
    

出力例: `Plan

: 3 to add, 0 to change, 0 to destroy.`
3. 実際にリソースを作成。

terraform apply

削除

手順
  1. リソースを削除するコマンド。

    terraform destroy
    
  2. 出力例: Plan: 0 to add, 0 to change, 3 to destroy.

Discussion