Google App Engineのアクセスログのダウンロードするのに、appcfgを使ったら、httplib2.SSLHandshakeErrorが表示されました。
appcfg.py
以前は、App Engineへのデプロイするには、App Engine SDKのappcfg.pyコマンドを使っていました。
2019年7月、App Engine SDKは非推奨になりました。App Engineへのデプロイするには、Google Cloud SDKのgcloudコマンドを使います。
ところが、gcloudコマンドは「App Engineのアクセスログのダウンロード」をサポートしていません。
公式ドキュメント
App Engine SDKのappcfgコマンドは非推奨ですが、appcfgを使って「App Engineのアクセスログのダウンロード」する方法を説明します。
httplib2.SSLHandshakeError
去年6月ころ、Ubuntu 16.04でappcfg.pyを使ったときは、特に問題なくアクセスログをダウンロードできました。
今回、Ubuntu 18.04でappcfg.pyを実行したら、次のエラーで止まってしまいました。
03:09 PM Host: appengine.google.com
03:09 PM Downloading request logs for app jpostal-1006 version 1.
Traceback (most recent call last):
File "/home/aoki/bin/google_appengine/appcfg.py", line 133, in <module>
run_file(__file__, globals())
(省略)
File "/home/aoki/bin/google_appengine/lib/httplib2/httplib2/__init__.py", line 1037, in connect
raise SSLHandshakeError(e)
httplib2.SSLHandshakeError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)
Code language: Bash (bash)
「appcfg httplib2.SSLHandshakeError」で検索しても、250件しかヒットしません。
いくつかの記事で、pythonをアップデートしたら解決した、gcloudのcomponentをアップデートしたら解決した、という内容がありました。
App Engine SDKもアップデートしてみたら?
今使っている App Engine SDKのVERSIONファイルを見ると、バージョン 0.0.0でした。
$ cat VERSION
release: "0.0.0"
timestamp: 0
api_versions: ['1']
supported_api_versions:
python:
api_versions: ['1']
python27:
api_versions: ['1']
go:
api_versions: ['go1']
java7:
api_versions: ['1.0']
Code language: Bash (bash)
同じころダウンロードしたWindows版は1.9.23だね
リリースノートにも載っていないわね
最新は1.9.86です。ダウンロードして、VERSIONファイルを表示すると、
$ cat VERSION
release: "1.9.86"
timestamp: 1558648234
api_versions: ['1']
supported_api_versions:
python:
api_versions: ['1']
python27:
api_versions: ['1']
go:
api_versions: ['go1', 'go1.9']
java7:
api_versions: ['1.0']
go111:
api_versions: [null]
Code language: Bash (bash)
解決方法
App Engine SDKは、1.9.86-2019-06-03 が最新です。
このページの一番下、「元の Python 2 用 App Engine SDK をダウンロードしてインストールします。」の「+」をクリックすると、旧App Engine SDKのダウンロードボタンが表示されます。
google_appengine を最新にしたところ、「httplib2.SSLHandshakeError」は発生しなくなり、アクセスログをダウンロードできました。
Google App Engineのアクセスログのダウンロード方法
App Engine側では、アクセスログをデプロイ時のバージョン別、日別に管理しているようで、バージョンを指定する必要があります。
まず、バージョン一覧を表示します。
APP_IDの箇所は、application idです。仮に、myapp-1234とします。
$ export APP_ID=myapp-1234
$ appcfg.py --application=$APP_ID list_versions
01:01 AM Host: appengine.google.com
default: [20200403t000705, '1', 20190704t142926, 20190804t134302, 20190901t151503,
20191005t003752, 20191103t151559, 20191213t114343, 20200105t000209, 20200207t234131,
20200301t155026]
Code language: Bash (bash)
default内の先頭が、現在のバージョンです。これを--versionオプションで指定します。
ダウンロード中は、ログファイルが作成されないので、tail -f で進捗状況を見ることができません。そこで、--verboseオプションで、進捗を表示します。
$ appcfg.py --verbose --application=$APP_ID --version=20200403t000705 request_logs 2020-04-08-23-55-00.log
Code language: Bash (bash)
--version="*"でワイルドカード指定できないのかな?
500エラーだったわ