手作業の設定は少しずつ違ってしまう
インフラのコード化(IaC)とは、サーバーなどの構成をファイルに書き、ツールに作らせるやり方です。OpenTofu は、Terraform から分かれたオープンソースのツールです。
学園祭の屋台が10軒あり、メニューを毎年手で作り直すと、年ごとに少しずつ違いが生まれます。ファイルに書いておけば、同じものを何度でも、間違いなく作れます。
このレッスンのゴール
メモ
planを実行し、applyで適用し、stateファイルが何かを説明できる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| インフラのコード化 | サーバーなどの構成を、ファイルに書いて管理すること | |
| 望ましい状態 | こうなっていてほしいと、ファイルに書いた姿 | |
| plan | 何を変えるかを、変える前に見せる命令 | tofu plan |
| apply | planの内容を、実際に行う命令 | tofu apply |
| state | 作ったものを、ツールが書き留めたファイル | terraform.tfstate |
| リソース | ファイルに書く、ものひとつ分の記述 | terraform_data |
学生が入力するセルは、このプレビューでは空白です。
ファイルは望ましい状態を書く
手順を1つずつ書くのではなく、できあがりの姿を書きます。これを望ましい状態と言います。
ツールは、今ある姿と望ましい状態を比べます。違う分だけを、作る、変える、消すのどれかで直します。
屋台の例: 比べて直す
| 屋台 | ファイルの状態 | 今ある状態 | 必要な作業 |
|---|---|---|---|
| たこ焼き | 500円 | 500円 | 何もしない |
| やきそば | 600円 | なし | 作る |
| かき氷 | なし | 300円 | 消す |
| 焼き鳥 | 450円 | 400円 | 値段を変える |
学生が入力するセルは、このプレビューでは空白です。
最初のプロジェクトは1つのファイル
OpenTofu の設定は、.tf というファイルに書きます。resource ブロック1つが、リソースひとつ分です。
今回は、組み込みの terraform_data を使います。値を1つ保存するだけで、外には何も作りません。本物のクラウドは、プロバイダーという部品で操作します。この VM は取得できないので、サーバーは作られません。
自分のフォルダを作る
mkdir ~/stallここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
そのフォルダに入る
cd ~/stallここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
屋台1軒のリソースを書く
printf '%s\n' 'resource "terraform_data" "menu" {' ' input = "takoyaki 500"' '}' > main.tfここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
planは変える前に見せる
tofu init が、フォルダを使える形に整えます。取得するプロバイダーがないので、すぐ終わります。
tofu plan は、ファイルと state を比べて、何をするかを表示します。+ は作る、~ は変える、- は消すです。plan は何も変えません。最後の行が、作る、変える、消すの数をまとめます。
フォルダを整える
tofu init -no-color | grep successここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
何が作られるか見る
tofu plan -no-color | grep -E "will be|Plan:"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
applyは実行して書き留める
tofu apply は、plan の内容を実際に行います。ふつうは「yes と入力してください」と確認します。-auto-approve を付けると、その確認を省けます。
終わると、作ったものが state に書き留められます。state は、フォルダにできる terraform.tfstate という、ふつうのファイルです。
作る
tofu apply -auto-approve -no-color | grep Applyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
書き留められたものの一覧
tofu state listここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
stateの中の値を読む
jq -r '.resources[0].instances[0].attributes.input.value' terraform.tfstateここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2回目のplanは差だけを見せる
state に望ましい状態と同じものがあれば、plan は何もすることがありません。
ファイルの値を変えると、plan は state と比べて、違う分だけを示します。値だけの違いは、その場で直す ~ です。
変えずにもう一度planする
tofu plan -no-color | grep "No changes"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ファイルの値を変える
sed -i 's/500/600/' main.tfここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
変更後のplanを見る
tofu plan -no-color | grep -E "will be|Plan:"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
plan を実行したのに何も作られていない、と慌てる人がいます。plan は見せるだけで、何も変えません。作るのは apply です。apply の前に plan を読むのは、思いがけない変更を防ぐためです。