Google Cloud ShellでApp Engine DevServerを動かす

# [Google Cloud Shell](https://cloud.google.com/cloud-shell/docs/)?

Cloud ShellはDevelopers Consoleの機能の1つで、Debian-based LinuxのShell環境を貸してくれる機能です。

gcloud sdkを始めとして、色んなtoolを最初からインストールしてくれているので、軽く何か試そうという時に便利な環境です。

DiskもUser毎に5GB使えるようになっているので、git cloneしたり、Cloud StorageやBigQueryのExport結果を、Diskに保存することができます。
ただ、$HOME以外はCloud Shellを再起動すると初期化されるので、注意してください。

何がインストールされているかは、[Available tools](https://cloud.google.com/cloud-shell/docs/features)に書いてあります。
適当に抜粋してみます。

## Available tools

* bash
* sh
* Google App Engine SDK
* Google Cloud SDK
* Emacs
* Vim
* Nano
* Gradle
* Make
* Maven
* npm
* nvm
* pip
* Git
* Mercurial
* Docker
* iPython
* MySQL client
* gRPC compiler

## Language support

* Java
* Go
* Python
* Node.js
* Ruby
* PHP

GCP上で開発する時に使いそうなものは、それなりに入っている感じです。
追加でインストールとかもできますが、$HOME以外はクリアされてしまうので、apt-getとかでインストールすると、Cloud Shellを再起動すると消えてしまいます。

# Quickstart

Developers Consoleを開いて、ぽちっとボタンを押せば完了です

<img width="1617" alt="Home_-_cp300demo1_and_Google_Cloud_ShellでApp_Engine_DevServerを動かす.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/c1f084ac-106d-2fd0-c86e-75005f5746e0.png">

# Price

2016年中は無料で提供できるらしいです。
こういう機能はスパマーとの兼ね合いで料金が変わったりすることがあるので、2017年も無料で使えるように祈りましょう。

# Web Preview

Cloud ShellにはWeb Previewという機能があります。
これは、Cloud Shell上でWeb Serverを立ちあげて、アクセスすることができる機能です。
試しにApp EngineのDev Serverを立ち上げてみます。

## Python

まず、github上にあるApp Engineのサンプルプロジェクトをcloneします。

```
git clone https://github.com/GoogleCloudPlatformTraining/cp100-appengine-memcache-python.git
```

後は、app.yamlがある場所で、dev_appserver.pyを実行すれば、8080portでDev Serverが立ち上がります。

```
cd cp100-appengine-memcache-python
dev_appserver.py .
```

後は、Cloud Shellの左上にあるボタンをクリックして、`Preview on port 8080`を選べばブラウザで表示することができます。

<img width="1620" alt="Home_-_GCPUG_and_Google_Cloud_ShellでApp_Engine_DevServerを動かす.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/e390dbaa-1260-04bb-eec7-795001d3582c.png">

<img width="1248" alt="https___8080-dot-1978286-dot-devshell_appspot_com__authuser_0.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/f7caaaf6-0748-ad48-cd9f-f47783f6dae5.png">

## Java

Javaも基本的に流れは同じはずなのですが、なぜかブラウザでの表示がうまくできませんでした。

サンプルプロジェクトをgit clone

```
git clone https://github.com/GoogleCloudPlatformTraining/cp100-appengine-memcache-java.git
```

mavenでDev Serverを起動

```
cd cp100-appengine-memcache-java
mvn appengine:devserver
```

Cloud Shellの左上にあるボタンをクリックして、`Preview on port 8080`を選べばブラウザで表示するとエラー・・・。

<img width="1619" alt="Home_-_GCPUG.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/1cc8b459-8be3-d972-8a07-451401dbd559.png">

<img width="895" alt="https___8080-dot-1978286-dot-devshell_appspot_com__authuser_0_error.png" src="https://qiita-image-store.s3.amazonaws.com/0/15640/ef727eb2-bff2-3cb4-4fde-8cf4fc84eba1.png">

上記はmavenでやってますが、App Engine SDKにある`dev_appserver.sh`でやるとどうかな？と思い試そうとしましたが、`command not found`. App Engine Java SDKは入っているのですが、`dev_appserver.sh`はハブられているよう・・・。

# おまけ

もちろん、App Engineのデプロイもできます。

## Python

```
cd cp100-appengine-memcache-python
appcfg.py -A cp300demo1 -V example update . --noauth_local_webserver
```

## Java

デプロイは普通にJavaもできます。

`cp300-gae-memcache-java/src/main/webapp/WEB-INF/appengine-web.xml`の`<application>`を自分のGCP Projectのものに修正して`pom.xml`があるpathで以下を実行すればデプロイされます。

```
mvn appengine:update
```