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
310
1
Share
ECSのCanaryリリースをExternalデプロイタイプで実現する方法
2024-08-02 LT登壇資料
https://finatext.connpass.com/event/325175/
Tetsuya Kikuchi
August 03, 2024
More Decks by Tetsuya Kikuchi
See All by Tetsuya Kikuchi
More Approvers for Greater OSS and Japan Community
tkikuc
1
150
SOCI Index Manifest v2が出たので調べてみた / Introduction to SOCI Index Manifest v2
tkikuc
1
500
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
5
860
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
5.1k
GitOps for Everything with Pluggable PipeCD
tkikuc
0
99
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
6.9k
プルリクが全てじゃない!実は喜ばれるOSS貢献の方法8選
tkikuc
17
3.1k
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
3
630
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
16
4.6k
Other Decks in Programming
See All in Programming
関係性から理解する"同一性"の型用語たち
pvcresin
2
480
次世代リンターで探る、tsgo 時代における型認識カスタムルールの現実解
ytakahashii
1
900
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
1.3k
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
140
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
180
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
10
1.1k
今さら聞けないCancellationToken
htkym
0
170
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
110
ReactとSvelteのその先、Ripple-TS / Beyond React and Svelte: Ripple-TS
ssssota
2
650
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
690
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
4
550
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
190
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
140
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
Context Engineering - Making Every Token Count
addyosmani
9
900
Automating Front-end Workflow
addyosmani
1370
210k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Optimizing for Happiness
mojombo
378
71k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
ラッコキーワード サービス紹介資料
rakko
1
3.4M
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