AWS CloudFormationテンプレートの構文を完全解説!YAMLとJSONの書き方を初心者向けにやさしく理解
生徒
「AWS CloudFormationって聞いたことはあるんですが、テンプレートの書き方が難しそうで不安です」
先生
「AWS CloudFormationは、インフラ構成を文章で書いて自動化できる仕組みです。構文さえ理解すれば、初心者でも十分に扱えますよ。」
生徒
「YAMLとかJSONって何が違うんですか?」
先生
「それぞれの特徴や基本構文を、順番にわかりやすく見ていきましょう。」
1. AWS CloudFormationとは何か
AWS CloudFormation(エーダブリューエス クラウドフォーメーション)は、AWSのインフラ構成を自動で作成・管理できるサービスです。サーバーやネットワーク、ストレージなどを手作業で設定するのではなく、テンプレートと呼ばれる定義ファイルを使って一括で構築できます。
インフラ自動化という考え方は、人の操作ミスを減らし、同じ構成を何度でも再現できる点が大きな特徴です。AWS CloudFormationを使うことで、作業の効率化と安定した環境構築が可能になります。
2. CloudFormationテンプレートの役割
CloudFormationテンプレートとは、AWSリソースの設計図のようなものです。テンプレートには、どのサービスを、どの設定で、どの順番で作るかが書かれています。
このテンプレートをAWSに渡すと、内容を読み取って自動的に環境を構築してくれます。テンプレートは人が読む文章としても重要で、後から見返したときに構成が分かりやすいことも大切です。
3. YAMLとJSONの違いを理解しよう
AWS CloudFormationテンプレートは、YAML(ヤムル)またはJSON(ジェイソン)という形式で記述します。YAMLは見た目がシンプルで、人が読み書きしやすい形式です。一方JSONは、機械処理に向いており、記号が多いのが特徴です。
初心者にはYAMLが人気ですが、JSONも基本構造 known しておくと役立ちます。どちらを使っても、CloudFormationの機能自体に違いはありません。
4. YAML形式の基本構文
YAML形式では、インデント(字下げ)を使って構造を表現します。スペースの数が重要で、揃っていないとエラーになります。キーと値は「:」で区切って書きます。
AWSTemplateFormatVersion: '2010-09-09'
Description: サンプルのCloudFormationテンプレート
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
このように、階層構造が目で見て分かりやすいのがYAMLの特徴です。
5. JSON形式の基本構文
JSON形式では、波括弧「{ }」や角括弧「[ ]」を使って構造を表現します。キーと値は必ずダブルクォーテーションで囲みます。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "サンプルのCloudFormationテンプレート",
"Resources": {
"MyEC2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro"
}
}
}
}
記号が多いため最初は難しく感じますが、構造自体はYAMLと同じ考え方です。
6. よく使うテンプレート構成要素
CloudFormationテンプレートには、いくつか決まったセクションがあります。代表的なものが、AWSTemplateFormatVersion、Description、Resourcesです。
Resources(リソーシズ)は、読み方はResources(リソーシズ)で、実際に作成するAWSサービスを定義する重要な部分です。ここにEC2やS3などの設定を書きます。
7. インデントと構文エラーの注意点
YAMLでは、インデントのズレがそのままエラーにつながります。タブではなく、スペースを使うことが基本です。JSONでは、カンマの付け忘れや括弧の閉じ忘れに注意が必要です。
エラーが出た場合は、まず構文が正しいかを落ち着いて確認しましょう。多くの場合、ちょっとした記号ミスが原因です。
8. 初心者がつまずきやすいポイント
初心者がつまずきやすいのは、YAMLとJSONの書き方を混同してしまう点です。どちらか一方に慣れてから使うのがおすすめです。
また、CloudFormationは一度作った構成を変更する仕組みも特徴です。テンプレートを修正して再実行することで、インフラを安全に更新できます。
まとめ
AWS CloudFormation(クラウドフォーメーション)の基本構文や、YAMLとJSONの記述方法について詳しく解説してきましたが、いかがでしたでしょうか。これまで手動で行っていたAWSリソースの構築作業を、プログラムのようにコードで管理する「Infrastructure as Code (IaC)」の概念は、現代のクラウド運用において欠かせないスキルとなっています。
CloudFormation習得のメリットと運用のコツ
CloudFormationを利用することで、誰が実行しても同じ環境が作成できる「再現性」が担保されます。これは、開発環境、テスト環境、本番環境を全く同じ構成で揃えたい場合に非常に強力な武器となります。また、テンプレート自体が「構成図」の役割を果たすため、設計ドキュメントの更新漏れを防ぐことができるのも大きな利点です。
実際に運用を始める際は、まずは小規模なS3バケットの作成や、VPCの構築から手をつけるのがおすすめです。複雑な構成にいきなり挑戦するのではなく、小さなテンプレートを積み重ねていくことで、エラーへの対処法やセクションごとの役割が自然と身についていきます。特に、スタックの作成に失敗した際の「ロールバック」機能などは、実際に手を動かして経験しておくことで、いざという時の安心感に繋がります。
実践的なテンプレート例:VPCとSubnetの構築
ここでは、学んだ内容を復習するために、ネットワークの基盤となるVPCとサブネットを作成する具体的なYAMLテンプレートの例を見てみましょう。インデントの構造や、論理IDの付け方に注目してください。
AWSTemplateFormatVersion: '2010-09-09'
Description: VPC and Public Subnet for Practice
Resources:
# VPCの定義
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: MyPracticeVPC
# パブリックサブネットの定義
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
AvailabilityZone: ap-northeast-1a
Tags:
- Key: Name
Value: MyPracticeSubnet
コマンドラインでの操作:AWS CLIの活用
テンプレートが完成したら、AWSマネジメントコンソールからアップロードするのも良いですが、開発効率を上げるためにはAWS CLI(コマンドラインインターフェース)での操作も覚えておくと便利です。以下のコマンドは、作成したテンプレートを検証し、実際にスタックを作成する際の流れです。
aws cloudformation validate-template --template-body file://template.yaml
{
"Parameters": [],
"Description": "VPC and Public Subnet for Practice",
"Capabilities": [],
"CapabilitiesReason": "",
"DeclaredTransforms": []
}
エラーがなければ、続けてスタックを作成します。
aws cloudformation create-stack --stack-name my-first-stack --template-body file://template.yaml
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:123456789012:stack/my-first-stack/abcdefg-1234-5678"
}
さらなるステップアップに向けて
基本をマスターしたら、次は「Parameters」セクションを使って実行時に値を変更できるようにしたり、「Outputs」セクションを使って作成したリソースの情報を他のスタックに渡したりする応用テクニックに挑戦してみましょう。AWS CloudFormationは奥が深いサービスですが、一度覚えてしまえばインフラ管理の負担を劇的に減らすことができます。ぜひ、日々の運用に取り入れてみてください。
生徒
「先生、ありがとうございました!YAMLのインデントを正しく揃えるだけで、あんなに複雑な設定がスッキリ見えるなんて驚きです。JSONよりも視覚的に分かりやすくて、初心者の僕にはYAMLの方が取っつきやすい気がしました。」
先生
「そうですね。YAMLはコメントも書けるので、なぜその設定にしたのかをメモしておくのにも適しています。一方で、システム間の自動連携などでプログラムからテンプレートを生成する場合は、JSONの方が扱いやすいこともあるんですよ。適材適所ですね。」
生徒
「なるほど。さっきのサンプルコードにあった『!Ref』という記法は何ですか?初めて見ました。」
先生
「それは『組み込み関数』の一つですね。!Refは他のリソースを参照するときに使います。例えば、VPCを作ってからそのVPCの中にサブネットを作りたい場合、『さっき作ったVPCのIDを使ってね』と指示を出しているんです。これによって、リソース同士の依存関係をCloudFormationが自動で判断して、正しい順番で作ってくれるんですよ。」
生徒
「自動で順番まで考えてくれるなんて賢いですね!もし書き間違えてエラーになっちゃった時はどうすればいいですか?」
先生
「エラーメッセージをよく読むことが一番の近道です。CloudFormationのイベントログを見ると、『どのリソースで何が原因で失敗したか』が詳しく表示されます。さっき紹介したCLIのvalidate-templateコマンドを使えば、事前に構文ミスをチェックできるので、積極的に活用してみてください。」
生徒
「まずは簡単なネットワーク構成から、自分で書いて動かしてみようと思います。実際にAWSの画面でリソースが勝手に出来上がっていくのを見るのが楽しみです!」
先生
「その意気です。実際に動かしてみることで、ドキュメントを読むだけでは得られない気づきがたくさんあります。頑張りましょう!」