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

Spring と AWS サービスを活用して実現する安全なデプロイメント / How to launch safely using Spring and AWS services

Spring と AWS サービスを活用して実現する安全なデプロイメント / How to launch safely using Spring and AWS services

Spring Fest 2023 にコンテナスペシャリストSA の林さんと登壇した資料です。

Continuous Configuration の概念から始まり、AWS AppConfig のご紹介、AWS App Runner を使って、Spring のアプリケーションをどのように安全にデプロイしていくか、というお話を書いています。

kanamsasa

March 17, 2023
Tweet

More Decks by kanamsasa

Other Decks in Programming

Transcript

  1. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. Spring と AWS サービスを活⽤して実現する安全な デプロイメント S P R I N G F E S T 2 0 2 3 Masatoshi Hayashi Specialist Solutions Architect, Containers AWS Japan Masao Kanamori Specialist Solutions Architect, DevAx AWS Japan
  2. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. ⾃⼰紹介 SIer フリーランス Java/Ruby 開発者 Kubernetesインフラ設計 (Web 企業) Containers SA, Support Engineer (クラウド製品ベンダー) AWS Japan Containers SA 林 政利, @literalice Specialist Solutions Architect, Containers / AWS Japan 2
  3. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. ⾃⼰紹介 Amazon Elastic Container Service AWS Step Functions AWS Fault Injection Simulator ⾦森 政雄 Ø 所属/役職 : DevAx(Developer Acceleration) チーム ソリューションアーキテクト Ø 好きなサービス
  4. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. アジェンダ 安全に機能リリースするとは? Continuous Configuration (CC) AWS 上でコンテナ化したアプリケーションを動かす選択肢 アプリケーションを安全にリリースする仕組みをどう組み込むか︖ デモ 4
  5. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. アジェンダ 安全に機能リリースするとは? Continuous Configuration (CC) AWS 上でコンテナ化したアプリケーションを動かす選択肢 アプリケーションを安全にリリースする仕組みをどう組み込むか︖ デモ 5
  6. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. CI/CD はやってますよね? Source Build Test Production
  7. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. ⾃動化は確かに価値がある コンパイル ユニットテスト ビルド ⾃動受け⼊れ テスト 本番環境への デプロイ 簡単なパイプラインの例 ⼿作業のミス : 減 デプロイの頻度 : 増
  8. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. でもデプロイはゴールではない 本番環境への デプロイ デプロイの後に起こること めっちゃ⼈気でた!! 負荷が急増した... めっちゃ不評だった… セキュリティインシデント!! アプリケーションの挙動を変えるために毎回デプロイする?? etc…
  9. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. デプロイは機能リリースと同義? 9 本番環境への デプロイ = 新しい機能をリリースする ソースコードの変更を対象の 環境に反映する or
  10. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. 機能リリースのしがらみ 機能リリースで考慮したいことの例 • 決められた⽇時からその機能をオープンにしたい 例) TV 番組と連動したキャンペーン、AWS の新サービス発表etc • ⼀部の⼈にのみ先⾏して機能を提供したい 例) Private Beta 、A/B テスト etc • ⼀度出した機能を⼀時的に取り下げたい 例) 想定以上のトラフィック、⼀部の機能不具合 etc 10
  11. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. デプロイと機能リリースを分ける 11 本番環境への デプロイ = 新しい機能をリリースする ソースコードの変更を対象の 環境に反映する or
  12. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. デプロイと機能リリースを分ける 12 本番環境への デプロイ = 新しい機能をリリースする ソースコードの変更を対象の 環境に反映する その後、任意のタイミングで
  13. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. アジェンダ 安全に機能リリースするとは? Continuous Configuration (CC) AWS 上でコンテナ化したアプリケーションを動かす選択肢 アプリケーションを安全にリリースする仕組みをどう組み込むか︖ デモ 13
  14. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. Continuous Configuration (CC) 14 Continuous Integration – ⻑期ブランチをなくす Continuous Delivery – 顧客への価値提供の加速 Continuous Configuration 新しいコードをデプロイしたり、ソフトウェアを再起動せずに、 CI/CD の後にソフトウェアの振る舞いを継続的に更新する
  15. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. “Continuous Configuration を使⽤し、リアルタイムで 変化に対応することで、 機会が訪れたときに対応で きる能⼒を構築できます。 ひょっとしたら、将来的に は、イベントが発⽣する前 に対応できるようになるか もしれません” -Dr. Werner Vogels, CTO of Amazon
  16. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. Continuous Configuration (CC) のユースケース Feature flags – 安全なローンチのために機能をon/off する Flag variants – データによって顧客体験を最適化する Operational levers – スロットリング、ロギング、負荷分散 etc 16
  17. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. ⼤いなる⼒には、 ⼤いなる責任が伴う 17
  18. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. Continuous Configuration の落とし⽳ • typo しやすく、それが障害につながる ->バリデーションが必要 • ⼀気に全てのお客様に展開したり、早すぎる展開は危険 -> Blast radius をコントロールする • 問題があるときにロールバックできる仕組みが重要
  19. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. AWS AppConfig 19
  20. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. AWS AppConfig とは フルマネージドなAWSソリューション 資本投資を最⼩化 アマゾンでの4,000チーム以上におよぶ 利⽤のベストプラクティス Amazon Echo、プライムビデオ、Amazon.com アプリケーションのダウンタイムと 停⽌期間を最⼩化 顧客への影響を最⼩化 アプリケーションの設定を作成、管理、デプロイするサービス
  21. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. AppConfig の利⽤の流れ 21 AppConfigアプリケーションの作成 アルファ、ベータ、ガンマなどの環境を構築 Step 1
  22. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. AppConfig の利⽤の流れ 22 Step 2 設定プロファイルを作成 2つのタイプをサポート • Feature flag︓新しい機能を有効化/無効化 • Freeform︓⾃由フォーマットでの設定定義
  23. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. AppConfig の利⽤の流れ 23 エラーを防ぐために設定情報を検証 JSONスキーマによる⽂法的な検証 AWS Lambda関数による意味的な検証 Step 3
  24. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. AppConfig の利⽤の流れ 24 実⾏中のターゲットに対して設定をデプロイ CloudWatchとの統合によるエラーのモニタリング エラー時に⾃動化されたロールバック Step 4
  25. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. 安全のための制御:段階的なロールアウト • 変更の影響を制限する: 1%に対してリリース, 次に 2%, 10%... (即時反映も可能)
  26. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. AppConfigのデプロイ戦略 デプロイのタイプ Linear: デプロイ全体で均等な成⻑係数の増分でデプロイを処理。 たとえば、 Step %に20 を使⽤するリニアなデプロイでは、最初にターゲットの 20% が設 定を使⽤できるようになる。 デプロイ時間の 1/5 が経過すると、システムは パーセンテージを 40% に更新し、以降100% になるまで続く。 Exponential: G*(2^N) という式を使⽤して指数関数的にデプロイを処理。 この 式で、G はユーザーが指定したステップ %で、N は設定がすべてのターゲット にデプロイされるまでのステップ数。 たとえば、成⻑係数 2 を指定すると、 ターゲットの 2%、ターゲットの 4%、ターゲットの 8% で、設定がすべての ターゲットにデプロイされるまで続く。 ステップ%(成⻑係数) デプロイの各ステップで対象とする割合を指定 デプロイ時間 ホストにデプロイする時間を指定。 タイムアウト値ではない。 デプロイが間隔 を置いて処理されるタイムウィンドウ。 ベイクタイム 設定がターゲットの 100% にデプロイされた後、デプロイが完了したと⾒なす 前に、AWS AppConfig が Amazon CloudWatch アラームを監視する時間を指定。 この間にアラームがトリガーされると、AWS AppConfig はデプロイをロール バックする。
  27. Spring Fest 2023 © 2023, Amazon Web Services, Inc. or

    its affiliates. 事前定義されたデプロイ戦略 • AppConfigが事前定義されたデプロイ戦略を提供 – ニーズにマッチする場合はそのまま利⽤ – AppConfig.AllAtOnce – AppConfig.Linear50PercentEvery30Seconds – AppConfig.Canary10Percent20Minutes • 独⾃の戦略を作成することも可能 – 最⼤20個まで作成可能