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
77
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
89
App Runner 実践
a2ito
0
500
Bigtable
a2ito
0
72
Chord
a2ito
0
58
Chubby
a2ito
0
73
Dynamo
a2ito
0
80
Megastore
a2ito
0
66
Monarch
a2ito
0
80
Numbers everyone should know
a2ito
0
84
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.7k
Speed Design
sergeychernyshev
32
1.1k
Code Reviewing Like a Champion
maltzj
525
40k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Producing Creativity
orderedlist
PRO
347
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
KATA
mclloyd
32
14k
GitHub's CSS Performance
jonrohan
1031
460k
For a Future-Friendly Web
brad_frost
179
9.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
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