🔖

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 の利用も検討すると良いでしょう。

参考

https://dev.classmethod.jp/articles/cloudformation-fn-include/

Discussion