什么是 Lambda
AWS Lambda 是亚马逊网络服务(Amazon Web Services,AWS)推出的一种无服务器计算服务 (serverless)
AWS Lambda 允许你运行代码而无需预置或管理服务器。你只需上传代码,Lambda 会自动处理运行代码所需的一切资源分配和管理工作。
它以事件驱动的方式运行,即当特定的事件发生时,Lambda 函数会被自动触发执行。
- S3 存储桶中的对象上传、DynamoDB 表的更新等
- HTTP 请求(通过 API Gateway 集成)
- 定时触发(使用 CloudWatch Events)
- …
Lambda 分类
由于 Lambda 的触发方式不同,定义 Lambda 函数的方式不同,这里主要将 Lambda 分为两类:
- event 触发 Lambda 服务,例如最常见的是跟 API Gateway 集成,当 call Api Gateway URL的时候, 带入request body,触发 Lambda
- 定时触发 Lambda 服务, 例如使用 Cron 定义schedule 规则
构建 Schedule Lambda
下面会使用一个简单的 JS 代码,构建输出当前时间的 Lambda 服务,代码如下:
module.exports.lambdaHandler = async function () {
const now = new Date().toISOString();
console.log(`${now} Lambda executed without event/context`);
return {
status: "success",
message: "Hello from Lambda without event/context",
timestamp: now
};
上述代码定义了一个 lambdaHandler 函数,用于输出当前的时间,并且返回给调用方
💡 注意: 这里不需要给函数传递参数
定义 Serverless 文件
定义好我们的 Lambda 函数文件之后,我们需要定义部署文件
部署文件中包含:
- 服务名称
- Lambda 函数的运行时环境
- 触发规则
- Lambda 入口函数
- …
service: lambda-no-params-example
frameworkVersion: "3"
provider:
name: aws
runtime: nodejs18.x
region: us-east-1
memorySize: 128
timeout: 10
functions:
noParams:
handler: handler.lambdaHandler
events:
# 用 CloudWatch 定时触发(每天 UTC 01:00)
- schedule: cron(0 1 * * ? *)
plugins:
- serverless-offline
部署 Lambda 服务
配置 AWS 环境认证
安装 aws-cli 工具
下面命令是在 mac 中安装 aws, 如果是其他环境,可以搜索相应平台安装步骤
brew install awscli
认证 AWS 环境
在输入 aws configure 命令并回车之后,填写对应的access key 和 secret key即可完成认证
# aws configure
AWS Access Key ID [None]: XXXXXXXXX
AWS Secret Access Key [None]: XXXXXXX
Default region name [us-east-1]:
Default output format
💡 注意: 根据自己环境的 region 填写对应的 Default region
安装 node 工具。这里依然是 mac 环境下的安装命令,如果是其他环境,需要搜索安装步骤
brew install node
安装工具并部署
Serveless 工具安装
npm install -g yarn
yarn add serverless
部署 Lambda 到 AWS
根据实际环境,更改 dev 名称
yarn serverless deploy -s dev --verbose --conceal