AWSの各種リソースを使えば、クラウド上に望むシステムを構築できます。構築するには、ログイン後に、AWSのコンソールからリソースを選択し、必要ならタイプも選択する、名前を決めるといった作業を行います。こうした作業は簡単ですが、もしシステムを10、20用意するとなると、いささか時間がかかります。そこでAWSには、こうした設定の作業をJSONやYAML形式のテキストで記載することで、自動的に構築できるAWS CloudFormationというサービスがあります。
AWS CloudFormation(cfn)とは
AWS CloudFormationは、AWSリソースを自動作成するサービスです。どのリソースをどう設定して利用するかを記載したテンプレートと呼ばれる設計図(JSONやYAML形式のテキストファイル)に基づいて、AWSリソースを自動的に構築できます。テンプレートがあれば、望むAWSリソースを容易に自動で、いくつでも準備できますので、環境構築の作業工数を大幅に削減できるのです。またリソース構築でのミスをなくすこともできますし、誰が実行しても同じ結果を期待できます。
また、AWS CloudFormationは、自動でシステムを配備できることから、DR(ディザスタリカバリ、災害の復旧)としての利用が可能です。東京リージョンで起動中のシステムがダウンした場合に、すぐさまAWS CloudFormationを利用して大阪リージョンに同じシステムを自動で立ち上げるといった設定も可能です。
テンプレートは自身で1から作成できますし、サンプルを利用してさらに工数を減らすこともできます。AWS CloudFormationで扱えるリソースは基本AWS関連*1のものですが、カスタム リソースという手法を使うと、AWS CloudFormationがサポートしていないAWS リソースや、サードパーティーのリソースも管理できます。
*1:AWS CloudFormation で扱えるリソース一覧
当社NHNテコラスでは、AWS CloudFormationによるAWS環境構築のご相談を承っております。AWSの活用を支援する AWS総合支援サービス C-Chorus からは、システムの導入、最適化のご提案や技術支援を行っております。
プロビジョニングとは
AWS CloudFormationはテンプレートに基づいて、AWSの各種リソースを利用できる状態に構築します。ユーザーからの申請や要請によって、必要なリソースを必要な分だけ割り当ててくれて、すぐに使えるように準備する作業をプロビジョニング(Provisioning)と言います。AWS CloudFormationの場合は「テンプレートを元にAWSリソースをプロビジョニングするサービス」と言うことができます。プロビジョニングとは、もともとは通信業界で使われていた言葉で、携帯電話用アンテナ基地を携帯電話が利用できる状態にしておくという意味です。
Infrastructure as Codeとは
AWS CloudFormationは、コンピューティング環境(インフラストラクチャ)をテンプレートに記載されたコードを元に構築してくれます。このようにコードを元に環境を構築する手法を、Infrastructure as Code(IaC)と呼び、AWS CloudFormationは、AWSにおけるIaCのためのツールとなります。IaC用のツールはAWS CloudFormation以外にも、HashiCorp社が提供するオープンソースの「Terraform」など市場にはいろいろなツールが用意されています。
サンプルテンプレートも豊富
AWS CloudFormationのテンプレートは、JSONやYAML形式のテキストファイルです。そのためAWSの公式サイトやインターネット上には、いろいろなAWS CloudFormationのテンプレートがアップロードされています。AWS公式サイトには「ストレージ用ローカル MySQL データベースを使って、1 つの Amazon EC2 インスタンスに WordPress をインストール、デプロイします」といったサンプルがあります。またインターネットには、これらのサンプルを使って、テンプレートの書き方などの紹介も多数見られます。サンプルをベースに、希望するシステム構成のテンプレートを用意すれば、テンプレート作成の手間も大きく減らせます。
AWS CloudFormation のテンプレート
AWS CloudFormationの料金
このように便利なAWS CloudFormationですが、利用料金はかかりません。ただしAWS CloudFormationを利用して構築したシステム内のAWS各種リソースについてはそれぞれ料金がかかります。無料なのは、AWSの各種リソースをテンプレートに沿ってプロビジョニングするまでの作業に対してです。リソースが稼働すると、そこでは料金が発生します。
▼ エンジニアの運用負担を軽減!最適なシステム構成もご提案する運用代行サービス!
AWS CloudFormationの使い方
テンプレートでAWSリソースをプロビジョニングできるAWS CloudFormationの使い方を、テンプレートの作り方を含めて紹介します。
まずは「スタックの作成」が必要
AWS CloudFormationとテンプレートによってプロビジョニングしたAWSリソースの集まりを「スタック」と言います。またAWS CloudFormationによって作成したスタックは、スタック単位で管理します。
テンプレートはJSONまたはYAMLで記述
テンプレートそのものは、JSONもしくはYAML形式のテキストファイルです。テキストエディタがあれば誰でも作成できます。テンプレートでは、パラメータの定義、リソースの作成、実際の設定などを行います。またスタックの規模が大きくなると当然テンプレートも大きくなります。大きなテキストを1ファイルで管理すると、間違えて修正するなど問題も増えてくるので、できればテンプレートをスタックの機能ごとに分割することをおすすめします。
テンプレートを分割しても、AWS CloudFormationのネスト機能を使えば、AテンプレートからBテンプレートを参照する、といったことができるので複数のテンプレートを一度に実行できます。またクロススタック参照の機能を使えば、1つのスタックからデータをエクスポートし、他のスタックでそのデータを利用できます。このように複数のスタック間でデータをやりとりできます。
テンプレートの作り方
テンプレートの作り方は、大別して以下の3つがあります。
クイックスタート
AWSのベストプラクティスに基づいて、セキュリティや可用性を考慮したテンプレートをそのまま利用する。これなら15分程度でアプリケーションをAWS上に展開可能。
サンプルテンプレート&テンプレートスニペット
既存のサンプルを利用して、必要な機能の記載部分を合体、自社向けに設定を一部修正などして独自のテンプレートを短時間で作成する。
自らテンプレートを作成
JSON、YAML形式で、独自のテンプレートをゼロから作成する。
AWS CloudFormation デザイナー
AWS CloudFormationには「AWS CloudFormation デザイナー」という、グラフィカルにテンプレートを作成、参照、変更できるツールがあります。本ツールを使えば、ドラッグ&ドロップで、必要なリソースの追加または削除、リソース間の関係の作成、レイアウトのアレンジが行えます。ここでグラフィカルに作成したテンプレートは、そのままJSON、YAML形式のテンプレートとして保存できます。
※デザイナーの画面
リソースの詳細な設定は「統合されたJSONとYAMLエディタ」という編集箇所があるので、そこで行うことができます。もちろん既存のテンプレートをデザイナーに展開・編集もできます。なおスタックで実行中のリソースの表示や変更はできません。
AWS CloudFormationのテンプレート
AWS公式サイトには、テンプレートそのものやテンプレート作成に便利な情報が多数掲載されています。ここからテンプレート用のテキストを参照、コピーできます。
AWS>ドキュメント>AWS CloudFormation>ユーザーガイド>サンプルテンプレート
例えば東京リージョンには「サンプルソリューション」「アプリケーションフレームワーク」「サービス」という3つのサンプルがあります。サンプルソリューションは、一般的なアプリケーションを含むエンドツーエンドのソリューションを作成できます。例としては「ストレージ用ローカル MySQL データベースを使って、1 つの Amazon EC2 インスタンスに WordPress をインストール、デプロイします」があります。
アプリケーションフレームワークはアプリケーションフレームワークをプロビジョニングします。「ストレージ用ローカル MySQL データベースを使って 1 つの Amazon EC2 インスタンスに LAMP スタックを作成します」などがあります。
サービスは、いろいろなAWSサービスを使う場合の事例があります。「Amazon EC2 インスタンスを作成し、Elastic IP アドレスをインスタンスに関連付けます」などです。なおサンプルテンプレートはリージョンごとに若干内容が異なります。必要なリージョンのものを参照しましょう。
AWS CloudFormationのチュートリアル
AWS公式サイトには、AWS CloudFormationを学んだり、活用できる各種のチュートリアルが用意されています。
ドキュメント> AWS CloudFormation>ユーザーガイド>テンプレートの使用>チュートリアル
以下、いくつか紹介します。
「AWS CloudFormationデザイナーを使用して基本的なウェブサーバーを作成する」
AWS CloudFormationデザイナーで、VPCに基本的なウェブサーバーを構築します。その後、テンプレートを保存して CloudFormationスタック作成に使います。
「AWS CloudFormationデザイナーを使用してスタックのテンプレートを変更する」
AWS CloudFormationデザイナーで、実行中のスタックのテンプレートを取得して変更し、それをAWS CloudFormationに送信してスタックを更新します。
「別のAWSアカウントのVPCとピア接続する」
別のAWSアカウントのVirtual Private Cloud(VPC)とピア接続します。2つのVPC間でトラフィックをルーティングできるネットワークが作れます。2つのVPC間でも、同じネットワーク内のように通信できます。
「別のAWS CloudFormationスタックのリソース出力を参照する」
クロススタックの参照機能を使って、スタックから別のスタックへリソースをエクスポートできるようにします。
「スケーラブルなロードバランシングウェブサーバーの作成する」
Amazon EC2 Auto ScalingとElastic Load Balancingによるサンプルウェブサイトを作成します。CloudWatchアラームを含めて、しきい値を超えた場合、Auto Scalingグループのインスタンスを追加または削除します。
「AWS CloudFormationによるAmazon EC2へのアプリケーションのデプロイ」
Amazon EC2インスタンスにアプリケーションを自動的にインストールし、設定、起動します。簡単にデプロイを複製できるので、いろいろな工数を削減できます。
「テンプレートでの待機条件の作成」
スタック作成を、通常の方法以外で行います。アプリケーション設定の一部が完了したら、別のリソースの作成を開始するといった作業が可能になります。
AWSの効果的なリソース管理はNHNテコラスにお任せください
AWS初心者でも所定の環境を容易に構築できるなど、AWS CloudFormationはとても便利なツールです。フルに活用すれば、大きな工数削減につながります。しかし、サンプルテンプレートを少し編集した構成なら簡単に配備できるかもしれませんが、より複雑な環境のためのテンプレート作成は、初心者には手に余ります。
誰もがトラブルなくシステム構築ができることは、自社のIT業務において重要なポイントです。AWS プレミアティア サービスパートナーである NHNテコラスは、AWS環境の構築においてIaCを標準としており、 マネージドサービス ではAWS CloudFormationを活用した、効率良い環境構築をご提案します。お気軽にご相談ください。
▼ エンジニアが本来の業務時間を増やすための AWS 運用のベストプラクティスをご紹介!