IaCを学び始めたとき、私はYAMLの書き方そのものよりも、YAMLを書く前の段階で何度も手が止まりました。
具体的には、次のような状態です。
- 何から決めればいいのか分からない
- どのAWSリソースから作ればいいのか分からない
- とりあえず書き始めたら、エラー修正だけで疲れる
- 直しているうちに、最初に何を作ろうとしていたのか分からなくなる
CloudFormationやTerraformを学ぶとき、どうしても「構文」や「書き方」に目が行きがちです。
もちろん文法も大事ですが、実際に学習していて感じたのは、IaCは書き方より前に、進め方を決めておくことがかなり重要だということです。
この記事では、CloudFormationやTerraformなどのツールに依存しない、IaC学習を進めるためのテンプレートを紹介します。
この記事の対象
この記事は、次のような人向けです。
- IaCを学び始めたばかりの人
- CloudFormationやTerraformで何度もエラーになっている人
- YAMLやHCLを書く前に、何を整理すればよいか分からない人
- 小さく作って、少しずつ理解したい人
逆に、CloudFormationやTerraformの高度な構文テクニックを知りたい方向けの記事ではありません。
先に結論:IaCは「書き方」より「進め方」で差が出る
IaC学習で詰まりやすい原因は、主に次の3つだと感じています。
- いきなりテンプレート全体を書こうとする
- サービス同士の依存関係を整理せずに実装を始める
- エラーが出るたびに場当たりで修正する
逆に、次の流れで進めるとかなり安定します。
- 目的を1行で固定する
- リソースを依存順に分解する
- 最小構成を先に通す
- 1機能ずつ追加する
- エラーを再発防止メモに変える
この5つを意識するだけで、「とりあえず書いて壊れる」状態から抜け出しやすくなります。
IaC学習テンプレ
私が実際に使っている進め方は、次のような流れです。
1. 目的を1行で決める
2. 必要なリソースを洗い出す
3. リソースを依存順に並べる
4. 最小構成だけを書く
5. デプロイして通す
6. 1つずつ機能を追加する
7. エラーをメモして再発防止ルールにする
ポイントは、最初から完成形を目指さないことです。
IaCは一度に全部書くよりも、通る最小単位を積み上げた方が学習しやすいと感じています。
1. 目的を1行で固定する
まず最初に、「何を作るのか」を1行で固定します。
例えば、次のような形です。
S3で静的Webサイトを公開する
この段階では、細かい設定まで決めなくてよいです。
最初から、
- CloudFrontも付ける
- Route 53も使う
- WAFも入れる
- ログも保存する
- 本番レベルのセキュリティにする
と広げすぎると、学習対象が一気に増えてしまいます。
最初の目的は、あくまで小さく、具体的に、1行で説明できるものにします。
悪い例:
AWSでいい感じのWebサイト公開環境を作る
良い例:
S3バケットを作成して、静的Webサイトホスティングを有効にする
目的が小さいほど、失敗したときの原因も追いやすくなります。
2. リソースを依存順に分解する
次に、必要なリソースを洗い出します。
このとき重要なのは、単にリソース名を並べるのではなく、依存順に並べることです。
例えば、S3で静的Webサイトを公開する場合、ざっくり次のように整理できます。
1. S3バケット
2. 静的Webサイトホスティング設定
3. 公開設定またはバケットポリシー
4. 必要に応じてCloudFront
この段階で、
- 何が先に必要か
- どのリソースがどのリソースを参照するか
- 後から追加できるものは何か
を整理しておくと、テンプレートを書き始めた後に迷いにくくなります。
IaCでつまずく原因の1つは、リソースの作成順や依存関係を整理しないまま書き始めることです。
CloudFormationやTerraformは依存関係をある程度自動で解決してくれますが、学習する側が構成を理解していないと、エラーが出たときに原因を追いにくくなります。
3. 最小構成を先に通す
次に、最小構成だけを作ります。
ここで大事なのは、最初から本番構成を目指さないことです。
例えばS3なら、最初は次のようなレベルで十分です。
- S3バケットを作る
- 必須項目だけ設定する
- デプロイが通ることを確認する
この段階では、細かいオプション設定は後回しにします。
- ライフサイクルルール
- ログ保存
- 暗号化の詳細設定
- CORS
- CloudFront連携
- 独自ドメイン
こうした設定は、最小構成が通ってから追加した方が安全です。
最初から全部入れると、失敗したときにどの設定が原因か分かりにくくなります。
IaC学習では、まず次の状態を作るのが重要です。
小さい構成でデプロイが通る
この状態があると、次の追加作業がかなり楽になります。
4. 1機能ずつ追加する
最小構成が通ったら、機能を1つずつ追加します。
このとき意識するのは、差分を小さく保つことです。
例えば、S3の設定に追加する場合でも、次のように分けます。
1. バケット作成
2. バージョニング追加
3. 暗号化追加
4. ライフサイクルルール追加
5. 静的Webサイトホスティング追加
一度に全部入れるのではなく、1つ追加して通す、また1つ追加して通す、という流れです。
追加前:通る状態
追加後:通る状態
この2つを維持すると、失敗したときに「直前に追加したものが原因」と判断しやすくなります。
学習初期ほど、変更量を小さくするのが効果的です。
5. エラーを再発防止メモに変える
IaC学習では、エラーは必ず出ます。
大事なのは、エラーをその場限りで終わらせないことです。
私は、エラーが出たら次のような形で簡単にメモしています。
エラー内容:
S3バケット名が重複してデプロイに失敗した
原因:
S3バケット名はグローバルで一意である必要がある
修正方法:
バケット名にランダム文字列や環境名を含める
次回の予防ルール:
S3バケット名は固定名にせず、重複しにくい命名にする
このようにメモしておくと、同じエラーに再度遭遇したときにかなり楽になります。
特に重要なのは、最後の次回の予防ルールです。
単に「直し方」を書くだけでなく、「次に同じミスをしないためにどうするか」まで書いておくと、学習効率が上がります。
よくある詰まりポイント
私が実際にIaC学習でつまずいたのは、だいたい次の4つです。
| 詰まりポイント | 起きやすいこと | 対策 |
|---|---|---|
| 何から決めるか分からない | いきなり全体を書こうとする | 目的を1行で固定する |
| 依存関係が分からない | 参照先や作成順で迷う | リソースを依存順に並べる |
| エラー原因が分からない | 変更量が多すぎて原因を追えない | 1機能ずつ追加する |
| 同じミスを繰り返す | エラーをその場で直して終わる | 再発防止メモを書く |
これらは「センスがないから」ではなく、進め方を決めていないと誰でも起きやすいものだと思います。
最初の題材は小さい方がよい
IaCを学ぶ最初の題材は、小さいものがおすすめです。
例えば、個人的には次のような順番が学びやすいと感じています。
1. S3バケット
2. S3静的Webサイトホスティング
3. Lambda単体
4. API Gateway + Lambda
5. DynamoDB + Lambda
6. CloudFront + S3
7. VPC / EC2 / RDS
最初からVPC、EC2、RDSを組み合わせた構成にすると、考えることが一気に増えます。
もちろん業務では複雑な構成を扱うことも多いですが、学習初期はまず小さく始めた方が理解しやすいです。
このテンプレを使うときのコツ
この進め方を使うときは、次の点を意識すると効果的です。
- 最初の目的は小さくする
- 1回で全部覚えようとしない
- 依存関係を文章で説明してから書く
- 変更は1つずつ行う
- エラーは再発防止メモにする
特に、依存関係を文章で説明できるかは大事だと思います。
例えば、
API GatewayはLambdaを呼び出すため、Lambda関数のARNを参照する
のように説明できると、テンプレートを書くときにも理解しやすくなります。
逆に、文章で説明できない状態で書き始めると、エラーが出たときに原因を追いにくくなります。
まとめ
IaC学習で挫折しやすいのは、YAMLやHCLの難しさだけが原因ではありません。
むしろ、学習の進め方が決まっていないことが大きいと感じています。
私が実際に効果を感じた進め方は、次の5つです。
- 目的を1行で固定する
- リソースを依存順に分解する
- 最小構成を先に通す
- 1機能ずつ追加する
- エラーを再発防止メモに変える
IaCは、最初から完璧なテンプレートを書く必要はありません。
小さく作って、通して、少しずつ追加する。
この流れを作るだけでも、学習のしんどさはかなり減ると思います。
おまけ:個人開発で考えていること
私はこの「YAMLを書く前に詰まる」課題を減らすために、IaC学習を進めやすくするUIベースの仕組みを個人開発しています。
テンプレートをいきなり書くのではなく、
目的を選ぶ
必要なリソースを整理する
設定項目を入力する
生成されたYAMLを確認する
という流れにすることで、IaC学習のハードルを少し下げられないかと考えています。
今後は、実際にどのUIがどのつまずきを減らせたかも、検証しながら記事にしていく予定です。
IaCを学習していて、
- ここで詰まった
- この順番で学ぶと分かりやすかった
- こういうテンプレがあると助かる
といった経験があれば、コメントで教えていただけるとうれしいです。