无服务器地从 AWS 查询外部 REST API 并将结果存储在 S3 中?
Serverless-ly Query External REST API from AWS and Store Results in S3?
给定 REST API,在我的 AWS 环境之外,可以查询 json
数据:
https://someExternalApi.com/?date=20190814
如何在 AWS 中设置无服务器作业以定期访问外部端点并将结果存储在 S3 中?
我知道我可以实例化一个 EC2 实例并设置一个 cron。但是我正在寻找一个无服务器的解决方案,这似乎更地道。
提前感谢您的考虑和回复。
我将跳过实施细节,因为它很大程度上超出了您的问题范围。因此,我将假设您的函数已经编写并以 nodeJS 为目标。
AWS 可以 自行完成此操作,但为了使其更简单,我建议使用 Serverless。我们假设您正在使用它。
假设您对无服务器完全陌生,您需要做的第一件事就是创建一个处理程序:
serverless create --template "aws-nodejs" --path my-service
这将根据提供的路径上的 aws-nodejs
模板创建服务。在那里,您会找到 serverless.yml
(函数的配置)和 handler.js
(代码本身)。
假设您的函数在 handler
导出 (module.exports.crawlSomeExternalApi = () => {...}
) 中导出为 crawlSomeExternalApi
,如果您需要,无服务器文件中的 functions
条目将如下所示每 3 小时调用一次:
functions:
crawl:
handler: handler.crawlSomeExternalApi
events:
- schedule: rate(3 hours)
就是这样!您现在需要的只是通过 serverless deploy -v
部署它
在幕后,它所做的是在您的函数上创建一个 CloudWatch 计划条目。可以在 the documentation
上找到它的示例
是的,您绝对可以做到这一点,而且可能有几种不同的方式!
我将使用的作品是:
- CloudWatch Event 使用类似 cron 的计划,然后触发...
- 一个 lambda 函数(具有正确的 IAM 权限)调用 API 使用例如 python
requests
或等效的 http 库,然后使用 AWS SDK 将结果写入您选择的 S3 存储桶:
- 一个 S3 存储桶准备接收!
这应该是您实现所需的全部内容。
您首先需要的是 Lambda function. Implement your logic, of hitting the API and writing data to S3 or whatever, inside the Lambda function. Next thing, you need a schedule to periodically trigger your lambda function. Schedule expression 可用于使用 cron 表达式或速率表达式定期触发事件。您之前创建的 lambda 函数应配置为此 CloudWatch 规则的目标。
结果流将是,只要有触发器(取决于您的 CloudWatch 规则),CloudWatch 就会调用 lambda 函数。然后 Lambda 执行您的逻辑。
给定 REST API,在我的 AWS 环境之外,可以查询 json
数据:
https://someExternalApi.com/?date=20190814
如何在 AWS 中设置无服务器作业以定期访问外部端点并将结果存储在 S3 中?
我知道我可以实例化一个 EC2 实例并设置一个 cron。但是我正在寻找一个无服务器的解决方案,这似乎更地道。
提前感谢您的考虑和回复。
我将跳过实施细节,因为它很大程度上超出了您的问题范围。因此,我将假设您的函数已经编写并以 nodeJS 为目标。
AWS 可以 自行完成此操作,但为了使其更简单,我建议使用 Serverless。我们假设您正在使用它。
假设您对无服务器完全陌生,您需要做的第一件事就是创建一个处理程序:
serverless create --template "aws-nodejs" --path my-service
这将根据提供的路径上的 aws-nodejs
模板创建服务。在那里,您会找到 serverless.yml
(函数的配置)和 handler.js
(代码本身)。
假设您的函数在 handler
导出 (module.exports.crawlSomeExternalApi = () => {...}
) 中导出为 crawlSomeExternalApi
,如果您需要,无服务器文件中的 functions
条目将如下所示每 3 小时调用一次:
functions:
crawl:
handler: handler.crawlSomeExternalApi
events:
- schedule: rate(3 hours)
就是这样!您现在需要的只是通过 serverless deploy -v
在幕后,它所做的是在您的函数上创建一个 CloudWatch 计划条目。可以在 the documentation
上找到它的示例是的,您绝对可以做到这一点,而且可能有几种不同的方式! 我将使用的作品是:
- CloudWatch Event 使用类似 cron 的计划,然后触发...
- 一个 lambda 函数(具有正确的 IAM 权限)调用 API 使用例如 python
requests
或等效的 http 库,然后使用 AWS SDK 将结果写入您选择的 S3 存储桶: - 一个 S3 存储桶准备接收!
这应该是您实现所需的全部内容。
您首先需要的是 Lambda function. Implement your logic, of hitting the API and writing data to S3 or whatever, inside the Lambda function. Next thing, you need a schedule to periodically trigger your lambda function. Schedule expression 可用于使用 cron 表达式或速率表达式定期触发事件。您之前创建的 lambda 函数应配置为此 CloudWatch 规则的目标。
结果流将是,只要有触发器(取决于您的 CloudWatch 规则),CloudWatch 就会调用 lambda 函数。然后 Lambda 执行您的逻辑。