はじめに
システム開発推進部システム開発第4グループの岩田です。
最近、CloudFormationを使用してインフラの構築を行っています。
その際、複数人で開発を進める中で、CloudFormationのスタックをどのように分割すれば管理しやすくなるのかという課題に直面しました。
しかし、調べてみるとスタックの分割方法に明確な分割基準は無く、個人の裁量に委ねられているのが現状でした。
そこで本記事では、スタック分割における判断基準を提示したいと思います。
スタックを分割する方法を決めるきっかけになればと思います。
CloudFormationとは
CloudFormationとは、インフラ構築をコードで行うIaC(Infrastructure as Code)を実現するAWSのサービスのことです。
例えば、以下のようなインフラ構成も、
下記のようなコードで実現できます。
AWSTemplateFormatVersion: "2010-09-09" Resources: CloudFront: Type: AWS::CloudFront::Distribution Properties: S3: Type: AWS::S3::Bucket Properties: EcsCluster: Type: "AWS::ECS::Cluster" Properties: ⋮ |
IaCには、手作業による設定ミスを防ぎ、同じ環境を何度でも正確に再現できるといったメリットがあります。
また、CloudFormationはリソースの依存関係を自動で解決してくれます。
そのため、開発者はテンプレートファイルに利用したいAWSリソースを定義するだけでインフラ構築が可能になります。
スタックとは
スタックとは、AWSリソースの集合体のことです。1つのスタックには1つ以上のAWSリソースが関連付けられており、スタック単位でプロビジョニングされます。
つまり、スタックが同じAWSリソースは作成・更新・削除が同じタイミングで行われるということです。
AWS公式が提示するスタック分割方法
AWS公式のドキュメントには、以下の3つのスタック分割方法が提示されています。
1. すべてのリソースを1つのスタックにまとめる
小規模のサービスに関しては、すべてのリソースを1つのスタックにまとめておくのは良い手法です。
将来、リソースの追加でスタックの規模が大きくなった際に分割を検討すると良いでしょう。
2. 所有権による分割
複数人での開発において、グループの開発範囲ごとにスタックを分割する方式です。
例えば、DBを管理するチームとその他のインフラ(フロントやAPIなど)全般を管理するチームがある場合、DB関連のリソースをまとめたスタックと、その他のインフラをまとめたスタックに分けます。
チームごとにスタックを分けることで、スタックを更新した際に、他のチームのリソースに影響を与えずに済みます。
3. ライフサイクルによる分割
リソースの更新頻度や変更タイミングが似ているリソースごとにスタックを分割する方式です。
以下の2つは、ライフサイクルで分割する際の一般的なフレームワークです。
- 多層アーキテクチャー
多層アーキテクチャーとは、アプリケーションを機能単位でレイヤーに分けて開発/保守する方法です。Web3層システムなどが有名な構成例になります。
Web、API、DBを別のライフサイクルと定義して、各々を別スタックとして管理します。 -
サービス指向アーキテクチャー
サービス志向アーキテクチャーとは、システムの機能を独立したマイクロサービスごとにスタックを分割し、それらを組み合わせてシステムを構築する方式です。
マイクロサービスごとにスタックを分けることで、責任を分割して管理できます。
フローチャートでスタックの分割方法を決めよう
このように様々な分割方法が提示されているため、どれを採用すべきか迷ってしまいます。
そこで、分割方法を簡単に決められるフローチャートを提示したいと思います。
使用する際には以下の点に注意していただければと思います。
- プロジェクトやチームで分割基準がすでに決まっている場合はそちらを優先すること
- 分割方法を決める最初の一歩目として役立つように、大まかに作成していること
- ライフサイクルでの分割は、具体的なフレームワークで記載していること
スタック分割フローチャート
上記のフローチャートは、最も採用した方が良いと考えられる分割方法を1つ提示しています。
そのため状況に応じて、分割方法を2つ以上組み合わせても良いと思います。
例えば、所有権で分割したスタックを、さらにレイヤーで分割するのも一般的な手法です。
まとめ
本記事では、CloudFormationのスタック分割について、判断基準となるフローチャートを提示しました。
明確な分割基準が無い場合に、このフローチャートが分割方法を決める助けとなれば幸いです。
状況に応じて最適な分割方法を選択し、管理のしやすいインフラを目指しましょう。
参考文献
-
AWS CloudFormation とは
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html -
AWS CloudFormation のベストプラクティス ライフサイクルと所有権によるスタックの整理
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/best-practices.html#organizingstacks -
CloudFormationのベストプラクティスを整理する
https://zenn.dev/trkdkjm/articles/728cac0bbb8119 -
個人的 CloudFormation ベストプラクティスまとめ
https://qiita.com/hirai-11/items/62a4fea74cc6188cf8e9