AWS Glue作业从外部REST API获取数据

12

我正在尝试创建一个工作流,其中AWS Glue ETL作业将从外部REST API拉取JSON数据,而不是从S3或其他任何AWS内部来源。 这是否可能? 有人这样做吗? 请帮忙!

4个回答

14

是的,我确实从REST API(如Twitter、FullStory、Elasticsearch等)中提取数据。通常情况下,我使用Python Shell作业进行提取,因为它们速度更快(相对较小的冷启动)。完成后,它会触发一种类似于Spark的作业,仅读取我需要的json项。 我使用requests Python库。

为了将数据保存到S3,您可以像这样做

import boto3
import json

# Initializes S3 client
s3 = boto3.resource('s3')

tweets = []
//Code that extracts tweets from API
tweets_json = json.dumps(tweets)
obj = s3.Object("my-tweets", "tweets.json")
obj.put(Body=data)

4
AWS Glue Python Shell执行程序最多只能使用1个DPU。 如果出现问题,可以像我这种情况一样将脚本作为任务在ECS中运行解决。
使用像asyncio和aiohttp这样的python库,您可以每秒运行约150个请求。 例子1例子2
然后,您可以使用Ray将请求分布到多个ECS任务或Kubernetes pod中。 您可以在这里找到Ray所能为您做的一些示例。
这还允许您为具有速率限制的API提供服务。
收集所需的所有数据后,可以通过AWS Glue运行它。

3

是的,这是可能的。您可以使用Amazon Glue从REST API中提取数据。虽然没有直接的连接器可用于Glue连接到互联网世界,但您可以设置一个具有公共和私有子网的VPC。在私有子网中,您可以创建一个ENI,仅允许GLue进行出站连接以从API获取数据。在公共子网中,您可以安装一个NAT网关。

此外,您还可能需要设置安全组来限制入站连接。希望这回答了您的问题。


0
自原始答案被接受以来的一个新选择是完全不使用 Glue,而是构建自定义连接器,用于Amazon AppFlow
我认为AppFlow是最适合在基于API的数据源之间传输数据的AWS工具,而Glue更适用于在AWS中已有数据的ODP发现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接