Contents
1️⃣ 全体像と選定基準
| 項目 | 意味 | 推奨チェックポイント |
|---|---|---|
| パフォーマンス | スループット (req/s) とレイテンシ (ms) | ベンチマークは TechEmpower 2024 Round 20 と各クラウドベンダーが公開した reference workload(Gin + JSON API)を使用 |
| 可観測性 | ログ・メトリクス・分散トレースの一元化 | 各ベンダーのネイティブ SDK が 1 行で有効化できるか |
| コスト | 実行単位 (vCPU‑秒 / メモリ‑GB‑秒) と無料枠活用度 | スポット/プリエンプティブ割引率、無料枠の更新頻度に注意 |
| エコシステム親和性 | 既存サービス(DB・認証・メッセージング)との統合容易さ | Azure AD / AWS IAM / GCP Identity の有無 |
ポイント:上記4軸をスコア化し、プロジェクト固有の重み付けで総合点を算出すると選定が客観的になる。
2️⃣ Go フレームワークのパフォーマンス実測
2‑1 TechEmpower 2024 ベンチマーク概要
| Framework | 1 s あたりリクエスト数 (req/s)¹ | 平均レイテンシ (ms)² |
|---|---|---|
| Fiber | 13,200 | 7.5 |
| Gin | 12,300 | 8.2 |
| Echo | 11,800 | 8.6 |
| net/http (標準) | 9,500 | 10.1 |
¹ TechEmpower Round 20(2024)公式結果 – https://www.techempower.com/benchmarks/#section=data‑r20
² 同上、JSON Echo テストシナリオの平均値(5 回測定の算術平均)。
解釈と実務的な選択肢
| フレームワーク | 強み | 注意点 |
|---|---|---|
| Fiber | 最高スループット、低レイテンシ。単一バイナリが小さくデプロイが容易。 | エコシステム(プラグイン・ミドルウェア)の成熟度は Gin に劣る。 |
| Gin | ミドルウェアが豊富で公式ドキュメントが充実。企業導入実績多数。 | Fiber と比べ 5‑10 % のスループット差がある。 |
| Echo | バリデーションとコンテキスト管理がシンプル。 | 最近のコミュニティ活動が減少傾向。 |
結論:最速が必須でない限り、保守性・プラグイン数を重視して Gin を選ぶのが実務的にベスト。
3️⃣ クラウド別 Go マイクロサービス実装パターン
3‑1 共通前提
| 前提条件 | 内容 |
|---|---|
| ランタイム | Go 1.22(Alpine / Scratch ビルド) |
| ビルド手順 | go build -ldflags="-s -w" → Docker multi‑stage でサイズ < 5 MB に圧縮 |
| テレメトリ | OpenTelemetry Collector を各環境のネイティブエクスポート先に接続(X‑Ray、Application Insights、Cloud Trace) |
3‑2 AWS
3‑2‑1 サービス比較
| 項目 | AWS Lambda (Go) | Amazon ECS/Fargate | Amazon EKS |
|---|---|---|---|
| デプロイ方式 | ZIP / コンテナ画像 (sam build) |
タスク定義 + Service | Helm / Kustomize |
| 起動遅延 | Cold 30 ms / Warm 5 ms³ | 50 ms(タスク起動) | 20‑40 ms(Pod スケール) |
| 最大同時実行数 | 無制限(予約上限あり) | クラスタリソース次第 | ノードサイズ・クォータに依存 |
| 可観測性 | AWS X‑Ray, CloudWatch Logs | CloudWatch Container Insights | OpenTelemetry + Managed Service for Prometheus |
| コストモデル | 実行時間 × メモリ (ms) | vCPU·秒+メモリ·秒課金 | EC2/Spot + EKS 管理料 |
³*Cold/Warm の定義は AWS 公式ドキュメント(2024‑09)に基づく:Cold は初回起動、Warm は同一インスタンスの再利用。
3‑2‑2 実装例(Lambda + API Gateway)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# template.yaml (AWS SAM) Resources: GoApiFunction: Type: AWS::Serverless::Function Properties: Runtime: go1.x Handler: bootstrap CodeUri: ./cmd/api/ MemorySize: 256 Timeout: 10 Tracing: Active # X‑Ray 自動有効化 Environment: Variables: LOG_LEVEL: info |
ポイント:Tracing: Active が唯一の設定で X‑Ray が自動的にインジェクトされ、CloudWatch にメトリクスが流れる。
3‑2‑3 無料枠と更新リスク
| 無料枠 | 内容(2026‑01 時点) |
|---|---|
| Lambda | 1 M リクエスト + 400,000 GB‑s 計算時間 |
| ECS/Fargate | 750 h コンテナ使用料(t3.micro 相当) |
注意:AWS は毎年 4 月に無料枠条件を改訂する可能性がある。最新情報は公式ページ https://aws.amazon.com/free/ を必ず確認してください。
3‑3 Azure
3‑3‑1 サービス比較
| 項目 | Azure App Service (Go) | Azure Kubernetes Service (AKS) |
|---|---|---|
| デプロイ方式 | GitHub Actions / Zip Deploy | Helm、Argo CD |
| 起動遅延 | Warm ≈ 40 ms⁴ | 20‑30 ms(Pod スケール) |
| 自動スケーリング | プラン別に水平スケール (CPU/Memory) | HPA + VPA が標準装備 |
| 可観測性 | Azure Monitor, Application Insights | Azure Monitor for containers, OpenTelemetry |
| Microsoft 連携 | AD 認証、Key Vault、Service Bus | 同上+ Istio(任意) |
| コストモデル | App Service Plan(固定)/ Consumption | ノード料金+AKS 管理料 |
⁴Warm は同一インスタンスが既に起動している状態。公式測定は Azure Docs (2024‑06) に掲載。
3‑3‑2 実装例(App Service + Docker)
|
1 2 3 4 5 6 7 8 9 10 |
# Dockerfile for Go app on Azure App Service FROM golang:1.22-alpine AS builder WORKDIR /src COPY . . RUN go build -ldflags="-s -w" -o /app/main . FROM scratch COPY --from=builder /app/main /main ENTRYPOINT ["/main"] |
App Service の「Linux コンテナ」オプションで上記イメージをデプロイすれば、TLS とスロット管理が自動的に有効になる。
3‑3‑3 無料枠と更新リスク
| 無料枠 | 内容(2026‑01 時点) |
|---|---|
| Functions (Go) | 1 M 実行 + 400,000 GB‑s 計算時間 |
| App Service (Free) | 10 Web Apps、毎月 60 CPU 分数、1 GB ストレージ |
注意:Azure の無料プランは「Monthly compute minutes」ベースで管理され、2025 年度に上限が変更された実績がある。最新情報は https://azure.microsoft.com/free/ を参照すること。
3‑4 GCP
3‑4‑1 サービス比較
| 項目 | Cloud Run (fully managed) | Google Kubernetes Engine (GKE) |
|---|---|---|
| デプロイ方式 | gcloud run deploy(コンテナ) |
kubectl apply, Anthos Service Mesh |
| 起動遅延 | Cold ≈ 28 ms / Warm 5 ms⁵ | 20‑35 ms(Pod スケール) |
| スケーリング | リクエスト単位で自動 (0‑1000) | HPA + Cluster Autoscaler |
| 可観測性 | Cloud Operations Suite (Logging/Monitoring/Trace) | 同上 + OpenTelemetry Collector |
| ネットワーク最適化 | Cloud Load Balancing、Traffic Director | Service Mesh (Anthos) |
| コストモデル | 実行時間 × CPU·秒+メモリ·秒 | ノード料金+プリエンプティブ割引 |
⁵Cold はインスタンスが 0 の状態から初回リクエストで起動したケース。公式ベンチマークは GCP Blog (2024‑03) に掲載。
3‑4‑2 実装例(Cloud Run)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# Build & push docker build -t gcr.io/$PROJECT_ID/go-api . docker push gcr.io/$PROJECT_ID/go-api # Deploy gcloud run deploy go-api \ --image=gcr.io/$PROJECT_ID/go-api \ --region=asia-northeast1 \ --platform=managed \ --allow-unauthenticated \ --cpu=1 --memory=256Mi |
--cpu=1 と --memory=256Mi が最低課金単位。トレースは go.opentelemetry.io/otel/exporters/googlecloudtrace をインポートするだけで自動送信される。
3‑4‑3 無料枠と更新リスク
| 無料枠 | 内容(2026‑01 時点) |
|---|---|
| Cloud Run | 2 M リクエスト + 360,000 GB‑s 計算時間 |
| GKE Autopilot | Always Free: 1 f1‑micro VM (0.6 vCPU、0.6 GiB) |
注意:GCP の無料枠は「Always Free」プログラムの対象外になると自動的に課金へ移行するため、請求アラートを設定しておくことが推奨される。
4️⃣ パフォーマンス・可観測性・コスト統合比較
| クラウド | 実行環境 | スループット (req/s)¹ | 平均レイテンシ (ms)² | 無料枠活用シナリオ |
|---|---|---|---|---|
| AWS | Lambda (Go) | 11,800 | Cold 30 / Warm 5 | 1 M リクエスト + 400k GB‑s |
| AWS | ECS/Fargate | 12,300 | 50 | 750 h コンテナ使用料 |
| Azure | Functions (Go) | 10,900 | Cold 35 / Warm 7 | 1 M 実行 + 400k GB‑s |
| Azure | App Service | 12,100 | 40 | Free プランで 60 CPU 分/月 |
| GCP | Cloud Run | 13,200 | Cold 28 / Warm 5 | 2 M リクエスト + 360k GB‑s |
| GCP | GKE (Standard) | 14,500 | 22 | プリエンプティブ VM で最大 91 % 割引 |
¹ 各ベンダーが公開した「Gin + JSON API」サンプルワークロードの測定結果(2024‑TechEmpower と各社 2025‑06 のベンチマークレポートを統合)。
² Cold/Warm 定義は各クラウド公式ドキュメントに準拠。
可観測性ツール横断表
| ツール | 主な機能 | 設定ハイライト |
|---|---|---|
| AWS X‑Ray | 分散トレース、サービスマップ | import "github.com/aws/aws-xray-sdk-go/xray" → xray.Configure(xray.Config{LogLevel: "info"}) |
| Azure Monitor / Application Insights | ログ・メトリクス・トレース統合 | appinsights.NewTelemetryClient("<instrumentation_key>") で自動送信 |
| GCP Cloud Trace | トレース収集、サンプリング制御 | trace.StartSpan(ctx, "operation") → 自動エクスポート |
| OpenTelemetry Collector (共通) | ベンダーロックフリーなデータ転送 | otelcol --config=collector.yaml(Exporter を X‑Ray / Application Insights / Cloud Trace に切り替えるだけ) |
ベストプラクティス:各環境で “一度だけ” SDK のインポートと初期化コードを書くことで、外部 APM(Datadog, New Relic 等)との二重計測も容易になる。
5️⃣ コスト最適化と無料枠の実務活用
| クラウド | 割引オプション | 実装上の留意点 |
|---|---|---|
| AWS | Spot Instances(ECS/EKS)最大 90 %割引 | スポットが停止した場合のフェイルオーバー設計が必須 |
| Azure | Azure Spot VM 最大 80 %割引 | アプリがステートレスであることを確認 |
| GCP | Preemptible VM 最大 91 %割引 | GKE Autopilot では自動的に適用されるが、Pod の再スケジュール時間に余裕を持つ |
無料枠の安全な利用フロー
- リソースタグ付与:
environment=free-tier-testを全リソースに設定し、請求レポートでフィルタリング。 - 予算アラート作成:各ベンダーコンソールの「Budget」機能で 80 % 使用時に通知。
- 定期的なドキュメント確認:無料枠は年1回以上公式ページ(AWS, Azure, GCP)をチェックし、変更があれば IaC (Terraform) の変数を更新。
6️⃣ 段階的マイグレーション – Strangler Fig パターン
|
1 2 3 4 5 6 7 8 9 10 |
flowchart LR A[既存モノリス] --> B[APIラッパー (Go net/http)] B --> C{クラウド選定} C -->|AWS| D[AWS Lambda + API GW] C -->|Azure| E[Azure Functions + Front Door] C -->|GCP| F[Cloud Run + Cloud Endpoints] D & E & F --> G[トラフィック分割 (Path/ヘッダー)] G --> H[段階的切り替え] H --> I[旧モノリス停止] |
- API化:
net/httpで外部公開インターフェースを作成し、既存ロジックは内部呼び出しに置き換える。 - クラウド実装:上記表の「推奨環境」に合わせて新しい Go サービスをデプロイ。
- トラフィック分割:API Gateway(AWS)/Front Door(Azure)/Endpoints(GCP)でリクエストをパスベースに振り分け、可観測性ダッシュボードでエラー率・レイテンシを比較。
- フェーズアウト:全トラフィックが新サービスへ移行したら
terraform destroyで旧インフラを削除し、コスト最適化。
メリット:ベンダーロックイン回避、リスク分散、段階的テストによる SLO 達成率の保証。
7️⃣ まとめ(要点)
| 項目 | 推奨 |
|---|---|
| フレームワーク | Gin が保守性・プラグイン数で実務ベスト、Fiber は極限スループットが必要な場合に選択。 |
| AWS | Lambda + API Gateway(開発速度)か、ECS/Fargate(長寿命プロセス)を利用し、X‑Ray と Spot 割引でコスト最適化。 |
| Azure | App Service が手軽な PaaS、AKS が本格 Kubernetes、Application Insights が標準トレース。 |
| GCP | Cloud Run が低レイテンシかつ自動スケール、GKE が大規模マイクロサービス向けで Anthos Service Mesh と組み合わせると最高性能。 |
| 可観測性 | 各ベンダーのネイティブ SDK は 1 行で有効化可能。OpenTelemetry Collector を共通レイヤに置くとベンダー横断が容易。 |
| コスト・無料枠 | 無料枠は年次更新があるため、公式ページを定期確認し、予算アラートとリソースタグで漏れ防止。 |
| マイグレーション | Strangler Fig パターンで段階的にクラウドへ移行し、SLO を守りつつインフラ削減を実現。 |
最終アクション:本ガイドのチェックリストをプロジェクトチームでレビューし、パフォーマンス × 可観測性 × コスト のスコアが最も高い組み合わせを PoC(Proof‑of‑Concept)として 2 週間以内に実装・評価することを推奨します。