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

CloudFormation中使用!ImportValue导入角色ARN的正确方法

解决CloudFormation跨栈导入IAM角色ARN的问题

你的错误有两个核心原因,修正后就能正常导入:

1. YAML语法错误

你在栈2里写的Role: !ImportValue: LocalLambdaExecRole.Arn不符合CloudFormation的YAML语法规范。短格式函数!ImportValue后面不能跟冒号,正确写法是直接将导入名称放在函数后(名称含特殊字符时用引号包裹)。

2. 导入名称不匹配

栈1的导出名称是!Sub "${AWS::StackName}-LocalLambdaExecRole",而非LocalLambdaExecRole.Arn。另外,栈1中!Ref LocalLambdaExecRole返回的就是IAM角色的ARN,无需额外添加.Arn后缀。

修正后的栈2配置

Resources:
  LogGroup:
    Type: "AWS::Logs::LogGroup"
    Properties:
      LogGroupName: "TestGroup"
  HtmlRendererFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: "TestLambda"
      # 替换为栈1实际的栈名称,例如栈1名为MyStack则写MyStack-LocalLambdaExecRole
      Role: !ImportValue "MyStack-LocalLambdaExecRole"
      Runtime: python3.9
      Architectures:
        - arm64
      Handler: app.handler
      Timeout: 40
      MemorySize: 8000
      PackageType: Image
      Code:
          ImageUri: "123.dkr.ecr.eu-west-1.amazonaws.com/test:latest"
      VpcConfig:
        SecurityGroupIds:
          - sg-0e640b53f5ba70c4e
        SubnetIds:
          - subnet-037112f9a752f20c8
          - subnet-0abd66e55d4b9f967
          - subnet-053e223fd30ba07de

补充说明

  • 若栈1的栈名称是动态值,可在栈2中用!Sub拼接导入名称,示例:
    Role: !ImportValue !Sub "${Stack1Name}-LocalLambdaExecRole"
    
    其中Stack1Name需作为栈2的参数传入。
  • 确保栈1和栈2处于同一AWS区域,且栈1已部署完成,导出名称未被其他栈占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:15:41