以下の内容はhttps://nakano-tomofumi.hatenablog.com/entry/2025/10/09/151452より取得しました。


GCP L4 難民

背景

最近、L4 が人気なのか、余っていない。どこが空いているか、見つける。 さらに現在のブートディスクからスナップショットを作成して、別のzone で復元し、前のブートディスクを削除する。

チェックスクリプト

#!/bin/bash
# チェック対象のゾーン
ZONES=("us-west1-a" "us-west1-b" "us-west1-c" "us-central1-c" "us-central1-a" "us-central1-b" )

# プロジェクト ID
PROJECT="your-project-id"

# 共通パラメータ
MACHINE="g2-standard-4"
GPU_TYPE="nvidia-l4"
IMAGE_FAMILY="ubuntu-2204-lts"
IMAGE_PROJECT="ubuntu-os-cloud"

for ZONE in "${ZONES[@]}"; do
  echo "===== Checking zone: $ZONE ====="
  if gcloud compute instances create test-l4-check \
    --project="$PROJECT" \
    --zone="$ZONE" \
    --machine-type="$MACHINE" \
    --accelerator="type=$GPU_TYPE,count=1" \
    --image-family="$IMAGE_FAMILY" \
    --image-project="$IMAGE_PROJECT" \
    --boot-disk-size=10GB \
    --maintenance-policy=TERMINATE \
    --provisioning-model=STANDARD \
    --quiet; then
      echo "$ZONE: L4 available"
      # 成功したらすぐ削除
      gcloud compute instances delete test-l4-check --zone "$ZONE" --quiet
  else
      echo "$ZONE: L4 unavailable"
  fi
  echo
done

スナップショットコマンド

こんなようなコマンドを使って、利用可能な別のzoneへ移っています 。 移ったあとは、古いインスタンスを削除するとよいでしょう。 (古いブートディスクの削除も忘れずに。下のコマンドの設定ではインスタンスが削除されると自動でブートディスクが削除されます。)

#!/bin/bash
# ============================================================
# GCP VM Migration Script
# Creates a snapshot of current VM's boot disk
# and recreates it in a new zone with auto cleanup.
# ============================================================

# ---- 設定 ----
SOURCE_ZONE="us-west1-b"
TARGET_ZONE="us-west1-a"

PROJECT="your-project-id"
VM_BASE_NAME="your-vm-name"
BOOT_DISK_TYPE="pd-balanced"
MACHINE_TYPE="g2-standard-4"

SOURCE_DISK="${VM_BASE_NAME}-${SOURCE_ZONE}"    # はじめは、元のマシン名にする必要がある。
TARGET_VM_NAME="${VM_BASE_NAME}-${TARGET_ZONE}"

# ---- スナップショット名 ----
SNAPSHOT_NAME="${SOURCE_DISK}-snapshot-$(date +%Y%m%d-%H%M)"

echo "🔹 Creating snapshot: ${SNAPSHOT_NAME} from ${SOURCE_DISK} ..."
gcloud compute disks snapshot "$SOURCE_DISK" \
  --snapshot-names="$SNAPSHOT_NAME" \
  --zone="$SOURCE_ZONE" \
  --project="$PROJECT" \
  --storage-location=us \
  --quiet

if [ $? -ne 0 ]; then
  echo "❌ Snapshot creation failed."
  exit 1
fi

# ---- スナップショットがREADYになるまで待機 ----
echo "⏳ Waiting for snapshot to become ready..."
while true; do
  STATUS=$(gcloud compute snapshots describe "$SNAPSHOT_NAME" \
    --project="$PROJECT" \
    --format="value(status)")
  if [ "$STATUS" == "READY" ]; then
    echo "✅ Snapshot is ready."
    break
  fi
  echo "  → Current status: $STATUS"
  sleep 10
done

# ---- 新しいVMの作成 ----
BOOT_DISK_NAME="${TARGET_VM_NAME}-boot-$(date +%Y%m%d)"
echo "🚀 Creating new VM (${TARGET_VM_NAME}) in ${TARGET_ZONE} ..."
gcloud compute instances create "$TARGET_VM_NAME" \
  --zone="$TARGET_ZONE" \
  --machine-type="$MACHINE_TYPE" \
  --boot-disk-type="$BOOT_DISK_TYPE" \
  --boot-disk-device-name="$BOOT_DISK_NAME" \
  --source-snapshot="$SNAPSHOT_NAME" \
  --boot-disk-auto-delete \
  --maintenance-policy=TERMINATE \
  --restart-on-failure \
  --project="$PROJECT" \
  --quiet

if [ $? -eq 0 ]; then
  echo "✅ VM created successfully in ${TARGET_ZONE}!"
else
  echo "❌ VM creation failed."
  exit 1
fi

# ---- VMの状態とIPを確認 ----
echo "🔎 Checking VM status and IP..."
gcloud compute instances describe "$TARGET_VM_NAME" \
  --zone="$TARGET_ZONE" \
  --project="$PROJECT" \
  --format="table(name,status,networkInterfaces[0].accessConfigs[0].natIP)"



以上の内容はhttps://nakano-tomofumi.hatenablog.com/entry/2025/10/09/151452より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14