Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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