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

ログをダウンロードする  |  App Engine standard environment for Java 8  |  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)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 が最新です。

開発環境の設定  |  App Engine standard environment for Python 2  |  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]
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.logCode language: Bash (bash)

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

500エラーだったわ

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