プロジェクトに Google Cloud BigTable クラスタをセットアップしました。プロジェクトのメイン コードベースは、標準の Python App Engine 環境内で実行されます。この環境では、grpcio に依存しているため、gcloud-python ライブラリを使用できません。これを回避するために、同じプロジェクト内に Python App Engine フレキシブル環境サービスをセットアップし、その上で実行する非常に単純な Flask サーバーを作成しました。これを標準環境から実行できます。コードは次のようになります。
from gcloud import bigtable
app = Flask(__name__)
client = bigtable.Client(project=bigtable_config.PROJECT_ID, read_only=True)
cluster = client.cluster(bigtable_config.ZONE_ID, bigtable_config.CLUSTER_ID)
table = cluster.table(bigtable_config.TABLE_ID)
@app.route("/query/<start_key>/<end_key>")
def run_query(start_key, end_key):
if not client.is_started():
client.start()
row_data = table.read_rows(start_key=start_key, end_key=end_key)
row_data.consume_all()
// do some stuff to the row data here, get results
return jsonify(results)
このコードをローカルで実行でき、うまく機能します。それを自分のサービスにデプロイでき、引き続きうまく機能します。ただし、サービスが一定期間アイドル状態になっている場合 (通常、約 1 時間後に気が付きました)、すべてのリクエストが次のエラーで失敗し始めます。
NetworkError(code=StatusCode.UNAUTHENTICATED, details="Request had invalid authentication credentials.")
サービスを再デプロイすると、再び機能し始めます。サービスをローカルで実行している場合、この動作は観察されません。
私は何を間違っていますか?クライアントの設定に誤りがあり、アプリ エンジンの資格情報が適切に使用されていないと思います。このエラーが発生した場合、クライアントを強制終了して再起動する必要がありますか?