tixture55’s diary

主にプログラミング関係の日記です。

AWS CloudFormationで環境構築

AWSでもコードで自動構築したいぞということで、CloudFormationのお話です。

 

今回のポイント

  • 初期構築のときだけ、CloudFormationを使って設定。その後の変更は手で行う
  • 変更されるリソースの種類やプロパティによっては、リソースの再作成が行われる。予想外の再作成が行われると最悪サービスがダウンしてしまう。(例えば、ELBでロードバランサが再作成されてしまうと、エンドポイントが変更されてしまう。)
  • 必要なリソースを単一のテンプレートに書くのではなく、スタックは分割して書

 

下記の例ではEC2インスタンスの定義の際に、自動的にパッケージをインストールしたいなど何らかの処理を行う場合です。

 

"MyEc2Instance"  : {

    "Properties"   :  {

      "UserData"  :  {

            "Fn::Base64"  :  {

                "Fn:: Join"   :  {

                      "" ,

                      [

                                "#!/bin/bash\n"  ,

                                "yum  update    -y\n"

                      ] 

                }

              }

       }

 }

 

またLAMP環境を同じように設定することも可能です。

同様に、OpsWorksによって、運用上のオペレーションも自動化できます。

OpsWorksはシステムの環境情報を各インスタンスで共有し、Chefのレシピの配布と適用を行います。

Mysqlサーバのレイヤを追加

       db-masterレイヤはMysqlサーバの構成管理と、スタック内でのMysqlエンドポイント決定に利用されます。

$  aws  opsworks  create-layer  \

    --stack-id  6e4ea0c1-102b-400b-xxx

    --type  db-master   --name  db-master

    --shortname  db-master

{   "LayerId" :  "043fa815-577c-425b-8b6f-xxxx" }

設定の記述は割愛しますが、その後、Appレイヤを作成し、インスタンスの起動をします。

インスタンスにログインすると、設定が正常に済んでいれば、ユーザ名@ec2パブリックホスト名でインスタンスにログインできます。

デプロイするアプリケーションを登録

$  aws  opsworks  create-app  \

    --stack-id   6e4ea0c1-xxxx-xxxxx

    --name  rails_sample  --type  rails   \

    --app-source   Type=git, Url=http://github.com/higanworks〜   \

    --attributes  "RailsEnv=production"

{   "AppId"  :  "b4282cb9-d0fb-4300-xxxx-xxxx"   }

 

アプリケーションの登録や変更ではライフサイクルイベントは発生しません。新規のアプリケーションを登録した場合は、すでにConfigureイベントが完了し、イベントに対応するレシピが一度適用されているインスタンスにも構成情報の変更を反映する必要があります。