【问题标题】:Unable to pass Import Value in Type:String field in Cloudformation无法在类型中传递导入值:Cloudformation 中的字符串字段
【发布时间】:2020-12-28 19:05:48
【问题描述】:

我有一个父堆栈,它可以像这样导出一个角色:

Outputs:
  ExportApiGatewayLambdaInnvocationRole:
     Value: !GetAtt 'ApiGatewayLambdaInnvocationRole.Arn'
     Export:
        Name:
          Fn::Sub: "${AWS::StackName}-ApiGatewayLambdaInnvocationRole"

现在,我有一个子堆栈,它试图引用从父堆栈导出的角色 arn,如下所示:

StatusLambda:
   Type: AWS::Lambda::Function
   Properties:
     FunctionName: !Sub '${Region}-Lambda'
     Code:
       S3Bucket: !Ref PackageRepository
       S3Key: !Ref LambdaPackageLocation            
     Role:
       - Fn::ImportValue: "parent-stack-ApiGatewayLambdaInnvocationRole"
     Handler: Functions/JobStatusProvider/index.handler
     Runtime: nodejs12.x
     Timeout: 150

问题:角色字段是字符串类型,不接受 ImportValue 函数。我该如何解决?请帮忙

错误:Value of property Role must be of type String

【问题讨论】:

  • 您确定该角色是在您尝试在嵌套堆栈中使用它时创建的吗?您不应该在嵌套堆栈中设置dependsOn 属性吗?

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

Role 应该只是 String,但您正在创建一个列表。

以下应该可以纠正问题(假设其他事情是正确的):

StatusLambda:
   Type: AWS::Lambda::Function
   Properties:
     FunctionName: !Sub '${Region}-Lambda'
     Code:
       S3Bucket: !Ref PackageRepository
       S3Key: !Ref LambdaPackageLocation            
     Role: !ImportValue parent-stack-ApiGatewayLambdaInnvocationRole
     Handler: Functions/JobStatusProvider/index.handler
     Runtime: nodejs12.x
     Timeout: 150

【讨论】:

  • 是的,这解决了问题,但问题仍然存在,我必须对值进行硬编码。有没有办法来解决这个问题?如何引用参数
  • @RedBottle 嗨。哪个参数?您的错误是由于使用列表而不是字符串。
  • Nvm。我使用完整的函数名修复了它,并将它与 !Ref 结合起来。但是你的答案是正确的。谢谢
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多