全般

AWS CloudFormation は、開発や本運用に必要な、互いに関連する AWS およびサードパーティーのリソースコレクションを作成し、そのリソースを適切な順序かつ予測可能な方法でプロビジョニングおよび管理するためのサービスです。

デベロッパーは、特定のリソースの API が持つ複雑さを抽象化するシンプルな宣言型のスタイルで、コンピューティング、データベース、およびその他数多くのリソースのデプロイと更新を行うことができます。AWS CloudFormation は、繰り返し可能、予測可能、かつ安全な方法でリソースのライフサイクルを管理できるように設計されています。また、AWS CloudFormation は、自動ロールバックや自動ステート管理が可能で、複数のアカウントやリージョンのリソースを管理できます。最近の機能拡張とオプション追加により、複数の方法でリソースを作成できるようになりました。例えば、AWS CDK を使用して高級言語でコードを作成したり、既存のリソースをインポートしたり、設定の変動を検知したりできます。また、新しいレジストリを使用して、数多くのコア CloudFormation のメリットを継承するカスタム型を簡単に作成できます。

これらのサービスは互いに補完するように設計されています。 AWS Elastic Beanstalk は、クラウドでアプリケーションを簡単にデプロイおよび実行できる環境を提供します。AWS CloudFormation はデベロッパーツールと統合されており、ワンストップでアプリケーションのライフサイクルを管理できます。Elastic Beanstalk のワークロードと同じようにアプリケーションのワークロードを管理できれば、さらに短期間でアプリケーションの作成と更新を行うことができます。Elastic Beanstalk の内部では、CloudFormation を使用してリソースの作成とメンテナンスが行われています。アプリケーションの要件において、よりカスタマイズされた制御を行うよう規定されている場合、CloudFormation の追加機能を使用することで、さらに多くの方法を使用してワークロードを制御できます。

AWS CloudFormation は、広範にわたる AWS およびサードパーティーのリソースのための便利なプロビジョニングメカニズムです。既存のエンタープライズアプリケーション、レガシーアプリケーション、さまざまな AWS リソースを使って構築したアプリケーション、およびコンテナベースのソリューション (AWS Elastic Beanstalk を使用して構築したものを含む) など、さまざまなタイプのアプリケーションのインフラストラクチャに対するニーズを満たします。

AWS CloudFormation は、AWS リソースタイプの 1 つとして Elastic Beanstalk アプリケーション環境をサポートしています。これにより、例えば、AWS Elastic Beanstalk がホストするアプリケーションを、アプリケーションデータの格納のために RDS データベースと一緒に作成/管理できます。サポートされている他の AWS リソースをグループに追加することもできます。

CloudFormation では、4 つの概念が導入されています。テンプレートは JSON または YAML の宣言型コードファイルとなっており、アプリケーションにデプロイすべき各リソースの目標状態が記述されます。スタックによって、テンプレートで記述されたリソースグループの実装と管理が行われます。これにより、それらのリソースの状態と依存関係をまとめて管理できます。変更セットは、変更内容のプレビューで、リソースを作成、更新、削除するスタック操作によって実行されます。スタックセットは、まとめて管理したいスタックのグループです。スタックセットを使用すると、グループを複製することができます。

サポートされている AWS リソースとその機能については、ドキュメントのリリース履歴に記載されている、サポートされている AWS サービスのページにアクセスしてください。

AWS CloudFormation レジストリと AWS CloudFormation カスタムリソースを利用することで、追加の AWS リソースおよびサードパーティーのリソースを管理できます。

はい、できます。CloudFormation は邪魔をしません。お客様のインフラストラクチャに含まれるすべての要素をこれまでどおり完全に制御できます。また、AWS およびサードパーティーの既存のツールを使用して、お客様の AWS リソースをこれまでどおりに管理できます。ただし、CloudFormation では追加のルールを使用できるため、ベストプラクティスとして、また、コンプライアンス管理の面でも、リソースに対する変更を CloudFormation に管理させることをお勧めします。この予測可能かつ管理された手法を使用すれば、アプリケーションポートフォリオ全体の何百何千ものリソースを容易に管理することができます。

CloudFormation テンプレートは、5 種類の要素で構成されている JSON フォーマットまたは YAML フォーマットのテキストファイルです。

1.テンプレートパラメータのオプションリスト (入力値はスタック作成時に供給されます)。
2.出力値のオプションリスト (ウェブアプリケーションの完全な URL など)。
3.静的な設定値を見るのに使用するデータテーブルのオプションリスト (AMI 名など)。
4.AWS リソースとそれらの設定値のリスト。
5.テンプレートファイルフォーマットのバージョン番号。

テンプレートパラメータを使用すると、スタックを作成する際に実行時のテンプレートの側面をカスタマイズできます。例えば、Amazon RDS データベースのサイズ、Amazon EC2 インスタンスタイプ、データベース、およびウェブサーバーのポート番号は、スタック作成時に AWS CloudFormation に渡すことができます。各パラメータにはデフォルト値と説明を入れることができ、「NoEcho」としてマークすることで、画面上と AWS CloudFormation イベントログにおいて入力した実際の値を非表示にすることができます。AWS CloudFormation スタックの作成時に、AWS Management Console により自動的に統合され、ポップアップダイアログのフォームが表示されるので、そこでパラメータ値を編集することができます。

出力値は、AWS マネジメントコンソールまたはコマンドラインツールを介してユーザーにスタックの主要リソース (Elastic Load Balancing ロードバランサーや Amazon RDS データベースのアドレスなど) を提示できる便利な方法です。簡単な機能を使用して、実際の AWS リソースに関連付けられた文字列リテラルと属性値を連結できます。また、テンプレートでは、レジストリリソースタイプ、カスタムのプライベート型、独自のマクロを使用でき、AWS Secrets Manager や AWS System Manager Parameter Store から設定パラメータを取得できます。

テンプレートで AWS リソースに論理名を割り当てることができます。スタックが作成されるときに、AWS CloudFormation が論理名を対応する実際の AWS リソース名にバインドします。実際のリソース名は、スタックと論理リソース名の組み合わせです。これにより、AWS リソース間での名前の衝突を心配せずに、テンプレートから複数のスタックを作成することができます。

AWS CloudFormation のリソースの一部には名前を付けられますが (Amazon S3 バケットなど)、すべてのリソースに名前を付けられるわけではありません。リソースに名前を付けると、テンプレートの再利用が制限され、更新のためリソースの入れ替えが必要になったときに名前の競合が発生します。このような問題を最小限にするため、CloudFormation でリソース名を付けることができるかどうかは、ケースバイケースになります。

はい。AWS CloudFormation は、アプリケーションのブートストラップスクリプト一式を提供するので、CloudFormation テンプレートにそれらを記述するだけで、EC2 インスタンスにパッケージ、ファイル、およびサービスをインストールできます。詳細と操作手順については、AWS CloudFormation でアプリケーションをブートストラップするをご覧ください。

また、CloudFormation を Systems Manager と統合することで、Systems Manager Automation ドキュメントを使用したソフトウェアのインストールが促進/維持されます。

はい。AWS CloudFormation は、EC2 インスタンス上の Chef Server と Chef Client ソフトウェアの両方をブートストラップするのに使用することができます。詳細と操作手順については、Integrating AWS CloudFormation with Chef をご覧ください。

はい。AWS CloudFormation は、EC2 インスタンス上の Puppet Master と Puppet Client ソフトウェアの両方をブートストラップするのに使用することができます。詳細と操作手順については、「Integrating AWS CloudFormation with Puppet」をご覧ください。

はい。CloudFormation を使用すると、EC2 instances 上で Terraform エンジンをブートストラップできます。また、Terraform リソースプロバイダーを使用して、スタック内でのリソースの作成、スタック状態の管理、依存関係の管理、ロールバックを行うことができます。

はい。タグ付け機能をサポートしている Amazon EC2 リソースには、AWS テンプレートでもタグ付けできます。タグ値は、テンプレートのパラメータ、その他のリソース名、リソースの属性値 (アドレスなど)、またはシンプルな機能 (文字列のリストを連結など) で計算された値を指すことができます。CloudFormation によって、一部である CloudFormation スタック名で自動的に Amazon EBS ボリュームおよび Amazon EC2 インスタンスがタグ付けされます。

はい。シンプルな機能を使用して、文字列リテラルと AWS リソースの属性値を連結して、テンプレート内のユーザーデータフィールドにそれらを渡すことができます。簡単使用の機能の詳細については、当社のサンプルテンプレートをご参照ください。

デフォルトでは、「エラー時の自動ロールバック」機能が有効になっています。この機能が有効になっていると、CloudFormation は、個々の操作がすべて成功したときのみすべてのリソースを作成または更新するよう指示されます。いずれかの操作が失敗した場合、CloudFormation によって、最後にわかっている安定した状態にスタックの設定が戻されます。これは、例えば、お客様が誤って Elastic IP アドレスのデフォルト制限を超えた時、または実行しようとしている EC2 AMI へアクセスできない際などに便利です。この機能により、スタックが完全に作成されているのか、まったく作成されていないのかという事実の信頼性が確実になり、システム管理と CloudFormation に構築されているレイヤー化されたソリューションが簡素化されます。

はい。CloudFormation では、オプションの 1 つとして、バリアとして機能する WaitCondition リソースが提供されており、アプリケーションや管理システムなどの外部ソースから完了信号を受信するまで他のリソースの作成をブロックすることができます。そのほか、AWS Lambda 関数を使用してカスタムロジックを作成するオプションなどが用意されています。

はい。CloudFormation では、テンプレート内のリソースの削除ポリシーを定義することができます。それらが削除される前に Amazon EBS ボリュームや Amazon RDS データベースインスタンスにスナップショットを作成するように指定することができます。また、スタックが削除された際にも、リソースを保持して削除しないように指定できます。これは、スタックが削除される際に、Amazon S3 バケットを保持するのに便利です。

はい。CloudFormation がサポートしているものには、VPC、サブネット、ゲートウェイ、ルートテーブル、およびネットワーク ACL の作成に加えて、各種リソースの作成があります。例えば、Elastic IP、Amazon EC2 インスタンス、EC2 セキュリティグループ、Auto Scaling group、Elastic Load Balancing、Amazon RDS データベースインスタンスおよび Amazon RDS セキュリティグループを VPC の中で作成することができます。

はい。CloudFormation を使用して、制御された予測可能な方法で、既存のスタックのリソースを変更して更新することができます。テンプレートを使用してスタックの変更を管理することで、AWS インフラストラクチャで動作するソフトウェアの場合と同様に、AWS インフラストラクチャにバージョンコントロールを適用できます。

AWS CloudFormation GitHub コミュニティに参加してください。

はい。 リソースインポートにおいて、リソースのインポートを使用して既存のリソースを AWS CloudFormation 管理機能にインポートできます。

開始方法

CloudFormation にサインアップするには、CloudFormation の製品ページ[Create Free Account] (まずは無料で始める) をクリックします。サインアップ後、CloudFormation のドキュメントをご参照ください。このドキュメントには入門ガイドが含まれています。

CloudFormation の登録には、有効な電話番号と E メールアドレスを AWS に提出することが必要です。これはお客様に連絡する必要が生じた場合のためです。電話番号の検証に要するのは数分のみです。ここでは登録プロセス中に電話を受信し、電話のキーパッドを使用して PIN 番号を入力します。

CloudFormation を始める方法として最良なのは、当社の技術文書に含まれている入門ガイドの手順に従うことです。WordPress などのアプリケーションを実行するのに必要なインフラストラクチャを作成する方法を示すサンプルテンプレートのいずれかを使用すると、数分以内にデプロイすることができます。そのほか、CloudFormation トレーニングのためのさまざまな手段が用意されています。例えば、サードパーティープロバイダーによるトレーニングを受けたり、ウェブ上のチュートリアルや記事を利用したりすることができます。詳細については、CloudFormation のリソースを参照してください。

はい。CloudFormation には、製品をテストし、その機能を見ることができるサンプルテンプレートが含まれています。当社のサンプルテンプレートは、複数のアベイラビリティーゾーンの冗長性、スケールアウト、アラームのためのベストプラクティスに従い、複数の AWS リソースを相互接続して合わせて使用する方法を示しています。AWS マネジメントコンソールにアクセスし、[スタックを作成] をクリックし、手順に従ってサンプルのいずれかを選択して起動するだけで開始できます。スタックを作成したら、コンソール内で目的のスタックを選択し、[テンプレート] タブと [パラメータ] タブを調べて、各スタックの作成に使用したテンプレートファイルの詳細を確認します。サンプルテンプレートは GitHub でも入手できます。

AWS CloudFormation レジストリ

AWS CloudFormation レジストリは、AWS およびサードパーティーのリソースタイプを登録、使用、検出できるマネージドサービスです。AWS CloudFormation テンプレートでリソースをプロビジョニングする前に、サードパーティーのリソースタイプを登録する必要があります。詳細については、AWS のドキュメント「AWS CloudFormation レジストリの使用」を参照してください。

リソースプロバイダーは、作成、読み取り、更新、削除、リストの操作を介して、基になるリソースのライフサイクルを制御する仕様およびハンドラーを持つリソースタイプのセットです。リソースプロバイダーを使用すれば、CloudFormation を使ってリソースをモデリングおよびプロビジョニングできます。たとえば、 AWS::EC2::Instance は Amazon EC2 プロバイダーのリソースタイプです。このタイプを使用すれば、CloudFormation を使って Amazon EC2 インスタンスをモデリングおよびプロビジョニングできます。CloudFormation レジストリを使用すると、リソースプロバイダーを構築し使用して、SaaS モニタリング、チーム生産性、ソースコード管理リソースなどのサードパーティーリソースをモデリングおよびプロビジョニングできます。

AWS とサードパーティのリソースプロバイダーの違いは、その起源にあります。AWS リソースプロバイダーは Amazon と AWS が構築およびメンテナンスを行い、AWS リソースとサービスを管理します。たとえば、3 つの AWS リソースプロバイダーが、Amazon DynamoDB、AWS Lambda、Amazon EC2 リソースの管理を行います。これらのプロバイダーには、AWS::DynamoDB::Table、AWS::Lambda::Function、AWS::EC2::Instance などのリソースタイプが含まれます。完全なリファレンスについては、ドキュメントをご覧ください。

サードパーティのリソースプロバイダーは、別の会社、組織、または開発者コミュニティが構築します。これらは、AWS と AWS 以外のリソース (AWS アプリケーションリソースなど) および AWS 以外の SaaS ソフトウェアサービス (モニタリング、チームの生産性、インシデント管理、バージョンコントロール管理ツールなど) の管理に役立ちます。

リソーススキーマでは、構造化された整合性のある形式でリソースタイプを定義します。このスキーマは、リソースタイプの定義を検証するためにも使用します。スキーマでは、所定のリソースタイプでサポートされているすべてのパラメータと属性、および、最低限の権限でリソースを作成するのに必要な権限が定義されます。

AWS CloudFormation CLI を使って、リソースプロバイダーを構築します。まず、簡単なリソースの宣言型スキーマを定義します。これには、必要なアクセス許可や他のリソースとの関係が含まれます。次に、CloudFormation CLI を使用して、ユニットおよび統合テストのテストスタブとともに、リソースライフサイクルハンドラー (作成、読み込み、更新、削除、リスト表示) のスキャフォールディングを生成します。

オープンソースの AWS CloudFormation CLI を使用するか、AWS SDK および AWS CLI を介して利用可能な RegisterType と関連するレジストリ API を直接呼び出すことが可能です。詳細については、AWS のドキュメント「AWS CloudFormation レジストリの使用」を参照してください。AWS リソースプロバイダーはそのまま使用でき、使用する前に追加の登録手順は必要ありません。

AWS CloudFormation パブリックレジストリ

2019 年 11 月に開始された CloudFormation レジストリはプライベートリストで構成されており、顧客は CloudFormation を自分のプライベートな使用に合わせて拡張できます。パブリックレジストリは CloudFormation レジストリを拡張し、リソースタイプとモジュールを共有、検索、消費、管理するためのパブリックで検索可能なセントラルロケーションを追加します<>。これにより、インフラストラクチャとアプリケーションを、AWS 製品とサードパーティー製品両方に対して、一貫した方法で構成および管理することがはるかに簡単になります。

はい。CloudFormation 料金ページを参照してください。

はい。CloudFormation パブリックレジストリでは、検証済みのパブリッシャーからキュレートしたコンテンツにアクセスできます。まず、AWS Marketplace または GitHub や Bitbucket などのサードパーティを使用して、各パブリッシャーの ID を確認します。

CloudFormation パブリックレジストリは、AWS パートナーネットワーク (APN) パートナーと開発者コミュニティによって公開されたリソースタイプ (プロビジョニングロジック) とモジュールを含む、新しい検索可能で管理された拡張機能のカタログです。CloudFormation パブリックレジストリを使用すれば、誰もがレジストリにリソースタイプとモジュールを公開できるようになりました。顧客はこれらの公開されたリソースタイプやモジュールを簡単に見つけて使用できることで、自分で構築して維持する必要がなくなります。

リソースタイプは、プロビジョニングロジックを含むコードパッケージです。これにより、Amazon EC2 インスタンスや Amazon DynamoDB テーブルなどのリソースの作成から削除までのライフサイクルを管理し、複雑な API インタラクションを抽象化できます。リソースタイプには、リソースの形状とプロパティを定義するスキーマと、リソースをプロビジョニング、更新、削除、および記述するために必要なロジックが含まれています。CloudFormation パブリックレジストリのサードパーティリソースタイプの例としては、Datadog モニター、MongoDB Atlas プロジェクト、または Atlassian Opsgenie ユーザーなどです。

モジュールは、複数の CloudFormation テンプレート間で再利用できるビルディングブロックであり、ネイティブの CloudFormation リソースと同じように使用されます。これらのビルディングブロックは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを定義するためのベストプラクティスのように単一のリソース用にしたり、アプリケーションアーキテクチャの一般的なパターンを定義するために複数のリソース用にすることもできます。

このリンクを参照して、独自のリソースやモジュールを AWS CloudFormation レジストリに開発して、追加してください。プライベートに公開するか、もしくはパブリックレジストリに公開するか、選択することができます。

請求

次の名前空間にあるリソースプロバイダーを AWS CloudFormation で使用する場合は、追加料金は発生しません: AWS::*、Alexa::*、Custom::*。この場合には、AWS CloudFormation を使用して作成した AWS リソース (Amazon EC2 インスタンス、Elastic Load Balancing のロードバランサーなど) に対し、手動で作成したのとまったく同様の料金をお支払いいただきます。お支払いはお客様が実際に使用した分だけです。最低料金や前払いの義務は発生しません。

AWS CloudFormation で、前出の名前空間の外部にあるリソースプロバイダーを使用する場合には、ハンドラーオペレーションごとの料金が発生します。ハンドラー操作とは、リソースに対するアクションの作成、更新、削除、読み取り、リストのことです。詳細については、料金表のページをご参照ください。

はい。全体としてスタックが正常に作成されたかどうかに関係なく、テンプレートのインスタンス化時に作成された AWS リソースへの料金が適用されます。

制限と規制

AWS CloudFormation で作成できるスタックの最大数についての詳細は、AWS CloudFormation クォータの「スタック」を参照してください。上限値の変更については、こちらから申請してください。2 営業日以内に返答いたします。

詳細については、AWS CloudFormation クォータの「テンプレート説明」と、AWS ドキュメントの「パラメータ」、「リソース」、「出力」を参照してください。

テンプレートで指定できるパラメータと出力の数についての詳細は、AWS CloudFormation クォータの「パラメータと出力」セクションを参照してください。

テンプレートで示すことのできるリソースの数の詳細については、AWS CloudFormation クォータの「リソース」を参照してください。ベストプラクティスとして、小規模なテンプレートとスタックを作成し、複数のスタック間でアプリケーションをモジュール化することをお勧めします。大規模なグループよりも小規模なグループの方が依存関係が複雑でないため、このようにすることで、リソース変更に伴う影響範囲を最小限に抑えることができ、複数のリソース間の依存関係に関する問題をよりすばやく解決できます。

リージョンとエンドポイント

各リージョンのエンドポイントについては、技術文書AWS CloudFormation エンドポイントに記載されています。

CloudFormation のリージョン別の可用性について詳しくは、製品およびサービス一覧 (リージョン別)をご参照ください。