You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation中AWS EventBridge Scheduler调用Lambda需指定RoleArn的疑问

关于AWS Scheduler调度器触发Lambda必须指定RoleArn的问题

核心结论

是的,你必须为AWS::Scheduler::Schedule的Target定义一个服务角色。这个角色用于赋予AWS Scheduler服务调用Lambda函数的权限,和你已添加的Lambda::Permission是互补配置,二者缺一不可。

原因说明

你配置的Lambda::Permission是允许指定主体(这里是events.amazonaws.com,即Scheduler服务)调用Lambda函数;而Scheduler的RoleArn是给Scheduler服务本身授权,让它拥有执行lambda:InvokeFunction动作的权限——这是新版Scheduler的强制要求,缺少该角色,Scheduler无法完成对Lambda的调用。

CloudFormation实现步骤

  1. 创建Scheduler专属服务角色
    定义一个IAM角色,信任策略允许AWS Scheduler服务扮演该角色,同时附加权限策略,仅允许调用目标Lambda函数。
  2. 在Scheduler的Target中引用该角色
    取消RoleArn的注释,关联刚创建的角色ARN即可。

完整示例代码

#...

# 1. 创建Scheduler服务角色
SchedulerLambdaInvokeRole:
  Type: AWS::IAM::Role
  Properties:
    AssumeRolePolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Effect: Allow
          Principal:
            Service: scheduler.amazonaws.com
          Action: sts:AssumeRole
    Policies:
      - PolicyName: SchedulerInvokeLambdaPolicy
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Action: lambda:InvokeFunction
              Resource: !GetAtt LambdaInstSchedDispatcher.Arn

# 2. 配置Scheduler调度器,引用上述角色
TriggerStop20dailyCET:
  Type: AWS::Scheduler::Schedule
  Properties:
    Description: Stop RDS and EC2 with Tag 20:00
    Name:
      !Join
      - '-'
      - - Ref: Prefix
        - Ref: Title
        - "20-00_CET"
    FlexibleTimeWindow:
      Mode: FLEXIBLE
      MaximumWindowInMinutes: 1
    ScheduleExpressionTimezone: Europe/Zurich
    ScheduleExpression: "cron(0 20 * * ? *)"
    State: "ENABLED"
    Target:
      Arn: !GetAtt LambdaInstSchedDispatcher.Arn
      RoleArn: !GetAtt SchedulerLambdaInvokeRole.Arn # 关联服务角色
      Input:  '{"action": "stop", "TagValues":["20:00"]}'

# 保留原有的Lambda权限配置
PermissionAForEventsToInvokeLambda:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName: !Ref LambdaInstSchedDispatcher
    Action: lambda:InvokeFunction
    Principal: events.amazonaws.com
    SourceArn: !GetAtt TriggerStop20dailyCET.Arn

#...

注意事项

  • 角色的信任策略必须指定scheduler.amazonaws.com作为服务主体,确保只有Scheduler服务能扮演该角色。
  • 权限策略中的Resource要精准指向你的Lambda函数ARN,遵循最小权限原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:35:21