$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  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

    View Slide

  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) チーム
    ソリューションアーキテクト
    Ø 好きなサービス

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 はデプロイをロール
    バックする。

    View Slide

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

    View Slide