20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

39
クラスメソッド 株式会社 都元ダイスケ CloudFormation #jawsdays #ace

description

 

Transcript of 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Page 1: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

クラスメソッド株式会社 都元ダイスケ

CloudFormation

#jawsdays #ace

Page 2: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

自己紹介• 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

Page 3: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

works

✦ AWSインフラの コンサル・設計・構築

✦ お客様向けアプリケーションの DevOps

✦ 人間CloudFormer

✦ 気づくと書いてるJSONが1000行越えてます

#jawsdays #ace

Page 4: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Agenda

• CloudFromationの概要

• CloudFormation Helper Scripts

• CFnで実現する Blue-Green Deployment

#jawsdays #ace

Page 5: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

‒ D-chan

“SSHしたら負けかなと思っている。”

※ あくまでも心意気の話ですが

#jawsdays #ace

Page 6: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

CloudFormation

#jawsdays #ace

Page 7: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

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, キー名, ...等

Page 8: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Template

#jawsdays #ace

JSON、ということはインフラを バージョン管理できる\(^o^)/

Page 9: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

育てるインフラ

• インフラの構成をTemplateとしてバージョン管理する

• TemplateからStackを作る(構築)

• インフラ構成を追加・編集(そしてバージョン管理)

• 既存Stackを新しいテンプレートで更新する(成長)

#jawsdays #ace

Page 10: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Resource

【S3のバケットを1つ作成する例】 "CacheBucket" がリソース名

"Type" に種類リソースの種類を指定して "Properties" で詳細設定する

Page 11: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Parameter

#jawsdays #ace

Page 12: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Parameter Reference

#jawsdays #ace

Page 13: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Parameter Inputs

#jawsdays #ace

Page 14: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Mapping / Mapping Reference

Page 15: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Output

Page 16: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

突然ですがここでCFnの課題

✦ テスタビリティ

✦ 一部作成に対応していないサービス有り(順次)

✦ 一部更新に対応していないサービス有り(順次…)

✦ 自動化コンポーネントを手動で触るとFAILEDステータスとなり、詰む(御法度)

Page 17: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

CloudFormtaion Helper Scripts

#jawsdays #ace

Page 18: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

user-data

Page 19: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

user-data

Page 20: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

user-data

自己組織化

Page 21: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

user-dataの問題点

✦ 失敗検知ができない

✦ 複雑になると、カオス化する(手順の構造化)

✦ 設定の更新(再実行)ができない

✦ Immutable Infrastructureからは離れるが

#jawsdays #ace

Page 22: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

WaitCondition(失敗検知)

Page 23: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

cfn-init(手順の構造化)

Page 24: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

Metadata AWS::CloudFormation::Init

Page 25: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
Page 26: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

cfn-hup(更新ヘルパー)

Page 27: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

configSets• cfn-init起動時の -c でconfigSetを指定する !

• configSetは、実行するconfigのリストと順序を定義 !

• packages • sources • users • groups • files • commands • services

それぞれの 設定の中で この順序で 実行される

Page 28: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

cfn-hupの設定

Page 29: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

CloudFormtaionで実現する Blue-Green Deployment

#jawsdays #ace

Page 30: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
Page 31: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
Page 32: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

というテンプレート 書いてみた。

Page 33: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

パラメータ(主なもの)

✦ ProductionEnv (“blue” or “green”)

✦ BlueInstanceType / GreenInstanceType

✦ BlueFleetSize / GreenFleetSize

✦ BlueApplication / GreenApplication

#jawsdays #ace

Page 34: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

アプリのtgz URL

更新されたらhttpd再起動

PHPの中から

$_SERVER[‘RDS_…’] で参照

Page 35: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
Page 36: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

デプロイ(開発時)

• 現在Blueが本番だとすると、Greenが開発

• アプリケーションファイルをtar.gzに固める

• S3にアップロードし、そのURLを確認

• GreenのURLを書き換えてStack update

#jawsdays #ace

Page 37: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

スワップ(リリース時)• Blueが本番だとすると、Greenが開発

• Greenに次期バージョンをデプロイして動作確認

• OKだったらGreenを増強(インスタンスサイズ↗ 数量↗)

• ProductionEnvをblueからgreenに書き換えてStack update

• 切り替わったらBlueを縮退(インスタンスサイズ↘ 数量↘)

• 以降、Greenが本番で、Blueが開発環境となる

#jawsdays #ace

Page 38: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

gist bit.ly/cfn-bgd-php

1000行超えたJSONがここに

#jawsdays #ace

Page 39: 20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編

まとめCloudFormationの5要素

Parameter

Condition

Mapping

Resource

Outputs

CFn Helper Scripts

cfn-signal (WaitCond.)

cfn-init

cfn-hup

Blue-Green Deployment

#jawsdays #ace