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

無料レッスン

OpenTofuのplan、apply、state

このレッスンのあとで: planを実行し、applyで適用し、stateファイルが何かを説明できる。

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

手作業の設定は少しずつ違ってしまう

インフラのコード化(IaC)とは、サーバーなどの構成をファイルに書き、ツールに作らせるやり方です。OpenTofu は、Terraform から分かれたオープンソースのツールです。

学園祭の屋台が10軒あり、メニューを毎年手で作り直すと、年ごとに少しずつ違いが生まれます。ファイルに書いておけば、同じものを何度でも、間違いなく作れます。

このレッスンのゴール

メモ

planを実行し、applyで適用し、stateファイルが何かを説明できる。

重要な言葉

ことばいみれい
インフラのコード化サーバーなどの構成を、ファイルに書いて管理すること
望ましい状態こうなっていてほしいと、ファイルに書いた姿
plan何を変えるかを、変える前に見せる命令tofu plan
applyplanの内容を、実際に行う命令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 を読むのは、思いがけない変更を防ぐためです。

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

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