0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YAML以前に挫折する人向け:IaC学習の進め方テンプレ

0
Posted at

IaCを学び始めたとき、私はYAMLの書き方そのものよりも、YAMLを書く前の段階で何度も手が止まりました。

具体的には、次のような状態です。

  • 何から決めればいいのか分からない
  • どのAWSリソースから作ればいいのか分からない
  • とりあえず書き始めたら、エラー修正だけで疲れる
  • 直しているうちに、最初に何を作ろうとしていたのか分からなくなる

CloudFormationやTerraformを学ぶとき、どうしても「構文」や「書き方」に目が行きがちです。
もちろん文法も大事ですが、実際に学習していて感じたのは、IaCは書き方より前に、進め方を決めておくことがかなり重要だということです。

この記事では、CloudFormationやTerraformなどのツールに依存しない、IaC学習を進めるためのテンプレートを紹介します。


この記事の対象

この記事は、次のような人向けです。

  • IaCを学び始めたばかりの人
  • CloudFormationやTerraformで何度もエラーになっている人
  • YAMLやHCLを書く前に、何を整理すればよいか分からない人
  • 小さく作って、少しずつ理解したい人

逆に、CloudFormationやTerraformの高度な構文テクニックを知りたい方向けの記事ではありません。


先に結論:IaCは「書き方」より「進め方」で差が出る

IaC学習で詰まりやすい原因は、主に次の3つだと感じています。

  • いきなりテンプレート全体を書こうとする
  • サービス同士の依存関係を整理せずに実装を始める
  • エラーが出るたびに場当たりで修正する

逆に、次の流れで進めるとかなり安定します。

  1. 目的を1行で固定する
  2. リソースを依存順に分解する
  3. 最小構成を先に通す
  4. 1機能ずつ追加する
  5. エラーを再発防止メモに変える

この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行で固定する
  2. リソースを依存順に分解する
  3. 最小構成を先に通す
  4. 1機能ずつ追加する
  5. エラーを再発防止メモに変える

IaCは、最初から完璧なテンプレートを書く必要はありません。

小さく作って、通して、少しずつ追加する。
この流れを作るだけでも、学習のしんどさはかなり減ると思います。


おまけ:個人開発で考えていること

私はこの「YAMLを書く前に詰まる」課題を減らすために、IaC学習を進めやすくするUIベースの仕組みを個人開発しています。

テンプレートをいきなり書くのではなく、

目的を選ぶ
必要なリソースを整理する
設定項目を入力する
生成されたYAMLを確認する

という流れにすることで、IaC学習のハードルを少し下げられないかと考えています。

今後は、実際にどのUIがどのつまずきを減らせたかも、検証しながら記事にしていく予定です。

IaCを学習していて、

  • ここで詰まった
  • この順番で学ぶと分かりやすかった
  • こういうテンプレがあると助かる

といった経験があれば、コメントで教えていただけるとうれしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?