▶ 技術めも
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"