gcp-network:~/learn$ traceroute infra6 hops · 初学者向け · 最終更新 2026-06
Google Cloud · Hands-on Learning Path

クラウドの足回りを、
一筆書きで理解する。

BigQuery のクエリから Cloud SQL への移行、VPC 設計、監視、Kubernetes のデプロイ戦略まで。 Google Cloud の network とインフラを 6 つの hop に分け、 初学者が手を動かしながら最短ルートで通過できるように再構成した実践ガイドです。

SQL / BigQueryCloud SQLVPC ネットワークCloud MonitoringGKE / Kubernetes
06
学習 hop(パート)
4
デプロイ戦略を比較
8NIC
マルチ NIC VM の上限
0
SELECT * を避けて節約
10.0.1.0/24 · BIGQUERY

Part 1 — SQL の基礎と BigQuery

データに「質問」を投げる言語=SQL を理解し、Google のサーバーレス分析基盤 BigQuery で実際にクエリを走らせるところから始めます。


1-1 SQL とはなにか

SQL(Structured Query Language)は、構造化されたデータに「質問」を投げかけるための標準言語です。スプレッドシートに似たテーブル(表)形式のデータを操作します。

用語意味
データベース1 つ以上のテーブルの集合体london_bicycles
テーブル行と列で構成されたデータ本体cycle_hire
カラム(列)データの属性・種類start_station_name
レコード(行)1 件分のデータある 1 回のサイクリング記録
BigQuery のデータ階層

プロジェクトデータセットテーブル の 3 階層で構成されます。テーブルを指す時は project.dataset.table の形式で書きます。

1-2 基本キーワード早見表

キーワード役割読み方のコツ
SELECT取得する列を指定する「〜を選ぶ」
FROM参照するテーブルを指定する「〜から」
WHERE絞り込み条件を指定する「〜の場合のみ」
GROUP BY同じ値を持つ行をまとめる「〜でグループ分け」
COUNT()行数を数える「〜を数える」
AS列やテーブルに別名をつける「〜として」
ORDER BY結果を並び替える「〜の順に並べる」

1-3 クエリの組み立てフロー

flow · query-builder

1-4 SELECT・FROM・WHERE の使い方

sql
-- 単一列の取得
SELECT end_station_name
FROM `bigquery-public-data.london_bicycles.cycle_hire`;
-- 複数列の取得(カンマ区切り)
SELECT start_station_name, duration
FROM `bigquery-public-data.london_bicycles.cycle_hire`;
-- 全列の取得(* はすべての列)
SELECT *
FROM `bigquery-public-data.london_bicycles.cycle_hire`
WHERE duration >= 1200; -- 1200秒 = 20分以上
★ Best Practice — コスト

本番環境では SELECT * を避け、必要な列だけを指定しましょう。BigQuery はスキャンした列単位で課金されるため、不要な列の取得はそのままコスト増につながります。

1-5 GROUP BY・COUNT・AS・ORDER BY

sql
-- 各出発地点からの出発回数を多い順に表示
SELECT
start_station_name,
COUNT(*) AS num_starts -- AS で列名に別名をつける
FROM `bigquery-public-data.london_bicycles.cycle_hire`
GROUP BY start_station_name -- 出発地点でグループ化
ORDER BY num_starts DESC; -- 多い順(DESC = 降順)

集計関数一覧

関数意味
COUNT(*)全行数を数える乗車回数
COUNT(col)NULL 以外の行数を数える値が入っている行
SUM(col)合計値走行距離の合計
AVG(col)平均値平均走行時間
MAX(col)最大値最長走行時間
MIN(col)最小値最短走行時間

1-6 BigQuery ハンズオン手順

flow · console-handson

BigQuery を使う際の注意点(コスト管理)

注意項目理由対策
SELECT * の多用全列スキャンで課金が増大必要な列だけを指定
大テーブルの WHERE なし実行全行スキャンが発生必ずフィルタを使う
重複クエリの実行無駄なコストが発生BigQuery のキャッシュを活用
10.0.2.0/24 · CLOUD SQL

Part 2 — Cloud SQL へのデータ移行

分析向けの BigQuery(OLAP)と、リアルタイムの読み書きが得意な Cloud SQL(OLTP)。両者の違いを理解し、CSV を介してデータを移行します。


2-1 BigQuery vs Cloud SQL 比較

比較項目BigQueryCloud SQL
用途分析・集計(OLAP)トランザクション処理(OLTP)
スケールペタバイト級テラバイト級
料金体系クエリ量・ストレージ従量インスタンス時間従量
接続方法コンソール・APIMySQL/PostgreSQL クライアント
得意なこと大量データの高速集計リアルタイムの読み書き

2-2 BigQuery → Cloud SQL 移行フロー

flow · data-migration

2-3 Cloud SQL インスタンス作成設定値

設定項目推奨値(学習用)備考
EditionEnterprise本番は Enterprise Plus も選択可
Edition PresetDevelopment本番は Production を選択
Database VersionMySQL 8.0特段の理由がなければ最新安定版
Machine Type4 vCPU / 16 GB RAMラボ環境では Development preset
AvailabilityMultiple zones本番環境では必須

2-4 Cloud Shell で Cloud SQL を操作する

bash · mysql
# Cloud SQL インスタンスに接続
gcloud sql connect my-demo --user=root --quiet
# --- MySQL プロンプト内での操作 ---
# データベース作成
CREATE DATABASE bike;
# データベースを選択してテーブルを作成
USE bike;
CREATE TABLE london1 (
start_station_name VARCHAR(255),
num INT
);
CREATE TABLE london2 (
end_station_name VARCHAR(255),
num INT
);
# データ確認
SELECT * FROM london1 LIMIT 10;
# 不要行の削除(ヘッダー行など num=0 の行を削除)
DELETE FROM london1 WHERE num = 0;
# データの挿入
INSERT INTO london1 (start_station_name, num)
VALUES ("test destination", 1);
# UNION で2テーブルを結合して検索
SELECT start_station_name AS top_stations, num
FROM london1 WHERE num > 100000
UNION
SELECT end_station_name, num
FROM london2 WHERE num > 100000
ORDER BY top_stations DESC;

SQL データ操作キーワード早見表

キーワード操作
CREATE DATABASEデータベース作成CREATE DATABASE bike;
CREATE TABLEテーブル作成CREATE TABLE t1 (col VARCHAR(255));
INSERT INTO行の挿入INSERT INTO t1 VALUES ('val');
DELETE FROM行の削除DELETE FROM t1 WHERE id=1;
UNION2 クエリの結果を結合SELECT ... UNION SELECT ...
⚠ 取り返しのつかない操作

DELETEWHERE 条件なしで実行すると全行削除になります。必ず WHERE 句を付けるか、事前に SELECT で対象を確認してから実行しましょう。

10.0.3.0/24 · VPC

Part 3 — VPC ネットワークの設計と構築

VPC は Google Cloud 内の論理的に独立したグローバルネットワーク。サブネット・ファイアウォール・VM を gcloud で組み立て、ネットワーク分離の原則を体験します。


3-1 VPC の基本概念

VPC(Virtual Private Cloud)は Google Cloud 内の論理的な独立ネットワークです。複数のリージョンにまたがるグローバルリソースとして扱われます。

コンポーネント役割
VPC ネットワーク仮想ネットワーク全体mynetwork
サブネットリージョンごとの IP アドレス範囲10.128.0.0/20
ファイアウォールルール通信の許可・拒否ルールSSH 許可
VM インスタンスサブネット内に配置される仮想マシンmynet-vm-1

3-2 Auto モード vs Custom モード

比較項目Auto モードCustom モード
サブネット作成全リージョンに自動作成手動で作成
IP アドレス範囲Google が自動割り当て自分で指定
柔軟性低い高い
推奨用途学習・プロトタイプ本番環境
default, mynetworkmanagementnet, privatenet
★ Best Practice — セキュリティ

本番環境では必ず Custom モードを使用してください。Auto モードは IP アドレス空間を自分で管理できないため、VPC Peering 時などに CIDR の競合が発生します。

3-3 ネットワーク構成の全体像

topology · multi-vpc

3-4 gcloud でネットワークを構築する

bash · gcloud
# 1. Custom VPC ネットワークの作成
gcloud compute networks create privatenet \
--subnet-mode=custom
# 2. サブネットの作成
gcloud compute networks subnets create privatesubnet-1 \
--network=privatenet \
--region=us-central1 \
--range=172.16.0.0/24
gcloud compute networks subnets create privatesubnet-2 \
--network=privatenet \
--region=europe-west1 \
--range=172.20.0.0/20
# 3. ファイアウォールルールの作成
gcloud compute firewall-rules create privatenet-allow-icmp-ssh-rdp \
--direction=INGRESS \
--priority=1000 \
--network=privatenet \
--action=ALLOW \
--rules=icmp,tcp:22,tcp:3389 \
--source-ranges=0.0.0.0/0
# 4. VM インスタンスの作成
gcloud compute instances create privatenet-vm-1 \
--zone=us-central1-a \
--machine-type=e2-micro \
--subnet=privatesubnet-1
# 5. 現在の状態を確認
gcloud compute networks list
gcloud compute networks subnets list --sort-by=NETWORK
gcloud compute firewall-rules list --sort-by=NETWORK
gcloud compute instances list --sort-by=ZONE

3-5 VPC 間の通信ルール

flow · reachability
重要な原則 — ネットワーク分離

VPC ネットワークはデフォルトで完全に分離されています。同じリージョン・同じゾーンにあっても、異なる VPC の VM は内部 IP では通信できません。内部通信を許可するには VPC Peering または Cloud VPN が必要です。

3-6 マルチ NIC VM(複数ネットワーク接続)

1 台の VM を複数の VPC に同時接続できます(最大 8 NIC)。

topology · multi-nic
注意事項詳細
サブネット IP 重複禁止各ネットワークの CIDR が重複してはいけない
デフォルトルートは eth0eth0 以外のネットワーク宛てトラフィックは eth0 経由になる場合がある
Machine Type の制限NIC 数は vCPU 数に依存(e2-standard-4 は最大 4 NIC)
bash · routing
# VM 内で実行 — ルーティングテーブルの確認
ip route
# 出力例:
# default via 172.16.0.1 dev eth0
# 10.128.0.0/20 via 10.128.0.1 dev eth2
# 10.130.0.0/20 via 10.130.0.1 dev eth1
# 172.16.0.0/24 via 172.16.0.1 dev eth0
10.0.4.0/24 · MONITORING

Part 4 — Cloud Monitoring による監視体制

VM に Ops Agent を入れ、メトリクス・ログ・アップタイムチェック・アラートを束ねる監視基盤を立ち上げます。「壊れる前に気づく」仕組みづくりです。


4-1 Cloud Monitoring の全体像

topology · observability

4-2 監視エージェントのインストール

bash · vm ssh
# Step 1: Ops Agent インストールスクリプトのダウンロード
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
# Step 2: Ops Agent のインストール(Monitoring + Logging 両方)
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
# Step 3: 動作確認
sudo systemctl status "google-cloud-ops-agent*"
★ Best Practice — 可観測性

すべての VM に Ops Agent をインストールしましょう。Agent なしでは CPU・メモリ等の詳細メトリクスが取得できず、障害時の調査が困難になります。

4-3 Apache2 Web サーバーのセットアップ

bash
# パッケージリストの更新
sudo apt-get update
# Apache2 と PHP のインストール
sudo apt-get install apache2 php7.0 -y
# Apache2 の再起動
sudo service apache2 restart

4-4 アップタイムチェックの設定

設定項目推奨値説明
ProtocolHTTPWeb サーバーの死活監視
Resource TypeURL外部 IP で監視
Check Frequency1 分頻繁に確認する
TitleLamp Uptime Checkわかりやすい名前をつける

4-5 アラートポリシーの設定フロー

flow · alerting-policy
項目ベストプラクティス
閾値誤検知が多い場合は高めに設定。初期は低めで様子を見る
通知先個人メールより Slack / PagerDuty などのチームチャンネル推奨
ドキュメントアラート発生時の対応手順(Runbook)を必ず記載する
Retest Window瞬間的なスパイクでの誤検知を防ぐため 1〜5 分を推奨

4-6 Cloud Logging でログを確認する

logs explorer filter
resource.type = "gce_instance"
resource.labels.instance_id = "INSTANCE_ID" # gce_instance では数値のインスタンス ID(VM 名ではない)
ログ種別確認できること
syslogOS レベルのシステムイベント
apache_accessWeb サーバーへのアクセス履歴
apache_errorWeb サーバーのエラー
stackdriver_agentMonitoring Agent 自体のログ
10.0.5.0/24 · GKE

Part 5 — Kubernetes デプロイメント戦略

Pod・ReplicaSet・Deployment・Service の関係を押さえ、Rolling / Canary / Blue-Green / Recreate の 4 戦略を「いつ・なぜ使うか」で選べるようになります。


5-1 Kubernetes の基本構成

topology · gke-cluster

5-2 Deployment の基本 YAML 構造

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: fortune-app-blue # Deployment の名前
spec:
replicas: 3 # Pod の数
selector:
matchLabels:
app: fortune-app # 管理対象 Pod のラベル
template:
metadata:
labels:
app: fortune-app
version: "1.0.0"
spec:
containers:
- name: fortune-app
image: "us-central1-docker.pkg.dev/.../fortune-service:1.0.0"
ports:
- containerPort: 8080

5-3 基本的な kubectl コマンド

bash · kubectl
# Deployment の作成と確認
kubectl create -f deployments/fortune-app-blue.yaml
kubectl get deployments
kubectl get replicasets
kubectl get pods
# Service の作成
kubectl create -f services/fortune-app.yaml
kubectl get services fortune-app
# スケールアップ・スケールダウン
kubectl scale deployment fortune-app-blue --replicas=5
kubectl scale deployment fortune-app-blue --replicas=3
# バージョン確認
curl http://$(kubectl get svc fortune-app \
-o=jsonpath="{.status.loadBalancer.ingress[0].ip}")/version

5-4 デプロイメント戦略の比較

戦略概要ダウンタイムリスク適用場面
Rolling Update旧 Pod を少しずつ新 Pod に入れ替えなし通常のアップデート
Canary一部ユーザーにのみ新バージョンを提供なし新機能の段階的リリース
Blue-Green旧・新環境を並行稼働し一気に切り替えなし低(即時 Rollback 可)大規模変更・安全重視
Recreate全 Pod を削除してから新 Pod を作成ありステートフルアプリ

5-5 Rolling Update

timeline · rolling-update
bash · rollout
# イメージを v2.0.0 に更新(Deployment を直接編集)
kubectl edit deployment fortune-app-blue
# エディタ内で image タグを 1.0.0 → 2.0.0 に変更して保存
kubectl rollout status deployment/fortune-app-blue # 状態確認
kubectl rollout pause deployment/fortune-app-blue # 一時停止
kubectl rollout resume deployment/fortune-app-blue # 再開
kubectl rollout history deployment/fortune-app-blue # 履歴確認
kubectl rollout undo deployment/fortune-app-blue # ロールバック

5-6 Canary デプロイメント

topology · canary
bash
# Canary Deployment の作成
kubectl create -f deployments/fortune-app-canary.yaml
# 現在のバージョン分布を確認(10回リクエスト)
for i in {1..10}; do
curl -s http://$(kubectl get svc fortune-app \
-o=jsonpath="{.status.loadBalancer.ingress[0].ip}")/version
echo
done
ポイント — 比率でトラフィック分散

Canary は Pod 数の比率でトラフィックが分散されます。Production: 3 Pod, Canary: 1 Pod → Canary に約 25% のトラフィックが流れます。

5-7 Blue-Green デプロイメント

topology · blue-green
bash
# Step 1: Blue(v1.0.0)のみにトラフィックを向ける
kubectl apply -f services/fortune-app-blue-service.yaml
# Step 2: Green(v2.0.0)Deployment を作成(まだトラフィックなし)
kubectl create -f deployments/fortune-app-green.yaml
# Step 3: v1.0.0 で提供されていることを確認
curl http://$(kubectl get svc fortune-app \
-o=jsonpath="{.status.loadBalancer.ingress[0].ip}")/version
# Step 4: Service を Green に切り替え(瞬時に全トラフィックが v2.0.0 へ)
kubectl apply -f services/fortune-app-green-service.yaml
# ロールバック: Blue に戻す
kubectl apply -f services/fortune-app-blue-service.yaml

5-8 デプロイメント戦略の選び方

decision · strategy-picker
10.0.6.0/24 · CHALLENGE

Part 6 — 総合チャレンジラボ攻略

ここまでの hop を組み合わせる総合演習。2 つの VPC・踏み台ホスト・Cloud SQL・GKE 上の WordPress を、タスク順にひとつのシステムとして構築します。


6-1 チャレンジ全体のアーキテクチャ

topology · griffin-wordpress

6-2 タスク別実装手順

Task 1 & 2 — VPC の作成

bash · gcloud
# 開発 VPC の作成
gcloud compute networks create griffin-dev-vpc --subnet-mode=custom
gcloud compute networks subnets create griffin-dev-wp \
--network=griffin-dev-vpc --region=us-east1 --range=192.168.16.0/20
gcloud compute networks subnets create griffin-dev-mgmt \
--network=griffin-dev-vpc --region=us-east1 --range=192.168.32.0/20
# 本番 VPC の作成
gcloud compute networks create griffin-prod-vpc --subnet-mode=custom
gcloud compute networks subnets create griffin-prod-wp \
--network=griffin-prod-vpc --region=us-east1 --range=192.168.48.0/20
gcloud compute networks subnets create griffin-prod-mgmt \
--network=griffin-prod-vpc --region=us-east1 --range=192.168.64.0/20

Task 3 — Bastion Host(踏み台サーバー)

bash · gcloud
# マルチ NIC Bastion Host を作成(dev / prod 両 VPC に接続)
gcloud compute instances create griffin-bastion \
--zone=us-east1-b --machine-type=e2-medium \
--network-interface=network=griffin-dev-vpc,subnet=griffin-dev-mgmt \
--network-interface=network=griffin-prod-vpc,subnet=griffin-prod-mgmt
# SSH 許可の FW ルールを作成
gcloud compute firewall-rules create griffin-dev-allow-ssh \
--network=griffin-dev-vpc --allow=tcp:22 --source-ranges=0.0.0.0/0
gcloud compute firewall-rules create griffin-prod-allow-ssh \
--network=griffin-prod-vpc --allow=tcp:22 --source-ranges=0.0.0.0/0

Task 4 — Cloud SQL と WordPress DB

bash · sql
# Cloud SQL MySQL インスタンスを作成
gcloud sql instances create griffin-dev-db \
--database-version=MYSQL_8_0 --region=us-east1 --tier=db-n1-standard-1
# Cloud SQL に接続して WordPress 用 DB を準備
gcloud sql connect griffin-dev-db --user=root
sql
-- MySQL プロンプト内で実行
CREATE DATABASE wordpress;
CREATE USER "wp_user"@"%" IDENTIFIED BY "stormwind_rules";
GRANT ALL PRIVILEGES ON wordpress.* TO "wp_user"@"%";
FLUSH PRIVILEGES;

Task 5 & 6 — GKE クラスターの作成と設定

bash · gke
# GKE クラスターの作成
gcloud container clusters create griffin-dev \
--zone=us-east1-b --machine-type=e2-standard-4 --num-nodes=2 \
--network=griffin-dev-vpc --subnetwork=griffin-dev-wp
# WordPress 用シークレットとボリュームの設定
gsutil cp -r gs://spls/gsp321/wp-k8s .
cd wp-k8s
# wp-env.yaml を編集して username: wp_user / password: stormwind_rules を設定
kubectl create -f wp-env.yaml
# Cloud SQL Proxy 用のサービスアカウントキーを作成
gcloud iam service-accounts keys create key.json \
--iam-account=cloud-sql-proxy@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com
kubectl create secret generic cloudsql-instance-credentials --from-file key.json

Task 7 — WordPress Deployment の作成

bash
# wp-deployment.yaml を編集
# YOUR_SQL_INSTANCE → Instance Connection Name に置換
# 形式: PROJECT_ID:REGION:INSTANCE_NAME
kubectl create -f wp-deployment.yaml
kubectl create -f wp-service.yaml
# LoadBalancer の External IP が付与されるまで待機
kubectl get services --watch

Task 9 — 追加エンジニアへのアクセス付与

bash · iam
# Editor ロールをプロジェクトに付与
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member="user:SECOND_USER_EMAIL" \
--role="roles/editor"
★ · SUMMARY

ベストプラクティス総まとめ

4 つの観点でこのルート全体を振り返ります。コスト・セキュリティ・可用性・開発効率。


$ コスト管理

カテゴリベストプラクティス
BigQuerySELECT * を避け、必要な列のみ取得する
BigQuery大規模クエリ実行前に「クエリバリデータ」でスキャン量を確認する
Cloud SQL開発・テスト環境は Development Preset を使用する
GKE不要なクラスターはこまめに削除する
VM使用しない VM は停止(課金は継続)または削除する

$ セキュリティ

カテゴリベストプラクティス
VPC本番環境は必ず Custom モードを使用する
VPC0.0.0.0/0 からの SSH 許可は最小限に留め、IAP を活用する
Cloud SQLパスワードは必ず Secret Manager で管理する
IAM最小権限の原則(Principle of Least Privilege)を徹底する
GKEサービスアカウントキーはファイルではなく Workload Identity を使用する

$ 可用性・信頼性

カテゴリベストプラクティス
Cloud SQL本番環境は Multiple Zones(HA 構成) を必ず選択する
GKERolling Update で maxUnavailablemaxSurge を適切に設定する
Monitoringすべての VM に Ops Agent をインストールする
Monitoringアラートには Runbook(対応手順書)のリンクを必ず記載する
デプロイBlue-Green デプロイで即時 Rollback 体制を整える

$ 開発効率

カテゴリベストプラクティス
gcloudよく使うオプションは gcloud config set でデフォルト化する
kubectlkubectl explain でリソースのフィールドを確認する
SQLDELETE 前は必ず SELECT で対象行を確認する
Monitoringダッシュボードは CPU・メモリ・ネットワーク・エラー率の 4 点セットで作成する

最終確認チェックリスト

∞ · SOURCES

参考リソース / 出典 URL

本ガイドの記述はすべて Google Cloud / Kubernetes の公式ドキュメントに基づいています。一次情報として必ず併読してください。