こんばんは、七色メガネです。
今回は、Google Cloud Platform で提供される App Engine を使用して、 helloWorld を表示する簡単なwebアプリを作成していたいと思います。
AppEngine ってなに?
AppEngineとは、GCPのコンピューティング・ジャンルで提供されるサービスの一つで、Webアプリの開発の為のPaaSです。詳しくは下記の記事をご覧ください。
Webアプリを作成する
今回のテストで取る手順は次の通りです。
- AppEngine を起動する
- サーバプログラム(weserver.go) と 表示するHTMLファイル(index.html) を用意する。
- デプロイ用の構成ファイル(app.yaml) を用意する。
- ローカル環境で開発用サーバを立て、デプロイのテストをする。
- AppEngine上のサーバへデプロイし、意図通りの動作が為されていることを確認する。
1. AppEngine を起動する
まずはGCPコンソール上で、AppEngineを起動します。GCPコンソールのメニューから AppEngine を洗濯してください。
リージョンは asia-northeast1 を選択します。東京リージョンですね。
使用する言語と環境を選択します。
今回は言語はGOで、環境はStandardを選択します。
ここまで選択したら、コンソール上での操作は終了です。ComuputeEngineでインスタンスを作成した時よりも、ずっと設定が少ないですね。
2. サーバプログラム(weserver.go) と 表示するHTMLファイル(index.html) を用意する。
次に、サーバ用のプログラムとHTMLファイルを用意します。
前回あたりの記事でlocalhostにwebサーバを立てたので、今回はそのプログラムを流用します。
使用するのは次の2ファイルです。
- webserver.go
- index.html
サーバ用プログラムについては、AppEngine 用に書き換えてあるところがあるので解説します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package main import ( "net/http" "google.golang.org/appengine" // <<add1>> ) func main() { // ハンドラーを貼るパスの指定です。今回は他のディレクトリもないので、ルートを指定します。 rootPath := "/" // <<add2>> (AppEngine用に修正)返却するファイルが配置されている場所のパスです。 docDir := "./" http.HandleFunc( rootPath, func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, docDir) }, ) /* 変更箇所 */ // log.Fatal(http.ListenAndServe(":8080", nil)) appengine.Main() // <<add3>> } |
変更箇所にコメントで <<add>> を記載しています。
- add1
GOのAppEngine用のライブラリを追加しています。
このライブラリは次のコマンドでインストールしてください。
1go get "google.golang.org/appengine" - add2
ディレクトリ構造が変わったので、パスを変更しています。今回は全てのファイルを同一レベルに配置します。 - add3
アドレスをlistenする関数を、AppEngine用のものに変更しています。
1 |
func Main() |
関数 Main() は、AppEngine における主要なエントリーポイントになります。ポートの指定は受け付けず、デフォルトで 8080番 へのアクセスをlistenします。環境変数 $PORT を更新することで、対応ポートを変更することができます。
これでサーバ用のプログラムは準備ができました。
HTMLファイルはなんでも良いです。中身が気になる方は前回の記事を参照してください。
3. デプロイ用の構成ファイル(app.yaml) を用意する。
次にデプロイ用の構成ファイルを作成します。
構成ファイルは yaml 形式で記載し、名称は必ず app.yaml とします。
記載内容は次のようにします。
1 2 3 4 5 6 |
runtime: go api_version: go1 handlers: - url: /.* script: _go_app |
- runtime
アプリで使用されるランタイム環境の名前です。今回はgoを使用しています。 - api_version
このアプリで使用するAPIのバージョンです。go1 を指定すると、デプロイ時の最新のランタイム環境が使用されます。 - url
正規表現を使用したURLパターンです。 - script
スクリプトパスの指定です。goの場合は常に _go_app を指定します。
4. ローカル環境で開発用サーバを立て、デプロイのテストをする。
ここまでで使用するファイルが全て用意できました。
作成したファイルは全て、同一ディレクトリ上に配置しておきます。
配置したら、ローカル環境でデプロイのテストをしてみます。
この操作をするに当たって、次の準備が必要です。
- Google Cloud SDK のインストール
- Python2 系のインストール
準備ができたら、 app.yaml を配置した場所に移動し、次のコマンドを実行します。
1 |
python2 (GoogleCloudSDKの配置場所)/bin/dev_appserver.py app.yaml |
- python3 系では動きませんので、python2 を明示的に指定します。
- dev_appserver.py がサーバを立てるプログラムです。場所がわからないときは which コマンドを使いましょう。
コマンドを実行すると、サーバが立ち上がります。
localhost の 8080 番にアクセスして動作を確認しましょう。
問題なく表示できています。コンソール上にレスポンスも表示されているので確認します。
1 2 |
INFO 2019-03-04 11:04:38,089 instance.py:294] Instance PID: 24660 INFO 2019-03-04 11:04:48,766 module.py:861] default: "GET / HTTP/1.1" 200 238 |
200 の正常コードが返却されているので、問題ないことが確認できました。
5. AppEngine上のサーバへデプロイし、意図通りの動作が為されていることを確認する。
ローカルでの確認が済んだので、AppEngineでのデプロイを行います。今回はGCPコンソールの Cloud Shell (ターミナルのようなもの)からデプロイ操作を行います。
まずはGCPコンソールから Cloud Shell を開きます。
Cloud Shell が表示されるので、ここに先ほど作成したファイルを転送します。
ここではgitを使用します。
次のコマンドを叩いて今回作成したプログラムをダウンロードしてください。
すると serverTest というディレクトリが作成されるかと思います。
1 |
git clone https://github.com/NanairoMegane/serverTest |
serverTest の中に作成したファイルが配置されているので、そこへ移動します。今回は app.yaml もここにあるので、この場所で次のコマンドを実行してデプロイを行います。
1 |
gcloud app deploy |
実行後少し待つと、デプロイが完了します。
次のコマンドを実行して、表示されたURLへ飛んでみましょう。
1 |
gcloud app browse |
無事、正常に表示されました。ローカルではないので、これでもちろん全世界のどこからでもこのページにアクセスすることができます。
まとめ
- AppEngine上でプログラムをデプロイするだけで、簡単にWebアプリを公開できる。
- AppEngine を使用して開発する場合は、google.golang.org/appengine ライブラリを使用する。
以上です。ここまでご覧いただき、ありがとうございました!
参考
プログラマのためのGoogle Cloud Platform入門