applyの前にplanを読む
OpenTofu の plan の読み方とは、表示された変更の一覧から、何が作られ、変わり、消えるかを見分けることです。apply の前に読めば、大事なものを消す事故を防げます。
学園祭の提灯が3つあり、真ん中の1つを外します。そのとき、本当に1つだけが消えるのか。plan が答えを教えてくれます。
このレッスンのゴール
メモ
変更後のplanを読み、作成、変更、削除、置き換えを言い分けられる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| 作成 | 新しく作ること。planでは行頭が + | will be created |
| その場で変更 | 作り直さず、値だけを直すこと。行頭が ~ | updated in-place |
| 削除 | 消すこと。行頭が - | will be destroyed |
| 置き換え | 消してから作り直すこと。行頭が -/+ | must be replaced |
| 要約の行 | 最後に出る、作る、変える、消すの数 | Plan: 1 to add |
学生が入力するセルは、このプレビューでは空白です。
planの印は4つだけ
plan は、リソースごとに「アドレス」と「will be ...」の行を出します。行頭の印が、何をするかを表します。
+ は作成、~ はその場で変更、- は削除です。-/+ は置き換えで、消してから作り直します。最後の要約の行が、数をまとめます。
印、言葉、要約の数え方
| 印 | planの言葉 | 要約での数え方 |
|---|---|---|
| + | will be created | add に1 |
| ~ | will be updated in-place | change に1 |
| - | will be destroyed | destroy に1 |
| -/+ | must be replaced | add に1、destroy に1 |
学生が入力するセルは、このプレビューでは空白です。
自分のフォルダを作る
mkdir ~/lanternsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
そのフォルダに入る
cd ~/lanternsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3種類のリソースを書く
printf '%s\n' 'variable "names" {' ' type = list(string)' ' default = ["red", "green", "blue"]' '}' '' 'variable "gate" {' ' type = number' ' default = 1' '}' '' 'resource "terraform_data" "by_count" {' ' count = length(var.names)' ' input = var.names[count.index]' '}' '' 'resource "terraform_data" "by_name" {' ' for_each = toset(var.names)' ' input = each.key' '}' '' 'resource "terraform_data" "gate" {' ' input = "open"' ' triggers_replace = var.gate' '}' > main.tfここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
フォルダを整える
tofu init -no-color | grep successここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
7つを作る
tofu apply -auto-approve -no-color | grep Applyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
countのリストは、真ん中を消すとずれる
names の真ん中を外すと、count のリソースは番号で並んでいるので、後ろが前へずれます。by_count[1] の値が変わり、いちばん後ろの by_count[2] が消えます。
toset は、リストを重なりのない集まりに変える関数です。by_name は名前で呼ばれるので、外した名前の1つだけが消えます。
真ん中の色を外したplan
tofu plan -no-color -var 'names=["red","blue"]' | grep -E "will be|Plan:"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
消える理由の行
tofu plan -no-color -var 'names=["red","blue"]' | grep -B1 "out of range"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
値によっては作り直しになる
リソースの中には、ある値が変わると、その場で直せず作り直すものがあります。それが置き換えです。
terraform_data の triggers_replace は、その値が変わると置き換えになる指定です。本物のクラウドでも、サーバーの種類を変えるなどで置き換えが起きます。印の -/+ を見落とさないでください。
置き換えになるplan
tofu plan -no-color -var gate=2 | grep -E "must be|Plan:"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
印の説明の行
tofu plan -no-color -var gate=2 | grep -A1 "Resource actions"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2つの変更を同時にしたplan
tofu plan -no-color -var 'names=["red","blue"]' -var gate=2 | grep "Plan:"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
要約の数え方の確かめ
| アドレス | 印 | add | change | destroy |
|---|---|---|---|---|
| by_count[1] | ~ | 0 | 1 | 0 |
| by_count[2] | - | 0 | 0 | 1 |
| by_name["green"] | - | 0 | 0 | 1 |
| gate | -/+ | 1 | 0 | 1 |
| 合計 | 1 | 1 | 3 |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
要約の「1 to destroy」を見て、1つ消えるだけだと思いがちです。置き換えは、消して作るので、add にも destroy にも数えます。数だけでなく、-/+ の行まで読んでから、apply してください。