Amazon Web Services ブログ

CloudFormation スタックセットを利用した 複数のAWSアカウントやリージョンを横断したリソース展開

AWS CloudFormation は、AWS を利用するお客様の Infrastructure as Code モデルの実現に役立ちます。環境やアプリケーションを手作業でセットアップする代わりに、テンプレートを構築しそれを使用することで必要な全てのリソース ― これら一連のリソースは CloudFormation スタックと呼ばれます ― を作成します。このモデルでは、手作業に起因する失敗が発生する可能性が排除され、効率性が増し、時間が経過しても一貫した設定が保証されます。

本日、CloudFormation がよりいっそう便利になる新機能についてご紹介したいと思います。この新機能は、複数の AWS アカウントおよび/または複数のリージョンを利用する状況において Infrastructure as Code を実践するときにお客様が直面する課題の解決に役立つように設計されています。

アカウント ― 以前お話したように、多くの組織で多数の AWS アカウントが使用されます。AWS アカウントを階層化し、組織単位、あるいはOU(詳しく知りたい場合は「AWS Organizations – 複数の AWS アカウントのポリシーベースの管理」をお読みください)へグルーピングするために AWS Organizations が利用されています。事業、アプリケーション、そしてデベロッパーに対して複数のアカウントが運用されます。またアプリケーション毎に、開発、テスティング、ステージング、そして本番のそれぞれに対して別々のアカウントが作成されることもあります。

リージョン ― 巨大な(かつ今なお成長し続ける)AWS のリージョンもまた大いに活用されています。2つかあるいはそれ以上のリージョンにまたがるグローバルアプリケーションが構築され、洗練されたマルチリージョン・ディザスタリカバリ・モデルが実装されています。また、S3AuroraPostgreSQL、そして MySQL のデータをリアルタイムにレプリケートし、国や地域の規制にしたがって機密データを保管および処理するための場所を選択します。

複数のアカウントやリージョンへのこのような展開は、ガバナンスと一貫性に関していくつかの新しい課題をともないます。新しく作成される各アカウントが社内の標準に従って設定されていることを確認したいと、お客様は言われます。とりわけ、IAM ユーザーと IAM ロール、VPC と VPC サブネット、セキュリティグループ、コンフィグルール、ロギング、そして AWS Lambda 関数を、信頼性があり一貫した方法でセットアップしたいと望まれます。

スタックセットのご紹介

これらの重要なご要望を解決するために、本日 CloudFormation スタックセットをリリースしました。CloudFormation テンプレート内に AWS リソースの設定を定義すると、それから数回のクリックで複数の AWS アカウント及び/あるいはリージョンにそれらを水平展開できるようになりました。上述したクロスアカウントやクロスリージョンのシナリオを解決する AWS 機能のベースラインレベルのセットアップに、この機能を活用できます。一度セットアップしてしまえば、追加のアカウントやリージョンに対しても容易に展開することができます。

この機能は、常にクロスアカウントベースで動作します。管理者のアカウントによって、1つ以上のスタックセットが保持されるとともに1つ以上の対象アカウントへのデプロイが制御されます。この管理者アカウントは引き受け可能な IAM ロールを保持しなければいけません。また、対象アカウントは管理者アカウントに対して信頼を付与しなければいけません。どのようにこの作業を行うかについては、スタックセットのドキュメント必要な条件をお読みください。

各スタックセットは、CloudFormation テンプレートを参照しアカウントとリージョンのリストを持ちます。全てのオペレーションは、スタックセット内の アカウント × リージョン の組み合わせそれぞれに対して適用されます。もしスタックセットが3つのアカウント(A1, A2, そしてA3)と4つのリージョン(R1, R2, R3, そしてR4)を参照する場合:

  • リージョンR1: アカウントA1, A2, そしてA3.
  • リージョンR2: アカウントA1, A2, そしてA3.
  • リージョンR3: アカウントA1, A2, そしてA3.
  • リージョンR4: アカウントA1, A2, そしてA3.

テンプレートをデプロイすると、まずアカウント/リージョンの組み合わせの1つに対して CloudFormation スタックの作成が開始されます。テンプレートは、各リージョン(順序を制御)と各リージョン内の複数のアカウント(並列度を制御)に順にデプロイされます。スタックの作成が失敗した場合にデプロイを終了するエラー閾値を設定することも可能です。

既存の CloudFormation テンプレートを使用することも可能ですが(アカウントとリージョンをまたいで動作する準備が整っていることを確認するよう注意してください)、新しいテンプレートを作成しても良いですし、あるいは AWS が予め用意するサンプルのテンプレートを使用することもできます。現在、一部のリージョン(中国を除く全てのパブリックリージョン)をサポートしていますが、そう長い時間をかけずにその他のリージョンにも展開できると予想しています。

スタックセットの使用

CloudFormation のコンソールからCloudFormation API を介して、あるいはコマンドラインからスタックセットを作成しデプロイすることが可能です。

コンソールなら、Create StackSet をクリックして開始します。自分自身のテンプレートを使うこともできますし、用意されたサンプルのテンプレートを使うこともできます。一連のサンプルの一番最後にある Add config rule encrypted volumes を使用してみます:

View template をクリックしこのテンプレートとテンプレートに記述されているルールの詳細を確認します:

このスタックセットに名前を付けます。今回選択したテンプレートはオプションのパラメータを受け取りますが、この値はこのタイミングで入力することができます:

次に、アカウントとリージョンを選択します。アカウント番号を直接入力するか、AWS 組織単位(OU)を参照するか、あるいはアカウント番号のリストをアップロードすることができます:

リージョンを設定しデプロイの順序を制御することができます:

デプロイメントのオプションを設定することも可能です。設定が完了したら Next をクリックして次に進みます:

スタックセットにタグを設定することができます。設定したタグは、このスタックセットのデプロイによって作成される AWS リソースに適用されます。

デプロイが始まり、コンソール上でデプロイのステータスを追跡することができます:

スタックのセクションを開いて各スタックを確認することが可能です。最初は各スタックのステータスは OUTDATED となっており、テンプレートがまだスタックにデプロイされていないことを示しています。問題なくデプロイが完了すると、ステータスは CURRENT に変わるでしょう。スタックがうまく削除できない場合には、ステータスは INOPERABLE に変わります。

この最初のデプロイが終わった後は、 Manage StackSet をクリックし、アカウントかリージョンあるいはその両方を追加したり、更にスタックを作成したりすることが可能です。

現在利用可能

この新機能は、現在利用可能であり追加料金なしに使い始めることができます(作成されたAWSリソースに対してのみ料金をお支払い頂きます)。

Jeff;

追伸 ― もし、役に立つテンプレートが出来上がって他のAWSユーザにも共有したいと思ったら、私達の AWS Labs GitHub リポジトリにプルリクエストを送ってください。

原文:Use CloudFormation StackSets to Provision Resources Across Multiple AWS Accounts and Regions(翻訳:SA畑史彦)