🔖
CloudFormation の AWS::Include 変換とは?再利用性を高める仕組みを解説
はじめに
AWS CloudFormation を使っていると、テンプレートがどんどん肥大化して「管理が大変だな…」と感じることはありませんか?
セキュリティグループや IAM ロールなど、複数のスタックで使い回すリソースを毎回コピペしていると、修正の手間も増えてしまいます。
そんなときに役立つのが AWS::Include 変換 です。
AWS::Include 変換とは?
AWS::Include は、CloudFormation が提供する マクロの一種 です。
S3 に保存した YAML / JSON ファイルを読み込み、テンプレートに展開してくれます。
要するに、CloudFormation の「外部ファイル取り込み」機能です。また、大きなテンプレートを分割したり、共通部品を使い回すのに便利です。
具体的な使い方
例えば、セキュリティグループの定義を他のテンプレートでも使い回したいケースを考えてみましょう。
共通リソースファイル(S3 に配置)
# security-group.yaml
MySecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow SSH
VpcId: vpc-12345678
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
メインテンプレート
Resources:
MySG:
Type: AWS::Include
Properties:
Location: s3://my-bucket/security-group.yaml
このように書いてデプロイすると、CloudFormation が security-group.yaml を読み込み、Resources に展開して処理してくれます。
まるで直接書いたかのように扱えるのがポイントです。
メリットと注意点
メリットとしては、以下の通りです。
- 再利用性の向上:共通パーツを切り出して、複数のテンプレートから呼び出せる。
- メンテナンス性の向上:修正は S3 上の 1 ファイルだけで OK。管理が楽になる。
- テンプレート分割:大規模なテンプレートをスリムに保てる。
ただし、下記のような注意点があります。
- インクルードするのは テンプレートの一部(スニペット) であり、CloudFormation 全体の構造は書けない。
- ファイルは S3 に置く必要がある。ローカルファイルは直接参照できない。
- 複雑な処理はできず、あくまで「貼り付け」するだけのシンプルな仕組み。
まとめ
AWS::Include 変換は、CloudFormation テンプレートの 再利用性を高める便利な仕組み です。
大きなテンプレートを整理したり、共通リソースを一元管理したいときに役立ちます。
ただし、より高度な再利用を考えるなら CloudFormation Modules や AWS CDK の利用も検討すると良いでしょう。
参考
Discussion