GCLOUD
結構前から、Google Cloud Platform の管理コマンドをまとめたツールが GCLOUD として配布されいます。最近まで、GUIツールも含んだ従来のGAEの管理ツール(APPCFG)も配布されていましたが、現在従来型ツールは非公開になっています。参考: CLOUD SDK
GCLOUD は、GUIツールは無く、全てコマンドラインから操作します。その代わり従来ツールでは不可能だった、Google Cloud Platform に関する細かな管理が可能です。
Google Cloud SDK インストール
まず上記のリンクから、Google Cloud SDK をダウンロード・インストールします。ちなみに私の場合、Windwos10ではインストールが成功しましたが、MacOSでは何度試行してもインストールできませんでした。OSが二世代前の Yosemite、というのも理由かもしれません。開発環境は MacOS の方が良いと最近言われていますが、今回、Windows10の良さを再認識できました。MacOSよりキビキビ動くし、遅ればせながら PowerShell を利用したところ、コマンドライン環境で特に不便なことは無かったです
※ 今回の記事中のコマンド例は、PowerShellの環境です。
※ MacOSでもインストールできました、手順としては以下の通りです。(追記 1/18)
- コンソールから次のコマンドでインストール
curl https://sdk.cloud.google.com | bash
-
インストールが成功したら、次のコマンドで初期設定を行う。
gcloudコマンドでのデフォルト・ユーザとデフォルト・アプリの設定を行います。
gcloud init
-
この他に、
コマンドでコンポーネントのリストを確認しようとすると、次のようなエラーが表示されることがあります。
gcloud components list
この場合は、次のコマンドで修復ができるようです。ERROR: (gcloud.components.list) Failed to fetch component listing from server.
brew update brew uninstall python brew upgrade openssl brew install python --with-brewed-openssl
Google Compute Engine を使うための準備(Google Cloud SDK インストール - Linux & OS X 編)
Failed to fetch component listing from server
APPCFGからの移行
従来のAPPCFGからGCLOUDに移行する場合に、まずアプリの幾つかの yaml ファイルを書き換える必要があります。
- アプリ定義(デフォルト・モジュール) - app.yaml
プロジェクト名(application)とバージョン(version)の指定は、コメントにします。この記述があるとエラーで、アプリのデプロイができません。
#application: myapp #version: 1
- モジュール定義 - (例)back_job.yaml
プロジェクト名・バージョンをコメントアウトにするのに加えて、モジュール名の項目名を、module から service に変更します。#application: myapp #module: back-job service: back-job #version: 1
プロジェクト名は、SDKインストール時に指定したデフォルトのプロジェクト名を使用します(変更方法は後述)。バージョンは、GCLOUD コマンドのデプロイ時に指定します。
デプロイ
GCLOUDでのアプリケーションのデプロイは、コマンド環境から次のように指定します。
gcloud app deploy app.yaml --version 1 --no-promote
アプリのフォルダ上で実行しています。ここでは、二つオープションを指定します。
- --version(-v でも)
- デプロイするバージョンを指定します。例では、1を指定しています。
- --no-promote
- このオプションを付けないと、デプロイ後直ぐにトラフィックが100%移行してしまいます。テスト&確認後バージョンを移行する場合は、Cloud Platformのバージョン管理画面から、トラフィックを移行させます。
PS C:\myapp\web2py> gcloud app deploy app.yaml --version 1 --no-promote You are about to deploy the following services: - myapp/default/1 (from [C:\myapp\web2py\app.yaml]) Deploying to URL: [https://1-dot-myapp.appspot.com] (add --promote if you also want to make this service available from [https://myapp.appspot.com]) Do you want to continue (Y/n)? y Beginning deployment of service [default]... Some files were skipped. Pass `--verbosity=info` to see which ones. You may also view the gcloud log file, found at [C:\Users\xxx\AppData\Roaming\gcloud\logs\2016.12.08\12.03.23.383000.log]. File upload done. Updating service [default]...done. Deployed service [default] to [https://1-dot-myapp.appspot.com] You can read logs from the command line by running: $ gcloud app logs read -s default To view your application in the web browser run: $ gcloud app browse
モジュールをデプロイする場合は、下のようにモジュールの yaml ファイルを指定します。下のコマンドでは、デフォルトモジュールと back-job モジュールの、二つがデプロイされます。
gcloud app deploy app.yaml back_job.yaml --version 1 --no-promote
cron.yaml や queue.yaml 、index.yaml などを変更した場合は、次のようにデプロイを指定します。
gcloud app deploy cron.yaml queue.yaml
PS C:\myapp\web2py> gcloud app deploy cron.yaml queue.yaml You are about to deploy the following configurations: - myapp/cron (from [C:\myapp\web2py\cron.yaml]) - myapp/queue (from [C:\myapp\web2py\queue.yaml]) Do you want to continue (Y/n)? y Updating config [cron]...done. Updating config [queue]...done. Cron jobs have been updated. Task queues have been updated. The Cloud Platform Console Task Queues page has a tab that shows the tasks that are running cron jobs.
初めてデプロイするプロジェクトでは、ファイルロックのワーニングが表示される時があります。しかし何度がデプロイを実行すると、ワーニングが表示されなくなります。
ローカルのテスト環境
従来、GUIツールから起動できたローカルのテスト環境は、GCLOUDコマンドからは起動できないようです。代わりに、dev_appserver.py を利用します。
PS C:\myapp\web2py> dev_appserver.py .
すると、Pythonコンソールが起動します。
INFO 2016-12-08 12:02:58,164 api_server.py:205] Starting API server at: http://localhost:53109 INFO 2016-12-08 12:02:58,187 dispatcher.py:197] Starting module "default" running at: http://localhost:8080 INFO 2016-12-08 12:02:58,204 admin_server.py:116] Starting admin server at: http://localhost:8000
アプリテストは、http://localhost:8080 で、Adminコンソールは、http://localhost:8000 でアクセスできます。
dev_appserver.py を終了させるには Ctrl+c を押しますが、再度起動しようとすると次のようなエラーが出る場合があります。
google.appengine.tools.devappserver2.wsgi_server.BindError: Unable to bind localhost:8080
この場合、次のコマンドを実行してみてください(macOSやLinuxなど)。
lsof -P | grep ':8080' | awk '{print $2}' | xargs kill -9
参考: Apps won't run on GAE - 'unable to bind to localhost:0'
プロジェクトの切り替え
デフォルト以外の複数のプロジェクトを利用している場合、プロジェクト毎に環境を作成し、切り替える必要があります。新しいプロジェクトの環境は、gcloud config configurations create コマンドで作成します。
PS C:\myapp2\web2py> gcloud config configurations create myapp2 Created [myapp2]. Activated [myapp2].
プロジェクト名の登録は、gcloud config set project コマンドです。
PS C:\myapp2\web2py> gcloud config set project myapp2 Updated property [core/project].
アカウント情報の登録は、gcloud auth login コマンドです。
PS C:\myapp2\web2py> gcloud auth login
現在登録しているアカントと違なるアカウントを使用する場合は、次のコマンドを使用します。
gcloud config set account ACCOUNT
プロジェクトを切り替える時は、gcloud config configurations activate コマンドを使用します。
PS C:\myapp\web2py> gcloud config configurations activate default Activated [default].
現在の環境情報を参照する場合は、gcloud config list を使用します。
PS C:\myapp\web2py> gcloud config list Your active configuration is: [default] [compute] region = us-central1 zone = us-central1-f [core] account = xxxx@gmail.com disable_usage_reporting = False project = myapp
環境の一覧は、gcloud config configurations list を使用します。
PS C:\myapp\web2py> gcloud config configurations list NAME IS_ACTIVE ACCOUNT PROJECT DEFAULT_ZONE DEFAULT_REGION default True xxxx@gmail.com myapp us-central1-f us-central1 myapp2 False xxxx@gmail.com myapp2
その他
他にも様々なコマンドが用意されています。例えば、次のようなコマンドがあります。
-
インスタンスの一覧を表示
gcloud app instances list
-
モジュール一覧を表示
gcloud app services list
-
アプリをブラウザで表示
次のようにオプションも指定できます。
gcloud app browse
- --service(-s)
- サービス(モジュール)名を指定
- --version(-v)
- バージョンを指定
-
SDKコンポーネントのアップデート
アップデートは指示が表示されますので、そのタイミングで実行すれば良いです。
gcloud components update
などなどです。
参考:
Google Cloud SDK ドキュメント
Google App Engine Python Standard Environment ドキュメント
ハンズオン : Google Cloud SDK 基本と認証
gcloud confing configurations コマンドでconfig設定を切り替える