はじめに
この記事では Google Compute Engine のカスタムイメージの作成を gcloud CLI でおこないます。
カスタムイメージは、既存の Compute Engine インスタンスの状態を保持するので、環境構築を再びおこなう手間を省けます。これにより Compute Engine の冗長化が簡単におこなえます。
また、カスタムイメージはプロジェクト間の共有も可能です。
gcloud CLI の実行は、Cloud Shell で行えますし、またインストールすることでローカル環境でも実行することができます。
この記事で使用するソースコードは次の 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. 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 RUNNINGhttps://www.googleapis.com/compute/v1/projects/your_project_name/zones/asia-northeast1-a/instances/demo-vm
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. NAME PROJECT FAMILY DEPRECATED STATUS demo-image xxxxxxxxxx ubuntu-2204-lts READYhttps://www.googleapis.com/compute/v1/projects/your_project_name/global/images/demo-image
これでカスタムイメージが作成されました。
カスタムイメージから 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. 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 RUNNINGhttps://www.googleapis.com/compute/v1/projects/your_project_name/zones/asia-northeast1-a/instances/demo-vm-new
これでカスタムイメージから 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