01_基礎

Section 5: 実装管理 — 📘 基礎編

対象: 実務 1-2 年・GCP 初学者 / クラウド実装の標準ツールを初めて学ぶ人。 目標: CI/CD、IaC、API 管理、Cloud Shell / gcloud の基本を把握し、それぞれの役割を即答できる。


1. アプリ/インフラのデプロイとは

CI/CD パイプラインの全体像

コード変更 (git push)
   ↓
Cloud Build (ビルド・テスト・コンテナ化)
   ↓
Artifact Registry (イメージ保管)
   ↓
Cloud Deploy (環境ごとに進行: dev → staging → prod)
   ↓
GKE / Cloud Run / Compute Engine (実行)
   ↓
Cloud Monitoring / Logging (観測)

CI と CD の違い

用語 意味 代表サービス
CI(継続的インテグレーション) コード変更を自動ビルド・テスト Cloud Build、GitHub Actions、GitLab CI
CD(継続的デリバリ) 検証済みアーティファクトを各環境に配布 Cloud Deploy、Argo CD、Spinnaker
デプロイ 実行環境に配置 Cloud Run / GKE / GCE

CI で「動くこと」を保証し、CD で「安全に届ける」フェーズを分けて考えるのが基本。


2. Cloud Build / Artifact Registry / Cloud Deploy

Cloud Build(CI 担当)

YAML(cloudbuild.yaml)で ビルドステップ を定義する、フルマネージドの CI サービス。

主な特徴:

# cloudbuild.yaml の例
steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'us-docker.pkg.dev/$PROJECT_ID/repo/app:$SHORT_SHA', '.']
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'us-docker.pkg.dev/$PROJECT_ID/repo/app:$SHORT_SHA']
images:
  - 'us-docker.pkg.dev/$PROJECT_ID/repo/app:$SHORT_SHA'

Artifact Registry(成果物リポジトリ)

コンテナイメージ / OS パッケージ / 言語パッケージ(Maven / npm / Python / Go)を保管する 次世代リポジトリ

項目 内容
Container Registry(gcr.io)
Artifact Registry(*-docker.pkg.dev
サポート形式 Docker / OCI / Maven / npm / Python / Go / Apt / Yum
利点 リージョナル、IAM 統合、脆弱性スキャン、リモートリポ、仮想リポ

新規はすべて Artifact Registry を使う。Container Registry は廃止予定。

Cloud Deploy(CD 担当)

GitOps スタイルの 進行制御マネージドサービスdelivery-pipeline.yamldev → staging → prod の進行を宣言。

主な機能:


3. デプロイ戦略の基礎

主要なデプロイ戦略

戦略 内容 リスク 適用例
Rolling Update 順次置換 一般的な Web アプリ
Blue-Green 旧(Blue)と新(Green)を並走、切替 厳密な切戻しが必要
Canary 一部トラフィックだけ新版に流す ユーザー影響を早期検知
Recreate 全停止 → 新版起動 ステートフル少数
[Rolling]
旧旧旧旧旧 → 旧旧旧旧新 → 旧旧旧新新 → 旧旧新新新 → 旧新新新新 → 新新新新新

[Blue-Green]
Blue: 旧旧旧旧旧 (active)        Blue: 旧旧旧旧旧 (idle)
Green: ----- (待機)        →     Green: 新新新新新 (active)
LB を Blue → Green に切替

[Canary]
旧旧旧旧旧 (95%) + 新 (5%)  →  旧旧旧旧 (80%) + 新新 (20%)  →  新新新新新 (100%)

試験頻出: 「即時切戻しが必要」→ Blue-Green、「段階リリース」→ Canary と即答できるように。


4. API 管理(Apigee と API Gateway)

なぜ API 管理が必要か

API を多数公開すると、認証 / レート制限 / バージョニング / 課金 / 監視 を一元管理しないと運用が破綻する。これを担うのが API Management

Apigee / API Gateway / Cloud Endpoints の使い分け

サービス 用途 特徴
Apigee フルライフサイクル API 管理 エンタープライズ向け、開発者ポータル、マネタイズ、複雑なポリシー
API Gateway サーバーレス API ゲートウェイ 軽量、Cloud Run/Functions と統合、サーバーレス向け
Cloud Endpoints gRPC/OpenAPI ベースの API 管理 軽量、GKE/GCE/App Engine と統合(やや古い)
            シンプル ←───────────────→ 高機能
Cloud Endpoints    API Gateway        Apigee
   - gRPC               - サーバーレス     - 開発者ポータル
   - 軽量                - Cloud Run        - 課金 / マネタイズ
                       - Cloud Functions   - 詳細ポリシー
                                          - フルライフサイクル

Apigee の主要機能(概観)

「API のフルライフサイクル管理」「外部開発者向けポータル」「マネタイズ」→ Apigee と即答。


5. テストの基礎

テストの階層(テスティングピラミッド)

        △
       /  \
      / E2E \              ← 少数・遅い・本物に近い
     /------\
    / Integ.  \            ← 中程度
   /----------\
  /   単体テスト    \      ← 多数・速い・モック中心
 /---------------\

テスト種別と用途

種別 内容 代表ツール
単体テスト(Unit Test) 関数・クラス単位 JUnit、pytest、Jest、Go test
統合テスト(Integration Test) 複数コンポーネント連携 Testcontainers、Cloud Emulators
E2E テスト 本番に近い環境で全体動作 Cypress、Playwright、Selenium
負荷テスト(Load Test) 想定負荷で性能確認 Locust、JMeter、k6、Gatling
ストレステスト 限界を超えた負荷で耐性確認 同上
カオス試験 故障注入で回復力確認 Chaos Toolkit、Litmus

Cloud Emulators

Bigtable / Spanner / Pub/Sub / Firestore はローカル実行できる エミュレータ が提供されている。

gcloud emulators bigtable start
gcloud emulators spanner start
gcloud emulators pubsub start
gcloud emulators firestore start

利点:

試験頻出: 「テスト用にローカル実行したい」→ Cloud Emulators


6. データ・システム移行ツール

主要な移行サービス

サービス 用途
Database Migration Service (DMS) DB 移行(オンプレ→Cloud SQL/AlloyDB/Spanner、最小ダウン)
Datastream CDC(変更データキャプチャ)でリアルタイム同期
Migrate to Containers (M2C) VM ワークロードをコンテナ化して GKE/Cloud Run へ
Migrate for Compute Engine (M4CE) VMware/AWS/Azure VM を Compute Engine へ
Storage Transfer Service GCS 間 / S3 / Azure Blob / HTTP からデータ転送
Transfer Appliance 物理デバイス郵送による大量データ移行(>100TB)
BigQuery Data Transfer Service SaaS / 他 DWH から BigQuery にデータ取込
Migration Center 移行アセスメント・計画統合プラットフォーム(旧 Stratozone)

Database Migration Service(DMS)の流れ

1. ソース DB を登録(オンプレ / 他クラウド / 別 GCP)
2. 接続プロファイル作成(IP/Interconnect/VPN/Reverse SSH Tunnel)
3. 移行ジョブ起動(フルロード + CDC レプリケーション)
4. 検証(データ整合性、ラグ)
5. カットオーバー(読み書きを Cloud SQL に切替)

サポート対象(試験頻出):

Datastream(CDC ストリーミング)

観点 内容
用途 既存 DB の変更を リアルタイム に BigQuery / Cloud Storage に流す
ソース Oracle, MySQL, PostgreSQL, SQL Server, AlloyDB
用途例 分析パイプライン、データレイク構築、移行中の同期維持

移行中も書き込みを止めず、最後にカットオーバー」→ DMS、「継続的にレプリケーション」→ Datastream。


7. Gemini Cloud Assist(最新)

GCP コンソールに組み込まれた AI アシスタント。設計・実装・運用の各場面で支援する。

場面 支援内容
設計 アーキ提案、ベストプラクティス参照
実装 gcloud コマンド生成、Terraform スニペット生成、コードレビュー
運用 ログ解析支援、エラー原因推定、修復手順提案
トラブルシュート 障害時の関連リソース横断検索
ドキュメント 自然言語検索、要約

類似サービスとの違い

サービス 役割
Gemini Cloud Assist GCP 運用全般 の AI 支援(コンソール内)
Gemini Code Assist IDE 内のコード補完(VS Code / IntelliJ / Cloud Shell Editor)
Vertex AI Gemini API 開発者向け LLM API

8. Cloud Shell と Cloud Code

Cloud Shell

ブラウザから即起動できる マネージド開発環境gcloud / gsutil / bq / kubectl / terraform などがプリインストール。

構成要素 内容
Cloud Shell Terminal ブラウザの bash シェル、5GB の永続 $HOME、無料
Cloud Shell Editor ブラウザ版 VS Code(Theia ベース)、シンタックスハイライト、デバッガ
Boost Mode 一時的に高速化(4 コア/8GB)

用途:

Cloud Code

ローカル IDE(VS Code / IntelliJ)の拡張機能。

主な機能:

「ローカル IDE で K8s/Cloud Run 開発」→ Cloud Code、「ブラウザで gcloud 実行」→ Cloud Shell と即答。


9. gcloud / gsutil / bq の役割

CLI 担当
gcloud GCP リソース全般(プロジェクト、Compute、GKE、IAM 等)
gsutil Cloud Storage 専用(旧、現在は gcloud storage に置き換え推奨)
bq BigQuery 専用
kubectl Kubernetes 操作(GKE)
terraform IaC(GCP プロバイダ)

よく使う基本コマンド

# gcloud
gcloud auth login                              # 認証
gcloud config set project PROJECT_ID           # プロジェクト切替
gcloud compute instances list                  # VM 一覧
gcloud run deploy my-app --image=IMAGE         # Cloud Run デプロイ
gcloud iam service-accounts list               # SA 一覧

# gsutil / gcloud storage
gsutil cp file.txt gs://bucket/                # アップロード
gcloud storage cp file.txt gs://bucket/        # 新コマンド(推奨)
gcloud storage ls gs://bucket/

# bq
bq query --use_legacy_sql=false 'SELECT 1'
bq mk --dataset mydataset
bq load --source_format=CSV ds.table file.csv

新コマンド: gsutil の機能は gcloud storage に統合されつつある。CI/CD では gcloud storage を推奨。


10. Infrastructure as Code(IaC)の基礎

IaC のメリット

メリット 説明
再現性 環境を同じ構成で再構築できる
バージョン管理 Git で変更履歴を追跡
レビュー可能 PR でインフラ変更をレビュー
自動化 CI/CD でデプロイ
ドキュメント性 コードが「現在の構成」のドキュメントになる

GCP の IaC 選択肢

ツール 概要
Terraform HashiCorp 製、最も普及、マルチクラウド対応
Config Connector Kubernetes CRD で GCP リソース管理(GitOps と相性)
Pulumi 一般言語(TS/Python/Go)で IaC
Deployment Manager GCP 純正(レガシー、新規は非推奨)

Terraform の基本

# main.tf
provider "google" {
  project = "my-project"
  region  = "asia-northeast1"
}

resource "google_storage_bucket" "logs" {
  name     = "my-project-logs"
  location = "ASIA-NORTHEAST1"
  uniform_bucket_level_access = true
}

resource "google_cloud_run_v2_service" "app" {
  name     = "my-app"
  location = "asia-northeast1"
  template {
    containers {
      image = "us-docker.pkg.dev/my-project/repo/app:v1"
    }
  }
}

実行フロー:

terraform init   → プロバイダ・モジュール初期化
terraform plan   → 差分プレビュー
terraform apply  → 実行
terraform destroy → 破棄

試験頻出: 「IaC(GCP)」→ Terraform。Deployment Manager は古い(出題は減)。


11. Google API クライアントライブラリの基礎

GCP の操作は REST API が本体。クライアントライブラリ を使うとリトライ・認証・ページング等を自動化できる。

言語 ライブラリ
Python google-cloud-*google-cloud-storage 等)
Java com.google.cloud:google-cloud-*
Go cloud.google.com/go/*
Node.js @google-cloud/*
.NET Google.Cloud.*
PHP / Ruby 同様

認証の基本

認証方式 用途
ADC(Application Default Credentials) デフォルト推奨。実行環境の認証を自動取得
Service Account Key (JSON) 旧式、漏えいリスクあり、極力避ける
Workload Identity GKE 内 Pod を SA に紐付け(鍵不要)
Workload Identity Federation オンプレ / 他クラウドから OIDC で GCP 認証(鍵不要)
# Python の例
from google.cloud import storage
client = storage.Client()  # ADC で自動認証
bucket = client.bucket("my-bucket")

ベストプラクティス(基本)

  1. ADC を使う(環境別に自動切替)
  2. 指数バックオフ でリトライ(クライアントライブラリは内蔵)
  3. Idempotency を意識(重複呼出に対する冪等性)
  4. Quotas を意識(429 エラー → バックオフ)
  5. 同時並列度 を制限(多数の API を叩きすぎない)
  6. Service Account のキー直書きは避ける

12. まとめ — 実装管理の判断フロー

1. アプリ/インフラのデプロイ方法を決める
   - CI: Cloud Build / GitHub Actions
   - 成果物: Artifact Registry
   - CD: Cloud Deploy(GitOps)
   - 戦略: Rolling / Blue-Green / Canary
   ↓
2. API を公開するなら API 管理を選定
   - フルライフサイクル → Apigee
   - サーバーレス軽量 → API Gateway
   ↓
3. テスト戦略
   - 単体 → 言語標準
   - 統合 → Cloud Emulators
   - 負荷 → Locust / JMeter / k6
   ↓
4. 移行ツール
   - DB → Database Migration Service / Datastream
   - VM → Migrate for Compute Engine
   - VM→Container → Migrate to Containers
   - 大量データ → Transfer Appliance
   ↓
5. プログラマブル操作
   - 一時オペ → Cloud Shell
   - IDE 開発 → Cloud Code + Gemini Code Assist
   - インフラ → Terraform / Config Connector
   - 認証 → ADC + Workload Identity(Federation)

次のステップ