20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
-
Upload
daisuke-miyamoto -
Category
Technology
-
view
1.687 -
download
0
description
Transcript of 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
クラスメソッド株式会社 都元ダイスケ
CloudFormation
#jawsdays #ace
自己紹介• Webアプリ屋 出身のAWS屋
• Classmethod所属
• AWS歴 2.5年
• @daisuke_m
CloudFormationEC2S3
Glacier
ElasticMapReduce
AutoScaling
ELB
CloudFrontRDS
DynamoDBElastiCache
RedShift
IAM
CloudWatch
BeanstalkData Pipeline
OpsWorks
CloudHSM
CloudSearch
SWF
SQS
SNSSES Transcoder
Route53VPCDirectConnect
StorageGateway
Mechanical Turk
CloudTrail
AppStream
Kinesis
#jawsdays #ace
works
✦ AWSインフラの コンサル・設計・構築
✦ お客様向けアプリケーションの DevOps
✦ 人間CloudFormer
✦ 気づくと書いてるJSONが1000行越えてます
#jawsdays #ace
Agenda
• CloudFromationの概要
• CloudFormation Helper Scripts
• CFnで実現する Blue-Green Deployment
#jawsdays #ace
‒ D-chan
“SSHしたら負けかなと思っている。”
※ あくまでも心意気の話ですが
#jawsdays #ace
CloudFormation
#jawsdays #ace
CloudFormation
Template
+Parameter
Parameter
Stack
Bucket withObjects
DynamoDB Table
ELB
Instances Auto Scaling Amazon CloudFront
基本的システム構成 S3, DynamoDB, EC2,
IAM, AutoScaling, SecurityGroup, ELB, CloudFront
Instance Type, クラスタの台数,
SSH接続元IP, キー名, ...等
Template
#jawsdays #ace
JSON、ということはインフラを バージョン管理できる\(^o^)/
育てるインフラ
• インフラの構成をTemplateとしてバージョン管理する
• TemplateからStackを作る(構築)
• インフラ構成を追加・編集(そしてバージョン管理)
• 既存Stackを新しいテンプレートで更新する(成長)
#jawsdays #ace
Resource
【S3のバケットを1つ作成する例】 "CacheBucket" がリソース名
"Type" に種類リソースの種類を指定して "Properties" で詳細設定する
Parameter
#jawsdays #ace
Parameter Reference
#jawsdays #ace
Parameter Inputs
#jawsdays #ace
Mapping / Mapping Reference
Output
突然ですがここでCFnの課題
✦ テスタビリティ
✦ 一部作成に対応していないサービス有り(順次)
✦ 一部更新に対応していないサービス有り(順次…)
✦ 自動化コンポーネントを手動で触るとFAILEDステータスとなり、詰む(御法度)
CloudFormtaion Helper Scripts
#jawsdays #ace
user-data
user-data
user-data
自己組織化
user-dataの問題点
✦ 失敗検知ができない
✦ 複雑になると、カオス化する(手順の構造化)
✦ 設定の更新(再実行)ができない
✦ Immutable Infrastructureからは離れるが
#jawsdays #ace
WaitCondition(失敗検知)
cfn-init(手順の構造化)
Metadata AWS::CloudFormation::Init
cfn-hup(更新ヘルパー)
configSets• cfn-init起動時の -c でconfigSetを指定する !
• configSetは、実行するconfigのリストと順序を定義 !
• packages • sources • users • groups • files • commands • services
それぞれの 設定の中で この順序で 実行される
cfn-hupの設定
CloudFormtaionで実現する Blue-Green Deployment
#jawsdays #ace
というテンプレート 書いてみた。
パラメータ(主なもの)
✦ ProductionEnv (“blue” or “green”)
✦ BlueInstanceType / GreenInstanceType
✦ BlueFleetSize / GreenFleetSize
✦ BlueApplication / GreenApplication
#jawsdays #ace
アプリのtgz URL
更新されたらhttpd再起動
PHPの中から
$_SERVER[‘RDS_…’] で参照
デプロイ(開発時)
• 現在Blueが本番だとすると、Greenが開発
• アプリケーションファイルをtar.gzに固める
• S3にアップロードし、そのURLを確認
• GreenのURLを書き換えてStack update
#jawsdays #ace
スワップ(リリース時)• Blueが本番だとすると、Greenが開発
• Greenに次期バージョンをデプロイして動作確認
• OKだったらGreenを増強(インスタンスサイズ↗ 数量↗)
• ProductionEnvをblueからgreenに書き換えてStack update
• 切り替わったらBlueを縮退(インスタンスサイズ↘ 数量↘)
• 以降、Greenが本番で、Blueが開発環境となる
#jawsdays #ace
まとめCloudFormationの5要素
Parameter
Condition
Mapping
Resource
Outputs
CFn Helper Scripts
cfn-signal (WaitCond.)
cfn-init
cfn-hup
Blue-Green Deployment
#jawsdays #ace