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

Amebaにおける Platform Engineeringの実践

Amebaにおける Platform Engineeringの実践

Kumo Ishikawa

April 07, 2025
Tweet

More Decks by Kumo Ishikawa

Other Decks in Technology

Transcript

  1. 谷成 雄 •2014年新卒入社 •現在: Service Reliability Group (SRG) •Ameba Platform

    チーム •最近開発などで利用した技術: EKS GKE kubernetes on-premise Amazon Aurora Github Actions SRG技術記事
  2. 技術選定: コンピューティング基盤 Kubernetes on AWS(EKS) • KubrenetesのManagedサービスを利用することにより管理者の運用負荷削減 Self-Managed-NodeGroup(当時の状況) • user_dataが流せる(社内認証によるログイン設定)

    • 追加のSecurity Groupが指定できる Spot Instanceの活用 • コストを抑えるためにSpot Instanceも併用 Cluster-AutoscalerとHPA • 当時のWorkerNodeのスケールサービスだとほぼ一択 • Podに関しては特殊なスケール要件がなかったのでHPAを採用
  3. 技術選定: ネットワーキング • セキュリティポリシー等を簡 単に適用できる • 可観測性の確保 ◦ 問題発生時にログやメトリ クス、トレース情報などを

    もとに調査が可能 出典:(アクセス日: 2025/04/03) https://istio.io/latest/docs/ops/deployment/architectu Istioの導入 • 基本的にマイクロサービスアーキテクチャを採用しており、分散トレーシングやメトリク ス収集などが容易に行える
  4. 技術選定: ログ管理の初期構成 ログデータの流れ EKS-> fluentbit-> Kinesis Data Streams →Lambda→etc… シンプルなログ体験を提

    供 ユーザは標準出力にログ を出力するだけで、必要 なところに必要なログが 送られる
  5. 技術選定: CI/CD GitHub Actions(CI) • 開発にGitHubを使用しており、社内にSelfHostRunnerも存在していたため採用 ArgoCD(CD) • ArgoCDは導入と管理が容易 Bootstrapのプロセスが不要で、HA構成でも単一のYAMLファイルでデプロイ可能

    • ArgoCDの優れたユーザー体験 ArgoCDのUIは速度とわかりやすさが高評価 • ArgoCDの活発なコミュニティとPlatformチームとの親和性 2020年時点で既にIncubating Projectに昇格しており、最も期待されているCDプロジェ クトの一つであった 社内Platformチームの技術スタック(Go言語が多い)と親和性が高く、Issueを提起しやす い環境
  6. 技術選定: アプリケーション定義モデル KubeVelaとは • OAMモデルを使用して開発者のデプロイを簡素化し、拡張性 を実現するツール KubeVelaの選択理由 • ユーザのk8sに対する認知負荷を減らす •

    clusterを管理するうえで必須となる設定を管理者側として 強制できる KubeVelaとCUE langについて CUE langを用いて条件文やデータ変換等を行い、必要なyaml を生成する
  7. 技術選定: モニタリング Datadogの採用 • メンバーの習熟度が高い • いろいろな機能が充実 • AWSとの連携も容易 アプリケーション側のDatadogの活用

    • Prometheus Endpoint (Annotation)を付与することでメトリクスを収集 • GoアプリケーションにDatadogのGo SDKを組み込むことで、アプリケーション のパフォーマンスデータ(APMデータ)をDatadogへ送信し、可視化・監視
  8. 石川 雲 •2023年11月中途入社 •Service Reliability Group (SRG) •Ameba Platform チーム(2023/11~現在)

    •担当領域: EKS Node運用(Karpenter) Security(テナント設計・ネットワーキング・Audit監 視) CI/CD(ArgoCD・FluxCD・Terraform) SRG技術記事
  9. ログ管理の再設計 課題 • ログ転送経路がLambdaとKDSに依存し、ログの可用性と耐障害性に課題 • OpenSearchに全ログを格納できず、ログ検索性が低下 解決 • Fluent Bit

    によりログを直接 S3 へ転送 • 必要な転送処理のみ S3 -> SQS -> Lambda で非同期実行する構成へ移行 • Athena を導入し、S3 上のログに対するクエリベースの検索を実現
  10. インシデント対応とモニタリングの改善 背景 • アラート対応が属人化し、再発・対応の遅延・ナレッジが継承されないなどが発生 • アラートとインシデント設定がGUI操作中心、設定の属人化 • インシデントの緊急度や影響と最終的解決を定量的に判断・評価しづらい状況、たまに放置 主な取り組み 1.

    インシデント対応の標準化: インシデントコマンダー制度の導入 トリアージ基準の策定 2. ツールによるプロセスの一元化、宣言的管理の実現 Datadog Incident+Slackによるインシデント管理の統一 Datadog Operator によるモニタリング設定の宣言的管理 3. インシデント対応などモニタリングの改善 Incident Metricsダッシュボードによる分析と継続的改善
  11. リリース以来の改善まとめ • Platform改善のための対話体制 • 以下の改善にフォーカスして紹介 マニフェスト変更プロセスの簡素化: より利便性の高いセルフサービス環境の提供 ログ管理の再設計: より安価で管理しやすい設計への移行 インシデント対応とモニタリングの改善:

    より効率的なインシデント対応体制などの整備 その他の改善: PDF版/SpeakerDeck版でご参照ください CI/CDの高速化・パフォーマンス最適化 Post Release Workflowの開発 AWS/EKSにおけるマルチテナント対応 Nodeスケジューリング最適化 Podリソース使用最適化
  12. インシデントマネジメント 課題 • アラート対応が放置・属人化し、同様のインシデントが再発 • 対応フローが明確でなく、解決までに時間を要する • 過去のインシデント履歴や対処内容が整理されておらず、ナレッジが継承されにく い 解決

    • Datadog Incident を中核に据え、発生〜対応〜振り返りまでのプロセスを一元 管理 • 統一されたインシデント対応フローを整備し、全チームでの共通運用を徹底 • トリアージ基準とインシデントコマンダーの役割を明確化し、対応の迅速化と属人 化の防止を実現
  13. モニタリングの改善 課題 • アラート条件や通知設定がGUI操作中心、設定の属人化 • チーム構成が変わるたびに過去の運用知見が失われる • インシデントに対し、定量的評価ができず、緊急性の高い恒久対策が後回しにされ る傾向 解決

    • Datadog Operator導入、モニタリング設定の宣言的管理を実現 • Embedded SREを各チームに配置し、プラクティス支援 • Incident Metrics ダッシュボードの整備、改善活動を追える状態に
  14. CI/CDの進化 イメージタグ更新自動化 FluxCD Image Automation (FluxCD+ArgoCD併用) Terraform CI高速化 Git差分のみTerraform Apply

    実行時間平均70%削減 CDパフォーマンス最適化 ArgoCD/FluxCD シャーディング 同期間隔やキャッシュ設定など、各種パラメータ調整 Post Release Workflow KubeVela Application Workflow導入 ArgoCD同期後、任意のリソースに任意のオペレーションが実行可能に
  15. CI/CDの進化: Terraform高速化 課題 • リソース数の増加により、Terraform 実行時間が 15〜30 分以上に肥大化 • 全体Apply運用のため、変更差分が見えづらく、意図しない影響のリスクがあっ

    た 解決 • Git差分があったModuleのみを対象にApplyを実行する方式に切り替え • 全体Applyは定期実行+確認フェーズを設けて、安全性と効率性を両立 • 実行時間を平均70%削減した
  16. CI/CDの進化: CD最適化 課題 • 監視対象リソースの増加により、ArgoCD の同期処理が遅延 • FluxCD の安定性が低下し、イメージ自動更新が断続的に停止 解決

    • ArgoCD・FluxCD をシャーディング構成に分割し、処理の並列化と負荷分散を実 現 • 同期間隔やキャッシュ設定など、各種パラメータを最適化し、リソース消費を削減 • 結果として、同期・更新の安定性が向上し、安定した運用が可能に
  17. CI/CDの進化: Post Release 課題 • Jenkins では対応できていたが、EKS + ArgoCD 移行後に制約が増加

    • ArgoCDの同期後に何かを実行したい処理が実現しづらい • ArgoCD の Resource Hook はリソース単位での制御ができず、細かいタイミン グ制御が不可能 解決 • KubeVela Application Workflowの導入により、Application単位でPost Release処理を定義可能に • GitHub Actions 実行・外部リソース確認なども可能 • PostReleaseの処理も同一Manifestで管理可能、運用の一貫性がある
  18. KubeVela 継続利用と今後の方針 課題 • 主要開発元(Alibaba Cloud)が2023年から開発中止、継続性に不安 • 複数環境に対応する Cuelang テンプレートが難読化し、保守負担増加

    • 社内で十分にメンテナンスできる体制がない 検討 •KubeVelaを代替可能なプロダクトは存在せず、引き続き利用を継続(2025/4時 点) •将来的な選択肢として、KubeVela 本体へのコントリビュートを検討中
  19. その他の改善 マルチテナント対応: 通信制御・権限分離を実現 • 通信制御:Security Groups for Pod、NetworkPolicy導入 • 権限分離:ResourceTagベースのIAM

    ABAC、Kubernetes RBACの見直し Node最適化: Karpenter導入 • Podの要求に応じて、適切なインスタンスタイプを動的に割り当て • 使用率の低いNodeを自動削除し、コストを大幅削減 Pod 最適化: Cloudnatix導入 • Prod以外へVPA AutoPilot機能導入
  20. マルチテナント化への移行 課題 • EKS Pod間、PodとAWSリソース間の通信制御と権限分離がない • セキュリティ要件が高い認証・決済系サービスが移設できない 解決 1. 通信制御

    • PodとAWSリソース間: Security Groups for Pod • Pod間: Network Policy 2. 権限分離 • AWS: IAM ResourceTag ABAC導入 • EKS: Kubernetes RBAC見直し
  21. Node最適化ツールの導入 問題 • Cluster Autoscalerでは、インスタンスタイプの最適化ができず、過剰なリ ソースとコストが発生 • Nodeの起動に時間がかかり、スケジューリングの遅延が発生することも 解決 •

    Karpenterに移行し、Podのリソース要求に応じて最適なNodeを起動 • インスタンスタイプを動的に選定し、コスト効率の良い構成を自動で実現 • 使用率の低いノードは自動で削除、クラスタ全体のコストを削減
  22. 完全なIDPへ IDP(Internal Developer Platform ): 開発者が機能開発に集中できるよう、共通化・自動化された基盤や仕組みを提供するもの 現時点で実現できていること • 標準化されたテンプレートとCI/CDの提供 •

    迷わないオンボーディング体験の整備 • Platform / 開発チーム間の明確な責任分離 これから目指していくこと • トイルの解消による開発者・運用者のペインを減らすこと • より柔軟で直感的な利用者セルフサービス体験を強化すること • プラットフォーム全体の状態と価値を、定量的に可視化・改善すること
  23. SLI/SLOの導入 「Platform 」は見えないプロダクト、価値を定量的に示すことが難しい • どのような指標が意味があるのか、利用者視点での SLI 設計を検討している段階 • SLIの例 セルフサービス機能の利用率

    デプロイ成功率 デプロイ所要時間 • 利用者視点の SLO を設定し、期待水準を明確化 • 定量的なデータに基づいた改善サイクルを回していける理想