在 AWS Lambda 上运行免费 Twitter 机器人
Lambda 适合您吗?
编写 Lambda 函数
设置AWS Lambda
观看它
如果你读过《关于时间》这篇文章,你就会知道我坚信,现在花时间构建一些可以节省未来时间的东西。为此,我用 Go 语言构建了一个简单的 Twitter 机器人,它会偶尔发布我文章的链接,即使我太忙没时间使用它,也能让我的账号保持新鲜感。这些推文有助于为我的网站带来流量,而我无需费心。
我在 Amazon EC2 实例上运行了这个机器人大约一个月。我的 AWS 使用费用一直很便宜(比北美大部分地区一杯咖啡的价格还低),所以当我发现我使用的这个小实例的账单比上个月增加了 90% 时,我感到很惊讶。坦白说,我不认为 AWS 很贵,但我仍然……很抠门。我想要我的 Twitter 机器人,而且希望价格更便宜。
我一直想探索一下 AWS Lamda,觉得这是一个很好的机会。与持续运行(并收取费用)的 EC2 实例不同,Lambda 按请求收费,并且根据函数运行的时长收费。Lambda 也提供免费套餐,前 100 万个请求加上一定量的计算时间都是免费的。粗略地理解一下,假设你运行一个每天为你发帖两次的 Twitter 机器人,那么你每月使用 Lambda 的费用总计……加上一个……零。我已经运行我的 Lambda 函数几个星期了,完全免费。
最近,当我接管@freeCodeCampTO Twitter 时,我决定采用类似的策略,并利用这个机会为您记录整个过程,亲爱的读者。
因此,如果您目前正在使用一个全天候运行的实例来执行某个可以通过 cron 作业完成的任务,那么这篇文章非常适合您。我将介绍如何为 Lambda 编写函数,如何将其设置为自动运行,以及一个贴心的小惊喜——一个方便的 Bash 脚本,它可以在您需要更改时从命令行更新您的函数。让我们开始吧!
Lambda 适合您吗?
当我用 Go 编写 Twitter 机器人代码时,我打算让它在 AWS 实例上运行,并大量借鉴了Francesc 精彩的“Just for Func”一集。一段时间后,我对其进行了修改,让它每天两次从我的 RSS 订阅中随机选择一篇文章并发送推文链接。我想为 @freeCodeCampTO 机器人做类似的事情,让它每天早上发送一条关于编程的励志名言。
这是 Lambda 的一个很好的用例,因为:
- 程序应该执行一次
- 它按照固定的时间表运行,使用时间作为触发器
- 它不需要持续运行
需要牢记的是,Lambda 会响应您定义的事件运行一次函数。最常用的触发器是简单的 cron 表达式,但您还可以连接许多其他触发事件。您可以在此处查看概述。
编写 Lambda 函数
我发现用 Go 来实现这个非常简单。首先,获取aws-lambda-go库:
go get github.com/aws/aws-lambda-go/lambda
然后将其设为您的func main()
:
func main() {
lambda.Start(tweetFeed)
}
tweetFeed
实现所有操作的函数名在哪里?虽然我不会在这里详细介绍整个 Twitter 机器人的编写过程,但您可以在 GitHub 上查看我的代码。
设置AWS Lambda
我假设你已经拥有一个 AWS 账户。如果没有,请先访问这里:https://aws.amazon.com/free
1. 创建函数
在服务列表中找到 AWS Lambda,然后查找这个闪亮的按钮:
我们将从头开始编写一个函数。为函数命名,然后在“运行时”下选择“Go 1.x”。
在“角色名称”下,您可以输入任何您喜欢的名称。这是必填字段,但与本用例无关。
单击创建函数。
2. 配置你的函数
您将看到一个用于配置新函数的屏幕。在Handler下输入您的 Go 程序的名称。
向下滚动,您会看到一个输入环境变量的位置。这里非常适合输入 Twitter API 令牌和密钥,请使用程序所需的变量名。AWS Lambda 函数将使用您在此处提供的变量为您创建环境。
此用例无需进一步设置。点击页面顶部的“保存” 。
3. 上传您的代码
您可以在配置屏幕上将函数代码以 zip 文件的形式上传。由于我们使用的是 Go,因此您需要go build
先将生成的可执行文件压缩,然后再将其上传到 Lambda。
……当然,我不会每次调整函数的时候都手动这么做。这就是awscli
这个 Bash 脚本的用途!
update.sh
go build && \
zip fcc-tweet.zip fcc-tweet && \
rm fcc-tweet && \
aws lambda update-function-code --function-name fcc-tweet --zip-file fileb://fcc-tweet.zip && \
rm fcc-tweet.zip
现在,每当我进行调整时,我只需运行bash update.sh
。
如果您还没有使用AWS 命令行界面,那就赶紧使用吧,以后再感谢我。您可以在此处的快速配置部分pip install awscli
找到几分钟内完成设置和配置的说明。
4. 测试你的函数
想看看效果吗?当然想!点击顶部下拉菜单中的“配置测试事件”。
由于您将为此函数使用基于时间的触发器,因此您无需在弹出窗口中输入任何代码来定义测试事件。只需在“事件名称”下输入任意名称,并在下方字段中清空 JSON 即可。然后点击“创建”。
单击页面顶部的“测试” ,如果一切正常,您应该会看到...
5.设置 CloudWatch Events
为了像 cron 作业一样运行我们的函数(作为定期安排的基于时间的事件),我们将使用 CloudWatch。点击Designer侧栏中的“CloudWatch 事件”。
在“配置触发器”下,您将创建一个新规则。为您的规则选择一个描述性的名称(不包含空格或标点符号),并确保选中“计划表达式” 。然后,输入您希望程序运行的时间,例如“速率表达式”或“cron表达式”。
cron 表达式如下所示:cron(0 12 * * ? *)
分钟 | 小时 | 月份中的某天 | 月 | 星期几 | 年 | 用英语 |
---|---|---|---|---|---|---|
0 | 12 | * | * | ? | * | 每天中午 (UTC) 运行 |
有关如何编写 cron 表达式的更多信息,请阅读此文。
要了解当前的 UTC 时间,请单击此处。
如果您希望程序每天运行两次,比如一次在上午 10 点,一次在下午 3 点,则需要设置两个单独的 CloudWatch Events 触发器和 cron 表达式规则。
单击“添加”。
观看它
这就是启动并运行 Lambda 函数所需的全部内容!现在您可以放松身心,去做比在 Twitter 上分享 RSS 链接更重要的事情了。
文章来源:https://dev.to/victoria/running-a-free-twitter-bot-on-aws-lambda--2pik