我试图从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__)
第一个print语句的输出是:
<google.api_core.page_iterator.HTTPIterator object at 0x7fbae4975550>
但是,dataset.__dict__
的第二张照片没有打印出来。或者,不执行循环遍历HTTPIterator
对象。
顺便说一句,代码在本地机器上运行得非常好。
我在lambda函数中使用的AWS VPC导致了这个问题。 VPC阻止了对外部API的请求(在我的案例中是BigQuery API)。
配置VPC子网和NAT网关以将lambda函数公开到Internet(0.0.0.0/0)解决了该问题。