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

如何设置依赖SAM创建的其他无服务器函数ARN的SAM调用权限

解决方案

方案1:同SAM模板内函数互相调用(最推荐)

如果所有互相调用的Lambda都定义在同一个SAM模板文件中,直接利用CloudFormation的内置函数动态获取被调用方ARN即可,无需手动维护。
示例模板片段:

Resources:
  # 被调用方Lambda
  InvokeeLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: invokee/
      Handler: app.lambda_handler
      Runtime: python3.9

  # 调用方Lambda
  CallerLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: caller/
      Handler: app.lambda_handler
      Runtime: python3.9
      Policies:
        - Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action: lambda:InvokeFunction
              Resource: !GetAtt InvokeeLambda.Arn # 动态获取被调用方ARN

部署时CloudFormation会自动解析引用的ARN值,被调用方更新时策略也会同步更新,无需手动修改。

方案2:跨SAM模板/跨栈调用

如果函数拆分在不同的SAM模板(不同CloudFormation栈)中,有两种成熟的自动化方案:

  • 栈导出导入:在被调用方的模板中添加Outputs配置,将函数ARN导出为栈输出值,调用方模板使用!ImportValue引入该值即可。
    被调用方模板示例:
    Outputs:
      InvokeeLambdaArn:
        Value: !GetAtt InvokeeLambda.Arn
        Export:
          Name: InvokeeLambdaArn # 导出的名称全局唯一
    
    调用方模板引用示例:
    Resource: !ImportValue InvokeeLambdaArn
    
  • SSM参数存储:被调用方部署时自动将ARN写入AWS SSM参数存储,调用方模板直接读取对应参数值获取ARN,适合跨账号、跨区域的调用场景。

方案3:固定Lambda函数名称(兼容原有静态策略)

如果不想修改原有策略逻辑,可以在SAM定义函数时显式指定FunctionName属性,固定函数名称后ARN就不会自动追加随机后缀,和你之前使用静态名称的逻辑完全一致:

Resources:
  InvokeeLambda:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyLambda # 固定为你之前的静态名称
      CodeUri: invokee/
      Handler: app.lambda_handler
      Runtime: python3.9

注意事项:函数名称在同区域同账号下唯一,修改函数名称会触发Lambda资源删除重建,生产环境调整前需确认影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:05