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 のセキュリティ強化
- カスタムサービスアカウント を使う(デフォルト SA は強権限)
- Binary Authorization で署名付きイメージのみデプロイ
- Private Pool でオンプレ依存ビルド
- Workload Identity Federation で外部 CI から鍵なし認証
- Provenance(来歴) を SLSA 準拠で取得
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
- Promotion:
gcloud deploy releases promote --release=REL --to-target=prod
- Rollback:
gcloud deploy rollbacks create --release=REL で前バージョンへ即時切戻し
- Approval: 本番手前に承認ステップを挿入可能
試験頻出: 「コンプライアンス上、本番デプロイに承認が必要」→ 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 の典型的なユースケース
- B2B / B2C API のマネタイズ: 利用量に応じた課金
- 既存レガシー SOAP/REST のラッピング: モダン化
- マルチクラウド API 統合: GCP / AWS / Azure の API を統一ゲートウェイ経由
- マイクロサービス公開: 外部公開用の 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 テスト
- Firebase Test Lab: 実機・仮想デバイスでモバイルアプリ自動テスト
- Cloud Build + Selenium/Cypress: Web UI テスト
- Playwright + Cloud Run for Jobs: 並列 E2E
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 の安全運用
- Service Account に最小権限:
roles/owner は避け、必要な API ごとに付与
- CI 内でのみ apply: 個人 PC で apply しない
terraform plan の差分を必ず PR レビュー
- Sensitive 変数は Secret Manager から取得
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 化:
terraform import で 1 個ずつ
- Terraformer で一括エクスポート(GCP リソース → HCL)
9. データベース移行の設計
Database Migration Service の詳細設計
| 観点 |
ポイント |
| 接続性 |
Public IP / Private IP(VPC Peering)/ Reverse SSH Tunnel / Interconnect |
| 同期方式 |
フルロード → CDC(バイナリログ/WAL) |
| ダウンタイム |
カットオーバー時の数秒〜数分のみ |
| 整合性 |
バイトレベルではなく論理整合性、Checksum 検証可 |
| 制約 |
一部 DDL/拡張機能は要対応(PostgreSQL 拡張など) |
Datastream の活用シナリオ
- 既存 OLTP → BigQuery 分析
Oracle (オンプレ) → Datastream → BigQuery
- マイクロサービス間の DB 同期
PostgreSQL → Datastream → Cloud Storage / Pub/Sub
- 移行期間中の継続同期
旧 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 へモダナイゼーション。
対応ソース:
- Linux VM(オンプレ VMware、GCE、AWS、Azure)
- Windows VM(IIS 中心)
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 秒待機
...(指数バックオフ + ジッター)
- クライアントライブラリは 指数バックオフ + ジッター を内蔵
- リトライ対象: 5xx、429(Too Many Requests)、一部 408
- リトライ不可: 4xx 系(認証エラー、Bad Request など)
冪等性(Idempotency)
| 状況 |
対策 |
| POST で作成 |
Idempotency Key ヘッダ送信 |
| Pub/Sub Publisher |
Ordered Delivery + Deduplication ID |
| Cloud Functions |
At-least-once 配信前提で設計 |
| BigQuery Insert |
insertId を指定 |
クォータと制限
- クォータ超過: 429 が返る → 指数バックオフ
- API Quotas ページで上限確認
- 必要に応じて クォータ増加申請
- VPC SC 経由 で外部漏えい防止
バッチング・ページング
| 操作 |
推奨 |
| 大量 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 との使い分け
- gRPC: 高性能、ストリーミング、Spanner / Bigtable / Pub/Sub などは内部 gRPC
- REST: 互換性重視、ブラウザから直接呼び出し可能
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 チーム並走
- A: モノリス + Cloud Build 1 パイプライン → 待ちが発生
- B: マイクロサービス + チームごとの Cloud Build トリガー → 並行可能、運用は複雑
→ B を採用(並行性 > 運用シンプル)
ケース 2: Terraform vs Config Connector
要件: GKE 中心、GitOps 徹底、運用チームは K8s に慣れている
- A: Terraform CI で apply
- B: Config Connector + Argo CD
→ B を採用(K8s ネイティブで GitOps)
ケース 3: Apigee vs API Gateway
要件: 社内マイクロサービス公開、認証は IAM、軽量に始めたい
- A: Apigee → オーバースペック
- B: API Gateway + Cloud Run → 軽量、Cloud 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) |
次のステップ