CI/CD-Terraform-簡単なapply/destroy
Bluid Infrastructure
今回のテーマ:Terraformで簡単なapply/destroy
拡張子 .tfファイル
- インフラ環境のリソース情報をHCL言語で記載
- Terraform実行時「.tf」ファイルを参照しリソースの作成
terraform.tfstate
- Terraformで管理しているリソース情報(非常に重要なファイル)
- Terraformでリソースを作成後、自動生成
- 2回目以降のTerraform実行時、.tfファイルの定義内容と差分チェック
- 消失するとTerraformでリソース管理不可
Terraformのコマンド
- init:Terraformの作業ディレクトリの初期化(gitのローカルリポジトリ定義)
- plan:リソース変更に加えず、変更箇所やエラーを確認
- apply:リソースの作成、変更を実施
- detroy:terraform.tfstateで管理しているリソース削除
作業ディレクトリ作成
terraformを構成情報の作業ディレクトリを作成します。
- WSLコンソールで、ディレクトリを作成します。
作成コマンド
mkdir /home/user/terraform
確認コマンド
ls -ld /home/user/terraform
Terraform実行の権限付与
Terraformには高い権限が必要ですが、認証情報の取り扱いには注意が必要です。
また、Terraform構成ファイル内へのハードコーディングは非推奨となります。
付与する権限のポイントは以下のものが挙げられます。
IAMユーザにMFAが付与されている場合
- TerraformではMFA認証は非サポート
- 別の方法でMFA認証を実施する必要あり(aws-mfaコマンドなど)
.tfファイルにリソース情報記載
使用するリソースをProviderで宣言が必要となります。
- WSLコンソールで、構成ファイルを作成します。
コマンド
vim /home/user/terraform/main.tf
実装内容
provider="aws"{ region = "ap-northeast-1" }
実装内容の補足は以下となります。
実装値 | 概要 |
---|---|
provider="aws" | AWSリソースを指定 |
region = "ap-northeast-1" | 使用するリージョンを指定 |
version = "x.xx" | providerのバージョンを指定。 指定しない場合、最新バージョンを使用 |
リソース設定(resource構文)
VPCの作成時は以下のようになります。
また、リソース作成時の注意点として以下のようなものがあります。
- Terraformでは各リソースをリソースの種類とリソース名で管理するため、リソースの種類+リソース名などの組み合わせはユニークであることが必要
- VPCは他の鄭ナンシーやClassickLink等の設定があり、Default値が定められているため、必要な設定を把握することが必要
コマンド
vim /home/user/terraform/terraform.tf
実装内容
resource "aws_vpc" "vpc"{ cidr_block = 10.1.0.0/16 enable_dns_hostnames = true tags = { Name = "dev-connect-vpc" } }
実装内容の補足は以下となります。
実装値 | 概要 |
---|---|
resource "aws_vpc" "vpc" | resourceブロックでリソースの種類"aws_vpc"を指定。 任意のリソース名"vpc"を記述 |
cidr_block = 10.1.0.0/16 | vpcのCIDRを指定(必須項目) |
enable_dns_hostnames = true | BPCのDNSホストを有効化(デフォルトは無効) |
tags = { Name = "dev-connect-vpc" } |
VPCのタグ名を指定。 key = Name,Value = dev-connect-vpc |
他のリソース属性の参照
サブネット作成時のtfファイルの実装として以下のポイントがあります。
コマンド
vim /home/user/terraform/terraform.tf
実装内容
resource "aws_subnet" "public_a"{ vpc_id = aws_vpc.vpc.id cidr_block = 10.1.0.0/24 availability_zone = ap-northeast-1a map_public_ip_on_launch = true tags = { Name = "dev-connect-public-a-subnet" } }
実装内容の補足は以下となります。
実装値 | 概要 |
---|---|
vpc_id = aws_vpc.vpc.id | VPCのIDを指定 aws_vpc.vpc:VPCリソースを指定 .id:VPC ID属性を参照 |
fmtコマンド
- 構成ファイルがあるカレントで実行
- 「.tf」ファイルを整形
コマンド
terraform fmt
initコマンド
- 構成ファイルがあるカレントで実行
- 指定したProvider情報を取得
- 基本的に初回のみだが、terraform.tfで設定した内容に変更がある際は再度実行
コマンド
terraform init
planコマンド
- 構成ファイルがあるカレントで実行
- デプロイ前のドライランを実行
コマンド
terraform plan
applyコマンド
- 構成ファイルがあるカレントで実行
- デプロイの実行
コマンド
terraform apply
destroyコマンド
- 構成ファイルがあるカレントで実行
- デプロイした環境を終了(壊す)
終了前のコマンド
terraform plan -destroy
終了コマンド
terraform destroy
今回のテーマは以上です。