获取导入的 Kinesis 流的 ARN

Jus*_*tin 0 amazon-web-services aws-cloudformation amazon-kinesis

我有两个嵌套的 Cloudformation 堆栈 - 第一个模板需要定义 Kinesis 流,第二个需要使用对该流的 ARN 的引用,作为进一步嵌套堆栈的参数。

因此,似乎我需要从第一个模板“导出”流,并将其“导入”到第二个模板中(遵循有关跨堆栈导入/导出值的 AWS 文档)-

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html

我的导出代码 [截断] 看起来像这样 -

Outputs:
  MyKinesisStreamOutput:
    Value:
      Ref: MyKinesisStream
    Export:
      Name: my-kinesis-stream      
Resources:
  MyKinesisStream:
    Properties:
      Name:
        Ref: AppName
      ShardCount: 1
    Type: AWS::Kinesis::Stream
Run Code Online (Sandbox Code Playgroud)

虽然我的导入代码 [截断] 看起来像这样 -

MyNestedStack:
  Type: AWS::CloudFormation::Stack
  Properties:
    TemplateURL: !Sub "https://s3.${AWS::Region}.amazonaws.com/my-nested-stack.yaml"
    Parameters:
      AppName: my-nested-stack
      KinesisStream:
        Fn::GetAtt:
          - Fn::ImportValue:
              my-kinesis-stream
          - Arn
Run Code Online (Sandbox Code Playgroud)

但是后来我收到以下 Cloudformation 错误 -

Template error: every Fn::GetAtt object requires two non-empty parameters, the resource name and the resource attribute
Run Code Online (Sandbox Code Playgroud)

并怀疑我犯了这个 -

For the Fn::GetAtt logical resource name, you cannot use functions. You must specify a string that is a resource's logical ID.
Run Code Online (Sandbox Code Playgroud)

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html

假设我正确导出和导入 Kinesis 流,那么我应该如何获得它的 Arn 值?

lex*_*ore 6

当您在 中导出某些内容时Outputs,它只是一个字符串,您不能再GetAtt在导入模板中使用它。

您需要做的是额外导出 ARN:

Outputs:
  MyKinesisStream:
    Value: !Ref MyKinesisStream
    Export:
      Name: my-kinesis-stream
  MyKinesisStreamArn:
    Value: !GetAtt MyKinesisStream.Arn
    Export:
      Name: my-kinesis-stream-arn
Run Code Online (Sandbox Code Playgroud)