5

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

4

3 回答 3

5

是的,我确实从 Twitter、FullStory、Elasticsearch 等 REST API 中提取数据。通常,我确实使用 Python Shell 作业进行提取,因为它们更快(相对较小的冷启动)。完成后,它会触发一个 Spark 类型的作业,该作业只读取我需要的 json 项目。我使用 requests pyhton 库。

为了将数据保存到 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)
于 2020-01-13T18:21:34.937 回答
2

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

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

于 2020-12-27T22:52:27.537 回答
2

AWS Glue Python Shell 执行程序的最大限制为 1 DPU。如果这是一个问题,就像我的情况一样,解决方案可能是在 ECS 中将脚本作为任务运行。

您可以使用 python 中的 asyncio 和 aiohttp 等库运行大约 150 个请求/秒。例1例2

然后,您可以使用 Ray 在多个 ECS 任务或 Kubernetes pod 之间分发您的请求。在这里,您可以找到一些 Ray 可以为您做些什么的示例。

这也允许您满足具有速率限制的 API。

收集完所有需要的数据后,通过 AWS Glue 运行它。

于 2020-07-31T09:59:57.507 回答