おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

CI/CD-Terraform-簡単なapply/destroy

Bluid Infrastructure

learn.hashicorp.com

今回のテーマ: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を構成情報の作業ディレクトリを作成します。

作成コマンド

mkdir /home/user/terraform

確認コマンド

ls -ld /home/user/terraform

Terraform実行の権限付与

Terraformには高い権限が必要ですが、認証情報の取り扱いには注意が必要です。
また、Terraform構成ファイル内へのハードコーディングは非推奨となります。
付与する権限のポイントは以下のものが挙げられます。

  • リソース作成権限を持ったIAMユーザの認証情報(環境変数aws cliなど)
  • リソース作成権限を付与したIAMロール(EC2やCodBuildなど)

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ファイルの実装として以下のポイントがあります。

  • 作成時、VPC IDが必要
  • VPCリソースからVPC IDを参照

コマンド

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.vpcVPCリソースを指定
.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

今回のテーマは以上です。