Recommended
PDF
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
PDF
BCPに活かせ!一撃 CloudFormation
PDF
[Black Belt Online Seminar] AWS上でのログ管理
PDF
20120303 jaws summit-meister-04_cloud_formation
PDF
現場的!AWSとオンプレの違い(赤べこバージョン)
PPTX
ナウなヤングにCloud Formationが流行ってほしい
PDF
20120201 aws meister-reloaded-iam-and-billing-public
PPTX
PDF
AWS Black Belt Techシリーズ AWS IAM
PDF
Aws tools for power shellをつかいこなそう
PDF
Black Belt Online Seminar Amazon CloudWatch
PDF
AWS Blackbelt 2015シリーズ AWS Lambda
PDF
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
PDF
AWS Black Belt Online Seminar 2016 Amazon Kinesis
PDF
[AWSマイスターシリーズ] AWS SDK for Java / .NET
PDF
Amazon Elasticsearch Serviceを利用したAWSのログ活用
PDF
PDF
PDF
AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS
PPTX
AWS Black Belt Techシリーズ AWS Storage Gateway
PDF
AWS Black Belt Online Seminar 2017 Amazon S3
PPTX
PDF
AWS Lambda with Java/Scala #渋谷Java 第十二回
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PDF
20120528 aws meister-reloaded-awssd-kforjava-public
PPTX
PDF
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
PDF
実践 Amazon KMS #cmdevio2015
PDF
Microsoft Share Point on AWS
PDF
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
More Related Content
PDF
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
PDF
BCPに活かせ!一撃 CloudFormation
PDF
[Black Belt Online Seminar] AWS上でのログ管理
PDF
20120303 jaws summit-meister-04_cloud_formation
PDF
現場的!AWSとオンプレの違い(赤べこバージョン)
PPTX
ナウなヤングにCloud Formationが流行ってほしい
PDF
20120201 aws meister-reloaded-iam-and-billing-public
PPTX
What's hot
PDF
AWS Black Belt Techシリーズ AWS IAM
PDF
Aws tools for power shellをつかいこなそう
PDF
Black Belt Online Seminar Amazon CloudWatch
PDF
AWS Blackbelt 2015シリーズ AWS Lambda
PDF
AWS Black Belt Techシリーズ AWS CloudTrail & CloudWatch Logs
PDF
AWS Black Belt Online Seminar 2016 Amazon Kinesis
PDF
[AWSマイスターシリーズ] AWS SDK for Java / .NET
PDF
Amazon Elasticsearch Serviceを利用したAWSのログ活用
PDF
PDF
PDF
AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS
PPTX
AWS Black Belt Techシリーズ AWS Storage Gateway
PDF
AWS Black Belt Online Seminar 2017 Amazon S3
PPTX
PDF
AWS Lambda with Java/Scala #渋谷Java 第十二回
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PDF
20120528 aws meister-reloaded-awssd-kforjava-public
PPTX
PDF
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
PDF
実践 Amazon KMS #cmdevio2015
Viewers also liked
PDF
Microsoft Share Point on AWS
PDF
[AWS Summit 2012] クラウドデザインパターン#1 CDP概要編
PDF
[よくわかるAmazon Redshift]Amazon Redshift最新情報と導入事例のご紹介
PDF
20120303 jaws summit-meister-08_sg-dx
PDF
20120611 aws meister-reloaded-cloud-front-public
PDF
20111215 12 aws-meister-sqs_sns_sdb-public
PDF
20120723 aws meister-reloaded-awssd-kfor_ruby-php-python-public
Similar to 20120402 aws meister-reloaded-cloud-formation
PDF
PDF
PPTX
PDF
[AWSマイスターシリーズ] AWS CloudFormation
PDF
PDF
これでAWSマスター!? 初心者向けAWS簡単講座
PPTX
NoSQL on AWSで作る最新ソーシャルゲームアーキテクチャ
PDF
Windows 開発者のための Dev&Ops on AWS
PDF
AWSマイスターシリーズReloaded -AWS SDK for .NET-
PDF
Aws meister-cloud formation-summit2012
PDF
AWS Black Belt Techシリーズ AWS CloudFormation
PDF
PDF
PDF
20130326 aws meister-reloaded-windows
PDF
PDF
華麗なるElastic Beanstalkでの環境構築
PDF
Awsではじめるgluster fs 20120726-public
PDF
PDF
20130309 windows on aws handson
PDF
Movable type for AWS Starter Guide
More from Amazon Web Services Japan
PPTX
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
PDF
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
PDF
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
PDF
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
PDF
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
PDF
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
PDF
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
PDF
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
PDF
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
PDF
Amazon QuickSight の組み込み方法をちょっぴりDD
PDF
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
PDF
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
PDF
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
PDF
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
20120402 aws meister-reloaded-cloud-formation 1. 2. 3. 4. 5. CloudFormationのイメージ
テンプレートに基づき
各サービスが起動
スタック
ElasticLoadBalanceing
テンプレート
S3
Cloud
Formation
SNS
EC2 EC2
AutoScaling
CloudWatch
6. 利用シーンと利点
一度テンプレートを作成すれば、同じ構成を再現できる
開発環境の構築
Blogシステム、Webシステム、ゲームプラットフォームなど、
同じ仕組みでアプリやデータが異なるようなもの
ベストプラクティスが盛り込まれたテンプレートが使用可能
システムアーキテクチャの再利用
WordPress,Redmineなどが入った、多くのサンプルテンプレ
ートが提供済み
起動時にパラメータを渡せる
例えばDBのエンドポイントをEC2に渡せる
7. 8. 9. 10. スタック可能なリソース
これらをスタックに組み込み、設定を行える
Amazon EC2 Instances Amazon Simple Storage Service (S3) Buckets
Amazon Elastic Block Store (EBS) Volumes Amazon Simple DB Domains
Elastic Load Balancers Amazon Simple Queue Service (SQS) Queues
Elastic IP Addresses Amazon Simple Notification Service (SNS) Topics
Amazon EC2 Security Groups Amazon SNS Subscriptions
Auto Scaling Groups Amazon Route 53 DNS Records
Amazon Relational Database Service (RDS)
Amazon CloudFront Distributions
Instances
AWS Identity and Access Management users and
Amazon RDS Security Groups
groups
AWS Elastic Beanstalk AWS Identify and Access Management policies
Amazon CloudWatch Alarms New!! Amazon Virtual Private Cloud
New!! Amazon ElastiCache
11. スタック構築方法
AWS ManagementConsoleから構築
コマンドラインツール
http://aws.amazon.com/developertools/AWS-
CloudFormation/2555753788650372
Java・.Net・PHPの各種SDK
Java : http://aws.amazon.com/jp/sdkforjava/
.NET : http://aws.amazon.com/jp/sdkfornet/
PHP : http://aws.amazon.com/jp/sdkforphp/
12. 13. 14. 15. 16. 17. 18. {
"AWSTemplateFormatVersion" : "2010-09-09",
テンプレート "Description" : “Sample",
"Parameters" : {
"KeyName" : {
"Description" : “Sample key,
"Type" : "String"
}
},
"Mappings" : {
},
"Resources" : {
CloudFormationの心臓部
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
スタック構築の設計図 "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyName" },
JSONフォーマットで記述
"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"
}]
}
}
}
}
19. テンプレート解説
テンプレートのバージョン
{ (最新は2010-09-09)
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K", テンプレートの詳細(説明文)
"Parameters" : {
set of parameters CloudFormation実行時に
}, 後で変更可能なパラメータを列挙
(例:DBユーザー名など)
"Mappings" : {
set of mappings
}, Hashtableのようなもの
キーに応じて値を特定出来る
"Resources" : { (例:リージョンに応じたAMI番号など)
set of resources
},
EC2やRDSなど、スタックを構成する
"Outputs" : { リソースを定義
set of outputs
}
} スタック構築後に取得したい値
(例:アクセスURLなど)
20. Parameters
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parameters CloudFormation実行時に
}, 後で変更可能なパラメータを列挙
(例:DBユーザー名など)
"Mappings" : {
set of mappings
},
"Resources" : {
set of resources
},
"Outputs" : {
set of outputs
}
}
21. Parametersとは
スタック構築時に値の入力が可能
データ型、デフォルト値、最小最大値など設定可能
"Parameters" : {
"Age":{
"Type":"Number",
“Default” : “30”,
“MinValue”: “20”,
“MaxValue”: “60”,
"Description":"input your age.“
},
"FirstName":{
"Type":"String",
"Description":"input your first name.“
},
}
22. Parametersのプロパティ
利用出来るプロパティ
プロパティ 内容
Type データ型 “String” “Number” “CommaDelimitedList”
Default デフォルト値
NoEcho 入力時に*****となる(パスワードなどに使用)
AllowedValues 入力可能値の一覧指定 (例:[“true”,”false”] )
AllowedPattern 正規表現で入力可能パターンを指定(例:[a-zA-Z]*)
MaxLength 最大文字数
MaxValue 最大値
MinValue 最小値
Description プロパティの詳細説明
ConstraintDescription 入力した値がAllowedPatternやMaxLengthなどの制約
に引っかかった時に表示する説明
(どのような制約があるかの説明を記述)
23. Parametersの参照
入力したパラメータ値は、テンプレート中で “Ref”を使用し
て参照可能
ユーザー名、パスワード、ドメインなどの可変部分に便利
ここにパラメータ入力値が反映される
“Resources" : {
“MyServer":{
“Type":“AWS::EC2::Instance",
“Properties” : {
“KeyName”: { “Ref” : “Age”},
“Tags” : { “Ref” : “FirstName”}
}
}
}
24. Function
Ref
パラメータを参照する
Fn::Base64
文字列をBase64エンコードする
Fn::FindInMap
Mapから値を取り出す
Fn::GetAtt
リソースから属性を取り出す
例:"Fn::GetAtt" : [ "MyELB" , "DNSName"]
Fn:GetAZs
指定リージョンのアベイラビリティゾーンを返す
Fn:Join
文字列の連結
“Fn::Join” : [ “:”, [ “a”, “b”, “c” ] ] は 「a:b:c」を返す
“:”がセパレータ。不要な場合は ”” を定義
http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/index.
html?intrinsic-function-reference.html
25. Pseudo Parameter
実行リージョンやスタック名といったパラメータを取得出来る予約語
AWS::Region
スタック構築対象のリージョンを取得する
{ “Ref” : “AWS::Region” } で値を取得可能
AWS::StackName
スタックの名前を取得する
{ “Ref” : “AWS::StackName” } で値を取得可能
“Resources" : {
“MyServer":{
“Type":“AWS::EC2::Instance",
“Properties” : {
“KeyName”: { “Ref” : “AWS::StackName”},
“Tags” : { “Ref” : “AWS::Region”}
}
}
}
http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/index.
html?pseudo-parameter-reference.html
26. Mappings
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parameters
},
"Mappings" : {
set of mappings
}, Hashtableのようなもの
キーに応じて値を特定出来る
"Resources" : { (例:リージョンに応じたAMI番号など)
set of resources
},
"Outputs" : {
set of outputs
}
}
27. Mappingsとは
キーとバリューのテーブル
例えば、入力値やリージョンによって値が変わるようなもの
を決めるような使い方
"Mappings" : {
"RegionTable" : {
"us-east-1" : { マッピングを定義
"AMI" : "ami-8c1fece5“, (この例の場合、”RegionTable”という
“Key” : “myKey-east” マッピングを定義)
},
"us-west-1" : {
"AMI" : "ami-3bc9997e“, “Fn::FindInTemplate”
“Key” : “myKey-west”
},
"ap-northeast-1" : {
"AMI" : "ami-300ca731“,
“Key” : “myKey-japan”
}
}
},
28. Mappingsの使い方
“Fn:FindInMap”で値を取得
"Fn::FindInMap" : [ "MapName", "Key", "Value"]
MapName,key,Valueには”Ref”が利用可能
"Mappings" : {
"RegionTable" : {
"us-east-1" : { “Resources" : {
"AMI" : "ami-8c1fece5“, “MyServer":{
“Key” : “myKey-east” “Type":“AWS::EC2::Instance",
}, “Properties” : {
"us-west-1" : { “ImageId”: {
“Fn::FindInTemplate”
"AMI" : "ami-3bc9997e“, “Fn:FindInMap” : [
“Key” : “myKey-west” “RegionTable” ,
}, { “Ref” : “region” },
"ap-northeast-1" : { “AMI”]
"AMI" : "ami-300ca731“, },
“Key” : “myKey-japan” }
} }
} } この例だと、入力された
}, regionパラメータによって
利用するAMIのIDを決定できる
29. Resources
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parameters
},
"Mappings" : {
set of mappings
},
"Resources" : {
set of resources
},
EC2やRDSなど、スタックを構成する
"Outputs" : { リソースを定義
set of outputs
}
}
30. Resourcesとは
EC2やELB,RDSなど、起動するサービスを設定
リソース毎に決められたパラメータを設定する
“Resources" : {
“MyWebServer" : {
“Type" : “AWS:EC2::Instance”
“Properties" : {
“KeyName" : "ami-8c1fece5“,
“ImageId” : “myKey-east”
},
"us-west-1" : {
"AMI" : "ami-3bc9997e“,
“Key” : “myKey-west”
},
"ap-northeast-1" : {
"AMI" : "ami-300ca731“,
“Key” : “myKey-japan”
}
}
},
31. EC2+SecurityGroupの例
"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"
}]
}
}
}
32. リソースタイプ
Auto Scaling AutoScalingGroup AWS::AutoScaling::AutoScalingGroup Auto Scaling AutoScalingGroup AWS::AutoScaling::AutoScalingGroup
IAM Access Key AWS::IAM::AccessKey Auto Scaling LaunchConfiguration AWS::AutoScaling::LaunchConfiguration
IAM Group AWS::IAM::Group Auto Scaling Policy AWS::AutoScaling::ScalingPolicy
IAM Policy AWS::IAM::Policy Auto Scaling Trigger AWS::AutoScaling::Trigger
IAM Add User to Group UserToGroupAddition Amazon CloudFormation Stack AWS::CloudFormation::Stack
IAM User AWS::IAM::User Amazon CloudFormation WaitCondition AWS::CloudFormation::WaitCondition
Amazon CloudFormation
Elastic Load Balancing LoadBalancer AWS::ElasticLoadBalancing::LoadBalancer AWS::CloudFormation::WaitConditionHandle
WaitConditionHandle
Amazon RDS DBInstance AWS::RDS::DBInstance Amazon CloudFront Distribution AWS::CloudFront::Distribution
Amazon RDS DBSecurityGroup AWS::RDS::DBSecurityGroup Amazon CloudWatch AWS::CloudWatch::Alarm
Amazon Route 53 Resource Record Set AWS::Route53::RecordSet Amazon EBS Volume AWS::EC2::Volume
Amazon Route 53 Resource Record Set Amazon EBS Volume Attachment AWS::EC2::VolumeAttachment
AWS::Route53::RecordSetGroup
Group
Amazon EC2 Elastic IP Address AWS::EC2::EIP
Amazon S3 Bucket AWS::S3::Bucket
Amazon EC2 Elastic IP Address
AWS::EC2::EIPAssociation
Amazon S3 Bucket Policy AWS::S3::BucketPolicy Association
Amazon EC2 Instance AWS::EC2::Instance
Amazon SimpleDB Domain AWS::SDB::Domain
Amazon EC2 Security Group AWS::EC2::SecurityGroup
SNS Topic Policy AWS::SNS::TopicPolicy
Amazon EC2 Security Group Ingress AWS::EC2::SecurityGroupIngress
Amazon SNS Subscription AWS::SNS::Subscription
Amazon SQS Queue Policy AWS::SQS::QueuePolicy
Amazon SNS Topic AWS::SNS::Topic
Amazon SQS Queue AWS::SQS::Queue
http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/index.h
tml?aws-template-resource-type-ref.html
33. Outputs
{
"AWSTemplateFormatVersion" : “2010-09-09",
"Description" : "Valid JSON strings up to 4K",
"Parameters" : {
set of parameters
},
"Mappings" : {
set of mappings
},
"Resources" : {
set of resources
},
"Outputs" : {
set of outputs
}
} スタック構築後に取得したい値
(例:アクセスURLなど)
34. 35. Outputの定義
出力したい名称を定義
"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を使って文字列を
加工
36. Outputの定義
"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"] ] }
}
}
37. 38. テンプレートTips
リソース定義にEC2インスタンスが必須ではない
DB構築だけ、オートスケールだけ、アラーム設定だけでもOK
参照関係があると、依存関係があるとみなされる。相互参照
や循環参照はNG(エラーとなる)
参照関係がある部分は、参照の整合性が取れるよう起動順を
CloudFormationが決定
スタックを破棄すると、スタックにひもづくリソースは破棄
される
ただし”DeletionPolicy”を”Retain”にすると破棄されない
"Resources" : {
"myS3Bucket" : {
"Type" : "AWS::S3::Bucket",
"DeletionPolicy" : "Retain"
}
}
39. 40. 41. 42. 43. 44. Cloud-init
EC2インスタンス起動
User Dataに定義
Cloud-initがuserdataを
読み込む
読み込んだスクリプト
を実行
45. Cloud-initの利点と欠点
利点
インスタンス起動時に、インスタンスの初期化が可能
AMIとユーザーデータは分離できるので、AMIの作り込みが不要
になる
Apacheインストール済みのAMIを用意すると、OSやApacheの
バージョンが上がったときに再作成になる
欠点
userdataは一度定義すると、書き換えは不可能
書き換えて再実行が出来ない(後述のスタック更新に使えない)
設定できるデータ量は、16KByteまで
46. CloudFormationとの連携
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",
]]
}
}
}
47. 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",
}
}
48. 49. 50. cfn-init
パッケージやファイルのダウンロード、ファイルの生成を行
うスクリプト
実行のための設定は、Metadata領域に定義
sources,packages,files,services
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
source,package,files,servicesの
"sources" : { : },
"packages" : { : } 順に実行される
"files" : { : }
"services" : { : } }
}
},
"Properties": { : }
}
51. cfn-initの設定
sources
指定したURLからファイルをダウンロードして展開
Tar,zip,tar+gzip,tar+bz2
"sources" : {
"/etc/myapp" : "https://s3.amazonaws.com/mybucket/myapp.tar.gz"
}
packages
パッケージシステムを使用してアプリをインストール
Apt,yum,rubygems,python,rpm
"packages" : { 最新版
"yum" : {
"httpd" : [],
"php" : [],
バージョン
},
指定
"rubygems" : {
"chef" : [ "0.10.2" ],
}
}
52. 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"
} S3などから取得
"/etc/myapp/myapp-init.pp" : {
"source" : "https://s3.amazonaws.com/myapp/myapp-init.pp",
"mode" : "100644",
"owner" : "root",
"group" : "wheel"
}
}
53. cfn-initの設定
services
サービスの起動・再起動の指定
現在sysvinitのみ
"services" : { OS起動時に起動さ
"sysvinit" : { せるかどうか
"nginx" : {
"enabled" : "true",
cfn-init終了後に起動するかどうか
"ensureRunning" : "true",
"files" : ["/etc/nginx/nginx.conf"],
"sources" : ["/var/www/html"]
設定ファイルもしくは指定ディ
},
"php-fastcgi" : {
レクトリのファイルが変わって
"enabled" : "true", いた場合にサービス再起動する
"ensureRunning" : "true",
"packages" : { "yum" : ["php", "spawn-fcgi"] }
}
} Cfg-initでパッケージを入れてい
たらサービス再起動
54. 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",
]]}}
}
55. 初期化シーケンス
EC2インスタンス起動
cfn-init内で、meta-dataの読み込み
Init.dに登録してある
cloud-initが実行される
Meta-dataの設定に従い、
Sources(ファイルダウンロード)
User-data領域から、 Packages(インストール)
スクリプトを読み込み Files(設定作成)
Services(サービス)
を実行
スクリプト内で、
cfn-initを呼び出し
起動完了
56. https://s3.amazonaws.com/cloudformation-templates-
Chef(solo)との連携例 us-east-1/wordpress-via-chef-solo.template
が分かりやすい例
EC2インスタンス起動
cfn-init内で、meta-dataの読み込み
Init.dに登録してある
cloud-initが実行される
Meta-dataの設定に従い、
User-data領域から、
Sources(レシピファイルダウンロード)
スクリプトを読み込み
Packages(rubygemでchefインストール)
Files(レシピの一部書き換え)
スクリプト内で、 を実行
cfn-initを呼び出し
スクリプト内で、
Chefを実行 ダウンロードしたレシピを元に、
chefがサーバ構築
起動完了
57. その他スクリプト
cfn-get-metadata
Metadataを簡単に取得出来るスクリプト
cfn-signal
リソース「WaitCondition」と共に使用
cfn-signalを使用して、スタックに対して初期化状態の通知を
することが出来る
アプリのインストールが失敗した場合にスタックを破棄したり
できる
cfn-hup
スタックを更新(StackUpdateAPIを使用)した場合に、それ
を感知して指定のファイルを実行するフックスクリプト
https://s3.amazonaws.com/cloudformation-
examples/BoostrappingApplicationsWithAWSCloudFormation.pdf
58. 59. 60. 61. 62. 63. 入れ子テンプレート
テンプレートからテンプレートの呼び出しが可能
リソースタイプに “AWS::CloudFormation::Stack“を指定
TemplateURLを指定すると、そのテンプレートを読み込み
"Resources" : {
"WebServer" : {
"Type" : "AWS::CloudFormation::Stack",
"Properties" : {
"TemplateURL" : “https://s3.amazonaws.com/hoge.template" ]]},
"Parameters" : {
"KeyName" : { "Ref" : "KeyName" },
"InstanceType" : { "Ref" : "InstanceType"},
}
},
64. Baked AMI VS CF-Init
AMIの作り込み VS Cloud-init+CloudFormation helpers
用途によって、AMI作り込み、cloud-init、helperを使い分
ける事が重要
利点 欠点
AMI作り込み ・構築が容易 ・ベースAMI/ミドルウェア
・起動が速い 更新時に再インストールが必要
(オートスケールに有効) ・リージョン毎の構築が必要
ベースAMI+ ・ベースAMI/ミドルウェア更新時 ・テンプレート構築が手間
Cloud-init+CFN に追従が可能 ・OS初期化に時間がかかる
helpers ・DBのエンドポイントなどの
定義が渡せる
65. 66. 67. 68. 69. 参考URL
Cloud Formation Samples
http://aws.amazon.com/jp/cloudformation/aws-
cloudformation-templates/
BootstrappingApplicationsWithAWSCloudFormation
https://s3.amazonaws.com/cloudformation-
examples/BoostrappingApplicationsWithAWSCloudForma
tion.pdf
Integrating CloudFormation with Chef
https://s3.amazonaws.com/cloudformation-
examples/IntegratingAWSCloudFormationWithOpscodeC
hef.pdf
CloudFormer
https://forums.aws.amazon.com/ann.jspa?annID=1048