リソース管理の効率化を可能にするAWS CloudFormation
はじめに
AWS CloudFormationは、以下のことを目的としてよく利用されています。
- AWSリソースの構築と管理を効率化したい
- 開発標準に基づいてインフラストラクチャを作成・変更したい
- リソースの依存関係やプロビジョニングの順序を確実にしたい
- ソフトウェアのようにインフラストラクチャをコード化し、バージョン管理、レビューをしたい
AWS CloudFormationとは
Amazon Web Services(AWS)のサービスの1つで、AWSでのプロビジョニングと管理を単純化するサービスです。使用者側はAWSリソースに関わるテンプレートを作成し、AWS CloudFormationに読み込ませると、AWSCloudFormationがAWSリソースのプロビジョニングや設定を行います。その上、リソース及びリソースの構築順はテンプレートの依存関係からAWS CloudFormationが自動的に決定するので、リソース管理に割く時間を減らすことができます。
AWS CloudFormationの特徴
ー インフラストラクチャをテキストファイルでモデル化可能
AWS CloudFormationでインフラストラクチャをプロビジョニングすると、AWS CloudFormationテンプレートにプロビジョニングされたリソースやその設定が正確に記述されます。これらのファイルはテキストファイルであるため、開発者がソースコードの変更を管理するようにテンプレート間の違いを追跡することで、インフラストラクチャに対する変更を追跡できます。
ー 安全な管理ができる
インフラストラクチャのプロビジョニングと更新が自動化されています。これにより、エラーにつながる手動による細かい作業や管理が必要なくなります。
ー 環境に対する変更のプレビューができる
リソースに変更を加える前に、変更案の概要である変更セットを生成します。この変更セットを使用することで、変更が実装中のリソースに与える影響をプレビューすることができます。
ー 依存関係を自動で行う
スタックの作成・変更・削除中のリソース間の依存関係は、AWS CloudFormationが自動で管理してくれます。
ー クロスアカウントとクロスリージョンの管理が可能
StackSetsを使用して1つのAWS CloudFormationのテンプレートを使用して、複数のアカウントやリージョンに同じリソースの集合体をプロビジョニングすることができます。
ー バージョン管理でテンプレートをチェック可能
全ての変更トラックをインフラストラクチャとアプリケーションスタックに適用することができます。ソフトウェアコードで管理する方法と同じように、インフラストラクチャアーキテクチャのバージョン管理をすることができます。
AWS CloudFormationのメリット
- 一度テンプレートを作成すると同じ構成や似た構成の環境を迅速かつ簡単に再現でき、開発期間を短縮することができる
- 使いやすい形や使い慣れたフォーマットを「ベストプラクティス」なテンプレートとして保存し、繰り返して使用することができる
- テンプレートを利用すると、必要な項目の抜けや漏れを防ぐことができる
- AWS CloudFormationがリソースを一括管理するので個別の管理が不要で、依存関係も自動的に管理してくれる
- リソースのプロビジョニングや更新はAWS CloudFormationが自動で行うため、エラーが発生しにくい
- 同じテンプレートやリソースを使うので、新しいシステムでも事前に運用コストを予測することができる
- 料金はAWSリソースに対して発生するが、AWS CloudFormationは無料で利用することができる
AWS CloudFormationのデメリット
- 部分的な修正でも再度テンプレートからスタックを作成して適用する必要があるため、手動で修正するよりも時間がかかる
- 繰り返しスタックの作成と削除を行っていくと、AWSリソースの作成上限に達する可能性がある
AWS CloudFormationの使い方
AWS CloudFormationを使用する際は、テンプレートとスタックの作業を行います。テンプレートとはJSON/YAML形式で作成されたテキストファイルで、AWSリソースを作成する際の設計図として使用します。1つのテンプレートから本番環境やステージ環境、開発環境を作成することができます。
スタックとは、テンプレートからプロビジョニングされるリソースの集合体です。スタック単位でリソースの管理が可能で、使用するリソースの構築順はテンプレートの依存関係からAWS CloudFormationが自動的に決定します。スタックの作成方法は、マネジメントコンソールやコマンドラインツール、SDKで可能です。
テンプレートの決定からプロビジョニングまでの流れ
はじめにAWS CloudFormationにアップロードするテンプレートを決定します。これには以下の2通りの方法があります。
- インフラストラクチャやアプリケーションスタックを構成する全AWSリソース設定を定義するための設計図となるテンプレートファイルをJSON/YAML形式のテキストで作成する
- AWS CloudFormationが提供する既存のサンプルテンプレートを選択する
テンプレートを決定した後は、AWS CloudFormationにそのテンプレートをアップロードします。するとAWS CloudFormationがAWSのスタック内のリソースのプロビジョニングと設定を行います。このとき、必要に応じてインスタンス数やインスタンスタイプのパラメータを選択することができます。修正テンプレートをアップロードすると、スタックをいつでも更新することができます。
まとめ
この記事ではAWS CloudFormationの特徴やその使い方について解説しました。テンプレートやスタックの作成方法といった使い方を理解する必要はありますが、効率的なリソースの構築と管理を可能にし、手動によるエラーの発生を防ぐことができる便利なサービスです。