AWSサービス「AWS CloudFormation」について

昨今、デジタル技術による業務やビジネス変革に向けて「DX(デジタルトランスフォーメーション)」への対応が、企業に対して急速に求められるようになりました。
それに伴い、企業活動を支えるITサービス基盤に対しても、ビジネス変革のスピード感に合わせた迅速な対応が急務となってきました。
今回の記事では、ビジネス変革のスピード感を実現するためにニーズが高まっている「AWS CloudFormation」サービスに関して、これから利用される方を中心に、サービスの概要、特徴や利用方法について解説していきます。
「AWS CloudFormation」とは?
「AWS CloudFormation」とは、AWS上でのサーバやデータベース等の環境構築を「コード」の記述で可能とするサービスです。
この「コード」は、「テンプレート(※後述します)」と呼ばれるシンプルなテキストファイルで作成されており、この中でサーバやデータベース等のAWSリソースを定義します。
これは「Infrastructure as Code(コードとしてのインフラストラクチャ)」と呼ばれる考え方に基づいており、ソフトウェアのようにインフラを管理できる点がメリットとなっています。
「プロビジョニング」とは?
「プロビジョニング」とは、サーバやデータベース等のリソースについて、利用者からの申請や要請に応じて必要な分だけ割り当てを行うサービスです。
元々は通信業界において、携帯電話用アンテナ基地の急増に備えて通信機器を利用可能な状態で用意しておくことを意味していました。
AWSでは、転じて必要なサーバやデータベース等のリソース一式をコードで記載しておいて(テンプレート)、必要に応じて環境構築できるようにしておくことを指しています。
つまり言い換えれば、「AWS CloudFormation」とは、テンプレートを利用してAWSリソースをプロビジョニングするサービスとも言えます。
「テンプレート」とは?
「AWS CloudFormation」サービスの中心部分であり、どのAWSリソースをどのように起動するかを記述するファイルです。
「JSON形式」もしくは「YAML形式」のフォーマットで記述します。なお「YAML形式」の方が直感的に分かりやすくコメントが追加可能であるため、一般的にこちらを利用するケースが多いです。
AWSリソース間には、構築の順序等で依存関係が発生しますが、「AWS CloudFormation」ではこの依存関係を自動的に判断してくれます。
「スタック」とは?
「スタック」とは、「テンプレート」によってプロビジョニングされる「リソースの集合体」のことです。「AWS CloudFormation」は、このスタック単位でリソース一式を管理しています。
このスタックを削除すると、依存関係があるAWSリソースもすべて削除されます。
またこの依存関係(使用するリソースの順序やリソースの構築順序)は、テンプレートの依存関係を「AWS CloudFormation」が自動的に判断してくれます。
「AWS CloudFormation」の特徴や利用方法について

それでは、「AWS CloudFormation」の特徴や利用方法について詳しくみていきましょう。
「AWS CloudFormation」の特徴とは?
「AWS CloudFormation」には、以下のような特徴があります。
(1)一番の特徴は、テンプレートを一度作成すれば、同じ構成を簡単に再現できる点です。特に構築やデプロイ自動化サービスの構成要素として利用されることもあります。
(2)AWSのベストプラクティスが盛り込まれた既存テンプレート(AWS社等が提供しています)を使用可能です。
(3)既存テンプレートを流用することで、簡単に「可用性」が高い構成が可能になります。例えば、複数のアベイラビリティーゾーンを横断しながらAWSリソースを配置することも可能です。
(4)さらに既存テンプレートを流用することで、セキュリティ要件を満たすために必要なソフトウェアや各種設定を簡単に組み込むことができます。
「AWS CloudFormation」の具体的な利用手順
それでは「AWS CloudFormation」の具体的な利用手順について、AWS上で「WordPress」構築する例でみていきましょう。
ちなみに「WordPress」は、いわゆる「CMS(コンテンツマネジメントシステム)」の一つで、Webサイトを簡単に構築や管理できる人気のツールのことです。
<利用手順>
(1)「テンプレート」ファイルをYAMLやJSONのフォーマットで作成する
(2)AWSのマネジメントコンソールにログインして、CloudFormationの管理画面に移動する
(3)「スタックの作成」ボタンをクリックして、「スタック名」や「パラメータ」等を入力しながらスタックを作成する
(4)作成したCloudFormationスタックの出力タブを開き、この情報をもとに「WordPress」の初期設定を完了させる
(5)作成したスタックに基づいて、各AWSリソースを起動する
「テンプレート」の具体例
以下のAWSリソースを構築する場合の「テンプレート」の具体例を以下に示します。
<テンプレート例>
# テンプレートのバージョン説明
AWSTemplateFormatVersion: 2020-11-11
# テンプレートの詳細説明
Description: Test template for EC2
# スタック構築時にユーザーに指定してもらう値の定義
Parameters:
VPCStack:
Type: String
Default: test-cfn
…
# スタックを構成しているEC2やRDS等の起動するリソースのプロパティ等を指定
Resources:
EC2WebServer01:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref EC2AMI
…
# スタック構築後の取得値や他スタックとの連携用出力を指定
Outputs:
EC2WebServer01:
Value: !Ref EC2WebServer01
Export:
Name: !Sub ${AWS::StackName}-
※一部省略しています
「AWS CloudFormation」の利用上の注意点
以下のような注意点があります。
(1)「AWS CloudFormation」で作成したものは「AWS CloudFormation」で削除する必要があります。削除の際に、依存関係に沿って順番に削除していく必要があるためです。
(2)「テンプレート」作成の学習コストが掛かります。そのため小規模な開発の場合は、手動での実行の方が一時的には早くなりますが、ある程度システムが成熟してきた段階で「AWS CloudFormation」でのプロビジョニングに切り替えるのが一般的です。
(3)「テンプレート」は管理をしやすくするため、サイズを大きくしすぎないようにします。コードが大規模化すると記述ミスが発生しやすくなり、プロビジョニング後のリソース起動もコードに合わせてトラブル発生時の影響範囲も拡大してしまいます。
その他の便利な機能
これまで紹介した機能の他に、知っておくと役に立つ機能をご紹介していきます。
(1)「マクロ(Macro)機能」
テンプレートの標準的な機能では実現できない処理について、Lambda関数を呼び出すことで実現する機能です。検索や置換等の単純な操作からテンプレート全体の変換まで独自の処理が可能となります。
なおLambda側のコンソール画面でリソースの作成や削除が可能ですが、これまで述べたように依存関係を考慮して、「AWS CloudFormation」側で実施します。
(2)「ドリフト検出(Drift Detection)」機能
テンプレートでスタックを作成した後に、コンソールやコードのドリフト(手動変更)を検出する機能です。スタック全体に対して、ドリフトを検出して、結果を数分以内で確認できます。
(3)リソースのインポート機能
比較的新しい機能ですが、手動で作成したAWSリソースを作成済のスタックにインポートして管理することが可能になりました。またリソースをスタックから切り離して、別のスタックに移動することも可能です。
(4)「Cloud Former」
構築済の環境を元にしてテンプレートを作成する機能です。通常はテンプレートをコードで記述していきますが、コードの記述ミス等で「AWS CloudFormation」による構築完成までが困難という問題がありました。
この機能では、手動で安定した環境構築を最初に行い、動作に問題ないことを確認した後に「Cloud Former」を使用してテンプレートを作成します。これにより、確実に動作するテンプレートを作成することができます。
「AWS CloudFormation」の学習方法について
最後に「AWS CloudFormation」の学習方法について簡単にご紹介しておきます。
AWSの公式サイトではチュートリアルが用意されており、これに沿ってハンズオン形式で進めることができます。
またWebinar(Web上でのオンラインセミナー)も定期的に開催されています。
これらの学習サイトを活用して、「AWS CloudFormation」による環境構築の自動化を目指してみてはいかがでしょうか。]]>