会員登録すると
学習することができます。
会員登録する(無料)
学習することができます。
登録済みの方はこちら
ログイン
学ぶ目的
ひとりの state から、チームの state へ
何も設定しないと、Terraform は local バックエンドを使い、作業しているディレクトリの terraform.tfstate に state を書きます。ひとりなら困りませんが、チームでは困ります。ほかの人は最新の state を見られず、同じものを二重に作ったり、古い state で上書きしたりします。state には機密の値も平文で入るので、ファイルを配り回すのも危険です。
backend ブロックで置き場所を決める
- terraform ブロックの中に backend ブロックを1つ書く(S3・GCS・azurerm など、種類ごとに設定が違う)
- backend ブロックの中では、変数やローカル値を参照できない。環境ごとに変えたい値は、init の -backend-config で渡す
- 置き場所を変えたら terraform init をやり直す。いまの state を新しい置き場所へ移すかどうかも、init が扱う
ロック
state を書き換える操作の前に、Terraform はロックを取ります。ロックが取れなければ先に進みません。これで、2人が同時に apply して state を壊すことを防ぎます。S3 バックエンドでは use_lockfile = true でロックを有効にし、state の横に .tflock のファイルを置きます。以前の DynamoDB によるロックは非推奨です。
force-unlock
処理が途中で落ちてロックが残ったときだけ、terraform force-unlock にロックの ID を付けて外します。インフラは変えませんが、誰かが実行中のロックを外すと state が壊れるので、最後の手段です。
このレクチャーで学ぶこと
- local バックエンドの限界と、リモートに置く理由
- backend ブロックの書き方と、init のやり直し
- state のロックの仕組みと S3 の use_lockfile
- force-unlock を使ってよい場面
質問
まだ質問は投稿されていません。
質問投稿
ログイン後に質問の投稿ができます。
#1
未完了
state をチームで共有する ― リモートバックエンドとロックで、同じ state を安全に使う
#2
未完了
ドリフトと state の操作 ― Terraform の外での変更を見つけ、名前の変更を作り直さずに反映する
#3
未完了
既存のインフラを取り込む ― import で管理下に入れ、TF_LOG で原因を調べる
#4
未完了
モジュール ― 構成を部品にして、取り寄せ先とバージョンを決めて使い回す
#5
未完了
式と関数 ― 複合型と for 式と組み込み関数で、くり返しの少ない設定を書く
#6
未完了
meta-argument と独自の条件 ― count・for_each・depends_on・lifecycle と検証を使い分ける
#7
未完了
HCP Terraform ― ワークスペースとプロジェクト、実行の流れとガバナンスを説明する
#8
未完了