【Google Cloud (GCP)】Compute Engine のカスタムイメージを作成

プログラミング

はじめに

この記事では Google Compute Engine のカスタムイメージの作成を gcloud CLI でおこないます。

カスタムイメージは、既存の Compute Engine インスタンスの状態を保持するので、環境構築を再びおこなう手間を省けます。これにより Compute Engine の冗長化が簡単におこなえます。

また、カスタムイメージはプロジェクト間の共有も可能です。

gcloud CLI の実行は、Cloud Shell で行えますし、またインストールすることでローカル環境でも実行することができます。

gcloud CLI をインストールする  |  Google Cloud CLI Documentation

この記事で使用するソースコードは次の GitHub で利用できます。

GitHub - Joichiro433/Blog-custom-image
Contribute to Joichiro433/Blog-custom-image development by creating an account on GitHub.

変数の定義

今回実行するコマンドは以下 4つのシェルスクリプトに分けています。

.
├── create_custom_image.sh
├── params.sh
├── setup_vm.sh
└── setup_vm_from_costomimage.sh

まず、コマンド実行に必要な変数を params.sh にまとめます。

#!/bin/bash

VM_NAME='demo-vm'
ZONE='asia-northeast1-a'
MACHINE_TYPE='e2-micro'
IMAGE_PROJECT='ubuntu-os-cloud'
IMAGE_FAMILY='ubuntu-2204-lts'
BOOT_DISK_TYPE='pd-balanced'
BOOT_DISK_SIZE='10GB'

CUSTOM_IMAGE_NAME='demo-image'
NEW_VM_NAME='demo-vm-new'

カスタムイメージの元となる Compute Engine を作成する

次にCompute Engine を gcloud コマンドで作成しましょう。これは以下 ▼ の記事でも述べています。

Compute Engine を次の setup_vm.sh を実行して作成します。

#!/bin/bash

source ./params.sh

gcloud compute instances create ${VM_NAME} \
    --zone ${ZONE} \
    --machine-type ${MACHINE_TYPE} \
    --image-project ${IMAGE_PROJECT} \
    --image-family ${IMAGE_FAMILY} \
    --boot-disk-type ${BOOT_DISK_TYPE} \
    --boot-disk-size ${BOOT_DISK_SIZE}
## 出力
Created 
https://www.googleapis.com/compute/v1/projects/your_project_name/zones/asia-northeast1-a/instances/demo-vm
. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS demo-vm asia-northeast1-a e2-micro 10.146.0.14 35.194.103.133 RUNNING

Compute Engine が作成されたら、ssh 接続します。

$ gcloud compute ssh demo-vm

作成した Compute Engine にログインしたら、確認として、適当なテキストファイルを作成しておきます。

your_username@demo-vm:~$ echo hello! > hello.txt

テキストファイルを作成したら準備完了です。Compute Engine からログアウトします。

your_username@demo-vm:~$ exit

gcloud CLI でカスタムイメージを作成する

カスタムイメージを、先ほど Compute Engine を作った時に同時に作成されたディスクをつかって作成します。

ディスクは次のコマンドで確認することができます。

$ gcloud compute disks list
## 出力
NAME     LOCATION           LOCATION_SCOPE  SIZE_GB  TYPE         STATUS
demo-vm  asia-northeast1-a  zone            10       pd-balanced  READY

このように、先ほど作った Compute Engine と同じ名前のディスクが作成されています。

このディスクを使ってカスタムイメージを作成するには、インスタンス demo-vm を停止する必要があります。そこで、次のコマンドでインスタンスを停止します。

$ gcloud compute instances stop demo-vm

インスタンスを停止したら、次の create_custom_image.sh を実行してカスタムイメージを作成します。

#!/bin/bash

source ./params.sh

gcloud compute images create ${CUSTOM_IMAGE_NAME} \
    --source-disk ${VM_NAME} \
    --source-disk-zone ${ZONE} \
    --family ${IMAGE_FAMILY}
## 出力
Created 
https://www.googleapis.com/compute/v1/projects/your_project_name/global/images/demo-image
. NAME PROJECT FAMILY DEPRECATED STATUS demo-image xxxxxxxxxx ubuntu-2204-lts READY

これでカスタムイメージが作成されました。

カスタムイメージから Compute Engine を作成する

先ほど作成したカスタムイメージから Compute Engine を作成してみます。

次の setup_vm_from_costomimage.sh を実行しましょう。

#!/bin/bash

source ./params.sh

gcloud compute instances create ${NEW_VM_NAME} \
    --zone ${ZONE} \
    --machine-type ${MACHINE_TYPE} \
    --image ${CUSTOM_IMAGE_NAME} \
    --boot-disk-type ${BOOT_DISK_TYPE} \
    --boot-disk-size ${BOOT_DISK_SIZE}
## 出力
Created 
https://www.googleapis.com/compute/v1/projects/your_project_name/zones/asia-northeast1-a/instances/demo-vm-new
. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS demo-vm-new asia-northeast1-a e2-micro 10.146.0.15 35.194.103.133 RUNNING

これでカスタムイメージから Compute Engine が作成されました。

作成した Compute Engine に ssh 接続してみます。

$ gcloud compute ssh demo-vm-new

ls コマンドでファイル一覧を確認すると、元となった Compute Engine で作成した hello.txt ファイルが存在しています。

your_username@demo-vm-new:~$ ls
hello.txt
your_username@demo-vm-new:~$ cat hello.txt
hello!

カスタムイメージを削除する

gcloud CLI で作成したカスタムイメージ、Compute Engine インスタンスを削除して、後片付けしましょう。

$ gcloud compute images delete demo-image
$ gcloud compute instances delete demo-vm-new
タイトルとURLをコピーしました