19
Ⓒ Classmethod, Inc. CloudFormation による Blue-Green Deployment 1 DevIO MTUP11-SAPPORO-003 渡辺 修司, クラスメソッド 2014年11月19日

Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Embed Size (px)

Citation preview

Page 1: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

CloudFormation による Blue-Green Deployment

1

DevIO MTUP11-SAPPORO-003

渡辺 修司, クラスメソッド

2014年11月19日

Page 2: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

渡辺 修司• AWSコンサルティング部 • ソリューションアーキテクト • 2014年8月入社

• 前職 • Java業務システムの開発 • Web関連のサービス開発

• 現在 • メンバーズポータル開発 • 開発系のAWS環境のコンサル、開発支援

• 趣味 • ロードバイク、スノーボード、猫

2

Page 3: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Blue-Green Deployment

3

Page 4: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

Deployment / 配備• アプリケーションを配置し、利用できる状態にする • ビルド • サーバへの転送 • アプリケーションサーバの再起動

• 初期リリース時やアップデート時に実施 • デプロイ用ツールなどを使って自動化する • 複数サーバを手動でやるのは手間 • 人為的ミスの防止

4

Page 5: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

Deployment時の課題• ダウンタイム • メンテナンス時間として利用不可

• 切り戻し • アップデートが原因によるシステム障害

5

Page 6: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

Blue-Green Deployment• ダウンタイムゼロのデプロイメントパターン • マーチン・ファウラ̶が提唱 • プロダクション環境を2系統用意(Blue/Green) • 一方をアクティブ系、もう一方をスタンバイ系 • スタンバイ系にデプロイを行う • デプロイが完了したならばRouterで切り替える

6

• http://martinfowler.com/bliki/BlueGreenDeployment.html

Page 7: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

Blue-Green Deploymentの課題• 2系統のサーバが必要 • コストが2倍

• トランザクションデータの扱い • RDBのデータ移行時間が発生

• データベースのスキーマ変更

7

Page 8: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

AWSによる解決と妥協点• Blue-Green環境は必要に応じて構築 • 不要な時は破棄することでコストを抑える • アップデート後、切り戻しが不要と判断したら破棄

• DBレイヤはBlue-Greenとしない • 妥協する部分 • Multi-AZならば冗長化もされている • 問題発生時はレストアの方針

• DBのスキーマ変更 • クリティカルならばダウンタイムを許容 • 変更前と変更後に対応できるような実装もあり

• 切り替え時のユーザ操作の整合性8

Page 9: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Cloud FormationによるBlue-Green Deployment

9

AWS CloudFormation

Page 10: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

CloudFormationでリソースを構築• 繰り返し作業に効果的な自動化 • 手作業はNG • ヒューマンエラー防止 • AMIイメージを予め作成(Chefなど)

10

AWS CloudFormation

Page 11: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

RDSは妥協• Blue/Greenにするデメリットが大きい • データの同期問題 • スキーマ変更の影響 • アプリレイヤで吸収(必要に応じて) • 問題発生時はバックアップからリストア • どうにもならない場合は止める • 最終的にはコストバランスを考慮

11

Amazon RDB

Page 12: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

テンプレートはレイヤ毎に分割• Base / Green / Blue のテンプレートを用意 • Base にはVPC関連と共通リソースを定義 • GreenとBlueにはアプリレイヤーを定義 • GreenとBlueは独立してStackを構築/撤収可能

12

CloudFormation Template

Page 13: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

BlueとGreenはパラメータで指定• 共通テンプレートでOK • パラメータを活用し違いを吸収

13

"Parameters": { "Env": { "Type": "String", "Default": "Blue", "AllowedValues": [ "Blue", "Green" ] } },

"Resources": { "FrontWeb1": { "Type": "AWS::EC2::Instance", "Properties": { "SubnetId": { "Fn::FindInMap": [ "Subnet", { "Ref": "Env" }, "AppA" ] } }

"Mappings": { "Subnet": { "Blue": { "AppA": "subnet-xxxxxxxxx", "AppC": "subnet-xxxxxxxxx" }, "Green": { "AppA": "subnet-xxxxxxxx", "AppC": "subnet-xxxxxxxx" } } }

CloudFormation Template

Page 14: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

1)デプロイの準備• Base環境を構築 • 基本的に1回だけ(必要に応じてUpdate)

14

CloudFormation Stack

Page 15: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

2)初回リリース• Blue環境を構築(初回リリース) • アプリはデプロイツールでデプロイ

15

CloudFormation Stack

Page 16: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

3)初回アップデート• Green環境を構築 • Green環境にアップデート版をデプロイし検証

16

CloudFormation Stack

検証できたら Route53の設定をGreen側に変更

Page 17: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

4)Blue環境の撤収• Blue環境を削除してコストを押さえる • 不安がある場合はしばらく残してもOK

17

CloudFormation Stack

Page 18: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

まとめ• 最小のダウンタイム • アップデート時のリスク対策 • Cloud Formationを活用し、省コスト • Deployの自動化でヒューマンエラーを防止

18

Page 19: Cloud FormationによるBlue-Green Deployment - Dev io mtup11 003

Ⓒ Classmethod, Inc.

#cmdevio

ご静聴ありがとうございました。 スライドは後日ブログで公開します。

19

DevIO MTUP11-SAPPORO-003