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

CloudFormation报错Fn::GetAtt引用未定义资源EventHandlerLambdaFunction如何解决?

问题原因

错误核心是Fn::GetAtt引用的CloudFormation资源逻辑ID和实际定义的ID不匹配:

  1. CloudFormation资源逻辑ID大小写敏感,引用时必须和定义的拼写完全一致
  2. 你在Resources块下手动声明的Lambda函数资源逻辑ID就是你写的eventHandler,只有通过Serverless Framework顶层functions字段定义的函数,框架才会自动将函数名转成帕斯卡命名后拼接LambdaFunction作为生成的资源ID,你手动定义的资源不会生成这个带后缀的ID。
解决方案

直接修改Event Rule的Targets配置中的引用ID为实际的eventHandler即可,修改后的配置如下:

eventSourceRule:
    Type: 'AWS::Events::Rule'
    Properties:
      Name: eventSourceRule
      EventBusName: omnibus-${self:custom.stage}
      EventPattern: |
        {
          "source": ["op.api"]
        }
      RetryPolicy:
        MaximumRetryAttempts: 5
        MaximumEventAgeInSeconds: 900
      DeadLetterConfig:
        Type: SQS
        QueueLogicalId: EBRuleDLQ
      Targets:
        - Arn:
            Fn::GetAtt:
              - 'eventHandler'
              - 'Arn'
          Id: 'eventSourceRule'
异常排查

如果修改后仍报错,可按以下顺序检查:

  • 确认eventHandler和eventSourceRule属于同一个CloudFormation模板的Resources块下的同级资源,跨模板引用需要先导出资源再导入
  • 检查yaml文件缩进是否正确,eventHandler必须是Resources的直接子节点,不能有额外缩进
  • 确认你没有同时在Serverless Framework的functions字段和Resources字段重复定义同名函数,避免ID冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:01