GCPのComputeEngineインスタンスをコマンドで作成、停止、再開、破棄してみる


なぜコマンドでやってみようかと思ったのはこれ行く前にGCPに慣れておきたかったからです
ContainerEngineは次のエントリで書く予定

[Google Cloudではじめるデザイナ/プログラマのためのDocker実践入門](https://hands-ons.doorkeeper.jp/events/52910 "Google Cloudではじめるデザイナ/プログラマのためのDocker実践入門")

作ったインスタンスの中にNginx立ててアクセスできるところまで確認

テストで最小インスタンス(micro)を10回位立ち上げて削除を繰り返してるけど$0のままなのは安いだけなのか反映されるのが遅いだけなのか、料金に詳しい人教えてください…


## 前提
すでにGCPのアカウントが有効になっていること
ComputeEngine用のプロジェクトが存在する
今回僕のプロジェクト名は`takashi-compute-engine`です 
名前をダサくすることによって慈悲の価格ダウンを狙っています


## 作成する
ではインスタンスを作成していきましょう
作成方法は知ってる限り3種類です

Webコンソール、REST API、gcloudコマンドライン

実際はこちらのWebコンソールからRESTもコマンドラインも選択した設定で生成してくれるので、まずはWebコンソールで設定してからコマンドをコピーしていけばいいと思います

![スクリーンショット 2016-10-18 8.26.21.png](https://qiita-image-store.s3.amazonaws.com/0/36871/ff8bba76-6dc2-2a1c-3360-41a9ffb33eac.png "スクリーンショット 2016-10-18 8.26.21.png")

同等のRESTまたはコマンドラインてところですね


Webで設定したのは

インスタンス名: `nginx-instance`
ゾーン: `asia-east1-a`
マシンタイプ: `micro`
ブートディスク: `CentOS6 10GBディスク`
IDとAPIアクセス: `Compute Engine default service account デフォルトのアクセス権を許可`
ファイアウォール: `httpのみ`


こんな感じです、httpsのチェック入れたほうが良いと思いますが今回すぐ消すので特に入れてません

RESTでは今回やりません

gcloudコマンドラインがこちら

```gcloud:gcloud
gcloud compute --project "takashi-compute-engine" instances create "nginx-instance" --zone "asia-east1-a" --machine-type "f1-micro" --subnet "default" --maintenance-policy "MIGRATE" --scopes default="https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --tags "http-server" --image "/centos-cloud/centos-6-v20160921" --boot-disk-size "10" --boot-disk-type "pd-standard" --boot-disk-device-name "nginx-instance"

gcloud compute --project "takashi-compute-engine" firewall-rules create "default-allow-http" --allow tcp:80 --network "default" --source-ranges "0.0.0.0/0" --target-tags "http-server"
```


gcloudコマンドで叩くとインスタンスが生成されました
簡単


![スクリーンショット 2016-10-18 9.23.42.png](https://qiita-image-store.s3.amazonaws.com/0/36871/fdceee3d-a9fb-544a-f800-159072a00232.png "スクリーンショット 2016-10-18 9.23.42.png")

もう一回同じコマンド叩くとすでに存在するとエラー出ました


ここまでが作成です
コマンドコピーするだけなので簡単ですね
プログラムで実行したい時はREST使って、インスタンスタイプとか柔軟に変更できるんだと思います、はい



## SSHログインしてNginxインストール

次にこのインスタンスにログインしてNginxをインストールします

SSHログインは上の画像の`nginx-instance`の右にある`SSH`の逆三角をクリックして「gcloudコマンドを表示」でコマンド取得できます
それをローカルのターミナルで叩いて入ります

```
gcloud compute --project "takashi-compute-engine" ssh --zone "asia-east1-a" "nginx-instance"
```


sshログインした状態で

```
sudo yum update

# Nginxインストール
sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
sudo yum install nginx

# Nginxバージョン確認
nginx -v

```

バージョンが出たらOK

Nginxのステータス確認

```
sudo /etc/init.d/nginx status
```

多分停止状態なので起動

```
sudo /etc/init.d/nginx start
```

そしてIPから起動しているか確認します

このインスタンスのIPは`104.199.222.235`なので
`http://104.199.222.235/`でアクセスしてみます

いえい

![スクリーンショット 2016-10-18 9.48.46.png](https://qiita-image-store.s3.amazonaws.com/0/36871/c7d8b04a-af7e-7798-731e-eeda9c9bb564.png "スクリーンショット 2016-10-18 9.48.46.png")


アクセスできました
httpsでは出来ませんでした


## インスタンスの停止、開始、一覧確認

sshログインから出ます

gcloudのインスタンス用リファレンスは
`gcloud compute instances --help`で見れます

まずはインスタンスの一覧を確認してみます

```
# gcloud configにプロジェクトの追加
gcloud config set project takashi-compute-engine
# プロジェクト確認
gcloud config list

# インスタンスの確認
gcloud compute instances list

NAME            ZONE          MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP      STATUS
nginx-instance  asia-east1-a  f1-micro                   10.140.0.2   104.199.222.235  RUNNING

```

確認できました
gcloud configが以前のプロジェクトのままだと他のcompute engine インスタンスを表示しようとするのでsetしないといけませんでした


### インスタンスの停止

以下のコマンドをキメましょう
途中でZONEを聞かれます 今回は2でした

stopの後ろはインスタンスネームです

```
gcloud compute instances stop nginx-instance
```


停止確認は先程のNginxのページとinstances listで行います

Nginxのページは画像貼るのあれなので…止まってました

gcloudでの確認

```
various ❯ gcloud compute instances list
NAME            ZONE          MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
nginx-instance  asia-east1-a  f1-micro                   10.140.0.2                TERMINATED
```

TERMINATEDになっていますね


スタートさせてみます
stopと大体同じ手順ですね

```
gcloud compute instances start nginx-instance
```

Runningになっていました


## インスタンスの削除

最後にインスタンスの削除をやってみます

コマンドは

```
gcloud compute instances delete nginx-instance
```

ZONEの確認と本当に削除して良いのかの確認が出ます

削除するとWebコンソールからインスタンスが消えます

![スクリーンショット 2016-10-18 10.22.30.png](https://qiita-image-store.s3.amazonaws.com/0/36871/ea83da1a-d9ee-5a45-0c88-977b99d447e3.png "スクリーンショット 2016-10-18 10.22.30.png")



タイトルに書いたことは終わったので今回は終わりです

サンプルでお金かかりそうで怖い人は、一応Webコンソールでプロジェクトを削除しておきましょう

※なんかコマンドで消そうとしてもエラー出たんでコンソールから消しました

```
gcloud projects delete takashi-compute-engine
```


## 所感
SSH接続時の反応が悪くてストレスですがgcloudコマンドでいろんな操作が出来るのは使いやすかったです。

gcloudコマンドのリファレンスは公式が割と見やすかった
[https://cloud.google.com/sdk/gcloud/reference/](https://cloud.google.com/sdk/gcloud/reference/ "https://cloud.google.com/sdk/gcloud/reference/")