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
260
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
More Approvers for Greater OSS and Japan Community
tkikuc
1
72
SOCI Index Manifest v2が出たので調べてみた / Introduction to SOCI Index Manifest v2
tkikuc
1
100
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
560
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
4.4k
GitOps for Everything with Pluggable PipeCD
tkikuc
0
53
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
5.4k
プルリクが全てじゃない!実は喜ばれるOSS貢献の方法8選
tkikuc
17
2.8k
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
3
540
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
15
3.9k
Other Decks in Programming
See All in Programming
KessokuでDIでもgoroutineを活用する / Go Connect #6
mazrean
0
110
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
segadevtech
3
960
AHC051解法紹介
eijirou
0
610
あまり知られていない MCP 仕様たち / MCP specifications that aren’t widely known
ktr_0731
0
300
実践 Dev Containers × Claude Code
touyu
1
240
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
2
770
オホーツクでコミュニティを立ち上げた理由―地方出身プログラマの挑戦 / TechRAMEN 2025 Conference
lemonade_37
2
490
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
バイブコーディング × 設計思考
nogu66
0
120
TanStack DB ~状態管理の新しい考え方~
bmthd
2
290
Infer入門
riru
4
1.6k
バイブコーディングの正体——AIエージェントはソフトウェア開発を変えるか?
stakaya
5
1k
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
Designing for Performance
lara
610
69k
Building Applications with DynamoDB
mza
96
6.6k
BBQ
matthewcrist
89
9.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
Six Lessons from altMBA
skipperchong
28
4k
Code Review Best Practice
trishagee
70
19k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Optimizing for Happiness
mojombo
379
70k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
820
Unsuck your backbone
ammeep
671
58k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
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