井原淳平/ENGINEERING NOTES

クラウドインフラの構築・検証記録

AWS・Kubernetes・Datadog・Google Cloudを用いた、クラウドインフラの構築・検証記録です。 アプリケーションのデプロイや監視など、取り組んだ内容と検証結果、そこから得た学びを構成図とともにまとめています。

01

AWS

アプリケーションの配信と、API・バッチ・非同期処理を実行する環境の構築。

構築した環境

ECSを中心に、API・バッチ・非同期処理を実行する環境を構築しました。RDSへの管理用接続、定期実行、キュー処理、メール送信、フロントエンド配信を組み合わせています。

取り組んだこと

  • Session Manager経由でRDSに接続し、単発のECSタスクによるDBマイグレーションに取り組みました。
  • EventBridge Schedulerによるバッチ起動と、SQS・デッドレターキュー・SESを設定しました。
  • S3・CloudFront・Amplifyを使った配信環境を構築し、ECSのスケーリングとFargate Spotの利用に取り組みました。

確認したこと・学んだこと

  • DB接続、バッチ実行、メッセージの送受信、メール送信が動作することを確認しました。
  • CloudFrontのキャッシュ・CORS・アクセス制御の仕組みと、処理の種類に応じたECSの使い分けを学びました。
構成図
AWSの構成図

構成図の読み方

  1. 配信の入口

    CloudFrontから、静的コンテンツをS3、フロントエンドをAmplifyへ振り分けます。

  2. API・非同期処理

    ALBからECS上のAPIへ接続。RDSへのアクセス、SQSによる非同期処理、SESによるメール送信を組み合わせています。

  3. 管理・定期実行

    Session Manager経由の管理用接続と、マイグレーション用の単発タスク、Schedulerから起動するバッチを確認できます。

図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。

02

Kubernetes

EKS上でのアプリケーションのデプロイと監視。

構築した環境

EKS上にAPI・ワーカー・バッチを配置した環境を構築しました。Argo CDによるデプロイ、ログ収集、メトリクスの可視化、Istioによる通信制御を組み合わせています。

取り組んだこと

  • Kustomize・Helmによる設定管理、Pod Identityによるアクセス権限の設定、External Secrets Operatorによるシークレットの連携に取り組みました。
  • Deployment・Job・CronJob・HPAを利用し、ALB Controllerを使ってAPIを公開しました。
  • Argo CD / Image Updater、Fluent Bit、Prometheus・Grafana、Istioを導入しました。

確認したこと・学んだこと

  • Git上の変更が環境へ反映される流れと、ログ転送・メトリクス可視化・L7ルーティングの仕組みを学びました。
  • Terraformとマニフェストを使い、ステージング・本番を想定した学習環境を構築・複製する方法を学びました。
構成図
Kubernetesの構成図

構成図の読み方

  1. リクエストの経路

    ALBからIstio Ingress Gatewayを経由し、ServiceとPodへ。入口のルーティングとアプリケーションの役割を追います。

  2. GitOpsによる反映

    GitHub・ECR・Argo CD / Image Updaterの関係を確認。イメージ更新と、Gitの定義を環境へ反映する流れを読みます。

  3. メトリクスの収集・可視化

    Prometheusで収集したメトリクスをGrafanaで可視化。ログは別経路でFluent BitからCloudWatch Logsへ送ります。

図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。

03

Datadog

ログ・メトリクス・トレースを使った、アプリケーションとインフラの状態把握。

構築した環境

学習用アプリケーション「Slack Metrics」への計装と、ECS上の別のアプリケーション(cost-aggregator/cost-provider)の監視に取り組みました。

取り組んだこと

  • AWSインテグレーションを設定し、Datadog AgentとFireLensを組み込みました。
  • ダッシュボード・モニター・SLOを設定し、関連リソースをTerraformで管理しました。
  • 既存のSlack Metricsに計装を追加し、ログとトレースの関連付け、トレースIDの伝搬に取り組みました。

確認したこと・学んだこと

  • メトリクスの検索、ログとトレースの関連付け、APMでの処理経路の確認、Slackへの通知を通じて、アプリケーションの状態を把握する方法を学びました。
  • SLI・SLO・エラーバジェットの考え方と、収集するデータの種類・量、保持期間、料金の関係を学びました。

3つの観測データと収集経路

ECS on Fargateでのログ・コンテナメトリクス・トレースの流れを整理しています。

観測データ発生元 → 収集・転送 → 確認先何を確認するか
ログアプリの標準出力・標準エラー → FireLens / Fluent Bit → Datadog Logs発生したエラーや処理の詳細。トレースIDでリクエストの流れに結び付けます。
コンテナメトリクスECSタスクメタデータ → Datadog Agent → Datadog MetricsコンテナごとのCPU・メモリ使用量と、その時間的な変化。
トレースアプリの計装処理 → Datadog Agent(APM)→ Datadog APMサービスをまたぐ処理経路と、どの処理で時間がかかっているか。

AWSインテグレーションで取得するサービスメトリクスは、Agentによるコンテナメトリクス収集とは別の経路です。 Datadog / Fargate

監視対象アプリの構成図
Datadogで監視するAWSアプリケーションの構成図

構成図の読み方

  1. アプリへの入口

    ALBからECSタスクへリクエストが届き、cost-aggregatorが処理を受け持ちます。

  2. サービス間の通信

    cost-aggregatorとcost-providerの間をgRPCで接続。トレースで追いたいサービス境界に注目します。

  3. 外部サービスとの接続

    AWSのコスト情報取得、ECRのイメージ、S3の環境設定など、アプリが依存する外部リソースを示しています。

cost-aggregator/cost-providerの構成図です。Agentの補足図も、このアプリケーションを例にコンテナメトリクスの収集を説明しています。

図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。

詳しく見る:Agent・メタデータ・cgroup

Datadog Agentとコンテナメトリクス

同じECSタスク内のcost-aggregator、cost-provider、Datadog Agentを例に、コンテナの識別情報、CPU・メモリの統計、Datadogへの送信の関係を整理しています。

コンテナメトリクスの収集・送信
Datadog Agent・ECSメタデータAPI・cgroupの関係図

Datadog Agentによるコンテナメトリクス収集の仕組みを説明する図です。FireLensによるログ転送とAPMトレースの経路は含みません。

図中の日本語は、下の3つのステップで補足しています。

  1. コンテナを識別

    ECSメタデータAPIからコンテナ名とIDを取得し、収集した情報を対象のアプリケーションに対応付けます。

  2. リソース使用量を把握

    図のcgroupは、コンテナごとのCPU・メモリ統計の関係を表しています。どのコンテナがリソースを消費しているかを捉えるための情報です。

  3. Datadogへ送信

    Agentが収集したメトリクスをDatadogへ送信し、ダッシュボードでの可視化やモニターによる監視につなげます。

04

Google Cloud

Cloud Runを中心としたAPI・非同期処理の実行環境と、コンテンツ配信・自動デプロイの構築。

構築した環境

Cloud RunのAPI・ワーカー・ジョブとCloud SQLを中心に環境を構築しました。コンテンツ配信、アクセス制御、管理用接続、自動デプロイを組み合わせています。

取り組んだこと

  • Cloud Tasksからワーカーを呼び出す処理と、Cloud SchedulerによるCloud Run Jobsの定期実行に取り組みました。
  • IAPとGCEの踏み台を経由して、プライベートなCloud SQLに管理用の接続を行いました。
  • Cloud Load Balancing・Cloud CDN・Cloud Storageによる配信と、Cloud Armorによる保護を設定しました。
  • Cloud Buildによるデプロイ、Artifact Registryでのイメージ管理、Secret Managerとの連携に取り組みました。

確認したこと・学んだこと

  • Cloud Runの認証・ネットワーク・スケーリングの仕組みと、コールドスタートやコストとの関係を学びました。
  • バッチ・非同期処理におけるリトライの考え方、Cloud TasksとPub/Subの違いと使い分け、DBマイグレーションとデプロイの順序を学びました。
構成図
Cloud Run・Cloud SQLを中心としたGoogle Cloudの構成図

構成図の読み方

  1. 配信・API・データ

    Cloud Load Balancingを入口に、静的配信とCloud RunのAPIを分けます。APIからCloud SQLへの経路も確認できます。

  2. 非同期処理・バッチ

    Cloud TasksからCloud Runのワーカーへ。Cloud SchedulerはCloud Run Jobsを起動し、定期処理を実行します。

  3. デプロイ・管理用接続

    GitHubからCloud Buildへの自動デプロイ、Artifact Registry・Secret Managerとの連携、IAP経由の踏み台接続を示しています。

API・ワーカー・バッチの経路と、配信・管理用接続・自動デプロイの関係を示しています。

図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。

全体表示

スクロール・ドラッグで移動 · + / − で拡大縮小 · 0 で全体表示 · Esc で閉じる2本指で拡大・縮小 · 1本指で移動

このセクションへのリンク

選択中の言語で開くリンクです。