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
110
SOCI Index Manifest v2が出たので調べてみた / Introduction to SOCI Index Manifest v2
tkikuc
1
140
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
590
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
4.5k
GitOps for Everything with Pluggable PipeCD
tkikuc
0
56
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
5.5k
プルリクが全てじゃない!実は喜ばれる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
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
Rancher と Terraform
fufuhu
2
240
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
0
170
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
19
11k
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.3k
RDoc meets YARD
okuramasafumi
4
170
ProxyによるWindow間RPC機構の構築
syumai
3
1.1k
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
210
AIでLINEスタンプを作ってみた
eycjur
1
230
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
220
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
410
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
720
Featured
See All Featured
A better future with KSS
kneath
239
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
The Invisible Side of Design
smashingmag
301
51k
Building an army of robots
kneath
306
46k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Done Done
chrislema
185
16k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
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