使用 gcloud-python 连接到 google bigtable 时出现未经身份验证的错误

Unauthenticated error using gcloud-python to connect to google bigtable

我已经在我的项目中设置了一个 Google Cloud BigTable 集群。项目 运行s 在标准 Python App Engine 环境中的主要代码库,由于依赖 grpcio,因此无法使用 gcloud-python 库。为了解决这个问题,我在同一项目中设置了一个 Python App Engine Flexible Environment 服务,并在其上编写了一个非常简单的 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)

我可以在本地 运行 此代码并且效果很好。我可以将它部署到我的服务中,它会继续很好地工作。但是,如果该服务闲置一段时间(我通常会在大约一个小时后注意到它),那么我发出的每个请求都会开始失败并出现以下错误:

NetworkError(code=StatusCode.UNAUTHENTICATED, details="Request had invalid authentication credentials.")

如果我重新部署该服务,它会再次开始工作。当我 运行 在本地使用服务时,我没有观察到这种行为。

我做错了什么?我假设我在设置客户端时犯了一些错误,它没有正确使用应用程序引擎凭据。遇到这个错误需要杀客户端重启吗?

正在 github 跟踪此问题。