iMind Developers Blog

iMind開発者ブログ

CLIでGCPのインスタンスやストレージを操作

概要

GCPのCompute Engineのインスタンスの起動、停止、接続。Cloud Storageへのファイルの追加、削除を行う。

バージョン情報

  • Google Cloud SDK 268.0.0
  • gsutil version: 4.45

Cloud SDKのインストール

下記参照

https://cloud.google.com/sdk/downloads?hl=ja

init

下記を実行して認証を行う。

実行する前にプロジェクトを作っておくと選択肢に表示される。

$ gcloud init

途中でデフォルトのリージョンを設定する選択肢が表示される。日本のリージョンを使いたい場合はasia-northeast1(東京)かasia-northeast2(大阪)の中から選ぶ。

https://cloud.google.com/compute/docs/regions-zones/

設定した内容はconfig listで見られる。

$ gcloud config list

表示内容例

[compute]
region = asia-northeast1
zone = asia-northeast1-b
[core]
account = hoge@example.com
disable_usage_reporting = True
project = your_project_name

Your active configuration is: [default]

インスタンスの立ち上げ

参考ページ

https://cloud.google.com/ai-platform/deep-learning-vm/docs/quickstart-cli?hl=ja

上記ページではこんな設定がされている。

export IMAGE_FAMILY="tf-latest-cu92"
export ZONE="us-west1-b"
export INSTANCE_NAME="my-new-instance"
export INSTANCE_TYPE="n1-standard-8"
gcloud compute instances create $INSTANCE_NAME \
        --zone=$ZONE \
        --image-family=$IMAGE_FAMILY \
        --image-project=deeplearning-platform-release \
        --maintenance-policy=TERMINATE \
        --accelerator="type=nvidia-tesla-v100,count=8" \
        --machine-type=$INSTANCE_TYPE \
        --boot-disk-size=120GB \
        --metadata="install-nvidia-driver=True"

例文がTensorFlow向けになっているあたりがGoogleらしい。

image-familyで利用するイメージを決定する。

一般的なイメージは下記で取得できる。CentOSとかUbuntuとかRHELとか。

$ gcloud compute images list --standard-images --uri

ここではcentos7を利用してみる。上記コマンドでFAMILYがcentos-7、PROJECTがcentos-cloudという名前で表示されたのでそれを指定する。

machine-typeは一番安いn1-standard-1(1時間6円強)を指定します。

projectとzoneは先ほどのinitでデフォルトが指定されているものとして省略します。

maintenance-policyはTERMINATE(default)で。詳細は下記。

https://cloud.google.com/compute/docs/instances/live-migration

gcloud compute instances create example-instance \
        --image-family="centos-7" \
        --image-project="centos-cloud" \
        --machine-type="n1-standard-1" \
        --boot-disk-size=10GB

これでインスタンスが立ち上がった。

ssh接続

GCPではIPアドレス等を指定しなくてもgcloudコマンドで接続できる。

$ gcloud compute ssh example-instance

上記コマンドを実行すると ~/.ssh/google_compute_engine に鍵が生成されて、インスタンスのauthorized_keysに登録される。

なので下記のように実行しても入れる。gcloudコマンドを使った方がIPが変わっても使えるところが便利。

$ ssh -i ~/.ssh/google_compute_engine {インスタンスのIP}

IPアドレスは下記コマンドなどで確認できる。

$ gcloud compute instances list

NAME              ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
example-instance  asia-northeast1-b  n1-standard-1               10.xxx.xxx.xxx   xxx.xxx.xxx.xxx  RUNNING

describeでもっと詳細な情報も確認できる。

$ gcloud compute instances describe example-instance

インスタンスの停止、再開、リセット、削除

stopで停止。

$ gcloud compute instances stop example-instance

startで再開。

$ gcloud compute instances start example-instance

resetで再起動。

$ gcloud compute instances reset example-instance

deleteで削除。

$ gcloud compute instances delete example-instance

Cloud Storageのバケット操作

Cloud Storageの操作はgsutilを使う。SDKインストール時に一緒に入れられている。

バケットの生成はmb(Make buckets)。

gsutilでのパス指定は gs:// で始まるuriで指定する。

$ gsutil mb gs://example_20191025031407

バケットの削除はrb(Remove buckets)。

$ gsutil rb gs://example_20191025031407

ファイルのアップロード/ダウンロード

ファイルのアップロード/ダウンロードはどちらもcpで実行できる。

まずはローカルにexample.txtというファイルを作って、先ほど生成したバケットの直下に置く例。Cloud Storage上の置きたい場所をuriで指定するだけ。

# アップロードするファイルを作成
echo "example text" > example.txt

# アップロード
gsutil cp example.txt  gs://example_20191025031407/

ダウンロードも同じ。

# ダウンロード
gsutil cp gs://example_20191025031407/example.txt example2.txt 

ls

lsで指定パス配下の一覧が見れる。

$ gsutil ls gs://example_20191025031407/

gs://example_20191025031407/example.txt

ls -lでサイズやタイムスタンプ等も見れる。

$ gsutil ls -l gs://example_20191025031407/

        13  2019-10-24T18:46:29Z  gs://example_20191025031407/example.txt
TOTAL: 1 objects, 13 bytes (13 B)

このあたりはlinuxのコマンドにかなり近い作りになっているので助かる。cpやlsだけでなくcat、du、mv、rmなどもそのまんまだし。

大文字の -L で指定するとさらに詳細な結果が取れる。

ファイルの中身を標準出力

catでファイルの中身が表示できる。

$ gsutil cat gs://example_20191025031407/example.txt

example text

ファイルの移動

mvで移動。

$ gsutil mv gs://example_20191025031407/example.txt gs://example_20191025031407/example2.txt
$ gsutil ls gs://example_20191025031407/

example text

ファイルの削除

rm。

$ gsutil rm gs://example_20191025031407/example2.txt

-r オプションでディレクトリの削除もできる。

ちなみにバケット直下(gs://example_20191025031407)を -r で削除するとバケットの削除もできるらしい。ちょっと怖い。

改定履歴

Author: Masato Watanabe, Date: 2019-11-02, 記事投稿