« AWS Management ConsoleのAWS CloudFormationサポート | メイン | 【AWS発表】 日本語のテクニカルサポート開始 »

【AWS発表】 AWS CloudFormation: 複雑なシステムもクラウドレシピからワンクリックで作成可能に!

AWSはこれまで、ストレージやサーバなどの様々なリソースをクラウド上で提供してきました。皆様はそれを使うことで、いつでも必要なだけ安価に、ITリソースを利用することができます。様々なAWSリソースをブロックのように組み合わせることで、望み通りのシステムを組み上げることができるでしょう。

例えば、あるお客様は、幾つかのEC2インスタンスを立ち上げ、Elastic IPアドレス(固定IPアドレス)をアサインし、メッセージキューを作成して、他にも幾つかのAWSリソースを立ち上げてシステムを組むこともあるでしょう。ときに、このプロセスは完全に手動で行う場合もあるでしょうし、スクリプト等を用いて半自動化しているかもしれません。

しかし、システムが複雑になるにつれ、正しい組み合わせのAMI(マシンイメージ)を立ち上げ、それぞれの役割に応じて設定を行い、エラーハンドリングを行いながら個別を組み合わせ全体を正しく動作させるのはより大変な作業になっていきます。個々のAWSリソースの利用は非常に簡単なのですが、より複雑なシステムを作るとなると、その全体の設定を毎回同じように実行するのは大変だ(AWSを使うより前は、もっと大変だったと思いますが。。)ということで、より楽をしたいという新しいニーズが出てきました。そもそも、AWSはプログラマブル(プログラムで操作可能)です。非常に複雑なシステム(これを、スタックと呼びます)を、再現可能なプロセスで作ることは理論上、可能なはずなのです。

本日、このニーズにお応えする、AWS CloudFormationという新しいサービスを発表しました。

こちらを用いると、複雑なシステムであるスタック全体を、一つの関数コールで呼び出すことが可能になります。例えば、このスタックは、複数のAmazon EC2インスタンス、詳細設定がなされたセキュリティグループ、EBS (Elastic Block Store) ボリューム、Elastic IPアドレス等を組み合わせたものになるでしょう。もちろん、スタックの中に、ロードバランサー (Load Balancers), Auto Scaling グループ, RDS (Relational Database Service)のDBインスタンスやセキュリティグループ, SNS (Simple Notification Service) のトピックや購読情報 (subscriptions), Amazon CloudWatchのアラーム、Amazon SQS (Simple Queuue Service)のメッセージキュー、Amazon SimpleDBのドメイン、を含むことが可能です。

下記は、このCloudFormationのコンセプトを図示したものです:

 

AWS CloudFormationの使用は非常に簡単です。作成したいシステムのアーキテクチャ、つまり、スタック全体を、テンプレート言語を用いて記述できます。もちろんすでに準備されているテンプレートのサンプルを選択することもできます。CloudFormationはテンプレートに記述された通りに、AWSリソースを作成して、適切な順序で実行されるようにします。また、オプションで、スタックが完成したときに、SNSの機能を用いて通知を発行することも可能です。AWS Management Consoleは、CloudFormationを完全にサポートしていますので、Webブラウザをを用いて一連の作業が可能です。詳細は、こちらのブログ記事をお読みください。

詳細になりますが、テンプレートをAPIから実行するにはCreateStack関数を用います。各スタックはイベントとして動作を記録し(このイベントはDescribeStackEvents関数からアクセス可能です)、作成したリソースのID(identity) を保持します(このIDは、DescribeStackResources関数からアクセス可能です)。

スタックは作成後もそのID(identity)を保持しているので、必要がなくなったときはいつでも全てをシャットダウンできます。デフォルトでは、CreateStack関数は、アトミック(atomic)に動作します。つまり、もし何らかの理由で全てのリソースを作成できなかった場合は、全て綺麗に削除します。このロールバック動作に関しては、お好みで機能させないようにすることもできます。

テンプレート言語はJSON形式となっています。スタックを作る際に必要なリソースを、パラメータ化された宣言文として記述することができます。テンプレートは宣言文で書けるようになっており、必要なのは、何を作成したいのかのみです。CloudFormationに後は任せることができます。テンプレートは、パラメーターを含んでおり、パラメーターはデフォルト値を持つことができます。このパラメーターを利用して、一つのテンプレートを作って、複数のAWSアカウント、複数のアベイラビリティゾーン、複数のリージョンで使えるようなテンプレートを作成することができるでしょう。また、変更する値や、センシティブなデータ(例えば、データベースのパスワード等)を、パラメータを用いて設定することもできるでしょう。

AWSは、皆様がすぐに取り掛かれるように、すでに沢山のCloudFormationテンプレートを作成しています。試しに、WordPressテンプレートのサンプルをとりあげ、どのようにそれが動作するのか見てみましょう。テンプレートは、104行で書かれています。このテンプレートは、下記のパラメーターを受け取ります。

  • InstanceType - EC2インスタンス; デフォルトはm1.small
  • GroupSize - Auto Scalingグループに設定するEC2インスタンスの数; デフォルトは2
  • AvailabilityZones - EC2インスタンスを作成する特定のゾーン、もしくは複数のゾーン
  • WordPressUser - をWordPressを作成するユーザーアカウントの名前; デフォルトはadmin
  • WordPressPwd - ユーザアカウントのパスワード; デフォルトは"password"。また、"NoEcho"のパラメーターがセットされているので、入力したパスワードはマスクされます
  • WordPressDBName - スタックのDBインスタンスに作られるMySQLデータベースの名前。

下記は、テンプレートから一部分を抜き出したものです。パスワードとDBの名前の部分が分かります:

    "WordPressPwd" : {
      "Default" : "password",
      "Type" : "String",
      "NoEcho" : "TRUE"
    },
    "WordPressDBName" : {
      "Default" : "wordpressdb",
      "Type" : "String"
    }


また、このテンプレートは次のAWSリソースも定義しています:

  • WordPressEC2Security - EC2のセキュリティグループ
  • WordPressLaunchConfig - Auto ScalingのLaunch設定
  • WordPressDBSecurity - データベースのセキュリティグループ
  • WordPressDB - m1.small上で稼働するRDS DBインスタンス、5GBのストレージを持ち、ユーザー名、パスワード、データベース名がパラメーター上で決められています
  • WordPressELB - 特定のアベイラビリティゾーンにおけるロードバランサー
  • WordPressAutoScalingGroup GroupSizeパラメータにて、特定のアベイラビリティゾーン、グループサイズ(望むサーバーのスケールアウトキャパシティ)

下記は、テンプレートから一部分を抜き出したものです:

    "WordPressAutoScalingGroup" : {
      "Type" : "AWS::AutoScaling::AutoScalingGroup",
      "DependsOn" : "WordPressDB",
      "Properties" : {
        "AvailabilityZones" : { "Ref" : "AvailabilityZones" },
        "LaunchConfigurationName" : { "Ref" : "WordPressLaunchConfig" },
        "MinSize" : "0",
        "MaxSize" : "5",
        "DesiredCapacity" : { "Ref" : "GroupSize" },
        "LoadBalancerNames" : [ { "Ref" : "WordPressELB" } ]
      }
    }

テンプレートでは、複数のアウトプットを作成することができます(DescribeStacks関数を用いて、コードからアクセスできます)。このWordPressテンプレートの場合、一つのスタックを作り出し、スタック内のロードバランサーに対するURLを作り出します。こちらが、その該当部分を抜き出したものです。

"Outputs" : {
    "URL" : {
      "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "WordPressELB" , "DNSName" ] } ] ] }
    }
  }

このテンプレートは単純なプレーンテキスト形式です。テキストエディタで編集し、ソースコントロールシステムで管理することもできますし、もちろん、他のプログラムから、これをテンプレートを作成することも可能です。

また、繰り返しになりますが、AWS Management Consoleは、CloudFormationに対して完全にサポートしています。詳細は、こちらのブログ記事をお読みください。

さて、まとめますと、CloudFormationを使うことにより、アプリケーションスタック全体を非常に簡単に、作成、管理、破棄することができます。AWSが、重要な基盤レベルについては面倒を見ますので、皆様は、素晴らしいアプリケーションを作成することに、集中することができます。

さて、今回の新しい発表である、CloudFormation如何でしたでしょうか?日本の皆様がどのように活用するか、非常に楽しみにしています。様々なツールから、テンプレートを書きだすと面白いと思います(どなたかきっと、エクセルマクロでも?)。 CloudFormationを使って、どう調理されるか、楽しみにしています!

こちらもお読みください: AWS Management ConsoleのAWS CloudFormationサポート

#追記 (2011/02/25)
料金に関してですが、AWS Elastic Beanstalkと同様に、CloudFormation自体には料金はかからず、中で起動しているEC2インスタンスなどのAWSリソースにのみ通常と同じ料金がかかります。

玉川憲 (@KenTamagawa)

 

 

コメント

Featured Event

2016年3 月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31