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のCanaryリリースをExternalデプロイタイプで実現する方法
Search
Tetsuya Kikuchi
August 03, 2024
Programming
1
150
ECSのCanaryリリースをExternalデプロイタイプで実現する方法
2024-08-02 LT登壇資料
https://finatext.connpass.com/event/325175/
Tetsuya Kikuchi
August 03, 2024
Tweet
Share
More Decks by Tetsuya Kikuchi
See All by Tetsuya Kikuchi
プルリクが全てじゃない!実は喜ばれるOSS貢献の方法8選
tkikuc
17
2.3k
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
3
320
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
15
3k
ECS向けのドリフト検知機構を実装してみた
tkikuc
0
340
OSSのメンテナが 入門ハンズオンを なぜ・どのように作成したか
tkikuc
3
100
Other Decks in Programming
See All in Programming
From Translations to Multi Dimension Entities
alexanderschranz
2
130
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
命名をリントする
chiroruxx
1
390
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
310
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
良いユニットテストを書こう
mototakatsu
5
2k
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
120
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
440
バグを見つけた?それAppleに直してもらおう!
uetyo
0
180
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
460
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Rails Girls Zürich Keynote
gr2m
94
13k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Designing Experiences People Love
moore
138
23k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
A Modern Web Designer's Workflow
chriscoyier
693
190k
Transcript
ECSのCanaryリリースを Externalデプロイタイプで 実現する方法 2024-08-02 #FinaTech t-kikuc @PipeCD Team 1
アジェンダ 1. 自己紹介 2. PipeCDの紹介 3. 前提知識: Canary, Externalデプロイタイプ, TaskSet 4.
ExternalでのCanaryリリースの流れ 5. 補足、おわりに 2
Tetsuya Kikuchi 3 @t-kikuc @t_kikuc • PipeCDのメンテナ @ (株)サイバーエージェント ◦
PipeCD: OSSのデプロイツール ◦ 主にAWS関連機能(ECS,Lambda)の開発を担当 • 関心領域: CI/CD、DevOps • 今年度AWS認定10個ぐらい失効します
PipeCDとは • PipeCD: OSSのデプロイツール ◦ ECS, Lambda, Kubernetes, Terraform, CloudRunに対応
◦ CanaryやBlue/Greenが強み ◦ Gitと実環境とで差分があった場合、自動で再デプロイ • CNCFのSandboxプロジェクトの一つ • 先月GitHubのStar⭐が 1,000到達 4
3. 前提知識 5
Canaryリリースとは • リリースを安全にするための手法 ◦ キャパシティを落とさず、かつ不具合時の影響を小さくできる • リリース時に新バージョンのアプリを別途デプロイ →エラーなければ全体をバージョン更新 6 Task
Task v1 Task Task v1 Task v2 Task Task v2 Task Task v2 Task v2
Externalデプロイタイプとは • ECSのデプロイタイプの1つ ◦ コンソールからは選択できない • デプロイを外部から制御したい場合に用いる ◦ 例)GitHub Actionsでデプロイしたい場合、 承認フェーズを挟みたい場合
• 複数のAPIを操作して自前でデプロイを制御する https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-external.html 7
TaskSet-B • Service配下で、同じTask定義を共有する論理的なグループ ◦ Task数の調整も、TaskSet毎に行われる ◦ TaskSet毎にTargetGroupをアタッチできる • ※ ECSのコンソールを見ても、“TaskSet”は見当たらない...
Service TaskSet-A Task Task Task v1 Task Task Task v2 TaskSetとは 8 TargetGroup-A TargetGroup-B
4. Canaryリリースの流れ 9
ECS Service-A 0. 初期状態 TaskSet-Primary ELBからTargetGroup経由で、Serviceにトラフィックが流れている Task Task Task v1
10 ELB Listener Rule port: XX
Service-A 1/5. CanaryのTaskSetを作成する (CreateTaskSet) TaskSet-Primary Task Task Task v1 11
TaskSet-Canary Task Task Task v2 ECS ELB Listener Rule port: XX
Service-A 2/5. 一部のトラフィックをCanaryに流す TaskSet-Primary Listener RuleのTargetGroupのWeightを変更する (例)100:0 →90:10 Task Task
Task v1 12 TaskSet-Canary Task Task Task v2 ECS ELB Listener Rule port: XX
Service-A 3/5. Primaryをv2に更新する (UpdateTaskSet) TaskSet-Primary TaskSet内の更新は、RollingUpdateで行われる Task Task Task v2
13 TaskSet-Canary Task Task Task v2 ECS ELB Listener Rule port: XX
Service-A 4/5. トラフィックをPrimaryのみに戻す TaskSet-Primary Task Task Task v2 14 TaskSet-Canary
Task Task Task v2 ECS ELB Listener Rule port: XX
Service-A 5/5. CanaryのTaskSetを削除する (DeleteTaskSet) TaskSet-Primary Task Task Task v2 15
ECS ELB Listener Rule port: XX
PipeCDではyaml定義すればCanaryを実現できる 16 Pipelineの定義 (.yaml) PipeCDのUI
5. 補足、おわりに 17
補足 • Externalデプロイタイプには制約も多いので注意 ◦ https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-external.html#deployment -type-external-considerations • PipeCDはService Discoveryでも一部異なる仕組みでCanary対応済 ◦
仕組み: https://qiita.com/t-kikuc/items/25bd032606d878229ed7 ◦ 肝:ELBがいない ◦ Service Connect、App Meshは未対応 • PipeCDでの主な該当コード ◦ https://github.com/pipe-cd/pipecd/blob/master/pkg/app/piped/executor/ecs/deploy.go ◦ https://github.com/pipe-cd/pipecd/blob/master/pkg/app/piped/platformprovider/ecs/client.go 18
おわりに • PipeCDの入門ハンズオン公開したので、是非トライしてください! ◦ 30m~1hでPipeCDの構築からデプロイまで試せます • 「俺はECS/Lambdaでこんなデプロイがしたい」 ご意見お待ちしてます 19 PipeCD
Tutorial https://github.com/pipe-cd/tutorial