AWS Lambda 服务 (Schedule)

什么是 Lambda

AWS Lambda 是亚马逊网络服务(Amazon Web Services,AWS)推出的一种无服务器计算服务 (serverless)

AWS Lambda 允许你运行代码而无需预置或管理服务器。你只需上传代码,Lambda 会自动处理运行代码所需的一切资源分配和管理工作。

它以事件驱动的方式运行,即当特定的事件发生时,Lambda 函数会被自动触发执行。

  • S3 存储桶中的对象上传、DynamoDB 表的更新等
  • HTTP 请求(通过 API Gateway 集成)
  • 定时触发(使用 CloudWatch Events)

Lambda 分类

由于 Lambda 的触发方式不同,定义 Lambda 函数的方式不同,这里主要将 Lambda 分为两类:

  1. event 触发 Lambda 服务,例如最常见的是跟 API Gateway 集成,当 call Api Gateway URL的时候, 带入request body,触发 Lambda
  2. 定时触发 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

Leave a Comment

Your email address will not be published. Required fields are marked *