CUBE SUGAR CONTAINER

技術系のこと書きます。

Google Cloud SDK の CLI で Compute Engine を操作する

今回は Google Cloud SDK を使って CLI から 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 をインストールする

最初に Homebrew Cask を使って Google Cloud SDK をインストールしておく。

$ brew cask install google-cloud-sdk

認証する

インストールできたら gcloud auth login コマンドで Google Cloud Platform の認証をしておく。

$ gcloud auth login

プロジェクトを作る

Google Cloud Platform は何をするにしても、まずはプロジェクトが必要になる。

そこで、続いてはプロジェクトを作る。 このとき名前は GCP 上でユニークになっている必要がある。

$ gcloud projects create gce-example-$(date "+%Y%m%d")

上手く作ることができれば gcloud projects list コマンドで確認できる。

$ gcloud projects list
PROJECT_ID            NAME                  PROJECT_NUMBER
gce-example-20190318  gce-example-20190318  171069556366

操作対象とするデフォルトのプロジェクトを作成したものに設定しておくと楽ができる。

$ gcloud config set project gce-example-$(date "+%Y%m%d")

Compute Engine API を有効にする

Google Cloud SDK から Compute Engine を操作するには、はじめに API を有効にする必要がある。

そこで。以下の Web ページを開いて Compute Engine API を有効にしよう。

$ open https://console.cloud.google.com/apis/dashboard

Compute Engine API が有効にできると、関連する操作が CLI からできるようになる。

$ gcloud compute instances list
Listed 0 items.

インスタンスを起動する

準備ができたので、試しにインスタンスを起動してみよう。

インスタンスの起動には gcloud compute instances create コマンドを使う。 --preemptible オプションを指定しておくと、利用料金がだいぶ安くなる。 その代わり、突然マシンをシャットダウンされることがある点に注意が必要。

$ gcloud compute instances create gce-example \
  --preemptible \
  --zone asia-northeast1-a

インスタンスを起動するゾーンについては、以下のページを参照して選ぶ。 日本はネットワークのレイテンシが低くなる代わりに若干利用料金がお高い傾向にある。 あと、新しい機能が実装されるのも北米なんかに比べると結構遅い。

Regions and Zones  |  Compute Engine Documentation  |  Google Cloud

うまく起動できれば gcloud compute instances list で起動したインスタンスが表示される。

$ gcloud compute instances list
NAME         ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
gce-example  asia-northeast1-a  n1-standard-1  true         10.146.0.3   35.243.118.246  RUNNING

インスタンスに SSH でログインする

起動したインスタンスに SSH でログインするには gcloud compute ssh コマンドを使う。 最初に使うときは既存の公開鍵ペアがないか調べて、見つからないときは新たに作られる。

$ gcloud compute ssh gce-example

デフォルトでは、以下の場所に公開鍵ペアが用意される。

$ ls ~/.ssh | grep google_compute
google_compute_engine
google_compute_engine.pub
google_compute_known_hosts

上手くいけば、次のようにインスタンスにログインできる。 デフォルトでは Debian の OS イメージが使われるようだ。

$ uname -a
Linux preemptible-example 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
$ cat /etc/debian_version 
9.8

ひとまずインスタンスからログアウトしておく。

$ exit

インスタンスを停止・削除する

使い終わったインスタンスは gcloud compute instances stop コマンドでシャットダウンできる。 これで Compute Engine に対する課金は停止する。 ただし、インスタンスに紐付いた永続化ストレージや IP アドレスに対する課金は継続する点に注意が必要となる。

$ gcloud compute instances stop gce-example

停止した状態のインスタンスは状態が TERMINATED と表示される。

$ gcloud compute instances list
NAME         ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
gce-example  asia-northeast1-a  n1-standard-1  true         10.146.0.3   35.243.118.246  TERMINATED

もし、完全に課金を停止したいときは紐付いた永続化ディスクや IP アドレスと共にインスタンスを削除する必要がある。

$ gcloud compute instances delete gce-example

マシンタイプを選ぶ

Compute Engine では必要に応じてマシンのスペックを選択できる。 先ほどは n1-standard-1 というマシンがデフォルトで選ばれていた。

選択できるマシンのスペックは、例えば以下の Web ページで確認できる。

Machine Types  |  Compute Engine Documentation  |  Google Cloud

それ以外にも gcloud compute machine-types list で確認できる。

$ gcloud compute machine-types list
NAME             ZONE                       CPUS  MEMORY_GB  DEPRECATED
f1-micro         us-central1-f              1     0.60
g1-small         us-central1-f              1     1.70
n1-highcpu-16    us-central1-f              16    14.40
n1-highcpu-2     us-central1-f              2     1.80
n1-highcpu-32    us-central1-f              32    28.80
...
n1-standard-8    northamerica-northeast1-b  8     30.00
n1-standard-96   northamerica-northeast1-b  96    360.00
n1-ultramem-160  northamerica-northeast1-b  160   3844.00
n1-ultramem-40   northamerica-northeast1-b  40    961.00
n1-ultramem-80   northamerica-northeast1-b  80    1922.00

例として、一番スペックの低い f1-micro インスタンスを使ってみよう。 このマシンタイプは CPU 1 vCore と RAM 0.6GB というスペックになっている。

$ gcloud compute machine-types list | grep asia-northeast1-a | grep f1-micro
f1-micro         asia-northeast1-a          1     0.60

起動したいマシンタイプは --machine-type オプションで選べる。

$ gcloud compute instances create gce-example \
  --preemptible \
  --zone asia-northeast1-a \
  --machine-type f1-micro

起動したインスタンスにログインする。

$ gcloud compute ssh gce-example

マシンのスペックを確認すると、たしかに CPU は 1 コアでメモリは 600MB しかない。

$ cat /proc/cpuinfo | grep processor | wc -l
1
$ cat /proc/meminfo | head -n 1
MemTotal:         606720 kB

動作確認が終わったらインスタンスを削除する。

$ exit
$ gcloud compute instances delete gce-example

OS イメージを選ぶ

続いては Debian 以外の OS イメージのインスタンスを使う方法について。

まず、公開されている OS イメージは gcloud compute images list で確認できる。

$ gcloud compute images list  
NAME                                                  PROJECT            FAMILY                            DEPRECATED  STATUS
centos-6-v20190312                                    centos-cloud       centos-6                                      READY
centos-7-v20190312                                    centos-cloud       centos-7                                      READY
coreos-alpha-2079-0-0-v20190312                       coreos-cloud       coreos-alpha                                  READY
coreos-beta-2051-2-0-v20190312                        coreos-cloud       coreos-beta                                   READY
coreos-stable-2023-5-0-v20190312                      coreos-cloud       coreos-stable                                 READY
...
sql-2017-express-windows-2019-dc-v20190225            windows-sql-cloud  sql-exp-2017-win-2019                         READY
sql-2017-standard-windows-2016-dc-v20190108           windows-sql-cloud  sql-std-2017-win-2016                         READY
sql-2017-standard-windows-2019-dc-v20190225           windows-sql-cloud  sql-std-2017-win-2019                         READY
sql-2017-web-windows-2016-dc-v20190108                windows-sql-cloud  sql-web-2017-win-2016                         READY
sql-2017-web-windows-2019-dc-v20190225                windows-sql-cloud  sql-web-2017-win-2019                         READY

今回は、その中でも Ubuntu 18.04 LTS を起動してみる。

$ gcloud compute images list | grep -i ubuntu  
ubuntu-1404-trusty-v20190315                          ubuntu-os-cloud    ubuntu-1404-lts                               READY
ubuntu-1604-xenial-v20190306                          ubuntu-os-cloud    ubuntu-1604-lts                               READY
ubuntu-1804-bionic-v20190307                          ubuntu-os-cloud    ubuntu-1804-lts                               READY
ubuntu-1810-cosmic-v20190307                          ubuntu-os-cloud    ubuntu-1810                                   READY
ubuntu-minimal-1604-xenial-v20190307                  ubuntu-os-cloud    ubuntu-minimal-1604-lts                       READY
ubuntu-minimal-1804-bionic-v20190307a                 ubuntu-os-cloud    ubuntu-minimal-1804-lts                       READY
ubuntu-minimal-1810-cosmic-v20190307                  ubuntu-os-cloud    ubuntu-minimal-1810                           READY

イメージ自体は頻繁に更新されるので、以下では --image-project--image-family を指定してインスタンスを起動している。

$ 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

起動したインスタンスにログインする。

$ gcloud compute ssh gce-example

確認すると、ちゃんと Ubuntu 18.04 LTS が起動していることがわかる。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
$ uname -a
Linux gce-example 4.15.0-1028-gcp #29-Ubuntu SMP Thu Feb 7 18:20:08 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

確認が終わったら、忘れずにインスタンスを削除しておく。

$ exit
$ gcloud compute instances delete gce-example

とりあえず、いじょう。