【发布时间】:2021-03-16 00:24:55
【问题描述】:
我刚刚部署了一个 Cloud Run REST API 应用程序,该应用程序使用 Google Cloud Storage API 从存储桶和该存储桶内的文件夹中获取最后一个文件。这是我正在使用的代码:
import os
import logging
from flask import Flask
from flask import request, jsonify, render_template
from google.oauth2 import service_account
from google.cloud import storage
from bson.json_util import dumps
app = Flask(__name__)
storage_client = storage.Client.from_service_account_json('sa.json')
@app.route('/')
# API Version 1.0
def index():
"""Welcome to Last File API Version 1.0."""
button_text = "Add File"
return render_template('main.html', button_text=button_text)
@app.route("/last_file_m_individual/", methods=["GET"])
def list_m_individual_files():
"""List all files in GCP bucket."""
bucketName = request.args.get('bucketname')
bucketFolder = request.args.get('bucketfolder')
bucket = storage_client.get_bucket(bucketName)
files = bucket.list_blobs(prefix=bucketFolder)
fileList = [file.name for file in files if '.' in file.name]
last_file_pep = fileList[-1]
last_file_p = last_file_pep.split("/")
last_file = last_file_p[-1]
return last_file
@app.errorhandler(500)
def server_error(e):
# Log the error and stacktrace.
logging.exception('An error occurred during a request.')
return 'An internal error occurred.', 500
if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))
如何在没有本地服务帐户密钥文件的情况下在 Google Cloud Storage 和 Cloud Run 之间进行服务到服务身份验证?
提前致谢。
【问题讨论】:
-
要添加到@Steren's answer,您可能需要为云运行服务分配它自己的服务帐户,然后将该服务帐户添加到您要使用适当的role 访问的存储桶中,例如对象管理员使用gsutil 或控制台。
标签: google-cloud-platform google-cloud-storage google-cloud-run