Your SlideShare is downloading. ×
  • Like
AWS Black Belt Techシリーズ  AWS CloudFormation
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

AWS Black Belt Techシリーズ AWS CloudFormation

  • 1,963 views
Published

AWS Black Belt Tech Webinar 2014 …

AWS Black Belt Tech Webinar 2014
(旧マイスターシリーズ)

AWS CloudFormation

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,963
On SlideShare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
59
Comments
0
Likes
20

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. AWS CloudFormation AWS  Black  Belt  Tech  Webinar  2014  (旧マイスターシリーズ) アマゾンデータサービスジャパン株式会社 技術本部  エンタープライズソリューション部 ソリューションアーキテクト  ⼩小林林正⼈人
  • 2. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  • 3. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  • 4. AWS  CloudFormation •  EC2やELBといったAWSリソースの環境構築を、設定ファイル(テ ンプレート)を元に⾃自動化できるサービス •  テンプレートを⾃自由に作成できるため、⾃自分好みのシステム構成を ⾃自動的に構築できる •  テンプレートには起動すべきリソースの情報をJSONフォーマット のテキスト形式で記述する •  AWS  Test  Driveでも環境構築にCloudFormationを利利⽤用している –  http://aws.amazon.com/jp/testdrive/japan/
  • 5. スタック S3 CloudWatch Elastic  Load  Balancing EC2 EC2 Auto  Scaling SNS テンプレート Cloud Formation テンプレートに基づき 各リソースが起動 AWS  CloudFormationのイメージ
  • 6. 利利⽤用シーンと利利点 •  ⼀一度度テンプレートを作成すれば、同じ構成を再現できる –  開発環境の構築 –  Blogシステム、Webシステム、ゲームプラットフォームなど、同じ仕組み でアプリやデータが異異なるようなもの •  ベストプラクティスが盛り込まれたテンプレートが使⽤用可能 –  複数のAZを跨いでリソースを配置する可⽤用性の⾼高い構成 –  セキュリティ要件を満たす上で必須のソフト・設定が⼊入った構成 •  起動時にパラメータを渡せる –  例例えばDBのエンドポイントをEC2に渡せる
  • 7. 利利⽤用料料⾦金金 •  CloudFormationの利利⽤用⾃自体は無料料 •  テンプレートに従って構築された各AWSサービスに対して課⾦金金 –  EC2インスタンス、ELB、RDSなど起動したリソースの費⽤用が請求される
  • 8. AWSのデプロイ⾃自動化サービスの中での位置づけ Elastic  Beanstalk OpsWorks CloudFormation フレキシビリティ 導⼊入の容易易さ
  • 9. CloudFormationに適した場⾯面 •  多種多様なリソースを使い環境構築する場合 –  エンタープライズアプリケーション –  他の⾃自動化サービスではサポートされないリソースを使うとき •  他のデプロイメントサービスと組み合わせて構築する場合 –  CloudFormationで制御可能なリソースとして、OpsWorksやElasticBeanstalk をサポート。CloudFormationでアプリケーション実⾏行行環境を簡単に⽤用意できる •  DRサイトの構築を⾏行行う場合 –  事前にデータを他リージョンに転送しておき、有事の際にCloudFormationを利利 ⽤用してリソースを⽴立立ち上げることでDRサイトを素早く起動できる
  • 10. CloudFormationによるDR事例例 アステラス製薬株式会社様 http://aws.amazon.com/jp/solutions/case-studies/astellas/
  • 11. 最近の主なアップデート •  1/2  ParametersとOutputsの上限数をそれぞれ60に引き上げ •  1/29  SQSのDead  letter  queueをサポート •  2/10  Redshiftをサポート •  3/19  ELBのLoggingとConnection  drainingをサポート •  4/2  CloudTrailでCloudFormationの利利⽤用ログ記録に対応 •  5/5  Amazon  S3のバケットポリシーサポートを強化 •  5/6  Amazon  Kinesisをサポート •  6/17  EBS暗号化ボリューム、VPC  Peering等の新機能をサポート http://aws.amazon.com/releasenotes/AWS-CloudFormation/1755579460043566
  • 12. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  • 13. スタック •  テンプレートからプロビジョニングされるリソースの集合のことを スタックと呼ぶ •  スタック単位でリソースの管理理が可能。スタック破棄を実⾏行行すると、 スタックにひもづくリソースを破棄することが可能 •  使⽤用するリソースおよびリソースの構築順は、テンプレートの依存 関係からCloudFormationが⾃自動的に決定 Web Server App Server スタック これらを⼀一度度に⽣生成・破棄可能
  • 14. スタックの起動⽅方法 •  AWS  Management  Consoleから起動 •  コマンドラインツールも利利⽤用可能 –  AWS  Command  Line  Tool:http://aws.amazon.com/cli/ •  各種SDKでもサポート –  Java  :  http://aws.amazon.com/jp/sdkforjava/ –  .NET  :  http://aws.amazon.com/jp/sdkfornet/ –  PHP    :  http://aws.amazon.com/jp/sdkforphp/ –  Ruby  :   http://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/ruby-‐‑‒dg-‐‑‒ setup.html –  JavaScript  :  http://aws.amazon.com/documentation/sdkforjavascript/ –  Python  :  http://docs.pythonboto.org/en/latest/
  • 15. AWS  Management  Consoleによる起動-‐‑‒1
  • 16. スタックの名前を⼊入⼒力力 テンプレートを指定する。 3種類の⽅方法から選択 サンプルを使う場合はこちら ⼿手持ちのテンプレートを使う場合 はこちらを選択しファイルを指定 S3に配置済みのテンプレートを 指定する場合はこちら AWS  Management  Consoleによる起動-‐‑‒2
  • 17. テンプレートによってはパラ メータの入力が必要(後述) AWS  Management  Consoleによる起動-‐‑‒3
  • 18. タグをつけることでリ ソースの管理が可能 AWS  Management  Consoleによる起動-‐‑‒4
  • 19. 起動されるスタックのコ スト見積もりを参照可能 AWS  Management  Consoleによる起動-‐‑‒5
  • 20. AWS  Management  Consoleによる起動-‐‑‒6 クリックするとスタックの 起動処理が開始される
  • 21. 「Events」タブでは各リソースが 順次起動されることを確認できる ステータス「CREATE_IN_PROGRESS」は スタックが起動中であることを意味する AWS  Management  Consoleによる起動-‐‑‒7
  • 22. AWS  Management  Consoleによる起動-‐‑‒8 スタック起動が完了するとステータスが 「CREATE_COMPLETE」に変化する テンプレートによっては「Outputs」 タブにDNS名やEIPの情報などが 出力される場合がある(後述)
  • 23. AWS  Management  Consoleによる起動-‐‑‒9 エラーが起きるとスタックはロールバックさ れる。起動したリソースはすべて削除される ロールバックの原因は「Events」タブから 参照できるので、問題を修正し再実行する
  • 24. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  • 25. { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : “Sample", "Parameters" : { "KeyName" : { "Description" : “Sample key, "Type" : "String" } }, "Mappings" : { }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" } ] } } } } テンプレート •  CloudFormationの⼼心臓部 •  スタック構築の設計図 –  どのリソースをどう起動するかが すべて記述されている •  JSONフォーマットで記述
  • 26. サンプルテンプレート •  テンプレートのサンプルを利利⽤用可能 http://aws.amazon.com/jp/cloudformation/aws-‐‑‒cloudformation-‐‑‒ templates/
  • 27. { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } テンプレートのバージョン (最新は2010-‐‑‒09-‐‑‒09) テンプレートの詳細(説明⽂文) CloudFormation実⾏行行時にユーザ⼊入⼒力力を求める パラメータを定義する (KeyPairの名前や、DBのユーザ名など) Hashtableのようなもの キーに応じて値を特定出来る (例例:リージョンに応じたAMI-‐‑‒IDなど) EC2やRDSなど、スタックを構成する リソースを定義 スタック構築後にCloudFormationから出⼒力力させ る値(例例:DNS名やEIPの値など) 条件名と条件判断内容を登録する。この条件名は Resourcesなどでリソース作成時に利利⽤用できる。 テンプレートの要素
  • 28. { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Parameters CloudFormation実⾏行行時にユーザ⼊入⼒力力を求める パラメータを定義する (KeyPairの名前や、DBのユーザ名など)
  • 29. "Parameters": { "Age":{ "Type":"Number", "Default" : "30", "MinValue": "20", "MaxValue": "60", "Description":"input your age." }, "FirstName":{ "Type":"String", "Description":"input your first name." }, "MyKeyName": { "Description" : "Input your key pair.", "Type" : "String" } }, Parametersとは •  スタック構築時に値を定義することができる •  データ型、デフォルト値、最⼤大最⼩小値など型が設定可能
  • 30. プロパティ 内容 Type データ型 “String” “Number” “CommaDelimitedList” Default デフォルト値 NoEcho 入力時に*****となる(パスワードなどに使用) AllowedValues 入力可能値の一覧指定 (例:[“true”,”false”] ) AllowedPattern 正規表現で入力可能パターンを指定(例:[a-zA-Z]*) MaxLength 最大文字数 MinLength 最小文字数 MaxValue 最大値 MinValue 最小値 Description プロパティの詳細説明 ConstraintDescription 入力した値がAllowedPatternやMaxLengthなどの制約に引っかかった時に表示する説明 (どのような制約があるかの説明を記述) •  以下のプロパティが利利⽤用可能 Parametersのプロパティ
  • 31. “Resources” : { “MyServer”:{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “MyKeyName”},      "Tags": [ { “Key”: “OwnerAge”,“Value”: { “Ref”: “Age” } }, { “Key": “OwnerName",“Value”: { “Ref”: “FirstName” } } ], }}} “Ref”を使うとパラメータの 値を参照することができる Parametersの参照 •  パラメータの値は、テンプレート中で”Ref”により参照可能 •  ユーザ名やパスワードなど、ユーザ⼊入⼒力力させたい項⽬目に便便利利
  • 32. http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/ index.html?intrinsic-‐‑‒function-‐‑‒reference.html Function •  パラメータの参照やMapの参照などの際はFunctionを利利⽤用する •  Parameterの取得に利利⽤用した”Ref”もFunctionのひとつ •  ⼤大別して8種類が⽤用意されている –  Ref  →  パラメータを参照する –  Fn::Base64  →  ⽂文字列列をBase64エンコードする –  Fn::FindInMap  →  Mapから値を取り出す –  Fn::GetAtt  →  リソースに付随する値を取得する。例例)"Fn::GetAtt"  :  [  "MyELB"  ,  "DNSName"] –  Fn::GetAZs  →  指定したリージョンのアベイラビリティゾーンを取得する –  Fn::Join  →  ⽂文字列列を結合する。例例)“Fn::Join”  :  [  “:”,  [  “a”,  “b”]  ]      は    「a:b」を返す –  Fn::Select  →  Index値に応じた値をListから選択する。                                                例例)  {  “Fn::Select”  :  [  “1”,  [  “Jan”,  “Feb”,  “Mar”,  “Apr”,  “Jun”  ]  ]  }  は”Feb”を返す –  Condition  Functions  →  Fn::IfやFn::Orなどの条件分岐関連Function群
  • 33. http://docs.aws.amazon.com/AWSCloudFormation/latest/ UserGuide/pseudo-‐‑‒parameter-‐‑‒reference.html Pseudo  Parameter •  あらかじめ定義された擬似パラメータ群で“Ref”により参照できる •  利利⽤用可能なパラメータは下記の通り –  AWS::Region  →  リージョン名を取得 –  AWS::StackId  →  スタックIDを取得 –  AWS::StackName  →  スタック名を取得 –  AWS::AccountId  →  AWSアカウントIDを取得 –  AWS::NotificationARNs  →  notification  Amazon  Resource  Names(ARNs)を取得 –  AWS::NoValue  →  指定されたプロパティを無視するようCloudFormationに伝える 例例) “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “KeyName”: { “Ref” : “AWS::StackName”}, “Tags” : { “Ref” : “AWS::Region”} }}} "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ]} Ø  UseDBSnapshotがTrueのとき 「DBSnapshotIdentifier」としてDBSnapshotNameの値を使う Ø  UseDBSnapshotがFalseのとき CloudFormationはプロパティ「DBSnapshotIdentifier」が定義され ていないものとして動作する(=DBSnapshotIdentifierを無視する)
  • 34. { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Mappings Hashtableのようなもの キーに応じて値を特定出来る (例例:リージョンに応じたAMI-‐‑‒IDなど)
  • 35. "Mappings" : { "RegionTable" : { "us-east-1" : { "AMI" : "ami-8c1fece5“, “KeyPair” : “myKey-east” }, "us-west-1" : { "AMI" : "ami-3bc9997e“, “KeyPair” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami-300ca731“, “KeyPair” : “myKey-japan” }}}, Mappingsにテーブルの定義を⾏行行う (この例例の場合、”RegionTable”という 名称でMappingを定義) Mappingsとは •  キーと値のマッピングテーブルを管理理できる •  リージョンやユーザ⼊入⼒力力パラメータによって、値が変わるものに利利⽤用 •  Mappingsを利利⽤用することでテンプレートの再利利⽤用性が向上 Regionが”ap-‐‑‒northeast-‐‑‒1”であれば、 AMI  IDは”ami-‐‑‒300ca731”でキーペアの 名前は”myKey-‐‑‒japan”とする Regionが”us-‐‑‒west-‐‑‒1”であれば、AMI  ID は”ami-‐‑‒3bc9997e”でキーペアの名前 は”myKey-‐‑‒west”とする
  • 36. Mappingsの使い⽅方 •  Functionの”Find::InMap”を使って値を取得 例例)"Fn::FindInMap"  :  [  "MapName",  "Key",  "Value"] •  MapName,key,Valueには”Ref”が利利⽤用可能 "Mappings" : { "RegionTable" : { "us-east-1" : { "AMI" : "ami-8c1fece5“, “KeyPair” : “myKey-east” }, “us-west-1” : { “AMI” : “ami-3bc9997e“, “KeyPair” : “myKey-west” }, "ap-northeast-1" : { "AMI" : "ami-300ca731“, “KeyPair” : “myKey-japan” } } }, “Fn::FindInTemplate” "Parameters": { “region":{ "Type":"String", "Description":”input your region selection." }} “Resources" : { “MyServer":{ “Type":“AWS::EC2::Instance", “Properties” : { “ImageId”: { “Fn:FindInMap” : [ “RegionTable” , { “Ref” : “region” },“AMI” ] }, } } } リージョン名はユーザ⼊入⼒力力 ⼊入⼒力力されたリージョンに合致す るAMIの値を取得する ユーザ⼊入⼒力力が”ap-‐‑‒northeast-‐‑‒1”の場合、最 終的な戻り値は”ami-‐‑‒300ca731”となる
  • 37. { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Conditions 条件名と条件判断内容を登録する。この条件名は Resourcesなどでリソース作成時に利利⽤用できる。
  • 38. "Parameters" : { "EnvType" : { "Description" : "Environment type.", "Default" : "test", "Type" : "String", "AllowedValues" : [“production", "test"], "ConstraintDescription" : "must specify prod or test." } }, "Conditions" : { "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, “production"]} }, Conditionsとは •  条件名と成⽴立立条件を列列挙 •  Resourcesセクションなどで、『ある条件が成⽴立立しているときのみリ ソースを起動』といった条件ベースの制御が可能 •  本番環境と検証環境で構成が異異なる場合に便便利利 EnvTypeパラメータの値が”production”であれ ば、CreateProdResources条件が成⽴立立 パラメータEnvTypeの値は、『production』 『test』のいずれかをユーザが⼊入⼒力力する
  • 39. "Resources" : { "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} }}, "NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} }}, “MountPoint” : { “Type” : “AWS::EC2::VolumeAttachment”, “Condition” : “CreateProdResources”, “Properties” : { “InstanceId” : { “Ref” : “EC2Instance” }, “VolumeId” : { “Ref” : “NewVolume” }, “Device” : “/dev/sdh” }}} Conditionsとは CreateProdResourcesが成⽴立立している ときに限り、本番環境のみに存在する EBSをアタッチする CreateProdResourcesが成⽴立立している ときに限り、本番環境のみで利利⽤用する EBSボリュームをプロビジョニング •  Resourcesで”Condition”を指定すると、指定した条件が成⽴立立している 場合に限り、そのリソースが起動されるようになる。
  • 40. { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } Resources EC2やRDSなど、スタックを構成する リソースを定義
  • 41. “Resources" : { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "DisableApiTermination": "FALSE", "ImageId": "ami-a1b6fda0", “InstanceType": "t1.micro", "KeyName": { "Ref": "MyKeyName" } , "Monitoring": "false", } } } •  EC2やELB,  RDSなど、起動するサービスを指定 •  リソースごとに決められたプロパティを設定する Resourcesとは リソースタイプの定義 リソースごとのプロパティ
  • 42. リソースタイプ •  CloudFormationで利利⽤用可能なリソースタイプ •  最新のリストはWebを参照 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-‐‑‒template-‐‑‒ resource-‐‑‒type-‐‑‒ref.html
  • 43. Attributes •  リソースの振る舞いや関係を制御する •  DeletionPolicy –  スタック削除時のリソースの扱い(Delete  (Default)  /  Retain  /  Snapshot) •  DependsOn –  リソース間の依存関係を明⽰示的に記述 •  Metadata •  UpdatePolicy –  AWS::AutoScaling::AutoScalingGroupリソースのみ –  Auto  ScalingのRolling  Updateでの挙動を制御 •  MaxBatchSize、MinInstancesInService、PauseTime
  • 44. { "AWSTemplateFormatVersion" : “2010-09-09", "Description" : "Valid JSON strings up to 4K", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, “Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } } スタック構築後にCloudFormationから出⼒力力させ る値(例例:DNS名やEIPの値など) Outputs
  • 45. Outputsとは •  スタック構築後に取得・表⽰示したい情報の定義 •  例例えばアクセスURLや、DBの通信先情報、作ったIAMユーザー名など、 あとで使⽤用するもの •  マネジメントコンソールから確認できるので、スタックに関する情報 を出⼒力力すると便便利利(キーペア名、AZ、インスタンスIDなど)
  • 46. "Outputs" : { "InstanceId" : { "Description" : "InstanceId of the newly created EC2 instance", "Value" : { "Ref" : "Ec2Instance" } }, "AZ" : { "Description" : "Availability Zone of the newly created EC2 instance", "Value" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ] } }, "ApplicationURL" : { "Description" : "URL of running web application", "Value" :     { "Fn::Join": ["", [ "http://", { "Fn::GetAtt": [ "Ec2Instance" , "PublicIp"] } , "/index.html"] ] } } } 出⼒力力データの名称を定義 説明 値の指定 Functionを使って⽂文字列列を加⼯工 Outputsの定義
  • 47. •  リソース定義にEC2インスタンスが必須ではない –  DB構築だけ、オートスケールだけ、アラーム設定だけでもOK •  参照関係があると、依存関係があるとみなされる。相互参照や循環参 照はエラーとなる •  参照関係がある部分は、参照の整合性が取れるよう起動順を CloudFormationが決定(Depends  onで明⽰示的に指定も可) •  スタックを破棄すると、スタックにひもづくリソースは破棄される –  ただし”DeletionPolicy”を”Retain”にすると破棄されない テンプレートのTips "Resources" : { "myS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain" }}
  • 48. •  CloudFormationで⽣生成されたリソースには⾃自動でスタック名などの タグが付与される •  管理理者がリソースを識識別できるよう、明⽰示的なタグの付与を推奨 •  テンプレートは⼊入れ⼦子にすることが可能。あるテンプレートから、別 のテンプレートを呼ぶことができる –  リソースタイプに  “AWS::CloudFormation::Stack“を指定しURLを指定すると、 そのテンプレートを読み込む –  呼び出された側に対するParameterの引き渡しや、呼び出し側で呼び出された側の Outputsを参照することが可能 テンプレートのTips "Resources" : {  "WebServer" : { "Type" : "AWS::CloudFormation::Stack", "Properties" : { "TemplateURL" : “https://s3.amazonaws.com/hoge.template" ]]}, "Parameters" : { "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref" : "InstanceType"}, }},
  • 49. •  JSONフォーマットでスタックの情報を記載 •  リソース間の依存関係はCloudFormationが⾃自動判別する •  Parameterを利利⽤用すれば、パラメータのユーザ⼊入⼒力力を受け取れる •  Management  Console等に値を出⼒力力したい場合はOutputsに記述する •  タグを設定してリソースの管理理性を⾼高める テンプレートのまとめ
  • 50. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  アプリケーションのデプロイ •  まとめ
  • 51. EC2 EC2 AutoScaling テンプレート CloudFormer CloudFormer •  構築済みの環境からテンプレートを作成するツール(Webアプリ) •  テンプレート作成のベースを構築するのに有益
  • 52. CloudFormerの特徴 •  CloudFormerは全てのCloudFormationのリソースをサポート •  どのリソースをテンプレートに含めるか完全に制御可能 •  リソースを選択すると、従属するリソースも⾃自動選択(変更更可) –  例例えば、EC2インスタンスを選択すると、EC2インスタンスが必要とするセキュリ ティグループもテンプレートに含まれるようになる •  EC2インスタンスを選択すると、そのインスタンスが起動された元の AMIが指定される –  構築済みのイメージを利利⽤用したい場合は、⽣生成されたテンプレートのAMI  IDを確認 する。意図しないものであれば修正を⾏行行う •  CloudFormerで⽣生成されたテンプレートを⼿手修正し、最終的なテンプ レートとして利利⽤用することを推奨
  • 53. CloudFormerの使い⽅方 1.  既存の⼿手順やツールで必要なリソースを構成 2.  公開されているCloudFormer⽤用テンプレートからスタックを起動 https://aws.amazon.com/developertools/6460180344805680 3.  CloudFormerがEC2のt1.microインスタンスで動作する 4.  CloudFormerのURLにアクセスし、画⾯面の指⽰示通りにテンプレート 化するリソースを指定 5.  ⽣生成されたテンプレートはAmazon  S3に保存される 6.  作業が終わったら、CloudFormerのスタックはDeleteを推奨
  • 54. CloudFormerスタックの起動・アクセス
  • 55. CloudFormerアプリケーション
  • 56. CloudFormerによるテンプレート⽣生成 •  テンプレート化を⾏行行うリソースのリージョンを指定 •  チェックを⼊入れて指定したリソースが含まれるテンプレートができる •  必要に応じてParameterの利利⽤用やOutputsの定義を⾏行行う
  • 57. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  • 58. CloudFormationと運⽤用ポリシー •  CloudFormationはAWSリソースの構築を⾃自動化するツール •  スタック単位でリソースの起動・破棄が⾏行行えるため、類似の環境を 複数構築する場合に⾮非常に有益 •  アプリケーションの管理理については、CloudFormation⾃自体では制 御されないため、デプロイ⽅方式について考慮が必要 •  CloudFormationにはアプリケーションを意識識させないという運⽤用 ⽅方法も考えられる
  • 59. 典型的なやりかた •  CloudFormationではインフラ環境の構築までを⾏行行い、アプリケー ションは⼿手作業を含む別の⽅方法でデプロイする –  CloudFormationにはアプリを意識識させないパターン •  アプリのデプロイまで完了了した”Baked-‐‑‒AMI”を作成しておき、 CloudFormationではそのAMIを利利⽤用して環境を構築する –  全部⼊入りのAMIを⽤用意しておくパターン •  汎⽤用的なAMIを利利⽤用し、インスタンス起動時に必要なソフトウェア 群をセットアップする –  スタックの起動時に都度度ソフトウェアをダウンロードし、都度度インストールす るパターン
  • 60. メリット・デメリットとユースケース メリット デメリット ユースケース CloudFormationではイン フラ環境の構築のみ行う •  構築が容易 •  一度作成したテンプレート の流用が容易 •  アプリケーションのデプロイやミ ドルウェアの構築が別途必要 •  ベストプラクティスを取り込ん だ汎用的な標準環境を展開す る アプリ配置済みのBaked- AMIを利用して構築 •  構築が容易 •  起動が速い (オートスケールに適する) •  ベースAMIやミドルウェア更新、 アプリバージョンアップ時に再 構築が必要 •  リージョン毎にAMIの管理が必 要 •  テストが完了した本番環境を 複製して開発環境を作る •  変更の少ないシステムのDR サイト起動用として インスタンス起動時に必要 なソフトウェア群をセット アップする •  ベースAMI/ミドルウェア更 新時に追従が可能 •  DBのエンドポイントなどの 定義情報を渡せる •  テンプレートの構築がやや難し い •  都度セットアップの分、インスタ ンスの起動に時間がかかる •  常に最新のソフトウェア環境を 利用する必要があるとき •  RDSをはじめとするAWSのマ ネージドサービスと連携する 場合
  • 61. インスタンス起動時のソフトウェア環境構築 •  インスタンスの起動時にuserdata(スクリプト)を渡すことで初期設 定を⾃自動化するブートストラッピングが可能 •  AMIとは紐紐付かない。そのため、ベースAMIが更更新されたとしても、 変更更作業を⾏行行う必要はない •  インスタンス起動時⼀一度度実⾏行行されるだけなので、書き換えて再実⾏行行 ができない点に注意。最⼤大容量量は16KBまで
  • 62. cloud-‐‑‒init •  Amazon  Linuxに⼊入っている、初期設定ツール •  EC2インスタンスの起動時に、userdataに記述されたスクリプトを 実⾏行行する –  「#!」  で始まる⽂文字列列の場合のみ、スクリプトを実⾏行行 •  ロケール変更更、アプリインストール、ファイル書き換えなどが可能 •  RHELでも利利⽤用可能 –  http://aws.amazon.com/articles/2519228458631605 •  WindowsではEC2ConfigService
  • 63. cloud-‐‑‒init User  Dataに定義 Cloud-‐‑‒initがuserdataを 読み込む 読み込んだスクリプトを 実⾏行行 EC2インスタンス起動
  • 64. CloudFormationでuserdataを利利⽤用する •  EC2リソースのプロパティ「UserData」に内容を記載 "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId" : "ami-dcfa4edd", "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "log='/tmp/init.log'n", "apt-get update &>> $logn", "apt-get install -y ruby &>> $logn", "cd /tmpn", "wget http://rubygems.org/rubygems.tgz &>> $logn", "tar zxf rubygems.tgz &>> $logn", "cd rubygemsn", "ruby setup.rb --no-format-executable &>> $logn", ] ] } } }
  • 65. CloudFormationでユーザデータを利利⽤用する •  CloudFormationでUserDataを定義すると、定義中にRefや Fn::GetAttrを使⽤用することが可能 •  RDSのEndPointをUserDataに埋め込むといったことができる "Resources" : { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId" : "ami-dcfa4edd", "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "cd /home/ec2-usern", { "Fn::Join" : ["", [ "echo ", {"Fn::GetAtt" : ["DBInstance", "Endpoint.Address"]} , "> db.confn" ]]} ]]} } } }, "DBInstance" : { "Type": "AWS::RDS::DBInstance", } }
  • 66. CloudFormation  helper  scripts •  EC2インスタンス初期化時のヘルパースクリプト群 •  userdataだけでは不不可能な複雑な設定を⾏行行う際に利利⽤用 •  利利⽤用⽅方法 –  Amazon  Linux  AMIでは導⼊入済み –  Yumリポジトリから取得可能 –  その他下記よりダウンロード可能 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-‐‑‒ helper-‐‑‒scripts-‐‑‒reference.html •  以下の4種を⽤用意 –  cfn-‐‑‒init,  cfn-‐‑‒get-‐‑‒metadata,  cfn-‐‑‒signal,  cfn-‐‑‒hup
  • 67. cfn-‐‑‒init •  ファイルのダウンロード、ファイルの⽣生成を⾏行行うスクリプト •  実⾏行行のための設定は、Metadata領領域に定義 –  AWS::CloudFormation::Init –  Configsets、Commands、Files、Groups、Packages、Services、Sources、Users "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "sources" : { : }, "packages" : { : } "files" : { : } "services" : { : } } } }, "Properties": { : } } source,package,files,services の順に実⾏行行される
  • 68. cfn-‐‑‒initの利利⽤用⽅方法 •  sources –  指定したURLからファイルをダウンロードして展開 –  Tar,zip,tar+gzip,tar+bz2 •  packages –  パッケージシステムを使⽤用してアプリをインストール –  apt,  yum,  rubygems,  python,  rpm "sources" : { "/etc/myapp" : "https://s3.amazonaws.com/mybucket/myapp.tar.gz" } "packages" : { "yum" : { "httpd" : [], "php" : [], }, "rubygems" : { "chef" : [ "0.10.2" ], }} 最新版を取得 バージョン指 定あり
  • 69. cfn-‐‑‒initの利利⽤用⽅方法 •  files –  指定パスへのファイルの⽣生成 "files" : { "/app/db.conf" : { "content" : { "Fn::Join" : ["", [ "db.name=", {"Ref" : "DBName"}, "n", "db.user=", {"Ref" : "DBUser"}, "n", "db.pass=", {"Ref" : "DBPassword" },"n", "db.host=", {"Fn::GetAtt" : ["DBInstance", "Endpoint.Address"]}, "n", ]] }, "mode" : "000644", "owner" : "root", "group" : "root" } "/etc/myapp/myapp-init.pp" : { "source" : "https://s3.amazonaws.com/myapp/myapp-init.pp", "mode" : "100644", "owner" : "root", "group" : "wheel" }} ファイルの中⾝身を⽣生成 ファイルパス S3などから取得
  • 70. cfn-‐‑‒initの利利⽤用⽅方法 •  services –  サービスの起動・再起動の指定 –  現在sysvinitのみ "services" : { "sysvinit" : { "nginx" : { "enabled" : "true", "ensureRunning" : "true", "files" : ["/etc/nginx/nginx.conf"], "sources" : ["/var/www/html"] }, "php-fastcgi" : { "enabled" : "true", "ensureRunning" : "true", "packages" : { "yum" : ["php", "spawn-fcgi"] } } } cfn-‐‑‒init終了了後に起動するかどうか OS起動時に 起動させるかどうか 設定ファイルもしくは指定ディレク トリのファイルが変わっていた場合 にサービス再起動する cfg-‐‑‒initでパッケージを⼊入れていた らサービス再起動
  • 71. "Properties": { "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r WebServer ", " --access-key ", { "Ref" : "HostKeys" }, " --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]}, " --region ", { "Ref" : "AWS::Region" }, "n", ]]}} } cfn-‐‑‒initの起動 •  cfn-‐‑‒initはデフォルトでは動作しない •  User-‐‑‒dataにcfn-‐‑‒initを起動するスクリプトを記述して、cloud-‐‑‒init 経由で起動 •  引数にスタック名、リソース名、リージョン、アクセスキー、シー クレットキーを指定
  • 72. その他のスクリプト •  cfn-‐‑‒get-‐‑‒metadata –  Metadataを簡単に取得出来るスクリプト •  cfn-‐‑‒signal –  リソース「WaitCondition」と共に使⽤用 –  cfn-‐‑‒signalを使⽤用して、スタックに対して初期化状態の通知をすることが出来る –  アプリのインストールが失敗した場合にスタックを破棄したりできる •  cfn-‐‑‒hup –  スタックを更更新(StackUpdateAPIを使⽤用)した場合に、それを感知して指定の ファイルを実⾏行行するフックスクリプト https://s3.amazonaws.com/cloudformation-‐‑‒examples/BoostrappingApplicationsWithAWSCloudFormation.pdf
  • 73. cfn-‐‑‒initの起動 •  cfn-‐‑‒initはデフォルトでは動作しない •  User-‐‑‒dataにcfn-‐‑‒initを起動するスクリプトを記述して、cloud-‐‑‒init 経由で起動 •  引数にスタック名、リソース名、リージョン、アクセスキー、シー クレットキーを指定 "Properties": { "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bashn", "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r WebServer ", " --access-key ", { "Ref" : "HostKeys" }, " --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]}, " --region ", { "Ref" : "AWS::Region" }, "n", ]]}}}
  • 74. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  • 75. まとめ •  AWSリソースを組み合わせた環境を⾃自動的に構築することができる –  ベストプラクティスが適⽤用された構成の展開に有益 •  利利⽤用料料⾦金金は無料料。EC2やRDSなどリソースの利利⽤用料料⾦金金のみ •  CloudFormationそのものはアプリケーションを意識識しないので、 アプリケーションをどう管理理するかは別途検討する •  必要に応じてElastic  BeanstalkやOpsWorksと組み合わせて利利⽤用す ることで、アプリ実⾏行行環境を容易易に構築できる
  • 76. リファレンス •  Cloud  Formation  Samples –  http://aws.amazon.com/jp/cloudformation/aws-‐‑‒cloudformation-‐‑‒templates/ •  AWS  CloudFormation  のアーティクルとチュートリアル –  http://aws.amazon.com/jp/cloudformation/aws-‐‑‒cloudformation-‐‑‒articles-‐‑‒and-‐‑‒ tutorials/ –  BootstrappingApplicationsWithAWSCloudFormation •  https://s3.amazonaws.com/cloudformation-‐‑‒examples/ BoostrappingApplicationsWithAWSCloudFormation.pdf •  AWS  CloudFormation  よくある質問 –  http://aws.amazon.com/jp/cloudformation/faqs/
  • 77. Webinar資料料の配置場所 •  AWS  クラウドサービス活⽤用資料料集 –  http://aws.amazon.com/jp/aws-‐‑‒jp-‐‑‒introduction/