2017年1月28日土曜日

Google App Engine で ソースコードを編集

Google App Engine で Python サンプルアプリをデプロイ でデプロイしたサンプルアプリを編集してみます。

今まで、[Hello World!] と表示されていたものを [Hello Python!] と表示されるように編集します。


環境

  • Ubuntu 16.04.1 LTS

Google Cloud SDK をインストール

パッケージをインストール

$ sudo apt install wget
$ sudo apt install git

Create an environment variable for the correct distribution

$ export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

$ echo ${CLOUD_SDK_REPO}
cloud-sdk-xenial

Add the Cloud SDK distribution URI as a package source

$ echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
deb https://packages.cloud.google.com/apt cloud-sdk-xenial main

$ ls -la /etc/apt/sources.list.d/
total 12
drwxr-xr-x 2 root root 4096 Jan 28 17:18 .
drwxr-xr-x 6 root root 4096 Jan  2 15:25 ..
-rw-r--r-- 1 root root   64 Jan 28 17:18 google-cloud-sdk.list

$ cat /etc/apt/sources.list.d/google-cloud-sdk.list
deb https://packages.cloud.google.com/apt cloud-sdk-xenial main

Import the Google Cloud Platform public key

$ wget https://packages.cloud.google.com/apt/doc/apt-key.gpg -O - | sudo apt-key add -
  • 参考にしたページでは crul を使って apt-key.gpg をダウンロードしていましたが、なぜかうまくいかなかったので wget を使いました。

Update the package list and install the Cloud SDK

$ sudo apt-get update && sudo apt-get install google-cloud-sdk

$ which gcloud
/usr/bin/gcloud

認証

以下実行

$ gcloud init

[You must log in to continue. Would you like to log in (Y/n)?] で [Y] を入力

[ Go to the following link in your browser: ] と表示され、https://accounts.google.com/o/oauth2/auth?redirect_uri=... で始まる URL が表示されたのでブラウザで開く

Google アカウントを選択

[Google Cloud SDK が次の許可をリクエストしています] と表示されたので内容を確認して [許可] をクリック

[このコードをコピーし、アプリケーションに切り替えて貼り付けてください] に続き、コードが表示された

コマンドの画面に戻り、[Enter verification code] にブラウザで表示されたコードを張り付け

[Pick cloud project to use] が表示されたので [mytest-20161229] を選択


App Engine アプリのソースコードを編集

リポジトリを確認

Google Developers Console にアクセス

プロジェクトを選択

左上のメニューアイコンをクリックし [開発] を選択

左側のメニューで「レポジトリ」をクリック

以前にデプロイしたサンプルアプリのリポジトリ名 [python-gae-quickstart] を確認できたのでこのリポジトリのソースコードを編集します。

Cloud Repository をローカルにクローン

$ gcloud source repos clone python-gae-quickstart --project=mytest-20161229

ローカルの Git リポジトリに移動

$ cd python-gae-quickstart/

ディレクトリの内容を確認

$ ls -la
total 60
drwxrwxr-x 4 ubuntu ubuntu  4096 Jan 28 21:08 .
drwxrwxr-x 3 ubuntu ubuntu  4096 Jan 28 21:08 ..
-rw-rw-r-- 1 ubuntu ubuntu   247 Jan 28 21:08 appengine_config.py
-rw-rw-r-- 1 ubuntu ubuntu   170 Jan 28 21:08 app.yaml
-rw-rw-r-- 1 ubuntu ubuntu  3045 Jan 28 21:08 CONTRIB.md
drwxrwxr-x 8 ubuntu ubuntu  4096 Jan 28 21:08 .git
drwxrwxr-x 4 ubuntu ubuntu  4096 Jan 28 21:08 lib
-rw-rw-r-- 1 ubuntu ubuntu 11357 Jan 28 21:08 LICENSE
-rw-rw-r-- 1 ubuntu ubuntu   424 Jan 28 21:08 main.py
-rw-rw-r-- 1 ubuntu ubuntu   342 Jan 28 21:08 .playground
-rw-rw-r-- 1 ubuntu ubuntu  2761 Jan 28 21:08 README.md
-rw-rw-r-- 1 ubuntu ubuntu   275 Jan 28 21:08 requirements.txt
-rw-rw-r-- 1 ubuntu ubuntu  2812 Jan 28 21:08 vendor.py

Git のメールアドレスとユーザー名を設定

$ git config --global user.email "Gmail のメールアドレス"

$ git config --global user.name "名前"

試しに main.py を編集

編集した箇所を確認

$ git diff
diff --git a/main.py b/main.py
index 0438961..72d3af2 100644
--- a/main.py
+++ b/main.py
@@ -9,7 +9,7 @@ app.config['DEBUG'] = True
 @app.route('/')
 def hello():
     """Return a friendly HTTP greeting."""
-    return 'Hello World!'
+    return 'Hello Python!'


 @app.errorhandler(404)

インデックスに編集した main.py を追加

$ git add main.py

コミット

$ git commit -m 'test edit'

Cloud Repository に push

$ git push -u origin master

Cloud Repository を GAE アプリに反映

Google Cloud Shell を開始

Google Developers Console にアクセス

プロジェクトを選択

上部にあるナビゲーションバーで Cloud Shell のアイコンをクリック

Cloud Shell でプロジェクトのディレクトリに移動

$ cd src/mytest-20161229/

Cloud Repository からクローン

$ gcloud source repos clone python-gae-quickstart --project=mytest-20161229

ディレクトリを確認

$ ls -la
total 16
drwxr-xr-x 4 fishrimper fishrimper 4096 Jan 28 23:29 .
drwxr-xr-x 4 fishrimper fishrimper 4096 Jan 28 16:03 ..
drwxr-xr-x 4 fishrimper fishrimper 4096 Jan 28 23:29 python-gae-quickstart
drwxr-xr-x 4 fishrimper fishrimper 4096 Jan 28 22:31 python_gae_quickstart-2016-12-29-22-39
  • python-gae-quickstart/ が今回クローンしたディレクトリ
  • python_gae_quickstart-2016-12-29-22-39/ が前回クローンしたディレクトリ

今回クローンしたディレクトリを確認

$ cd python-gae-quickstart/

$ ls -la
total 60
drwxr-xr-x 4 fishrimper fishrimper  4096 Jan 28 23:29 .
drwxr-xr-x 4 fishrimper fishrimper  4096 Jan 28 23:29 ..
-rw-r--r-- 1 fishrimper fishrimper   247 Jan 28 23:29 appengine_config.py
-rw-r--r-- 1 fishrimper fishrimper   170 Jan 28 23:29 app.yaml
-rw-r--r-- 1 fishrimper fishrimper  3045 Jan 28 23:29 CONTRIB.md
drwxr-xr-x 8 fishrimper fishrimper  4096 Jan 28 23:29 .git
drwxr-xr-x 4 fishrimper fishrimper  4096 Jan 28 23:29 lib
-rw-r--r-- 1 fishrimper fishrimper 11357 Jan 28 23:29 LICENSE
-rw-r--r-- 1 fishrimper fishrimper   425 Jan 28 23:29 main.py
-rw-r--r-- 1 fishrimper fishrimper   342 Jan 28 23:29 .playground
-rw-r--r-- 1 fishrimper fishrimper  2761 Jan 28 23:29 README.md
-rw-r--r-- 1 fishrimper fishrimper   275 Jan 28 23:29 requirements.txt
-rw-r--r-- 1 fishrimper fishrimper  2812 Jan 28 23:29 vendor.py

$ cat main.py
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True

# Note: We don't need to call run() since our application is embedded within
# the App Engine WSGI application server.


@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return 'Hello Python!'


@app.errorhandler(404)
def page_not_found(e):
    """Return a custom 404 error."""
    return 'Sorry, nothing at this URL.', 404

アプリをテスト

プレビューインスタンスの開始

$ dev_appserver.py ./app.yaml

「ウェブでプレビュー」でアプリをプレビュー

Cloud Shell 上部の「ウェブでプレビュー」アイコンをクリック

「ポート上でプレビュー 8080」を選択

ブラウザでプレビューが開かれ、「Hello Python!」と表示されました。

プレビューインスタンスの終了

Cloud Shell で Ctrl+C キーを押して、アプリケーションのインスタンスを終了

アプリをデプロイ

$ gcloud app deploy app.yaml --project mytest-20161229
You are about to deploy the following services:
 - mytest-20161229/default/20170128t234354 (from [/home/fishrimper/src/mytest-20161229/python-gae-quickstart/app.yaml])
     Deploying to URL: [https://mytest-20161229.appspot.com]
Do you want to continue (Y/n)?

Y 入力して続けました。

変更されたこと確認

$ w3m -dump https://mytest-20161229.appspot.com
Hello Python!

0 件のコメント:

コメントを投稿