本文同步发表在 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 官网查看更多相关文档和教程。
