AWS CloudFormationでリソースの構築を自動化

AWS CloudFormation は、テキストファイルを使用してファイルを作成することにより、AWSリソースの構築や再構築の自動化を実現することができる、AWSが提供する共通言語です。自動化により構築や運用の手間や負担を大きく軽減させられるだけではなく、リソースの可視化により再現性を持たせることができるなどのメリットが享受できます。

今回は、AWS CloudFormationの概要やAWSが推奨するベストプラクティスなどについて紹介します。

AWS CloudFormationとは?

AWS CloudFormationは、どのようなものなのでしょうか。

AWS CloudFormationの概要

AWS CloudFormationはAmazon Elastic Compute Cloud (EC2)やAmazon Relational Database Service (Amazon RDS)などのAWSリソースプロビジョニングのためのサービスです。通常、リソースを作成する際にはAWSマネジメントコンソールやAWS CLIなどを使用して、一つひとつ設定やプログラム作成を行いますが、AWS CloudFormationを使ってテンプレートを作成すれば同じ構成を何度も利用することができます。具体的には、JSON/YAML形式のテキストで記述されたテンプレートを、AWS CloudFormation のフレームワークでスタック(単一もしくは複数のテンプレートにより作成される、管理可能なリソースの集合体・コレクション)を作成・更新します。そして、スタックを一つのかたまり(管理対象)として利用し、設計・設定することによりAWSリソースをプロビジョニングします。

少しややこしいのですが、「テンプレート」は、どのAWSリソースをどのような設定で記述するかを記述したもので、「スタック」はテンプレートからプロビジョニングされるAWSリソースの集合体、スタック単位での管理ができるものです。スタックを作成したり更新したりすることにより、複数のリソースをまとめて管理・更新することができます。

AWS CloudFormationのメリット

AWS CloudFormationを利用することで、以下のメリットが享受できます。

モデル化(同じインフラ構成をすぐに再現できる)

AWSマネジメントコンソールで作成する際には同じ操作を何度も行う必要がありますが、AWS CloudFormationでモデル化することにより操作の手間を軽減できます。

自動デプロイ(プロビジョニングされる)

テンプレートからAWSリソースを自動構築できますので、作業が効率化できます。

インフラ構成をバージョン管理できる

インフラ構築手順をコード化(ファイル化)することにより、ソフトウェア管理と同様の手順で、インフラ構成のバージョン管理を行うことができます。

AWS CloudFormationの仕組み

AWS CloudFormationには通常利用時とスタック更新時の動作の流れがあります。

通常利用時のワークフロー

テンプレート・スタックの作成、自動プロビジョニングなどを行います。テンプレートの作成を行った際にはAmazon Simple Storage Service(Amazon S3)などに保存されます。

スタック更新時のワークフロー

更新を実行すると、現在のテンプレートとの違いを確認し必要なリソースのみが更新されます。更新を行わないリソースは、通常通り利用が可能です。更新を実行するリソースは、リソースの種類によって実行できるものとできないものとがあります。スタックの更新に関しても、S3などに保存されます。(ローカルコンピューターに保存されたテンプレートは自動的にAWSアカウントのS3バケットにアップロードされます)

更新時の挙動

インスタンスタイプを変更するとインスタンスは再起動します。

スタックの削除

スタックを削除すると、スタック内のAWSはすべて削除されます。

AWS CloudFormationの料金

AWS CloudFormationは、AWSアカウントをお持ちの方ならば無料で利用することができます。

AWS CloudFormationの使い方とベストプラクティス

AWS CloudFormationの使い方とベストプラクティスについて解説します。

AWS CloudFormationのテンプレートの書き方

AWS CloudFormationは、JSON形式もしくはYAML形式を使って記述します。どちらを使用するかは好みや慣れにもよりますが、YAMLの方が可読性に優れていると言われていますので、YMALを使用した方が便利でしょう。

AWS CloudFormationのベストプラクティス

AWS CloudFormationを安全かつ効率的に使用するベストプラクティスをいくつか紹介します。

スタックによるライフサイクルと所有権を持つリソースグループの管理

規模の大きなシステムではAWSのリソース管理が煩雑になりがちですが、共通ライフサイクルと所有権を持つリソースをグループ化することにより、スタックを単位とした管理が可能となります。所有権を持つ所有者は、対象のスタックを利用するスケジューリングなどにより、グループ化されたリソースを変更できるようになります。

共有リソースのエクスポート

スタックからリソースをエクスポート(出力)することにより、自動化したリソースを他のスタックに活用、もしくは別のスタックにあるリソースを使用してスタックを構築することができます。

IAM権限を利用したアクセス制御

IAMのアクセス権限に対応させた、AWS CloudFormationのアクセス制御(対象リソースに対してユーザーができる起動・更新・終了などのアクション)を行うこともできます。

テンプレートを再利用してスタックを複製できる(本番環境とテスト環境の場合など)

テンプレートを活用することにより、本番用の環境とテスト用の環境など複数のスタックを複製することができます。

スタックポリシーの利用

スタックポリシーを適切に設定・指定することにより、リソースを意図しない更新から防ぎ保護することができます。

AWS CloudFormationですべてのAWSリソースを管理する

スタックを更新する際には、AWS CloudFormationコンソール、API、またはAWS CLIを使用して更新するようにしてください。これら以外の方法によって更新した場合は、スタック間のテンプレートとスタックリースの現在の状態の間で不一致が起こり、エラーが発生する場合があります。

AWS CloudFormationにおける運用

AWS CloudFormationの運用方法についていくつかのパターンを解説します。

1テンプレート、1アーキテクチャ

1つのアーキテクチャ(システム構成)に対して、1つのテンプレートのみを利用するタイプです。簡易的な運用方法であるため、部分的にAWSを導入している企業などで活用されます。

個別テンプレートを1スタックで運用

Webサーバー、RDS、ストレージなどそれぞれに個別のテンプレートを設定し、ひとつのスタックで運用する方法です。スタックがひとつということで、手軽に管理・運用できるというメリットがあります。

個別テンプレートを個別スタックで運用

個別のテンプレートを個別スタックで運用するタイプです。より細やかな運用を行うことができますが、初期設定にかなり時間と手間をとられてしまうというデメリットがあります。

スタック間の連携

クロススタックの使用により、異なるスタックのテンプレートを活用してスタックを作成することができます。

まとめ

AWS CloudFormationを活用することで、AWSの構成を自動化することができます。AWSアカウントを持つ方であれば無料で利用できる機能なので、AWS CloudFormationを活用することで作業の軽減とリソース構築の再現性確保が期待できます。

AWS上のシステム構築や運用にはさまざまなバリエーションが考えられます。AWS CloudFormationのベストプラクティスを参考にするとAWS上のシステムの活用方法や運用・管理方法についての新たな気づきが得られるかもしれません。自社に合った方法でAWS CloudFormationを設計してみてはいかがでしょうか。

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る