本文同步发表在 xLog
写在前面
什么是 AWS Lambda
AWS Lambda 是一项计算服务,可使您无需预配置或管理服务器即可运行代码。Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量调配和弹性伸缩和记录。借助 Lambda,您可以为几乎任何类型的应用程序或后端服务运行代码。您只需要以 Lambda 支持的一种语言提供您的代码。
您可以将代码组织到 Lambda 函数。只有在需要时 Lambda 才运行您的函数,并且能自动扩展,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费,代码未运行时不产生费用。
为什么使用 AWS Lambda
- 无需管理
AWS Lambda 是一种无服务器计算服务,可以自动扩展和管理基础架构,无需考虑服务器的管理和维护,只需编写代码并将其上传到 Lambda。 - 低成本
先前的 Bot 均运行在服务器上,无论 Bot 是否被使用,服务器都会一直运行,增加了运行成本。而正如上方描述,只需支付实际运行的代码时间,使用 Lambda 则可大大降低运行成本。 - 快速部署
可以在几分钟内将代码部署到生产环境中。
尝试
创建 Telegram Bot
在 Telegram 中搜索 @BotFather
,按照提示创建 Bot 。
创建完成后,会得到一个 token
(红线标出部分),保留 token
用于后续的 Bot 操作。
创建 Lambda 函数
前往 AWS Lambda 函数控制台 ,选择创建函数
创建一个新函数。
输入任意函数名称,运行时选择 Python 3.10
,然后点击 创建函数
。
创建完成后,可以看到有一些示例代码。
创建 API
前往 API Gateway 控制台 ,在 REST API
中点击 构建
。
这里选择 REST API
,当然也可以选择 HTTP API
。
在 Actions
菜单中点击 Create Method
。
为设置简便,这里选择 ANY
方法。
勾选 Use Lambda Proxy integration
并填入 Lambda Function
,然后点击 Save
。
点击 Actions
菜单中的 Deploy API
。
在 Deployment stage
中选择 New Stage
,输入任意名称,然后点击 Deploy
。
完成后得到 Invoke URL
。
可以尝试访问 Invoke URL
,如果返回 "Hello from Lambda!"
则表示 Lambda 和 API 已经创建成功。
构建一个简单的 Bot
回到 Lambda 控制台,点击 配置
选项卡,新建一个环境变量用来存放 Bot Token ,如图。
在本地计算机新建一个文件夹,创建一个 lambda_function.py
文件,用于存放 Lambda 函数的代码。
声明一个变量来使用环境变量中的 Bot Token 。
1 | import os |
创建一个函数,用于发送消息。
1 | import requests |
创建一个简单的函数,用于处理 Bot 的消息,当然这部分可以根据需求添加更丰富的内容。
这里创建一个复读机 Bot (?
1 | import json |
最后,创建 Lambda 函数的入口函数。
注意,一定要返回状态码 200 ,否则 Telegram 服务器会认为 Bot 未收到消息从而持续发送同一内容,然后(手动滑稽
1 | def lambda_handler(event, context): |
1 | import os |
安装依赖项
由于 Lambda 不提供所有的依赖项,所以需要自行安装。
进入刚才创建的文件夹,在该目录下使用 pip
安装 requests
至该文件夹。
1 | pip install --target ./ requests |
将该文件夹内所有内容(包含 lambda_function.py
)打包成 .zip
文件。
在 AWS Lambda 控制台选择 代码
选项卡,点击 上传自 .zip 文件
。
设置 Telegram Bot Webhook
API Gateway 是将 Lambda 函数和 Telegram 服务器连接的桥梁,通过设置 Webhook 在用户每次向机器人发送消息时将内容传入 API Gateway 供 Lambda 使用。
我们可以通过发送一个请求到 Telegram Bot API 来设置 Webhook 。
1 | curl https://api.telegram.org/bot{BOT_TOKEN}/setWebhook?url={GATEWAY_URL} |
请注意替换 <BOT_TOKEN>
和 <API_ENDPOINT_URL>
,例如:
1 | curl https://api.telegram.org/bot5653724882:AAHcfYeYzEDfcg2svKzO9ZpiAFPKl4ulKuQ/setWebhook?url=https://6sgwszwmw0.execute-api.ap-southeast-1.amazonaws.com/Test |
返回 {"ok":true,"result":true,"description":"Webhook is already set"}
则设置成功。
构建完成
在 Telegram 中向 Bot 发送任意消息, Bot 会重复你发送的消息,大功告成~
结尾
本部分由 ChatGPT 生成
总之,AWS Lambda 是一种无服务器计算服务,它帮助用户无需预配置或管理服务器即可运行代码。这个示例项目可以作为 AWS Lambda 和 Telegram API 的开端,展示了如何在几分钟内将代码部署到生产环境中,并通过 Telegram Bot 与用户交互。此外,由于 AWS Lambda 可以自动扩展和管理基础设施,因此在使用该服务时可以大大降低运行成本。
如果您想进一步了解 AWS Lambda 或其他 AWS 服务,建议前往 AWS 官网查看更多相关文档和教程。