More Related Content Similar to AWS Black Belt Techシリーズ AWS CloudFormation (20) More from Amazon Web Services Japan (20) AWS Black Belt Techシリーズ AWS CloudFormation9. CloudFormationに適した場⾯面
• 多種多様なリソースを使い環境構築する場合
– エンタープライズアプリケーション
– 他の⾃自動化サービスではサポートされないリソースを使うとき
• 他のデプロイメントサービスと組み合わせて構築する場合
– CloudFormationで制御可能なリソースとして、OpsWorksやElasticBeanstalk
をサポート。CloudFormationでアプリケーション実⾏行行環境を簡単に⽤用意できる
• DRサイトの構築を⾏行行う場合
– 事前にデータを他リージョンに転送しておき、有事の際にCloudFormationを利利
⽤用してリソースを⽴立立ち上げることでDRサイトを素早く起動できる
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
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/
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フォーマットで記述
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のプロパティ
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とは
リソースタイプの定義
リソースごとのプロパティ
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
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"},
}},
60. メリット・デメリットとユースケース
メリット
デメリット
ユースケース
CloudFormationではイン
フラ環境の構築のみ行う
• 構築が容易
• 一度作成したテンプレート
の流用が容易
• アプリケーションのデプロイやミ
ドルウェアの構築が別途必要
• ベストプラクティスを取り込ん
だ汎用的な標準環境を展開す
る
アプリ配置済みのBaked-
AMIを利用して構築
• 構築が容易
• 起動が速い
(オートスケールに適する)
• ベースAMIやミドルウェア更新、
アプリバージョンアップ時に再
構築が必要
• リージョン毎にAMIの管理が必
要
• テストが完了した本番環境を
複製して開発環境を作る
• 変更の少ないシステムのDR
サイト起動用として
インスタンス起動時に必要
なソフトウェア群をセット
アップする
• ベースAMI/ミドルウェア更
新時に追従が可能
• DBのエンドポイントなどの
定義情報を渡せる
• テンプレートの構築がやや難し
い
• 都度セットアップの分、インスタ
ンスの起動に時間がかかる
• 常に最新のソフトウェア環境を
利用する必要があるとき
• RDSをはじめとするAWSのマ
ネージドサービスと連携する
場合
62. cloud-‐‑‒init
• Amazon Linuxに⼊入っている、初期設定ツール
• EC2インスタンスの起動時に、userdataに記述されたスクリプトを
実⾏行行する
– 「#!」 で始まる⽂文字列列の場合のみ、スクリプトを実⾏行行
• ロケール変更更、アプリインストール、ファイル書き換えなどが可能
• RHELでも利利⽤用可能
– http://aws.amazon.com/articles/2519228458631605
• WindowsではEC2ConfigService
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",
]]}}}
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/