02_応用

Section 5: 実装管理 — 🔧 応用編

対象: 実務 3-5 年 / GCP 経験あり / デプロイ戦略・Apigee 詳細・Terraform 設計・移行ツールの選定 を深掘りしたい人。 目標: 試験で問われる「正しいツール選定」と「実装の意思決定」を高精度で出せるようになる。


1. Cloud Build を実務で使いこなす

Cloud Build の選定軸

観点 詳細
トリガー Push、PR、タグ、Pub/Sub、手動、スケジュール
マシン種別 E2-medium(デフォルト)〜 N1-highcpu-32(大規模)
Private Pool プライベート VPC 内でビルド(オンプレ DB 参照可)
並列ステップ waitFor: ["-"] で同時実行
キャッシュ Kaniko / GCS / Docker Layer キャッシュ
シークレット Secret Manager 連携
代替ツール GitHub Actions、GitLab CI、CircleCI、Jenkins

マルチステージビルドの実践

steps:
  # 1. テスト
  - name: 'gcr.io/cloud-builders/go'
    args: ['test', './...']
    id: 'test'

  # 2. コンテナビルド(test 完了待ち)
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', '${_IMAGE}:${SHORT_SHA}', '.']
    waitFor: ['test']
    id: 'build'

  # 3. 脆弱性スキャン(並列)
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['artifacts', 'docker', 'images', 'scan', '${_IMAGE}:${SHORT_SHA}']
    waitFor: ['build']

  # 4. Cloud Deploy へ受渡し
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    args: ['gcloud', 'deploy', 'releases', 'create', 'rel-${SHORT_SHA}',
           '--delivery-pipeline=app-pipeline',
           '--region=asia-northeast1']

substitutions:
  _IMAGE: 'asia-docker.pkg.dev/PROJECT/repo/app'

options:
  logging: CLOUD_LOGGING_ONLY
  machineType: 'E2_HIGHCPU_8'

Cloud Build のセキュリティ強化


2. Cloud Deploy の進行管理

主要オブジェクト

Delivery Pipeline ──┬── Target: dev
                    ├── Target: staging
                    └── Target: prod

Release ─── 各ターゲットへの Rollout を順次実行

delivery-pipeline.yaml の例

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: app-pipeline
serialPipeline:
  stages:
    - targetId: dev
      profiles: [dev]
    - targetId: staging
      profiles: [staging]
      strategy:
        canary:
          runtimeConfig:
            cloudRun:
              automaticTrafficControl: true
          canaryDeployment:
            percentages: [10, 50]
            verify: true
    - targetId: prod
      profiles: [prod]
      strategy:
        canary:
          canaryDeployment:
            percentages: [5, 25, 50]
            verify: true

Cloud Deploy で使えるデプロイ戦略

戦略 対応 用途
Standard Cloud Run / GKE / Anthos 一括置換
Canary(自動) Cloud Run トラフィック割合を段階増やす
Canary(手動) GKE サービス分け+手動進行
Custom Canary GKE カスタムフェーズ

Promotion と Rollback

試験頻出: 「コンプライアンス上、本番デプロイに承認が必要」→ Cloud Deploy の Approval


3. Artifact Registry の高度な使い方

機能 用途
Remote Repository Docker Hub / Maven Central のキャッシュ
Virtual Repository 複数リポを 1 URL に統合
CMEK 暗号化 コンプラ要件
VPC-SC 境界 リーク防止
脆弱性スキャン 自動スキャン、CVE 検出
Container Analysis メタデータ・SBOM 管理
Binary Authorization 連携 署名検証してデプロイ

Binary Authorization の流れ

1. イメージビルド (Cloud Build)
2. 脆弱性スキャン (Container Analysis)
3. 検証ポリシー通過 → Attestor が署名
4. Cloud Deploy / GKE / Cloud Run が署名検証
5. 検証 OK のみデプロイを許可

「サプライチェーン攻撃対策」「未署名イメージのデプロイを防ぐ」→ Binary Authorization


4. デプロイ戦略の詳細

Blue-Green の実装パターン

プラットフォーム 実装
Cloud Run --no-traffic で新リビジョン → gcloud run services update-traffic --to-revisions=NEW=100
GKE 2 つの Deployment を並走、Service のセレクタを切替
Compute Engine 2 つの MIG、Load Balancer のバックエンド入替
App Engine 2 バージョン並走、gcloud app services set-traffic

Canary の実装パターン

プラットフォーム 実装
Cloud Run --traffic NEW=10,OLD=90、徐々に上げる
GKE Istio / Anthos Service Mesh で 5%/25%/50%/100%
GKE Argo Rollouts で自動進行
App Engine traffic-split で割合変更

Feature Flag

コードはデプロイ済みだが、機能を 動的に on/off する仕組み。

ツール 概要
Firebase Remote Config モバイル / Web 向け
App Config(外部) LaunchDarkly、Split、Unleash 等

試験では「機能切替を即座にコード変更なしで」→ Feature Flag 系を想起。

A/B テストとの違い

観点 Canary A/B テスト
目的 デプロイの安全性 機能の効果測定
期間 短期間(数分〜時間) 長期間(日〜週)
比較 旧版 vs 新版(同機能) 機能 A vs 機能 B

5. Apigee 詳細

Apigee のエディション

エディション 用途
Apigee Edge / Apigee X(SaaS) フルマネージド、Google 運用
Apigee Hybrid コントロールプレーンは Google、ランタイムはオンプレ/他クラウド GKE

Apigee の主要コンセプト

コンセプト 内容
API Proxy バックエンド API の前段プロキシ
Policy プロキシで実行する処理(認証、変換、レート制限など)
Product API を パッケージ化(複数 Proxy をまとめる)
Developer / App API キーを受け取る単位
Environment dev / staging / prod の論理環境
Flow リクエスト/レスポンスの処理パイプライン

代表的なポリシー

ポリシー 用途
OAuthV2 / VerifyAPIKey 認証
VerifyJWT / GenerateJWT JWT 検証・発行
Quota レート制限(呼出回数)
SpikeArrest 突発スパイク防御
AssignMessage / XML/JSON Transform リクエスト変換
ResponseCache キャッシュ
ServiceCallout 別 API 呼出
MessageLogging ロギング

Apigee の典型的なユースケース

  1. B2B / B2C API のマネタイズ: 利用量に応じた課金
  2. 既存レガシー SOAP/REST のラッピング: モダン化
  3. マルチクラウド API 統合: GCP / AWS / Azure の API を統一ゲートウェイ経由
  4. マイクロサービス公開: 外部公開用の API ゲートウェイ層

Apigee vs API Gateway vs Cloud Endpoints の選定(応用)

要件 推奨
開発者ポータル必須 Apigee
マネタイズ・課金 Apigee
複雑なポリシー(変換、JWT、Quota) Apigee
サーバーレス API の単純公開(Cloud Run/Functions) API Gateway
低コスト、簡易管理 API Gateway
gRPC / OpenAPI 中心、GKE バックエンド Cloud Endpoints
ESPv2(拡張サーバープロキシ) Cloud Endpoints

6. テストフレームワークと負荷テスト

負荷テストツールの比較

ツール 言語 特徴
Locust Python コードベースシナリオ、Web UI、分散実行
JMeter Java GUI、レガシー、プラグイン豊富
k6 JavaScript 開発者寄り、CLI、Cloud Native
Gatling Scala 高負荷、HTML レポート
Vegeta Go シンプルな CLI

GCP 上で負荷テストする選択肢

方法 用途
GKE で Locust を分散実行 大規模・カスタマイズ自由
Cloud Run でツール実行 小〜中規模、コスト効率
Cloud Build からスクリプト CI 内負荷テスト
k6 Cloud / Locust Cloud SaaS、運用負担なし
Cloud Load Balancing 用シナリオ エンドツーエンド検証

モバイル/UI テスト


7. Cloud Emulators の運用

各エミュレータの起動と接続

# Pub/Sub
gcloud emulators pubsub start --host-port=localhost:8085
export PUBSUB_EMULATOR_HOST=localhost:8085
export PUBSUB_PROJECT_ID=test-project

# Firestore
gcloud emulators firestore start --host-port=localhost:8080
export FIRESTORE_EMULATOR_HOST=localhost:8080

# Bigtable
gcloud emulators bigtable start --host-port=localhost:8086
export BIGTABLE_EMULATOR_HOST=localhost:8086

# Spanner
gcloud emulators spanner start --host-port=localhost:9010
export SPANNER_EMULATOR_HOST=localhost:9010

Emulator の制約と注意点

サービス 制約
Bigtable 永続化なし(停止で消える)、Replication 非対応
Spanner 単一インスタンス、複雑な機能の一部非対応
Pub/Sub サブスクリプション設定は維持されないことがある
Firestore セキュリティルールテスト可能、Composite Index 制限

CI での使い方

# cloudbuild.yaml の例
steps:
  - name: 'google/cloud-sdk:emulators'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        gcloud emulators firestore start --host-port=localhost:8080 &
        export FIRESTORE_EMULATOR_HOST=localhost:8080
        npm test

試験頻出: 「テスト時の課金回避」「ローカル開発」→ Cloud Emulators


8. Terraform 実践(応用)

Terraform の構造化

terraform/
├── modules/
│   ├── network/        # VPC モジュール
│   ├── gke/            # GKE モジュール
│   └── monitoring/
├── envs/
│   ├── dev/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── backend.tf
│   ├── staging/
│   └── prod/
└── shared/
    └── iam.tf

State 管理

Backend 用途
GCS Backend 推奨。ロック対応、暗号化、バージョニング
Terraform Cloud SaaS、状態管理 + リモート実行
ローカル 個人検証のみ
terraform {
  backend "gcs" {
    bucket  = "my-tfstate-bucket"
    prefix  = "envs/prod"
  }
}

IAM での Terraform の安全運用

Config Connector との使い分け

観点 Terraform Config Connector
表現 HCL Kubernetes CRD (YAML)
実行環境 CLI / CI GKE クラスタ内コントローラ
GitOps Argo CD / Flux と組合せ K8s ネイティブで GitOps と相性◎
学習コスト 高(K8s 知識前提)
推奨 汎用、マルチクラウド GKE 中心、GitOps 徹底

「GitOps 徹底で K8s ネイティブ管理」→ Config Connector「汎用・他クラウド併用」→ Terraform

Terraformer / Import

既存リソースを Terraform 化:


9. データベース移行の設計

Database Migration Service の詳細設計

観点 ポイント
接続性 Public IP / Private IP(VPC Peering)/ Reverse SSH Tunnel / Interconnect
同期方式 フルロード → CDC(バイナリログ/WAL)
ダウンタイム カットオーバー時の数秒〜数分のみ
整合性 バイトレベルではなく論理整合性、Checksum 検証可
制約 一部 DDL/拡張機能は要対応(PostgreSQL 拡張など)

Datastream の活用シナリオ

  1. 既存 OLTP → BigQuery 分析
    Oracle (オンプレ) → Datastream → BigQuery
    
  2. マイクロサービス間の DB 同期
    PostgreSQL → Datastream → Cloud Storage / Pub/Sub
    
  3. 移行期間中の継続同期
    旧 DB ─ Datastream ─→ 新 Spanner (両方ライブ)
    

移行戦略と DMS/Datastream

移行戦略(6R) 推奨ツール
Rehost M4CE / Migrate to VMs
Replatform(DB のみマネージド化) DMS
Refactor(リアルタイム分析) Datastream + BigQuery
Repurchase (対象外)

10. システム移行と移行プログラム管理

Migration Center

旧 Stratozone を統合。移行アセスメント・計画・実行 の中核。

[Phase 1] Discovery       → mCollector で資産棚卸し
[Phase 2] Assessment      → 適合度評価、コスト試算
[Phase 3] Recommendation  → 6R 戦略の推奨
[Phase 4] Plan            → 移行ウェーブ計画
[Phase 5] Execution       → M4CE / DMS / M2C との連携

Migrate to Containers (M2C)

VM を解析して Dockerfile / K8s マニフェスト を自動生成。GKE / Cloud Run へモダナイゼーション。

対応ソース:

Migration Center の他サービスとの連携

ステップ 連携サービス
Discovery mCollector、vSphere agent
Assessment Migration Center 内蔵
Network 検討 VPC、HA VPN、Interconnect
DB 移行 Database Migration Service
VM 移行 Migrate for Compute Engine
アプリ → Container Migrate to Containers
大量データ Storage Transfer Service / Transfer Appliance

11. Cloud Shell Editor と Cloud Code の使い分け

Cloud Shell Editor

観点 内容
起動 ブラウザのみ、即起動
環境 フルマネージドな Linux + gcloud / kubectl / terraform
Gemini Gemini Code Assist 統合
用途 環境構築不要の素早い開発・検証
制約 5GB ホーム、長時間放置でセッション切断

Cloud Code(ローカル IDE 拡張)

観点 内容
対応 IDE VS Code、IntelliJ、Cloud Shell Editor
機能 GKE / Cloud Run / Cloud Functions テンプレ、デバッガ、Skaffold
Gemini Gemini Code Assist 統合(補完、説明、生成、レビュー)
用途 フル機能 IDE で本格開発

Cloud Workstations(補足)

ブラウザでアクセスできる マネージド開発環境。Cloud Shell より高性能で、専用ネットワーク内に配置可能。

観点 Cloud Shell Cloud Workstations
起動速度 即時 数分
永続化 5GB フル永続 PVC
性能 カスタマイズ可(CPU/GPU/メモリ)
ネットワーク パブリック プライベート VPC
用途 一時オペ・学習 本格開発、規制環境

12. Google API 呼び出しのベストプラクティス

認証戦略

環境 認証
ローカル開発 gcloud auth application-default login(ADC)
GCE / GKE / Cloud Run / Cloud Functions メタデータサーバ経由の SA(自動)
GKE Pod Workload Identity(K8s SA ↔ GCP SA)
オンプレ / 他クラウド Workload Identity Federation(OIDC / SAML)
緊急時のみ SA Key(漏えいリスク注意)

リトライ戦略

1 回目 失敗 → 1 秒待機
2 回目 失敗 → 2 秒待機
3 回目 失敗 → 4 秒待機
...(指数バックオフ + ジッター)

冪等性(Idempotency)

状況 対策
POST で作成 Idempotency Key ヘッダ送信
Pub/Sub Publisher Ordered Delivery + Deduplication ID
Cloud Functions At-least-once 配信前提で設計
BigQuery Insert insertId を指定

クォータと制限

バッチング・ページング

操作 推奨
大量 GET ページング (pageToken)
大量 INSERT バッチ API(List / BulkInsert)
BigQuery 取込 バッチ Load Job、Storage Write API
Pub/Sub Publish Publisher のバッチ設定

13. クライアントライブラリと REST API の使い分け

場合 推奨
言語サポートあり クライアントライブラリ
シェルスクリプト gcloud / curl + REST
マイナーな言語 REST + 自前 OAuth トークン取得
プレビュー API REST(クライアントが未対応のことが多い)

REST API の基本

# アクセストークン取得
TOKEN=$(gcloud auth print-access-token)

# Compute Engine 一覧
curl -H "Authorization: Bearer $TOKEN" \
  https://compute.googleapis.com/compute/v1/projects/PROJECT/aggregated/instances

gRPC との使い分け


14. Gemini Code Assist と Gemini Cloud Assist の使い分け

観点 Gemini Code Assist Gemini Cloud Assist
場面 IDE 内(VS Code / IntelliJ / Cloud Shell Editor) GCP コンソール内
機能 コード補完、説明、テスト生成、Diff レビュー アーキ設計支援、トラブルシュート、コマンド生成、ログ要約
対象 開発者 アーキテクト、運用者、初学者
価格 Standard / Enterprise Standard / Enterprise

試験で問われやすい組合せ

シナリオ 推奨
「Terraform を書くのを手伝って」 Gemini Code Assist(IDE 内)
「障害発生時のログ解析を手伝って」 Gemini Cloud Assist(コンソール内)
「gcloud コマンドを忘れた、教えて」 Gemini Cloud Assist
「アーキ図のドラフトを作って」 Gemini Cloud Assist
「単体テストを生成して」 Gemini Code Assist

15. 実装管理のトレードオフ例

ケース 1: モノリス vs マイクロサービス CI/CD

要件: 月 100 デプロイ、3 チーム並走

B を採用(並行性 > 運用シンプル)

ケース 2: Terraform vs Config Connector

要件: GKE 中心、GitOps 徹底、運用チームは K8s に慣れている

B を採用(K8s ネイティブで GitOps)

ケース 3: Apigee vs API Gateway

要件: 社内マイクロサービス公開、認証は IAM、軽量に始めたい

B を採用

→ ただし外部開発者向けポータルが必要なら Apigee に切替。


16. 章末まとめ

必ず覚える「実装管理の翻訳パターン」

要件 デフォルト解
CI Cloud Build
成果物保管 Artifact Registry
CD(環境間進行) Cloud Deploy
デプロイ戦略(即時切戻し) Blue-Green
デプロイ戦略(段階リリース) Canary
API フルライフサイクル Apigee
サーバーレス API ゲートウェイ API Gateway
負荷テスト Locust / JMeter / k6
DB 移行(最小ダウン) Database Migration Service
CDC ストリーミング Datastream
VM → Container Migrate to Containers
大量データ移行 Transfer Appliance
移行アセスメント Migration Center
ローカルテスト Cloud Emulators
IaC 汎用 Terraform
IaC K8s ネイティブ Config Connector
ブラウザ開発 Cloud Shell Editor
IDE 拡張 Cloud Code
AI 支援(IDE) Gemini Code Assist
AI 支援(コンソール) Gemini Cloud Assist
認証(推奨) ADC + Workload Identity (Federation)

次のステップ