クラウドインフラの構築・検証記録
AWS・Kubernetes・Datadog・Google Cloudを用いた、クラウドインフラの構築・検証記録です。 アプリケーションのデプロイや監視など、取り組んだ内容と検証結果、そこから得た学びを構成図とともにまとめています。
AWS
アプリケーションの配信と、API・バッチ・非同期処理を実行する環境の構築。
構築した環境
ECSを中心に、API・バッチ・非同期処理を実行する環境を構築しました。RDSへの管理用接続、定期実行、キュー処理、メール送信、フロントエンド配信を組み合わせています。
取り組んだこと
- Session Manager経由でRDSに接続し、単発のECSタスクによるDBマイグレーションに取り組みました。
- EventBridge Schedulerによるバッチ起動と、SQS・デッドレターキュー・SESを設定しました。
- S3・CloudFront・Amplifyを使った配信環境を構築し、ECSのスケーリングとFargate Spotの利用に取り組みました。
確認したこと・学んだこと
- DB接続、バッチ実行、メッセージの送受信、メール送信が動作することを確認しました。
- CloudFrontのキャッシュ・CORS・アクセス制御の仕組みと、処理の種類に応じたECSの使い分けを学びました。
構成図の読み方
配信の入口
CloudFrontから、静的コンテンツをS3、フロントエンドをAmplifyへ振り分けます。
API・非同期処理
ALBからECS上のAPIへ接続。RDSへのアクセス、SQSによる非同期処理、SESによるメール送信を組み合わせています。
管理・定期実行
Session Manager経由の管理用接続と、マイグレーション用の単発タスク、Schedulerから起動するバッチを確認できます。
図を選択すると、拡大して細部を確認できます。
図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。
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とマニフェストを使い、ステージング・本番を想定した学習環境を構築・複製する方法を学びました。
構成図の読み方
リクエストの経路
ALBからIstio Ingress Gatewayを経由し、ServiceとPodへ。入口のルーティングとアプリケーションの役割を追います。
GitOpsによる反映
GitHub・ECR・Argo CD / Image Updaterの関係を確認。イメージ更新と、Gitの定義を環境へ反映する流れを読みます。
メトリクスの収集・可視化
Prometheusで収集したメトリクスをGrafanaで可視化。ログは別経路でFluent BitからCloudWatch Logsへ送ります。
図を選択すると、拡大して細部を確認できます。
図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。
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
構成図の読み方
アプリへの入口
ALBからECSタスクへリクエストが届き、cost-aggregatorが処理を受け持ちます。
サービス間の通信
cost-aggregatorとcost-providerの間をgRPCで接続。トレースで追いたいサービス境界に注目します。
外部サービスとの接続
AWSのコスト情報取得、ECRのイメージ、S3の環境設定など、アプリが依存する外部リソースを示しています。
cost-aggregator/cost-providerの構成図です。Agentの補足図も、このアプリケーションを例にコンテナメトリクスの収集を説明しています。
図を選択すると、拡大して細部を確認できます。
図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。
詳しく見る:Agent・メタデータ・cgroup
Datadog Agentとコンテナメトリクス
同じECSタスク内のcost-aggregator、cost-provider、Datadog Agentを例に、コンテナの識別情報、CPU・メモリの統計、Datadogへの送信の関係を整理しています。
Datadog Agentによるコンテナメトリクス収集の仕組みを説明する図です。FireLensによるログ転送とAPMトレースの経路は含みません。
図を選択すると、拡大して細部を確認できます。
図中の日本語は、下の3つのステップで補足しています。
コンテナを識別
ECSメタデータAPIからコンテナ名とIDを取得し、収集した情報を対象のアプリケーションに対応付けます。
リソース使用量を把握
図のcgroupは、コンテナごとのCPU・メモリ統計の関係を表しています。どのコンテナがリソースを消費しているかを捉えるための情報です。
Datadogへ送信
Agentが収集したメトリクスをDatadogへ送信し、ダッシュボードでの可視化やモニターによる監視につなげます。
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マイグレーションとデプロイの順序を学びました。
構成図の読み方
配信・API・データ
Cloud Load Balancingを入口に、静的配信とCloud RunのAPIを分けます。APIからCloud SQLへの経路も確認できます。
非同期処理・バッチ
Cloud TasksからCloud Runのワーカーへ。Cloud SchedulerはCloud Run Jobsを起動し、定期処理を実行します。
デプロイ・管理用接続
GitHubからCloud Buildへの自動デプロイ、Artifact Registry・Secret Managerとの連携、IAP経由の踏み台接続を示しています。
API・ワーカー・バッチの経路と、配信・管理用接続・自動デプロイの関係を示しています。
図を選択すると、拡大して細部を確認できます。
図中の日本語は、構成図の読み方と拡大ビューの番号付きガイドで補足しています。