今回は Google Compute Engine でカスタムイメージを作る方法について。 カスタムイメージというのは、既存のベースイメージに何らかのカスタマイズを施したイメージを指す。 あらかじめカスタムイメージを作っておくことで環境構築の手間をはぶくことができる場合がある。
使った環境は次の通り。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.14.3 BuildVersion: 18D109 $ gcloud version Google Cloud SDK 238.0.0 bq 2.0.42 core 2019.03.08 gsutil 4.37
下準備
あらかじめ、いくつか下準備をしておく。
Google Cloud SDK をインストールする
今回の操作は基本的に Google Cloud SDK の CLI を使う。
なので、まずは Homebrew で Google Cloud SDK をインストールしておく。
$ brew cask install google-cloud-sdk
Google Cloud Platform にログインする
Google Cloud SDK をインストールできたら、gcloud auth login
コマンドでログインしておく。
$ gcloud auth login
プロジェクトを作る
今回の動作確認用にプロジェクトを用意する。
$ gcloud projects create gce-example-$(whoami)-$(date "+%Y%m%d")
プロジェクトを作ったら、デフォルトのプロジェクトに指定する。
$ gcloud config set project gce-example-$(whoami)-$(date "+%Y%m%d")
課金と API を有効にする
続いては課金と API を有効にする。
ここだけは Google Cloud SDK からはできないのでブラウザから。 Compute Engine API を選んで有効にする。
$ open https://console.cloud.google.com/apis/dashboard
動作を確認する
API が有効になっていないと呼べないコマンドを実行してみて、上手くいけば準備完了。
$ gcloud compute instances list
Listed 0 items.
カスタムイメージを作る
下準備が終わったので、ここからはカスタムイメージを作っていく。 あらかじめ、基本的な手順について解説する。 カスタムイメージを作るときは、まず既存の任意のイメージを使って VM インスタンスを立ち上げる。 このとき、インスタンスが使うディスクには永続ディスク (Persistent Disk) を指定する。 その上で、インスタンスにソフトウェアをインストールするなどのカスタマイズを施す。 カスタマイズが終わったら、インスタンスを停止して永続ディスクを切り離す。 この切り離した永続ディスクから、カスタムイメージを作れる。 あとはカスタムイメージから VM インスタンスを立ち上げられれば作業完了。
永続化ディスクは pd-
というプレフィックスから始まる。
リージョンごとに使えるディスクの種類が異なるので、確認しておく。
$ gcloud compute disk-types list | grep asia-northeast1
local-ssd asia-northeast1-b 375GB-375GB
pd-ssd asia-northeast1-b 10GB-65536GB
pd-standard asia-northeast1-b 10GB-65536GB
local-ssd asia-northeast1-c 375GB-375GB
pd-ssd asia-northeast1-c 10GB-65536GB
pd-standard asia-northeast1-c 10GB-65536GB
local-ssd asia-northeast1-a 375GB-375GB
pd-ssd asia-northeast1-a 10GB-65536GB
pd-standard asia-northeast1-a 10GB-65536GB
各ディスクの特性については以下のページに記載がある。
各ディスクを利用するときの料金は以下。
また、これから作るイメージも保管には料金がかかる。 詳細については、以下に記載がある。
さて、早速永続ディスクを使ってインスタンスを立ち上げてみよう。
以下では 10GB
の pd-standard
を使って Ubuntu 18.04 LTS のインスタンスを起動している。
料金を抑えるために Preemptible なインスタンスにした。
$ gcloud compute instances create gce-example \ --preemptible \ --zone asia-northeast1-a \ --machine-type f1-micro \ --image-project ubuntu-os-cloud \ --image-family ubuntu-1804-lts \ --boot-disk-type pd-standard \ --boot-disk-size 10GB
上手く立ち上がれば gcloud compute instances list
に表示される。
$ gcloud compute instances list NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gce-example asia-northeast1-a f1-micro true 10.146.0.3 34.85.54.239 RUNNING
立ち上げたインスタンスを操作するために SSH でログインする。
$ gcloud compute ssh gce-example
ログインして lsblk
コマンドを実行すると sda
という名前で永続ディスクが認識されているようだ。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 91.1M 1 loop /snap/core/6531 loop1 7:1 0 56.7M 1 loop /snap/google-cloud-sdk/75 sda 8:0 0 10G 0 disk ├─sda1 8:1 0 9.9G 0 part / ├─sda14 8:14 0 4M 0 part └─sda15 8:15 0 106M 0 part /boot/efi
さて、ここからはイメージをカスタマイズするフェーズに入る。
試しにインスタンスに sl
コマンドをインストールしておこう。
$ sudo apt-get update
$ sudo apt-get -y install sl
$ which sl
/usr/games/sl
カスタマイズが終わったらログアウトする。
$ exit
インスタンスを削除する。
このとき、永続ディスクについては削除されないように --keep-disks
オプションを指定する。
$ gcloud compute instances delete gce-example \ --keep-disks boot
これでインスタンスは削除された。
$ gcloud compute instances list
Listed 0 items.
ただし永続ディスクについては残っている。
$ gcloud compute disks list
NAME ZONE SIZE_GB TYPE STATUS
gce-example asia-northeast1-a 10 pd-standard READY
上記の永続ディスクを元にカスタムイメージを作る。
以下では ubuntu1804lts-sl
という名前でカスタムイメージを作っている。
$ gcloud compute images create ubuntu1804lts-sl \ --source-disk gce-example \ --source-disk-zone asia-northeast1-a \ --family ubuntu-1804-lts
次のように、カスタムイメージができた。
$ gcloud compute images list | grep gce-example-$(whoami)-$(date "+%Y%m%d") ubuntu1804lts-sl gce-example-20190321 ubuntu-1804-lts READY
カスタムイメージができたら、元になった永続ディスクは削除してしまっても構わない。
$ gcloud compute disks delete gce-example \ --zone asia-northeast1-a
カスタムイメージを使ってインスタンスを立ち上げる
続いてはカスタムイメージを使ってインスタンスを立ち上げてみよう。
$ gcloud compute instances create gce-example \ --preemptible \ --zone asia-northeast1-a \ --machine-type f1-micro \ --image ubuntu1804lts-sl
起動したらインスタンスにログインする。
$ gcloud compute ssh gce-example
確認すると、たしかに sl
コマンドがインストールされている。
ちゃんとカスタマイズされた状態になっているようだ。
$ which sl
/usr/games/sl
確認が終わったら、インスタンスからログアウトする。
$ exit
カスタムイメージを削除する
不要になったカスタムイメージは gcloud compute images delete
で削除できる。
$ gcloud compute images delete ubuntu1804lts-sl
前述した通りカスタムイメージの保管にもお金がかかるので注意する。
後片付け
あとは後片付けもお忘れなく。
$ gcloud compute instances delete gce-example $ gcloud projects delete gce-example-$(whoami)-$(date "+%Y%m%d")
いじょう。
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログ (1件) を見る