从 AWS 无服务器查询外部 REST API 并将结果存储在 S3 中?



给定一个 REST API,在我的 AWS 环境之外,可以查询json数据:

https://someExternalApi.com/?date=20190814

如何在 AWS 中设置无服务器作业以定期访问外部终端节点并将结果存储在 S3 中?

我知道我可以实例化 EC2 实例并设置一个 cron。 但我正在寻找一种无服务器解决方案,这似乎更惯用。

提前感谢您的考虑和回复。

是的,你绝对可以做到这一点,而且可能通过几种不同的方式! 我会使用的部分是:

  1. CloudWatch Event 使用类似 cron 的计划,然后触发...
  2. 一个 lambda 函数(具有正确的 IAM 权限),它使用 pythonrequests或等效的 http 库调用 API,然后使用 AWS 开发工具包将结果写入您选择的 S3 存储桶:
  3. 准备接收的 S3 存储桶!

这应该是您实现所需目标的全部内容。

我将跳过实现细节,因为它在很大程度上超出了您的问题范围。因此,我将假设您的函数已经编写并针对nodeJS。

AWS可以自行执行此操作,但为了简化操作,我建议使用无服务器。我们将假设您正在使用它。

假设您完全不熟悉无服务器,您需要做的第一件事是创建一个处理程序:

serverless create --template "aws-nodejs" --path my-service

这将基于提供的路径上的aws-nodejs模板创建服务。在那里,你会发现serverless.yml(函数的配置)和handler.js(代码本身)。

假设您的函数在handler导出 (module.exports.crawlSomeExternalApi = () => {...}) 上导出为crawlSomeExternalApi,如果您想每 3 小时调用一次无服务器文件functions条目将如下所示:

functions:
crawl:
handler: handler.crawlSomeExternalApi
events:
- schedule: rate(3 hours)

就是这样!您现在需要的只是通过serverless deploy -v部署它


在后台,它的作用是在函数上创建一个 CloudWatch 计划条目。可以在文档中找到它的示例

你需要的第一件事是 Lambda 函数。在 Lambda 函数中实现您的逻辑,即命中 API 并将数据写入 S3 或其他任何内容。接下来,您需要一个计划来定期触发 lambda 函数。计划表达式可用于使用 cron 表达式或速率表达式定期触发事件。您之前创建的 lambda 函数应配置为此 CloudWatch 规则的目标。

生成的流将是,只要有触发器,CloudWatch 就会调用 lambda 函数(具体取决于您的 CloudWatch 规则)。然后,Lambda 执行您的逻辑。

最新更新