Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Blue / Green デプロイと安全性と複雑性と #AWSDevDay

Blue / Green デプロイと安全性と複雑性と #AWSDevDay

はまーん
PRO

November 09, 2022
Tweet

More Decks by はまーん

Other Decks in Programming

Transcript

  1. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイと
    安全性と複雑性と
    C - 3
    Shinichi Hama(はまーん) / track3jyo
    Startup Solutions Architect, West Japan
    Amazon Web Services Japan G.K.

    View Slide

  2. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Shinichi Hama / track3jyo
    Startup Solutions Architect
    Amazon Web Service Japan
    ---
    work:
    - ⻄⽇本のスタートアップ⽀援
    - コンテナ技術のあれこれ
    過去のスライド: https://speakerdeck.com/track3jyo
    趣味︓家のアーキテクチャを考えること

    View Slide

  3. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    セッション対象者とゴール
    想定聴講者
    • ソフトウェアのデプロイフローやアーキテクチャを普段から考えている
    • デプロイ関連の問題がなにかと多く、⽇々悩まされている開発者の⽅
    • アプリケーションコードを安全にデプロイするための考え⽅やプラクティスが
    知りたい
    ゴール
    • 「安全な」デプロイとはどんなデプロイなのかを改めて理解し、
    ⾃分達のデプロイの安全性を阻害する原因は何かと改めて考えるきっかけにする
    • 必要⼗分なデプロイフロー/アーキテクチャをデザインし続ける必要性を知り、
    実践できるようになる
    前提︓2022/11/09 時点の Amazon Elastic Container Service(Amazon ECS) のデプロイを題材に話していきます

    View Slide

  4. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ⼀般的なソフトウェアのリリースプロセス
    Source Build Test Production
    • ソースコードの
    チェックイン
    • コードの
    ピアレビュー
    • コードのコンパイル
    • ユニットテスト
    • スタイルチェッカー
    • コンテナイメージ、
    関数デプロイ
    パッケージの作成
    • 周辺システムとの
    統合テスト
    • 負荷テスト
    • UI テスト
    • セキュリティ
    テスト
    • 本番環境への
    デプロイ
    • エラーを素早く検知
    するための本番環境
    のモニタリング

    View Slide

  5. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ⼀般的なソフトウェアのリリースプロセス
    Source Build Test Production

    View Slide

  6. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Amazon ECS におけるデプロイ戦略
    ローリングアップデート
    CodeDeploy による Blue / Green デプロイ
    (+Canary デプロイ、線形デプロイ)
    External デプロイ

    View Slide

  7. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデート
    Example
    service v1
    Amazon ECS cluster
    • Amazon ECS でコントロール
    • タスクを指定した数ずつ順番に更新していく

    View Slide

  8. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデート
    Example
    service v1
    Amazon ECS cluster
    Example
    service v2
    • Amazon ECS でコントロール
    • タスクを指定した数ずつ順番に更新していく

    View Slide

  9. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデート
    Example
    service v1
    Amazon ECS cluster
    Example
    service v2
    • Amazon ECS でコントロール
    • タスクを指定した数ずつ順番に更新していく

    View Slide

  10. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデート
    Example
    service v1
    Amazon ECS cluster
    Example
    service v2
    • Amazon ECS でコントロール
    • タスクを指定した数ずつ順番に更新していく

    View Slide

  11. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデート
    Example
    service v1
    Amazon ECS cluster
    Example
    service v2
    • Amazon ECS でコントロール
    • タスクを指定した数ずつ順番に更新していく

    View Slide

  12. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデート
    Example
    service v1
    Amazon ECS cluster
    Example
    service v2
    • Amazon ECS でコントロール
    • タスクを指定した数ずつ順番に更新していく

    View Slide

  13. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイ
    • AWS CodeDeploy, ALB でコントロール
    • Green タスク群に本番トラフィックを流す前にテストを実施
    Blue tasks:
    v1 code
    ALB
    100% Prod
    traffic

    View Slide

  14. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイ
    • AWS CodeDeploy, ALB でコントロール
    • Green タスク群に本番トラフィックを流す前にテストを実施
    Blue tasks:
    v1 code
    Green tasks:
    v2 code
    ALB
    100% Prod
    traffic
    100% Test
    traffic

    View Slide

  15. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイ
    • AWS CodeDeploy, ALB でコントロール
    • Green タスク群に本番トラフィックを流す前にテストを実施
    Green tasks:
    v2 code
    ALB 100% Test
    traffic
    Blue tasks:
    v1 code

    View Slide

  16. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイ
    • AWS CodeDeploy, ALB でコントロール
    • Green タスク群に本番トラフィックを流す前にテストを実施
    Green tasks:
    v2 code
    ALB 100% Test
    traffic

    View Slide

  17. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    こういった話を⽿にすることがあります
    リリース時の起きる障害が多く、⼼配なので
    安全な Blue / Green デプロイを採⽤します︕
    破壊的変更とかビッグバンリリースをしやすいので
    とりあえず Blue / Green デプロイにします︕

    View Slide

  18. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    こういった話を⽿にすることがあります
    リリース時の起きる障害が多く、⼼配なので
    安全な Blue / Green デプロイを採⽤します︕
    破壊的変更を⼊れやすいので、
    とりあえず Blue / Green デプロイにします︕
    安全性を損ねている問題の本質と
    本当に向き合えているのでしょうか︖
    デプロイフロー/プロセスの複雑化が進み、
    安全性を損ねる結果につながっていないでしょうか︖

    View Slide

  19. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    安全なデプロイとは何か︖

    View Slide

  20. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    “安全な” デプロイとは︖
    !

    View Slide

  21. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイにおける “安全” を考える
    • 意図した変更が本番環境にデプロイされること
    Ø 「意図した変更が、きちんと反映される」整備されたデリバリープロセスがある
    • 意図しない状況が発⽣した場合の影響を最⼩限にできること
    Ø 意図しない状況を絶対に起こさない、全ての状況を事前に想定するのは現実不可能
    Ø 意図しない状況が発⽣した場合のユーザーや関連サービスへの影響をできるだけ⼩さくする

    View Slide

  22. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    開発者の意図した変更をデプロイするには
    デプロイ前の検証や動作確認を充実させる

    View Slide

  23. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    意図しない状況を最⼩限にするには
    ロールバックの導⼊

    View Slide

  24. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデートのロールバック
    [バージョン情報]
    アーティファクトのラベルで管理
    [ロールバックの実施]
    稼働中のバージョンを新しい
    コンポーネントにデプロイして置き換え
    v2 v2
    v1 v1 v2 v2
    v1 v1 v2 v2

    View Slide

  25. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ローリングアップデートのロールバック
    [バージョン情報]
    アーティファクトのラベルで管理
    [ロールバックの実施]
    稼働中のバージョンを新しい
    コンポーネントにデプロイして置き換え
    v1 v1
    v1 v1 v2 v2
    v1 v1 v2 v2

    View Slide

  26. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイのロールバック
    [バージョン情報]
    Blue 環境として保持
    [ロールバックの実施]
    Green 環境のトラフィックを
    Blue 環境に切り替える
    バージョン 1
    v1 v2

    View Slide

  27. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイのロールバック
    [バージョン情報]
    Blue 環境として保持
    [ロールバックの実施]
    Green 環境のトラフィックを
    Blue 環境に切り替える
    バージョン 1
    v1 v2

    View Slide

  28. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    安全性が保たれていないデプロイでは
    • サービスを利⽤するエンドユーザーへの影響
    Ø Error Rate 上昇、レイテンシーの増加、サービス中断
    • リリース時に⼈を介した確認作業が増えていく
    Ø e.g. ⼿動でのテスト、⽬視確認、ダブルチェック、段階的な承認プロセス..etc
    Ø 本来集中したいビジネスロジックの開発にかける時間が減っていく
    • デプロイにおける⼼理的安全性の低下により、⽣産性が著しく低下
    Ø 「また⾃分の書いたコードで問題になるのではないか」と億劫になる

    View Slide

  29. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイ関連の問題の⼤半は、
    複雑で不安定なデプロイである
    1. そもそもソフトウェアを作る段階でデプロイの容易性を
    念頭に置いていない
    2. ⼿作業による本番環境への変更・追加が
    デプロイプロセスの⼀部になっている
    3. デプロイが複雑なため、
    チーム間の作業の引き継ぎが多くなる
    - 「 L E A N と D E V O P S の 科 学 」 よ り -

    View Slide

  30. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイと
    安全性と複雑性と

    View Slide

  31. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイと安全性
    • ⼀度新しい環境でテスト/動作確認をした上で切り替えができ、
    安全を確認した上で切り替えが可能
    • 問題が発⽣した際も、トラフィックを元のバージョンの環境に切り
    替えるだけなので、迅速にトラフィックの切り戻しが可能

    View Slide

  32. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Blue / Green デプロイと複雑性
    Health checks
    ・何をトリガーに切
    り替えを⾏うのか︖
    ・何をトリガーに
    切り戻すのか
    ・どうやって切り替
    えを⾃動化するか︖
    ・どんなメトリクス
    で判断するのか︖

    View Slide

  33. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    安全性を求めて Blue / Green デプロイを進めた結果、
    複雑性だけが増し安全性も失うケース1
    シチュエーション︓
    • 本番リリース時の障害が多く、安全な Blue/Green デプロイを採⽤したい
    何が問題か︖︓
    • そもそも問題となっているのは
    「意図した変更が本番環境にデプロイできないこと」
    どうなるか︖︓
    • そもそもの不具合が減るわけではないので、
    結果的に⼿動での確認作業が増えていき、結果安全性も保てていない

    View Slide

  34. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    安全性を求めて Blue / Green デプロイを進めた結果、
    複雑性だけが増し安全性も失うケース2
    シチュエーション︓
    • 破壊的変更とかビッグバンリリースをしやすいので、
    とりあえず Blue/Green デプロイを採⽤したい
    何が問題か︖︓
    • ソフトウェアとしてのデプロイ容易性が低く、他のアプリケーションや
    コンポーネントに依存したデプロイが必要で、⼤きな単位でのリリースしか
    できない構造になっている
    どうなるか︖︓
    • ⾃律性のないデプロイプロセスや、Blue/Green デプロイ⾃体が
    複雑化しがちで、結果安全性も保てなくなってくる

    View Slide

  35. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    「とりあえず Blue /Green にしておきたい」という思考
    • Blue / Green デプロイは安全性が⾼く、多機能なデプロイ戦略
    • 「とりあえず Blue /Green にしておきたい」というメンタルモデル
    に課題がある
    • 多機能がゆえに、いろんなことをやりたくなり、
    結果フローやプロセスの複雑性が増しがち
    • 今ある課題は本当にデプロイ戦略で解決すべき課題なのか

    View Slide

  36. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Amazon ECS ローリングアップデートの
    デプロイサーキットブレーカー
    v1 v2
    v2
    ...
    v1 v1
    v1
    ...
    New Deployment
    Rollback
    v1 v1
    v1
    ...
    • ECS サービスのデプロイで異常が発⽣した際、
    以前のバージョンへの⾃動ロールバックが可能
    • ⾃動ロールバックの実装を ECS に委ねて、
    マネージドな⾃動化が可能
    • 異常が発⽣したタスクの起動によるコストの発⽣や
    コンピューティングリソースの消費を抑える

    View Slide

  37. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイ失敗の判定
    • ステージ 1、ステージ 2 の⼆段階で評価される
    • ステージ 1
    Ø RUNNING 状態に遷移することなく、
    タスクの起動が “しきい値” まで連続して失敗する
    • ステージ 2
    Ø ヘルスチェック #1 の失敗により
    リプレースされたタスク数が “しきい値” に到達する
    #1: ELB / Cloud Map / コンテナ のヘルスチェック

    View Slide

  38. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイサーキットブレーカーの挙動
    container 1 container 2
    ver1 (Primary)
    ALB
    End User
    Developer
    ECS サービス
    タスク定義 ver1
    参照
    ECS クラスター

    View Slide

  39. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイサーキットブレーカーの挙動
    container 1 container 2
    ver1 (Active)
    ALB
    End User
    Developer
    ECS サービス
    タスク定義 ver1
    参照
    ECS クラスター
    container 1 container 2
    ver2 (Primary)
    タスク定義 ver2
    参照
    flask_app_ver3.py

    View Slide

  40. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイサーキットブレーカーの挙動
    container 1 container 2
    ver1 (Active)
    ALB
    End User
    Developer
    ECS サービス
    タスク定義 ver1
    参照
    ECS クラスター
    container 1 container 2
    ver2 (Primary)
    タスク定義 ver2
    参照
    Running

    View Slide

  41. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイサーキットブレーカーの挙動
    container 1 container 2
    ver1 (Active)
    ALB
    End User
    Developer
    ECS サービス
    タスク定義 ver1
    参照
    ECS クラスター
    container 1 container 2
    ver2 (Primary)
    タスク定義 ver2
    参照
    Health Chek
    500 Internal Server Error

    View Slide

  42. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイサーキットブレーカーの挙動
    container 1 container 2
    ver1 (Active)
    ALB
    End User
    Developer
    ECS サービス
    タスク定義 ver1
    参照
    ECS クラスター
    container 1 container 2
    ver2 (Primary)
    タスク定義 ver2
    参照
    Health Chek
    FAILED としてマーク

    View Slide

  43. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイサーキットブレーカーの挙動
    container 1 container 2
    ver1 (Primary)
    ALB
    End User
    Developer
    ECS サービス
    タスク定義 ver1
    参照
    ECS クラスター
    タスク定義 ver2
    ロールバック

    View Slide

  44. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    複雑なデプロイ

    View Slide

  45. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    複雑なデプロイ
    「必要以上に」
    (+アーキテクチャ、プロセス、実装 ...and more)

    View Slide

  46. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    本当に最初からその⾼度な仕組みが必要ですか
    例えば、まだまだ成熟していないプロダクトやチームにおいて…
    • 本当に最初からその⾼度な仕組みが必要か
    • 複雑なデプロイプロセスやフローを導⼊することで満⾜していないか
    • チームやプロダクトに沿わない、わたしの考えた最強デプロイフローや
    アーキテクチャになっていないか
    安全性を⽬指して設計したはずの仕組みが、結果安全性を損なうのは、多くの場合
    チーム/プロダクトに沿わない、必要以上な仕組みを導⼊したことに起因します
    他の例)Blue/ Green デプロイ、DB のライブマイグレーション、派⼿なピタゴラスイッチアーキテクチャ

    View Slide

  47. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Keep it simple, stupid.
    Kelly Johnson
    American aeronautical and systems engineer
    KISS の原則
    設計の単純性(簡潔性)は成功への鍵である、「不必要な複雑性」は避けるべきだ

    View Slide

  48. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    シンプルとは何か︖
    • 無駄がない
    Ø 「やるべきことに対して」無駄がない
    • 理解しやすい
    Ø 誰が⾒てもわかるということ
    Ø 「可読性が⾼い」「再利⽤しやすい」「変更しやすい」

    View Slide

  49. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Invent and Simplify
    リーダーはチームにイノベーション(⾰新)とインベンション(創造)を求め、
    同時に常にシンプルな⽅法を模索します。リーダーは状況の変化に注意を払い、
    あらゆる場から新しいアイデアを探しだします。
    それは、⾃分たちが⽣み出したものだけに限りません。私たちは新しいアイデアを実⾏に移す時、
    ⻑期間にわたり外部に誤解される可能性があることも受け⼊れます。
    シンプルな仕組みを⽬指しながら「常に思考を放棄しない」
    「リスクや要件と向き合う」ことが重要

    View Slide

  50. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    「必要⼗分な」デプロイフロー/アーキテクチャを
    デザインし続ける
    • デプロイフローやアーキテクチャはその時々で無駄なく、
    理解しやすい設計を⽬指す
    • ⽬の前にある課題から、少し視座を⾼く持って全体に⽬をむけ続ける
    Ø 少し要件を整理・⼯夫すればシンプルな仕組みにできないか︖

    View Slide

  51. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイにおける安全性と複雑性は
    必ずしもトレードオフか︖

    View Slide

  52. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイにおける安全性と複雑性は
    必ずしもトレードオフか︖
    • 少なくても最初のうちは安全性を保つことと複雑な仕組みというのは
    必ずしもトレードオフではない
    • シンプルなデプロイフローを保ち続けることが
    安全性を保つことにつながる
    • デプロイ戦略以外にも必ず向き合い整理することが近道
    Ø デプロイ容易性・テスト容易性のあるソフトウェアを書く
    Ø 簡単にロールバックできるように、⼩さくデプロイを繰り返す
    Ø チーム内で⾃律してデプロイが⾏えるような疎結合な設計

    View Slide

  53. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイにおける安全性と複雑性は
    必ずしもトレードオフか︖

    View Slide

  54. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    デプロイにおける安全性と複雑性は
    必ずしもトレードオフか︖

    View Slide

  55. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    まとめ
    • 安全なデプロイとは
    • 「意図した変更が本番環境にデプロイされること」
    • 「意図しない状況が発⽣した場合の影響を最⼩限にできること」
    • デプロイにおける安全性と複雑性は必ずしもトレードオフではない
    • デプロイ関連の問題の⼤半は、複雑で不安定なデプロイが原因
    • むしろシンプルなデプロイメントフローを保ち続けることが安全性を保つ
    • 必要⼗分なデプロイフロー/アーキテクチャをデザインし続ける
    • 複雑な仕組みが悪いわけではなく、「必要以上に」複雑になっていることが問題
    • デプロイフローやアーキテクチャは変更可能な余⽩を持つ。常にその時々の最適を⽬指す

    View Slide

  56. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Thank you!
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Shinichi Hama(はまーん)
    track3jyo

    View Slide