💬
TerraformでAWSのリソースを一通り構築
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
subnet
Internet-Gateway
Terraformのinternet-gatewayのモジュールファイル
nat-gateway
network-acl
RouteTable
vpc-endpoint
SG(セキュリティーグループ)
S3
ALB
EC2,AutoScaling
Aurora MySQL
各環境でのファイル作成(開発環境)※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
-
Terraform初期化
terraform init
-
以下のコマンドで計画を作成し、
env/development
ファイルを適用する。terraform plan
出力例: `Plan
: 3 to add, 0 to change, 0 to destroy.`
3. 実際にリソースを作成。
terraform apply
削除
手順
-
リソースを削除するコマンド。
terraform destroy
-
出力例:
Plan: 0 to add, 0 to change, 3 to destroy.
Discussion