技術めも

Terraform AWS

I-2 : 「それ、どこに出しても恥ずかしくないTerraformコードになってるか?」
https://www.youtube.com/watch?v=0IQ4IScqQws

provider
locals variable 変数

1.Stateファイルは必ずリモート管理

バージョニング、暗号化、プライベートアクセス

2.Stateファイルはロックをすることでデプロイ衝突からインフラを守る

S3 + DynamoDB でロック処理
backend.tf terraform { dynamodb_table = "TerraformLockState" }

3.Stateファイルは環境毎に分ける

AWS環境を分ける Stateファイルだけ別アカウントにする リファクタリング(terraform state mv)

Terraformの基礎を90分で解説するチュートリアル
https://www.youtube.com/watch?v=h1MDCp7blmg

IaC(Infra stracture as Code)
インストール brew tfenv経由

tfファイル
・実行時のポイント

実行直下のtfファイルのみ実行(サブディレクトリ内は実行されない)

・構文について

resource 構文:インフラ作成為の文
date 構文:リソースを取得する為の文(terraform管理下にないリソース情報の取得)

tfstate ファイル

terraformで管理しているインフラリソースをすべて記載しているJSONファイル
S3 バケットで管理している

backend.tf

trraform {}
provider "aws" {}

terraform init

vpc.tf

trraform plan

差分チェック

trraform validate

構文チェック

trraform fmt

インデント修正

trraform apply

作成 -targetオプションあり
Enter a value: yes

リソース削除

tfコードを削除
trraform destroy(すべてを削除) -targetオプションあり

backend.tf

    terraform {
        profile = "terraform-user" // AWS IAMユーザー profile 指定
    }

modules フォルダ

vpc_subnet ファイルだ
    main.tf
    valiables.tf (変数定義)
module "my_vpc_subnet" {
    source = "./modules/vpc_subnet"
}
valiable "vpc_cidr_block" {
    default = "192.168.1.0/24" オプション(変数のような使い方可能)
    type = string
}

変数名:var.vpc_cidr_block


作業環境
terraform workspace list

terraform workspace new "stage"
terraform workspace new "prod"

tags = {
    Name = "${terraform.workspace}-demo-vpc"
}

IF文も可能

切り替え
terraform workspace select "stage"