ECSのCanaryリリースをExternalデプロイタイプで実現する方法
by
Tetsuya Kikuchi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ECSのCanaryリリースを Externalデプロイタイプで 実現する方法 2024-08-02 #FinaTech t-kikuc @PipeCD Team 1
Slide 2
Slide 2 text
アジェンダ 1. 自己紹介 2. PipeCDの紹介 3. 前提知識: Canary, Externalデプロイタイプ, TaskSet 4. ExternalでのCanaryリリースの流れ 5. 補足、おわりに 2
Slide 3
Slide 3 text
Tetsuya Kikuchi 3 @t-kikuc @t_kikuc ● PipeCDのメンテナ @ (株)サイバーエージェント ○ PipeCD: OSSのデプロイツール ○ 主にAWS関連機能(ECS,Lambda)の開発を担当 ● 関心領域: CI/CD、DevOps ● 今年度AWS認定10個ぐらい失効します
Slide 4
Slide 4 text
PipeCDとは ● PipeCD: OSSのデプロイツール ○ ECS, Lambda, Kubernetes, Terraform, CloudRunに対応 ○ CanaryやBlue/Greenが強み ○ Gitと実環境とで差分があった場合、自動で再デプロイ ● CNCFのSandboxプロジェクトの一つ ● 先月GitHubのStar⭐が 1,000到達 4
Slide 5
Slide 5 text
3. 前提知識 5
Slide 6
Slide 6 text
Canaryリリースとは ● リリースを安全にするための手法 ○ キャパシティを落とさず、かつ不具合時の影響を小さくできる ● リリース時に新バージョンのアプリを別途デプロイ →エラーなければ全体をバージョン更新 6 Task Task v1 Task Task v1 Task v2 Task Task v2 Task Task v2 Task v2
Slide 7
Slide 7 text
Externalデプロイタイプとは ● ECSのデプロイタイプの1つ ○ コンソールからは選択できない ● デプロイを外部から制御したい場合に用いる ○ 例)GitHub Actionsでデプロイしたい場合、 承認フェーズを挟みたい場合 ● 複数のAPIを操作して自前でデプロイを制御する https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-external.html 7
Slide 8
Slide 8 text
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
Slide 9
Slide 9 text
4. Canaryリリースの流れ 9
Slide 10
Slide 10 text
ECS Service-A 0. 初期状態 TaskSet-Primary ELBからTargetGroup経由で、Serviceにトラフィックが流れている Task Task Task v1 10 ELB Listener Rule port: XX
Slide 11
Slide 11 text
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
Slide 12
Slide 12 text
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
Slide 13
Slide 13 text
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
Slide 14
Slide 14 text
Service-A 4/5. トラフィックをPrimaryのみに戻す TaskSet-Primary Task Task Task v2 14 TaskSet-Canary Task Task Task v2 ECS ELB Listener Rule port: XX
Slide 15
Slide 15 text
Service-A 5/5. CanaryのTaskSetを削除する (DeleteTaskSet) TaskSet-Primary Task Task Task v2 15 ECS ELB Listener Rule port: XX
Slide 16
Slide 16 text
PipeCDではyaml定義すればCanaryを実現できる 16 Pipelineの定義 (.yaml) PipeCDのUI
Slide 17
Slide 17 text
5. 補足、おわりに 17
Slide 18
Slide 18 text
補足 ● 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
Slide 19
Slide 19 text
おわりに ● PipeCDの入門ハンズオン公開したので、是非トライしてください! ○ 30m~1hでPipeCDの構築からデプロイまで試せます ● 「俺はECS/Lambdaでこんなデプロイがしたい」 ご意見お待ちしてます 19 PipeCD Tutorial https://github.com/pipe-cd/tutorial