【发布时间】:2019-09-13 14:21:24
【问题描述】:
我正在尝试从 AWS lambda 中的 BigQuery 获取数据集列表。但是,在执行 client.list_datasets() 方法时,它什么也不做,并且 lambda 超时。
我的代码如下:
from google.cloud.bigquery import Client
from google.oauth2.service_account import Credentials
credentials = Credentials.from_service_account_info(
service_account_dict)
client = Client(
project=service_account_dict.get("project_id"),
credentials=credentials
)
datasets = client.list_datasets()
print(datasets)
for dataset in datasets:
print("dataset info", dataset.__dict__)
第一个打印语句的输出是:
<google.api_core.page_iterator.HTTPIterator object at 0x7fbae4975550>
但是,dataset.__dict__ 的第二个打印没有被打印。或者,不执行对 HTTPIterator 对象的循环。
顺便说一句,代码在本地机器上运行良好。
【问题讨论】:
-
您的 Lambda 函数是否具有适当的网络访问权限?
-
@ArkaMukherjee 是的,Lambda 函数具有适当的网络访问权限。它在 VPC 内,但我设置了允许所有出站流量的安全组。
-
我会尝试调查数据集的大小和其他详细信息,看看您是否也收到错误对象
-
@TamirKlein,
datasets.__dict__的输出是这样的{'_started':False,'client':<google.cloud.bigquery.client.Clientobjectat..>,'item_to_value':<function_item_to_datasetat..>,'max_results':None,'page_number':0,'next_page_token':None,'num_results':0,'api_request':functools.partial(<boundmethodClient._call_apiof<google.cloud.bigquery.client.Clientobjectat...>>,<google.api_core.retry.Retryobjectat...>),'path':'/projects/firebase-test/datasets','_items_key':'datasets','extra_params':{'all':True},'_page_start':<function_do_nothing_page_startat...>,'_next_token':'nextPageToken'} -
如您所见,api 返回零 (0) 结果。你能在本地机器上打印这个项目并比较结果吗?另外,您确定您的服务帐户已正确上传到 lambda 节点容器吗?
标签: python-3.x amazon-web-services google-cloud-platform aws-lambda google-bigquery