appcfg.pyでhttplib2.SSLHandshakeError

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のアクセスログのダウンロード」する方法を説明します。

ログのダウンロード  |  Java 8 の App Engine スタンダード環境  |  Google Cloud

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)

「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']

同じころダウンロードした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]

解決方法

App Engine SDKは、1.9.86-2019-06-03 が最新です。

開発環境の設定  |  Python 2 の App Engine スタンダード環境  |  Google Cloud

このページの一番下、「元の 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]

default内の先頭が、現在のバージョンです。これを--versionオプションで指定します。

ダウンロード中は、ログファイルが作成されないので、tail -f で進捗状況を見ることができません。そこで、--verboseオプションで、進捗を表示します。

$ appcfg.py --verbose --application=$APP_ID --version=20200403t000705 request_logs 2020-04-08-23-55-00.log

--version="*"でワイルドカード指定できないのかな?

500エラーだったわ

タイトルとURLをコピーしました