Spring Fest 2023 にコンテナスペシャリストSA の林さんと登壇した資料です。
Continuous Configuration の概念から始まり、AWS AppConfig のご紹介、AWS App Runner を使って、Spring のアプリケーションをどのように安全にデプロイしていくか、というお話を書いています。
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 3Masatoshi HayashiSpecialist Solutions Architect, ContainersAWS JapanMasao KanamoriSpecialist Solutions Architect, DevAxAWS Japan
View Slide
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.⾃⼰紹介SIerフリーランスJava/Ruby 開発者Kubernetesインフラ設計(Web 企業)Containers SA, SupportEngineer(クラウド製品ベンダー)AWS JapanContainers SA林 政利, @literaliceSpecialist Solutions Architect, Containers / AWS Japan2
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.⾃⼰紹介Amazon ElasticContainer ServiceAWS Step Functions AWS Fault InjectionSimulator⾦森 政雄Ø 所属/役職 :DevAx(Developer Acceleration) チームソリューションアーキテクトØ 好きなサービス
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.アジェンダ安全に機能リリースするとは?Continuous Configuration (CC)AWS 上でコンテナ化したアプリケーションを動かす選択肢アプリケーションを安全にリリースする仕組みをどう組み込むか︖デモ4
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.アジェンダ安全に機能リリースするとは?Continuous Configuration (CC)AWS 上でコンテナ化したアプリケーションを動かす選択肢アプリケーションを安全にリリースする仕組みをどう組み込むか︖デモ5
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.CI/CD はやってますよね?Source Build Test Production
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.⾃動化は確かに価値があるコンパイルユニットテストビルド⾃動受け⼊れテスト本番環境へのデプロイ簡単なパイプラインの例⼿作業のミス : 減 デプロイの頻度 : 増
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.でもデプロイはゴールではない本番環境へのデプロイデプロイの後に起こることめっちゃ⼈気でた!! 負荷が急増した...めっちゃ不評だった…セキュリティインシデント!!アプリケーションの挙動を変えるために毎回デプロイする??etc…
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.デプロイは機能リリースと同義?9本番環境へのデプロイ= 新しい機能をリリースするソースコードの変更を対象の環境に反映するor
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.機能リリースのしがらみ機能リリースで考慮したいことの例• 決められた⽇時からその機能をオープンにしたい例) TV 番組と連動したキャンペーン、AWS の新サービス発表etc• ⼀部の⼈にのみ先⾏して機能を提供したい例) Private Beta 、A/B テスト etc• ⼀度出した機能を⼀時的に取り下げたい例) 想定以上のトラフィック、⼀部の機能不具合 etc10
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.デプロイと機能リリースを分ける11本番環境へのデプロイ= 新しい機能をリリースするソースコードの変更を対象の環境に反映するor
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.デプロイと機能リリースを分ける12本番環境へのデプロイ=新しい機能をリリースするソースコードの変更を対象の環境に反映するその後、任意のタイミングで
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.アジェンダ安全に機能リリースするとは?Continuous Configuration (CC)AWS 上でコンテナ化したアプリケーションを動かす選択肢アプリケーションを安全にリリースする仕組みをどう組み込むか︖デモ13
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.Continuous Configuration (CC)14Continuous Integration – ⻑期ブランチをなくすContinuous Delivery – 顧客への価値提供の加速Continuous Configuration新しいコードをデプロイしたり、ソフトウェアを再起動せずに、CI/CD の後にソフトウェアの振る舞いを継続的に更新する
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.“Continuous Configurationを使⽤し、リアルタイムで変化に対応することで、機会が訪れたときに対応できる能⼒を構築できます。ひょっとしたら、将来的には、イベントが発⽣する前に対応できるようになるかもしれません”-Dr. Werner Vogels, CTOof Amazon
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.Continuous Configuration (CC) のユースケースFeature flags – 安全なローンチのために機能をon/off するFlag variants – データによって顧客体験を最適化するOperational levers – スロットリング、ロギング、負荷分散 etc16
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.⼤いなる⼒には、⼤いなる責任が伴う17
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.Continuous Configuration の落とし⽳• typo しやすく、それが障害につながる->バリデーションが必要• ⼀気に全てのお客様に展開したり、早すぎる展開は危険-> Blast radius をコントロールする• 問題があるときにロールバックできる仕組みが重要
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.© 2023, Amazon Web Services, Inc. or its affiliates.AWS AppConfig19
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.AWS AppConfig とはフルマネージドなAWSソリューション資本投資を最⼩化アマゾンでの4,000チーム以上におよぶ利⽤のベストプラクティスAmazon Echo、プライムビデオ、Amazon.comアプリケーションのダウンタイムと停⽌期間を最⼩化顧客への影響を最⼩化アプリケーションの設定を作成、管理、デプロイするサービス
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.AppConfig の利⽤の流れ21AppConfigアプリケーションの作成アルファ、ベータ、ガンマなどの環境を構築Step 1
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.AppConfig の利⽤の流れ22Step 2設定プロファイルを作成2つのタイプをサポート• Feature flag︓新しい機能を有効化/無効化• Freeform︓⾃由フォーマットでの設定定義
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.AppConfig の利⽤の流れ23エラーを防ぐために設定情報を検証JSONスキーマによる⽂法的な検証AWS Lambda関数による意味的な検証Step 3
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.AppConfig の利⽤の流れ24実⾏中のターゲットに対して設定をデプロイCloudWatchとの統合によるエラーのモニタリングエラー時に⾃動化されたロールバックStep 4
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.安全のための制御:段階的なロールアウト• 変更の影響を制限する: 1%に対してリリース, 次に 2%, 10%...(即時反映も可能)
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 はデプロイをロールバックする。
Spring Fest 2023© 2023, Amazon Web Services, Inc. or its affiliates.事前定義されたデプロイ戦略• AppConfigが事前定義されたデプロイ戦略を提供– ニーズにマッチする場合はそのまま利⽤– AppConfig.AllAtOnce– AppConfig.Linear50PercentEvery30Seconds– AppConfig.Canary10Percent20Minutes• 独⾃の戦略を作成することも可能– 最⼤20個まで作成可能