クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

planの読み方と置き換えの見分け方

このレッスンのあとで: 変更後のplanを読み、作成、変更、削除、置き換えを言い分けられる。

60分のレッスンコマンド10件OpenTofu のラボ:プラン、apply、ステートで学ぶ Infrastructure as Code を1台の VM で

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 createdadd に1
~will be updated in-placechange に1
-will be destroyeddestroy に1
-/+must be replacedadd に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:"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

要約の数え方の確かめ

アドレス印addchangedestroy
by_count[1]~010
by_count[2]-001
by_name["green"]-001
gate-/+101
合計113

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

要約の「1 to destroy」を見て、1つ消えるだけだと思いがちです。置き換えは、消して作るので、add にも destroy にも数えます。数だけでなく、-/+ の行まで読んでから、apply してください。

このラボとソースについて: OpenTofu のラボ:プラン、apply、ステートで学ぶ Infrastructure as Code を1台の VM で

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。