为导入的 Kinesis 流获取 ARN
Getting an ARN for an imported Kinesis stream
我有两个嵌套的 Cloudformation 堆栈 - 第一个模板需要定义 Kinesis 流,第二个模板需要使用对该流的 ARN 的引用,作为进一步嵌套堆栈的参数。
所以我似乎需要 "export" 来自第一个模板的流,然后 "import" 它进入第二个模板(遵循关于 importing/exporting 跨堆栈值的 AWS 文档)-
我的导出代码 [截断] 看起来像这样 -
Outputs:
MyKinesisStreamOutput:
Value:
Ref: MyKinesisStream
Export:
Name: my-kinesis-stream
Resources:
MyKinesisStream:
Properties:
Name:
Ref: AppName
ShardCount: 1
Type: AWS::Kinesis::Stream
虽然我的导入代码 [截断] 看起来像这样 -
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
但随后我收到以下 Cloudformation 错误 -
Template error: every Fn::GetAtt object requires two non-empty parameters, the resource name and the resource attribute
并怀疑我犯规了 -
For the Fn::GetAtt logical resource name, you cannot use functions. You must specify a string that is a resource's logical ID.
假设我正确地导出和导入 Kinesis 流,那么我应该如何获得它的 Arn 值?
我可以想到两种可能的方法:
1) Fn::GetAtt:[!ImportValue my-kinesis-stream, Arn]
抱歉阅读不够仔细
或者我更喜欢什么
2)直接导出需要的值作为输出:Value: !GetAtt MyKinesisStream.Arn
希望对您有所帮助!
当您在 Outputs
中导出某些内容时,它只是一个字符串,您不能再在导入模板中对其进行 GetAtt
。
您需要做的是另外导出ARN:
Outputs:
MyKinesisStream:
Value: !Ref MyKinesisStream
Export:
Name: my-kinesis-stream
MyKinesisStreamArn:
Value: !GetAtt MyKinesisStream.Arn
Export:
Name: my-kinesis-stream-arn
我有两个嵌套的 Cloudformation 堆栈 - 第一个模板需要定义 Kinesis 流,第二个模板需要使用对该流的 ARN 的引用,作为进一步嵌套堆栈的参数。
所以我似乎需要 "export" 来自第一个模板的流,然后 "import" 它进入第二个模板(遵循关于 importing/exporting 跨堆栈值的 AWS 文档)-
我的导出代码 [截断] 看起来像这样 -
Outputs:
MyKinesisStreamOutput:
Value:
Ref: MyKinesisStream
Export:
Name: my-kinesis-stream
Resources:
MyKinesisStream:
Properties:
Name:
Ref: AppName
ShardCount: 1
Type: AWS::Kinesis::Stream
虽然我的导入代码 [截断] 看起来像这样 -
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
但随后我收到以下 Cloudformation 错误 -
Template error: every Fn::GetAtt object requires two non-empty parameters, the resource name and the resource attribute
并怀疑我犯规了 -
For the Fn::GetAtt logical resource name, you cannot use functions. You must specify a string that is a resource's logical ID.
假设我正确地导出和导入 Kinesis 流,那么我应该如何获得它的 Arn 值?
我可以想到两种可能的方法:
1) Fn::GetAtt:[!ImportValue my-kinesis-stream, Arn]
抱歉阅读不够仔细
或者我更喜欢什么
2)直接导出需要的值作为输出:Value: !GetAtt MyKinesisStream.Arn
希望对您有所帮助!
当您在 Outputs
中导出某些内容时,它只是一个字符串,您不能再在导入模板中对其进行 GetAtt
。
您需要做的是另外导出ARN:
Outputs:
MyKinesisStream:
Value: !Ref MyKinesisStream
Export:
Name: my-kinesis-stream
MyKinesisStreamArn:
Value: !GetAtt MyKinesisStream.Arn
Export:
Name: my-kinesis-stream-arn