Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ECSにおけるBGデプロイの実現
Search
a2-ito
March 14, 2025
0
64
ECSにおけるBGデプロイの実現
a2-ito
March 14, 2025
Tweet
Share
More Decks by a2-ito
See All by a2-ito
Organizations と Identity Center を Terraform で管理しよう
a2ito
0
84
App Runner 実践
a2ito
0
490
Bigtable
a2ito
0
72
Chord
a2ito
0
56
Chubby
a2ito
0
71
Dynamo
a2ito
0
73
Megastore
a2ito
0
62
Monarch
a2ito
0
74
Numbers everyone should know
a2ito
0
75
Featured
See All Featured
BBQ
matthewcrist
89
9.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Side Projects
sachag
455
42k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
660
Designing for Performance
lara
609
69k
Raft: Consensus for Rubyists
vanstee
140
7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Transcript
ECSにおけるBGデプロイの実現 e-dash株式会社 伊藤 明彦 2025年3月13日 @a2-ito @piyohiko110
伊藤 明彦 Ito Akihiko @a2-ito @piyohiko110 所属:e-dash株式会社 役割:SRE 出⾝:⼭⼝県 趣味:ジム ⾃⼰紹介
2
会社について 3 • 企業のCO2排出量可視化‧削減のSaaSを開発 • 三井物産出資のスタートアップ • 2022年設⽴‧本社は東京⾚坂 • ソフトウェアエンジニア絶賛募集中です
• ECS 使ってるよ!という⽅ • ECS で Blue/Green デプロイやってるよ!という⽅ ちょっと教えてください! 4
• e-dash では ECS で Web アプリケーションを運⽤している • ECS のローリングアップデート機能で新バージョンをリリースしている
背景 5
• 本番環境でリリース事前確認ができない ◦ 本番環境でユーザ開放前の動作確認ができないため、環境起因の障害が発⽣するリス クがある • リリース作業の⻑時間化 ◦ 全アプリケーションのローリングアップデートが正常終了するまで確認しており、リ リース担当の拘束時間が⻑い
課題認識 6
• 標準機能で実現する • 標準機能に頼らずに実現する ◦ 独⾃の仕組みを作る ◦ サードパーティツール ECS で
Blue/Green デプロイを実現するには? 7
• CodeDeploy を組み合わせることで、ECS の Blue/Green デプロイができるようになる • e-dash では CodeDeploy
を使っておらず、導⼊コストや運⽤コストを鑑み採⽤を⾒送り ECS 標準機能としての BG デプロイ 8 ブルー/グリーンデプロイを使用した Amazon ECS サービスのデプロイ https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-blue-green.html
ECS 標準機能でない BG デプロイ:登場⼈物 9
ECS 標準機能でない BG デプロイ:基本戦略 10 予め Green 環境を 用意しておく Listener
Rule に紐づく Target Group を切り替える
どのレイヤで Blue と Green を切り替えるか? • ECSタスク • ECSサービス •
ECSクラスタ ECS 標準機能でない Blue/Green デプロイ:基本戦略 11
ECS 標準機能でない Blue/Green デプロイ:ECSタスク 12
• ECS タスクセットを利⽤するには ECS サービスのパラメータ DeploymentController の設 定を EXTERNAL に変更する必要がある
• DeploymentController オプション ◦ ECS ▪ デフォルト値 ▪ ローリングアップデートを⾏う ◦ CODE_DEPLOY ▪ CodeDeploy を利⽤して Blue/Green デプロイを⾏う ▪ 標準機能の Blue/Green デプロイを利⽤する場合はこちらを設定する ◦ EXTERNAL ▪ 外部のデプロイメントコントローラーを利⽤してデプロイを⾏う ECS 標準機能でない Blue/Green デプロイ:ECSタスク 13
ECS 標準機能でない Blue/Green デプロイ:ECSタスク 14 タスクセットの作成コマンド例 aws ecs create-task-set \
--cluster [ECS_CLUSTER_NAME] \ --service [ECS_BACKEND_SERVICE_NAME]\ --task-definition [BACKEND_TASK_DEF_ARN] \ --launch-type FARGATE \ --network-configuration 'awsvpcConfiguration={ subnets=[SUBNET_IDS], securityGroups='[SECURITY_GROUP_IDS]', assignPublicIp=DISABLED}' \ --scale value=100,unit=PERCENT
ECS 標準機能でない Blue/Green デプロイ:ECSサービス 15
ECS 標準機能でない Blue/Green デプロイ:ECSクラスタ 16
ECS 標準機能でない Blue/Green デプロイ 17 • ECSサービス⽅式とECSクラスタ⽅式は⽐較的類似した構成だが、クラスタ⽅式を選択 ◦ 複数のECSサービスでプロダクトを構成している(例:フロント、バックのサービ ス)ということもあり、単⼀クラスタ内に
Blue/Green のアプリが混在すると煩雑に なる • 余談)別で実装したPRプレビューの仕組みでは、ECSサービス⽅式を採⽤した ◦ 作業ブランチのアプリを、既存のECSサービスとは別のECSサービスとしてデプロイ する
ECS 標準機能でない Blue/Green デプロイ 18
ECS 標準機能でない Blue/Green デプロイ 19
ローリングアップデートができなくなる問題 20 https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeploymentController.html
• ECSサービス間の名前解決の機能 • ECSクラスタ内‧外のどのコンテナでも解決できる • 内部的には CloudMap/Route53 が利⽤されている • e-dash
では、フロントエンド→バックエンドの名前解決に利⽤している ECS Service Connect 21
Service Connect がサポートされなくなる問題 22 https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/service-connect-conc epts-deploy.html#service-connect-considerations
最終的な構成 23 • ECSクラスタ⽅式を採⽤ ◦ ECSクラスタは常に両⽅存在しており、リリース時のみスタンバイ側のクラスタを起 動して切り替える • 即時にパッチを適⽤したい場合などは、ローリングアップデートにより変更を反映
• ECS Service Connect による名前解決が失敗する • ALB ターゲットグループの切り替え後に認証が失敗する BGデプロイの導⼊‧運⽤で発⽣した問題 24
ECS Service Connect による名前解決が失敗する 25 • 新クラスタ構築後、新クラスタ内のECSサービス間の通信が失敗する事象が発⽣ • どちらのコンテナも正常に稼働している •
IPアドレスによる通信は可能、名前解決ができていなかった
ECS Service Connect による名前解決が失敗する 26 https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeploymentController.html
ECS Service Connect による名前解決が失敗する 27 • A が起動した時点で B が起動完了していなかったことが原因
• 再デプロイすれば解決する • 初期構築時しか発⽣はしないが、動的にECSサービスやクラスタを作成する環境では注意 が必要
ALB ターゲットグループの切り替え後に認証が失敗する 28 Listener Rule に紐づく Target Group を切り替える
ALB ターゲットグループの切り替え後に認証が失敗する 29 { "RuleArn": "[omit]", "Priority": "100", "Conditions": [
{ [omit] } ], "Actions": [ { "Type": "authenticate-oidc", "AuthenticateOidcConfig": [omit], "Order": 1 }, { "Type": "forward", "TargetGroupArn": [omit], "Order": 2, } ], "IsDefault": false }
ALB ターゲットグループの切り替え後に認証が失敗する 30 { "RuleArn": "[omit]", "Priority": "100", "Conditions": [
{ [omit] } ], "Actions": [ { "Type": "authenticate-oidc", "AuthenticateOidcConfig": [omit], "Order": 1 }, { "Type": "forward", "TargetGroupArn": [omit], "Order": 2, } ], "IsDefault": false } Listener Rule に紐づく Target Group を切り替える
ALB ターゲットグループの切り替え後に認証が失敗する 31 { "RuleArn": "[omit]", "Priority": "100", "Conditions": [
{ [omit] } ], "Actions": [ { "Type": "authenticate-oidc", "AuthenticateOidcConfig": [omit], "Order": 1 }, { "Type": "forward", "TargetGroupArn": [omit], "Order": 2, } ], "IsDefault": false } e-dash ではALBの OIDC連携機能を利用している
• modify-rules によって、ターゲットグループを修正 • 新クラスタに切り替え後、ログインができなくなった ALB ターゲットグループの切り替え後に認証が失敗する 32
• modify-rules を実⾏した際に OIDC 連携の設定が消えてしまったことが原因 • jq コマンドを利⽤して、取得したリスナールールのターゲットグループの指定を書き換え ることで対処 ALB
ターゲットグループの切り替え後に認証が失敗する 33 jq 'del(.Conditions[].PathPatternConfig, .Conditions[].HostHeaderConfig, .IsDefault, .Priority, .Actions[].ForwardConfig)' | \ jq '(.Actions[] | select(.Type=="authenticate-oidc").AuthenticateOidcConfig) |= .+ {"UseExistingClientSecret": true}' | \ jq '(.Actions[] | select(.Type=="forward").TargetGroupArn) |= "'${TARGET_GROUP_ARN}'"'
• ECS は優れたサービスだけど、はかゆいところに届かないことも • Kubernetes だと、Blue/Green デプロイやカナリアリリースなどの仕組みを実現する場合 は、Argo CD のような優れた
OSS が利⽤可能 ◦ ⼀⽅で、運⽤コストが⾼くなる可能性もある • トレードオフなので、適材適所で使いましょう まとめ 34
Reference 35 e-dash における ECS の Blue/Green デプロイの実現 https://zenn.dev/edash_tech_blog/articles/a3a60408934ea8
THANK YOU! e-dash株式会社 伊藤 明彦 2025年3月13日 @a2-ito @piyohiko110