Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ECS向けのドリフト検知機構を実装してみた

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 ECS向けのドリフト検知機構を実装してみた

Avatar for Tetsuya Kikuchi

Tetsuya Kikuchi

September 24, 2024
Tweet

More Decks by Tetsuya Kikuchi

Other Decks in Programming

Transcript

  1. • PipeCDメンテナ @CyberAgent, Inc. ◦ ECS、Lambda関連よく見てます • 好きなAWSサービス: ECS、Support •

    JAWS-UG初登壇 • 年内にAWS認定10点ぐらい失効します🎆 菊池 哲哉  Kikuchi Tetsuya 2 @t-kikuc @t_kikuc
  2. PipeCDとは? • CD(継続的デリバリー)のOSS • 主な特徴 ◦ ECS、Lambda、K8s、Cloud Run、Terraformにデプロイできる (2024.09現在) ◦

    Canary、Blue/Greenに強み ◦ GitOpsスタイル • 沿革 ◦ サイバーエージェント発のOSS ◦ 2023.05〜 CNCF Sandbox Project ◦ 沿革詳細: https://speakerdeck.com/ffjlabo/our-journey-from-in-house-cd-system-to-open-source • 入門ハンズオン(日本語版) ◦ https://github.com/pipe-cd/tutorial/blob/main/content/ja/README.md 3
  3. PipeCDとは? • CD(継続的デリバリー)のOSS • 主な特徴 ◦ ECS、Lambda、K8s、Cloud Run、Terraformにデプロイできる (2024.09現在) ◦

    Canary、Blue/Greenに強み ◦ GitOpsスタイル • 沿革 ◦ サイバーエージェント発のOSS ◦ 2023.05〜 CNCF Sandbox Project ◦ 沿革詳細: https://speakerdeck.com/ffjlabo/our-journey-from-in-house-cd-system-to-open-source • 入門ハンズオン(日本語版) ◦ https://github.com/pipe-cd/tutorial/blob/main/content/ja/README.md 4 要は ECSとかLambdaに デプロイできるOSS
  4. ドリフト検知とは • 「あるべき状態」と「実際の状態」のズレを検知する ◦ 「意図せぬインフラ変更」を検知できる • 何が嬉しい? ◦ 「IaCのコードを見れば、インフラがわかる」状態を保てる ◦

    「謎のズレによりインフラ変更がコケる →調査が必要」を防げる ▪ 緊急対応で手動変更した後など 8 <実際> service: image: yyy <あるべき> service: image: xxx
  5. 1/3. 実際の状態を取得 17 PipeCD GitHub  ECS <actual> service: ... taskdef:

    ... <actual> service: ... taskdef: ... <expected> service: ... taskdef: ...
  6. 2/3. あるべき状態を取得 18 PipeCD GitHub  ECS <expected> service: ... taskdef:

    ... <expected> service: ... taskdef: ... <actual> service: ... taskdef: ...
  7. 3/3. 比較 19 PipeCD GitHub  ECS <expected> service: ... taskdef:

    ... diff <actual> service: ... taskdef: ...
  8. 実装上の工夫1/2 • 「取得した実リソース」のパラメータを““いい感じ””にする ◦ 背景: Create/UpdateXxxInput と DescribeXxxOutputが一致しない ◦ 検出不要な差分を無視する

    • 対応例 ◦ 実リソースにしか存在しない項目 (例) RunningCount、Status、CreatedAt ▪ → 無視 ◦ ECS側で自動ソートされる項目  (例) Subnets ▪ → あるべき状態側をソート ◦ デフォルト値が使われる項目 ▪ 固定値 → その値を利用  (例)AssignPublicIp、PortMappings.Protocol ▪ 状態依存 → 無視     (例)RoleArn、PlatformVersion 20 実装: https://github.com/pipe-cd/pipecd/blob/v0.49.0/pkg/app/piped/driftdetector/ecs/detector.go#L240-L311
  9. 備考 • ドリフト検知はデフォルトで有効のため、設定不要です • Standalone Taskは未対応です • いくつかの項目は、ドリフトがあっても無視してます... ◦ 例)

    service.Tag, service.LoadBalancers https://github.com/pipe-cd/pipecd/blob/v0.49.0/pkg/app/piped/driftdetector/ecs/detector.go#L230-L239 • Lambdaでも実装・リリースしました ◦ https://github.com/pipe-cd/pipecd/pull/5186 23
  10. 関連資料 • PipeCD入門ハンズオン(日本語版) ◦ https://github.com/pipe-cd/tutorial/blob/main/content/ja/README.md • ドリフト検知の実装(DriftDetection) ◦ ECS: https://github.com/pipe-cd/pipecd/pull/5122

    ◦ Lambda: https://github.com/pipe-cd/pipecd/pull/5186 ◦ 実リソースの取得処理: ▪ ECS: https://github.com/pipe-cd/pipecd/pull/4979 ▪ Lambda: https://github.com/pipe-cd/pipecd/pull/5143 ◦ 簡単な試し方: ▪ 1. PipeCD TutorialでECSにデプロイ ▪ 2. ECSを手動で更新してドリフトを発生させる → PipeCDのコンソールで確認 • DriftDetection詳細Docs ◦ https://pipecd.dev/docs-v0.49.x/user-guide/managing-application/configuration-drift-detection/ • PipeCDでECS AutoScalingと併用する方法 ◦ https://t-kikuc.hatenablog.com/entry/2024/08/11/064753 24