You need to enable JavaScript to run this app. 如何在serverless.yml中配置授权允许CloudWatch调用Lambda函数
优惠活动
大模型
产品
解决方案
定价
更多

如何在serverless.yml中配置授权允许CloudWatch调用Lambda函数

在serverless.yml中配置CloudWatch授权触发Lambda的方案

现有配置报错的原因

  • 函数资源引用不匹配:代码中Fn::GetAtt引用的cleanLambdaFunction是不存在的资源,Serverless Framework为generateFile函数自动生成的CloudFormation逻辑ID为GenerateFileLambda,引用错误会直接导致部署失败
  • 缺失必填字段Sid:该字段对应CLI命令中的--statement-id,是Lambda权限策略的唯一标识,未配置会触发校验错误
  • SourceArn配置为通配符*:权限范围过大不符合AWS安全要求,部分场景下会被拦截,需填写对应CloudWatch Events规则的实际ARN

正确配置方案

分两种常见场景适配:

场景1:使用Serverless内置定时触发能力(推荐)

如果是需要让Lambda按定时规则执行,直接在函数定义下添加events配置即可,Serverless会自动生成CloudWatch Events规则和对应的Lambda调用权限,无需手动编写权限资源:

functions:
  generateFile:
    handler: api/handler.generateFile
    tags:
      LiveOrTest: test
    events:
      - schedule:
          rate: cron(0 1 * * ? *) # 按需修改定时规则
          enabled: true

场景2:授权外部已有CloudWatch规则触发Lambda

如果是要授权已存在的CloudWatch Events规则调用当前Lambda,手动修正后的权限资源配置如下:

functions:
  generateFile:
    handler: api/handler.generateFile
    tags:
      LiveOrTest: test

resources:
  Resources:
    GenerateFileCloudWatchInvokePermission:
      Type: AWS::Lambda::Permission
      Properties:
        FunctionName: !Ref GenerateFileLambda
        # 替换为唯一的权限标识,对应CLI的--statement-id
        Sid: AllowCloudWatchEventsInvokeGenerateFile
        Action: lambda:InvokeFunction
        Principal: events.amazonaws.com
        # 替换为实际的CloudWatch Events规则ARN,对应CLI的--source-arn
        SourceArn: arn:aws:events:us-east-1:1232132323:rule/XXXX

补充说明

如果需要授权同一账号下所有自定义CloudWatch规则调用该Lambda,可将SourceArn替换为通配符格式arn:aws:events:${aws:region}:${aws:accountId}:rule/*,权限范围比全通配符*更安全。


内容的提问来源于stack exchange,提问作者Rilcon42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 12:15:01