AWS CloudFormation
AWS  Black  Belt  Tech  Webinar  2014  (旧マイスターシリーズ)
アマゾンデータサービスジャパン株式会社
技術本部  エンタープライズソリューション部
ソリューションア...
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  CloudFormationによる運⽤用
•  まとめ
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  CloudFormationによる運⽤用
•  まとめ
AWS  CloudFormation
•  EC2やELBといったAWSリソースの環境構築を、設定ファイル(テ
ンプレート)を元に⾃自動化できるサービス
•  テンプレートを⾃自由に作成できるため、⾃自分好みのシステム構成を
⾃自動的に構築で...
スタック
S3
CloudWatch
Elastic  Load  Balancing
EC2 EC2
Auto  Scaling
SNS
テンプレート
Cloud
Formation
テンプレートに基づき
各リソースが起動
AWS  Clou...
利利⽤用シーンと利利点
•  ⼀一度度テンプレートを作成すれば、同じ構成を再現できる
–  開発環境の構築
–  Blogシステム、Webシステム、ゲームプラットフォームなど、同じ仕組み
でアプリやデータが異異なるようなもの
•  ベストプラク...
利利⽤用料料⾦金金
•  CloudFormationの利利⽤用⾃自体は無料料
•  テンプレートに従って構築された各AWSサービスに対して課⾦金金
–  EC2インスタンス、ELB、RDSなど起動したリソースの費⽤用が請求される
AWSのデプロイ⾃自動化サービスの中での位置づけ
Elastic  Beanstalk OpsWorks CloudFormation
フレキシビリティ
導⼊入の容易易さ
CloudFormationに適した場⾯面
•  多種多様なリソースを使い環境構築する場合
–  エンタープライズアプリケーション
–  他の⾃自動化サービスではサポートされないリソースを使うとき
•  他のデプロイメントサービスと組み合わせて...
CloudFormationによるDR事例例
アステラス製薬株式会社様
http://aws.amazon.com/jp/solutions/case-studies/astellas/
最近の主なアップデート
•  1/2  ParametersとOutputsの上限数をそれぞれ60に引き上げ
•  1/29  SQSのDead  letter  queueをサポート
•  2/10  Redshiftをサポート
•  3/1...
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  CloudFormationによる運⽤用
•  まとめ
スタック
•  テンプレートからプロビジョニングされるリソースの集合のことを
スタックと呼ぶ
•  スタック単位でリソースの管理理が可能。スタック破棄を実⾏行行すると、
スタックにひもづくリソースを破棄することが可能
•  使⽤用するリソースお...
スタックの起動⽅方法
•  AWS  Management  Consoleから起動
•  コマンドラインツールも利利⽤用可能
–  AWS  Command  Line  Tool:http://aws.amazon.com/cli/
•  ...
AWS  Management  Consoleによる起動-‐‑‒1
スタックの名前を⼊入⼒力力
テンプレートを指定する。
3種類の⽅方法から選択
サンプルを使う場合はこちら
⼿手持ちのテンプレートを使う場合
はこちらを選択しファイルを指定
S3に配置済みのテンプレートを
指定する場合はこちら
AWS  Mana...
テンプレートによってはパラ
メータの入力が必要(後述)
AWS  Management  Consoleによる起動-‐‑‒3
タグをつけることでリ
ソースの管理が可能
AWS  Management  Consoleによる起動-‐‑‒4
起動されるスタックのコ
スト見積もりを参照可能
AWS  Management  Consoleによる起動-‐‑‒5
AWS  Management  Consoleによる起動-‐‑‒6
クリックするとスタックの
起動処理が開始される
「Events」タブでは各リソースが
順次起動されることを確認できる
ステータス「CREATE_IN_PROGRESS」は
スタックが起動中であることを意味する
AWS  Management  Consoleによる起動-‐‑‒7
AWS  Management  Consoleによる起動-‐‑‒8
スタック起動が完了するとステータスが
「CREATE_COMPLETE」に変化する
テンプレートによっては「Outputs」
タブにDNS名やEIPの情報などが
出力される場...
AWS  Management  Consoleによる起動-‐‑‒9
エラーが起きるとスタックはロールバックさ
れる。起動したリソースはすべて削除される
ロールバックの原因は「Events」タブから
参照できるので、問題を修正し再実行する
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  CloudFormationによる運⽤用
•  まとめ
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : “Sample",
"Parameters" : {
"KeyName" : {
"Description" : “Sam...
サンプルテンプレート
•  テンプレートのサンプルを利利⽤用可能
http://aws.amazon.com/jp/cloudformation/aws-‐‑‒cloudformation-‐‑‒
templates/
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parame...
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parame...
"Parameters": {
"Age":{
"Type":"Number",
"Default" : "30",
"MinValue": "20",
"MaxValue": "60",
"Description":"input your a...
プロパティ 内容
Type データ型 “String” “Number” “CommaDelimitedList”
Default デフォルト値
NoEcho 入力時に*****となる(パスワードなどに使用)
AllowedValues 入力可...
“Resources” : {
“MyServer”:{
“Type":“AWS::EC2::Instance",
“Properties” : {
“KeyName”: { “Ref” : “MyKeyName”},
     "Tags":...
http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/
index.html?intrinsic-‐‑‒function-‐‑‒reference.html
F...
http://docs.aws.amazon.com/AWSCloudFormation/latest/
UserGuide/pseudo-‐‑‒parameter-‐‑‒reference.html
Pseudo  Parameter
•  ...
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parame...
"Mappings" : {
"RegionTable" : {
"us-east-1" : {
"AMI" : "ami-8c1fece5“,
“KeyPair” : “myKey-east”
},
"us-west-1" : {
"AMI"...
Mappingsの使い⽅方
•  Functionの”Find::InMap”を使って値を取得
例例)"Fn::FindInMap"  :  [  "MapName",  "Key",  "Value"]
•  MapName,key,Valu...
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parame...
"Parameters" : {
"EnvType" : {
"Description" : "Environment type.",
"Default" : "test",
"Type" : "String",
"AllowedValues"...
"Resources" : {
"EC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : { "Fn::FindInMap" : [ "Regio...
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parame...
“Resources" : {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"DisableApiTermination": "FALSE",
"ImageId":...
リソースタイプ
•  CloudFormationで利利⽤用可能なリソースタイプ
•  最新のリストはWebを参照
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aw...
Attributes
•  リソースの振る舞いや関係を制御する
•  DeletionPolicy
–  スタック削除時のリソースの扱い(Delete  (Default)  /  Retain  /  Snapshot)
•  Depends...
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parame...
Outputsとは
•  スタック構築後に取得・表⽰示したい情報の定義
•  例例えばアクセスURLや、DBの通信先情報、作ったIAMユーザー名など、
あとで使⽤用するもの
•  マネジメントコンソールから確認できるので、スタックに関する情報
...
"Outputs" : {
"InstanceId" : {
"Description" : "InstanceId of the newly created EC2 instance",
"Value" : { "Ref" : "Ec2Ins...
•  リソース定義にEC2インスタンスが必須ではない
–  DB構築だけ、オートスケールだけ、アラーム設定だけでもOK
•  参照関係があると、依存関係があるとみなされる。相互参照や循環参
照はエラーとなる
•  参照関係がある部分は、参照の整...
•  CloudFormationで⽣生成されたリソースには⾃自動でスタック名などの
タグが付与される
•  管理理者がリソースを識識別できるよう、明⽰示的なタグの付与を推奨
•  テンプレートは⼊入れ⼦子にすることが可能。あるテンプレートから...
•  JSONフォーマットでスタックの情報を記載
•  リソース間の依存関係はCloudFormationが⾃自動判別する
•  Parameterを利利⽤用すれば、パラメータのユーザ⼊入⼒力力を受け取れる
•  Management  Con...
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  アプリケーションのデプロイ
•  まとめ
EC2 EC2
AutoScaling
テンプレート
CloudFormer
CloudFormer
•  構築済みの環境からテンプレートを作成するツール(Webアプリ)
•  テンプレート作成のベースを構築するのに有益
CloudFormerの特徴
•  CloudFormerは全てのCloudFormationのリソースをサポート
•  どのリソースをテンプレートに含めるか完全に制御可能
•  リソースを選択すると、従属するリソースも⾃自動選択(変更更可)
...
CloudFormerの使い⽅方
1.  既存の⼿手順やツールで必要なリソースを構成
2.  公開されているCloudFormer⽤用テンプレートからスタックを起動
https://aws.amazon.com/developertools/6...
CloudFormerスタックの起動・アクセス
CloudFormerアプリケーション
CloudFormerによるテンプレート⽣生成
•  テンプレート化を⾏行行うリソースのリージョンを指定
•  チェックを⼊入れて指定したリソースが含まれるテンプレートができる
•  必要に応じてParameterの利利⽤用やOutputsの定...
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  CloudFormationによる運⽤用
•  まとめ
CloudFormationと運⽤用ポリシー
•  CloudFormationはAWSリソースの構築を⾃自動化するツール
•  スタック単位でリソースの起動・破棄が⾏行行えるため、類似の環境を
複数構築する場合に⾮非常に有益
•  アプリケー...
典型的なやりかた
•  CloudFormationではインフラ環境の構築までを⾏行行い、アプリケー
ションは⼿手作業を含む別の⽅方法でデプロイする
–  CloudFormationにはアプリを意識識させないパターン
•  アプリのデプロイま...
メリット・デメリットとユースケース
メリット	
 デメリット	
 ユースケース	
CloudFormationではイン
フラ環境の構築のみ行う	
•  構築が容易
•  一度作成したテンプレート
の流用が容易	
•  アプリケーションのデプロイ...
インスタンス起動時のソフトウェア環境構築
•  インスタンスの起動時にuserdata(スクリプト)を渡すことで初期設
定を⾃自動化するブートストラッピングが可能
•  AMIとは紐紐付かない。そのため、ベースAMIが更更新されたとしても、
変...
cloud-‐‑‒init
•  Amazon  Linuxに⼊入っている、初期設定ツール
•  EC2インスタンスの起動時に、userdataに記述されたスクリプトを
実⾏行行する
–  「#!」  で始まる⽂文字列列の場合のみ、スクリプトを...
cloud-‐‑‒init
User  Dataに定義 Cloud-‐‑‒initがuserdataを
読み込む
読み込んだスクリプトを
実⾏行行
EC2インスタンス起動
CloudFormationでuserdataを利利⽤用する
•  EC2リソースのプロパティ「UserData」に内容を記載
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Properties"...
CloudFormationでユーザデータを利利⽤用する
•  CloudFormationでUserDataを定義すると、定義中にRefや
Fn::GetAttrを使⽤用することが可能
•  RDSのEndPointをUserDataに埋め込...
CloudFormation  helper  scripts
•  EC2インスタンス初期化時のヘルパースクリプト群
•  userdataだけでは不不可能な複雑な設定を⾏行行う際に利利⽤用
•  利利⽤用⽅方法
–  Amazon  Lin...
cfn-‐‑‒init
•  ファイルのダウンロード、ファイルの⽣生成を⾏行行うスクリプト
•  実⾏行行のための設定は、Metadata領領域に定義
–  AWS::CloudFormation::Init
–  Configsets、Comm...
cfn-‐‑‒initの利利⽤用⽅方法
•  sources
–  指定したURLからファイルをダウンロードして展開
–  Tar,zip,tar+gzip,tar+bz2
•  packages
–  パッケージシステムを使⽤用してアプリをイ...
cfn-‐‑‒initの利利⽤用⽅方法
•  files
–  指定パスへのファイルの⽣生成
"files" : {
"/app/db.conf" : {
"content" : { "Fn::Join" : ["", [
"db.name=",...
cfn-‐‑‒initの利利⽤用⽅方法
•  services
–  サービスの起動・再起動の指定
–  現在sysvinitのみ
"services" : {
"sysvinit" : {
"nginx" : {
"enabled" : "t...
"Properties": {
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bashn",
"/opt/aws/bin/cfn-init -s ", { "Ref" :...
その他のスクリプト
•  cfn-‐‑‒get-‐‑‒metadata
–  Metadataを簡単に取得出来るスクリプト
•  cfn-‐‑‒signal
–  リソース「WaitCondition」と共に使⽤用
–  cfn-‐‑‒sign...
cfn-‐‑‒initの起動
•  cfn-‐‑‒initはデフォルトでは動作しない
•  User-‐‑‒dataにcfn-‐‑‒initを起動するスクリプトを記述して、cloud-‐‑‒init
経由で起動
•  引数にスタック名、リソース...
アジェンダ
•  CloudFormationの概要
•  スタック
•  テンプレート
•  CloudFormer
•  CloudFormationによる運⽤用
•  まとめ
まとめ
•  AWSリソースを組み合わせた環境を⾃自動的に構築することができる
–  ベストプラクティスが適⽤用された構成の展開に有益
•  利利⽤用料料⾦金金は無料料。EC2やRDSなどリソースの利利⽤用料料⾦金金のみ
•  CloudFor...
リファレンス
•  Cloud  Formation  Samples
–  http://aws.amazon.com/jp/cloudformation/aws-‐‑‒cloudformation-‐‑‒templates/
•  AWS ...
Webinar資料料の配置場所
•  AWS  クラウドサービス活⽤用資料料集
–  http://aws.amazon.com/jp/aws-‐‑‒jp-‐‑‒introduction/
Upcoming SlideShare
Loading in...5
×

AWS Black Belt Techシリーズ AWS CloudFormation

3,188

Published on

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

AWS CloudFormation

Published in: Technology
0 Comments
27 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,188
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
77
Comments
0
Likes
27
Embeds 0
No embeds

No notes for slide

AWS Black Belt Techシリーズ AWS CloudFormation

  1. 1. AWS CloudFormation AWS  Black  Belt  Tech  Webinar  2014  (旧マイスターシリーズ) アマゾンデータサービスジャパン株式会社 技術本部  エンタープライズソリューション部 ソリューションアーキテクト  ⼩小林林正⼈人
  2. 2. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  3. 3. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  4. 4. AWS  CloudFormation •  EC2やELBといったAWSリソースの環境構築を、設定ファイル(テ ンプレート)を元に⾃自動化できるサービス •  テンプレートを⾃自由に作成できるため、⾃自分好みのシステム構成を ⾃自動的に構築できる •  テンプレートには起動すべきリソースの情報をJSONフォーマット のテキスト形式で記述する •  AWS  Test  Driveでも環境構築にCloudFormationを利利⽤用している –  http://aws.amazon.com/jp/testdrive/japan/
  5. 5. スタック S3 CloudWatch Elastic  Load  Balancing EC2 EC2 Auto  Scaling SNS テンプレート Cloud Formation テンプレートに基づき 各リソースが起動 AWS  CloudFormationのイメージ
  6. 6. 利利⽤用シーンと利利点 •  ⼀一度度テンプレートを作成すれば、同じ構成を再現できる –  開発環境の構築 –  Blogシステム、Webシステム、ゲームプラットフォームなど、同じ仕組み でアプリやデータが異異なるようなもの •  ベストプラクティスが盛り込まれたテンプレートが使⽤用可能 –  複数のAZを跨いでリソースを配置する可⽤用性の⾼高い構成 –  セキュリティ要件を満たす上で必須のソフト・設定が⼊入った構成 •  起動時にパラメータを渡せる –  例例えばDBのエンドポイントをEC2に渡せる
  7. 7. 利利⽤用料料⾦金金 •  CloudFormationの利利⽤用⾃自体は無料料 •  テンプレートに従って構築された各AWSサービスに対して課⾦金金 –  EC2インスタンス、ELB、RDSなど起動したリソースの費⽤用が請求される
  8. 8. AWSのデプロイ⾃自動化サービスの中での位置づけ Elastic  Beanstalk OpsWorks CloudFormation フレキシビリティ 導⼊入の容易易さ
  9. 9. CloudFormationに適した場⾯面 •  多種多様なリソースを使い環境構築する場合 –  エンタープライズアプリケーション –  他の⾃自動化サービスではサポートされないリソースを使うとき •  他のデプロイメントサービスと組み合わせて構築する場合 –  CloudFormationで制御可能なリソースとして、OpsWorksやElasticBeanstalk をサポート。CloudFormationでアプリケーション実⾏行行環境を簡単に⽤用意できる •  DRサイトの構築を⾏行行う場合 –  事前にデータを他リージョンに転送しておき、有事の際にCloudFormationを利利 ⽤用してリソースを⽴立立ち上げることでDRサイトを素早く起動できる
  10. 10. CloudFormationによるDR事例例 アステラス製薬株式会社様 http://aws.amazon.com/jp/solutions/case-studies/astellas/
  11. 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. 12. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  13. 13. スタック •  テンプレートからプロビジョニングされるリソースの集合のことを スタックと呼ぶ •  スタック単位でリソースの管理理が可能。スタック破棄を実⾏行行すると、 スタックにひもづくリソースを破棄することが可能 •  使⽤用するリソースおよびリソースの構築順は、テンプレートの依存 関係からCloudFormationが⾃自動的に決定 Web Server App Server スタック これらを⼀一度度に⽣生成・破棄可能
  14. 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. 15. AWS  Management  Consoleによる起動-‐‑‒1
  16. 16. スタックの名前を⼊入⼒力力 テンプレートを指定する。 3種類の⽅方法から選択 サンプルを使う場合はこちら ⼿手持ちのテンプレートを使う場合 はこちらを選択しファイルを指定 S3に配置済みのテンプレートを 指定する場合はこちら AWS  Management  Consoleによる起動-‐‑‒2
  17. 17. テンプレートによってはパラ メータの入力が必要(後述) AWS  Management  Consoleによる起動-‐‑‒3
  18. 18. タグをつけることでリ ソースの管理が可能 AWS  Management  Consoleによる起動-‐‑‒4
  19. 19. 起動されるスタックのコ スト見積もりを参照可能 AWS  Management  Consoleによる起動-‐‑‒5
  20. 20. AWS  Management  Consoleによる起動-‐‑‒6 クリックするとスタックの 起動処理が開始される
  21. 21. 「Events」タブでは各リソースが 順次起動されることを確認できる ステータス「CREATE_IN_PROGRESS」は スタックが起動中であることを意味する AWS  Management  Consoleによる起動-‐‑‒7
  22. 22. AWS  Management  Consoleによる起動-‐‑‒8 スタック起動が完了するとステータスが 「CREATE_COMPLETE」に変化する テンプレートによっては「Outputs」 タブにDNS名やEIPの情報などが 出力される場合がある(後述)
  23. 23. AWS  Management  Consoleによる起動-‐‑‒9 エラーが起きるとスタックはロールバックさ れる。起動したリソースはすべて削除される ロールバックの原因は「Events」タブから 参照できるので、問題を修正し再実行する
  24. 24. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  25. 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. 26. サンプルテンプレート •  テンプレートのサンプルを利利⽤用可能 http://aws.amazon.com/jp/cloudformation/aws-‐‑‒cloudformation-‐‑‒ templates/
  27. 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. 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. 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. 30. プロパティ 内容 Type データ型 “String” “Number” “CommaDelimitedList” Default デフォルト値 NoEcho 入力時に*****となる(パスワードなどに使用) AllowedValues 入力可能値の一覧指定 (例:[“true”,”false”] ) AllowedPattern 正規表現で入力可能パターンを指定(例:[a-zA-Z]*) MaxLength 最大文字数 MinLength 最小文字数 MaxValue 最大値 MinValue 最小値 Description プロパティの詳細説明 ConstraintDescription 入力した値がAllowedPatternやMaxLengthなどの制約に引っかかった時に表示する説明 (どのような制約があるかの説明を記述) •  以下のプロパティが利利⽤用可能 Parametersのプロパティ
  31. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 42. リソースタイプ •  CloudFormationで利利⽤用可能なリソースタイプ •  最新のリストはWebを参照 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-‐‑‒template-‐‑‒ resource-‐‑‒type-‐‑‒ref.html
  43. 43. Attributes •  リソースの振る舞いや関係を制御する •  DeletionPolicy –  スタック削除時のリソースの扱い(Delete  (Default)  /  Retain  /  Snapshot) •  DependsOn –  リソース間の依存関係を明⽰示的に記述 •  Metadata •  UpdatePolicy –  AWS::AutoScaling::AutoScalingGroupリソースのみ –  Auto  ScalingのRolling  Updateでの挙動を制御 •  MaxBatchSize、MinInstancesInService、PauseTime
  44. 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. 45. Outputsとは •  スタック構築後に取得・表⽰示したい情報の定義 •  例例えばアクセスURLや、DBの通信先情報、作ったIAMユーザー名など、 あとで使⽤用するもの •  マネジメントコンソールから確認できるので、スタックに関する情報 を出⼒力力すると便便利利(キーペア名、AZ、インスタンスIDなど)
  46. 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. 47. •  リソース定義にEC2インスタンスが必須ではない –  DB構築だけ、オートスケールだけ、アラーム設定だけでもOK •  参照関係があると、依存関係があるとみなされる。相互参照や循環参 照はエラーとなる •  参照関係がある部分は、参照の整合性が取れるよう起動順を CloudFormationが決定(Depends  onで明⽰示的に指定も可) •  スタックを破棄すると、スタックにひもづくリソースは破棄される –  ただし”DeletionPolicy”を”Retain”にすると破棄されない テンプレートのTips "Resources" : { "myS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain" }}
  48. 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. 49. •  JSONフォーマットでスタックの情報を記載 •  リソース間の依存関係はCloudFormationが⾃自動判別する •  Parameterを利利⽤用すれば、パラメータのユーザ⼊入⼒力力を受け取れる •  Management  Console等に値を出⼒力力したい場合はOutputsに記述する •  タグを設定してリソースの管理理性を⾼高める テンプレートのまとめ
  50. 50. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  アプリケーションのデプロイ •  まとめ
  51. 51. EC2 EC2 AutoScaling テンプレート CloudFormer CloudFormer •  構築済みの環境からテンプレートを作成するツール(Webアプリ) •  テンプレート作成のベースを構築するのに有益
  52. 52. CloudFormerの特徴 •  CloudFormerは全てのCloudFormationのリソースをサポート •  どのリソースをテンプレートに含めるか完全に制御可能 •  リソースを選択すると、従属するリソースも⾃自動選択(変更更可) –  例例えば、EC2インスタンスを選択すると、EC2インスタンスが必要とするセキュリ ティグループもテンプレートに含まれるようになる •  EC2インスタンスを選択すると、そのインスタンスが起動された元の AMIが指定される –  構築済みのイメージを利利⽤用したい場合は、⽣生成されたテンプレートのAMI  IDを確認 する。意図しないものであれば修正を⾏行行う •  CloudFormerで⽣生成されたテンプレートを⼿手修正し、最終的なテンプ レートとして利利⽤用することを推奨
  53. 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. 54. CloudFormerスタックの起動・アクセス
  55. 55. CloudFormerアプリケーション
  56. 56. CloudFormerによるテンプレート⽣生成 •  テンプレート化を⾏行行うリソースのリージョンを指定 •  チェックを⼊入れて指定したリソースが含まれるテンプレートができる •  必要に応じてParameterの利利⽤用やOutputsの定義を⾏行行う
  57. 57. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  58. 58. CloudFormationと運⽤用ポリシー •  CloudFormationはAWSリソースの構築を⾃自動化するツール •  スタック単位でリソースの起動・破棄が⾏行行えるため、類似の環境を 複数構築する場合に⾮非常に有益 •  アプリケーションの管理理については、CloudFormation⾃自体では制 御されないため、デプロイ⽅方式について考慮が必要 •  CloudFormationにはアプリケーションを意識識させないという運⽤用 ⽅方法も考えられる
  59. 59. 典型的なやりかた •  CloudFormationではインフラ環境の構築までを⾏行行い、アプリケー ションは⼿手作業を含む別の⽅方法でデプロイする –  CloudFormationにはアプリを意識識させないパターン •  アプリのデプロイまで完了了した”Baked-‐‑‒AMI”を作成しておき、 CloudFormationではそのAMIを利利⽤用して環境を構築する –  全部⼊入りのAMIを⽤用意しておくパターン •  汎⽤用的なAMIを利利⽤用し、インスタンス起動時に必要なソフトウェア 群をセットアップする –  スタックの起動時に都度度ソフトウェアをダウンロードし、都度度インストールす るパターン
  60. 60. メリット・デメリットとユースケース メリット デメリット ユースケース CloudFormationではイン フラ環境の構築のみ行う •  構築が容易 •  一度作成したテンプレート の流用が容易 •  アプリケーションのデプロイやミ ドルウェアの構築が別途必要 •  ベストプラクティスを取り込ん だ汎用的な標準環境を展開す る アプリ配置済みのBaked- AMIを利用して構築 •  構築が容易 •  起動が速い (オートスケールに適する) •  ベースAMIやミドルウェア更新、 アプリバージョンアップ時に再 構築が必要 •  リージョン毎にAMIの管理が必 要 •  テストが完了した本番環境を 複製して開発環境を作る •  変更の少ないシステムのDR サイト起動用として インスタンス起動時に必要 なソフトウェア群をセット アップする •  ベースAMI/ミドルウェア更 新時に追従が可能 •  DBのエンドポイントなどの 定義情報を渡せる •  テンプレートの構築がやや難し い •  都度セットアップの分、インスタ ンスの起動に時間がかかる •  常に最新のソフトウェア環境を 利用する必要があるとき •  RDSをはじめとするAWSのマ ネージドサービスと連携する 場合
  61. 61. インスタンス起動時のソフトウェア環境構築 •  インスタンスの起動時にuserdata(スクリプト)を渡すことで初期設 定を⾃自動化するブートストラッピングが可能 •  AMIとは紐紐付かない。そのため、ベースAMIが更更新されたとしても、 変更更作業を⾏行行う必要はない •  インスタンス起動時⼀一度度実⾏行行されるだけなので、書き換えて再実⾏行行 ができない点に注意。最⼤大容量量は16KBまで
  62. 62. cloud-‐‑‒init •  Amazon  Linuxに⼊入っている、初期設定ツール •  EC2インスタンスの起動時に、userdataに記述されたスクリプトを 実⾏行行する –  「#!」  で始まる⽂文字列列の場合のみ、スクリプトを実⾏行行 •  ロケール変更更、アプリインストール、ファイル書き換えなどが可能 •  RHELでも利利⽤用可能 –  http://aws.amazon.com/articles/2519228458631605 •  WindowsではEC2ConfigService
  63. 63. cloud-‐‑‒init User  Dataに定義 Cloud-‐‑‒initがuserdataを 読み込む 読み込んだスクリプトを 実⾏行行 EC2インスタンス起動
  64. 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. 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. 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. 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. 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. 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. 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. 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. 72. その他のスクリプト •  cfn-‐‑‒get-‐‑‒metadata –  Metadataを簡単に取得出来るスクリプト •  cfn-‐‑‒signal –  リソース「WaitCondition」と共に使⽤用 –  cfn-‐‑‒signalを使⽤用して、スタックに対して初期化状態の通知をすることが出来る –  アプリのインストールが失敗した場合にスタックを破棄したりできる •  cfn-‐‑‒hup –  スタックを更更新(StackUpdateAPIを使⽤用)した場合に、それを感知して指定の ファイルを実⾏行行するフックスクリプト https://s3.amazonaws.com/cloudformation-‐‑‒examples/BoostrappingApplicationsWithAWSCloudFormation.pdf
  73. 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. 74. アジェンダ •  CloudFormationの概要 •  スタック •  テンプレート •  CloudFormer •  CloudFormationによる運⽤用 •  まとめ
  75. 75. まとめ •  AWSリソースを組み合わせた環境を⾃自動的に構築することができる –  ベストプラクティスが適⽤用された構成の展開に有益 •  利利⽤用料料⾦金金は無料料。EC2やRDSなどリソースの利利⽤用料料⾦金金のみ •  CloudFormationそのものはアプリケーションを意識識しないので、 アプリケーションをどう管理理するかは別途検討する •  必要に応じてElastic  BeanstalkやOpsWorksと組み合わせて利利⽤用す ることで、アプリ実⾏行行環境を容易易に構築できる
  76. 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. 77. Webinar資料料の配置場所 •  AWS  クラウドサービス活⽤用資料料集 –  http://aws.amazon.com/jp/aws-‐‑‒jp-‐‑‒introduction/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×