如何制作流dynamodb arn的子串?

时间:2019-01-15 04:33:53

标签: amazon-dynamodb amazon-cloudformation amazon-dynamodb-streams

我在cloudformaion的嵌套堆栈中定义了DynamoDB表,只是具有如下输出流arn字符串:

arn:aws:dynamodb:us-east-1:123456789012:table/books_table/stream/2015-05-11T21:21:33.291

我想获取此流arn的子字符串并获取字符串:

arn:aws:dynamodb:us-east-1:123456789012:table/books_table

能否给我示例如何对上述情况的流arn进行子字符串化? 如何只剪掉最后两个部分?在AWS cloudformation中使用什么功能来做到这一点?或组合函数以获取相应的字符串。

ps:

我不能使用:

Fn::GetAtt: [ 'dynamodbTableLogicalId', 'Arn' ]

直接将其“ dynamodbTableLogicalId”隐藏在嵌套堆栈中。

2 个答案:

答案 0 :(得分:0)

假设您正在使用CloudFormation创建DynamoDB表,那么您已经在命名您的表了。

TableName: !Ref "TableName"

一种选择是构建ARN

!Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${TableName}" 

答案 1 :(得分:0)

尝试合并Fn::JoinFn::SelectFn::Split。这很丑陋,但是Cloudformation中的字符串转换经常是这种情况:

Fn::Join [':',
          ['arn', 'aws', 'dynamodb': ${AWS::Region}, ${AWS::AccountId}, 'table/',
           Fn::Select [1, Fn::Split ['/', 'arn:aws:dynamodb:us-east-1:123456789012:table/books_table/stream/2015-05-11T21:21:33.291']]]
]

请注意,我没有测试此代码。有趣的部分是Steam ARN在/字符上调用Fn :: Split,因此books_table是结果数组中的第二个元素。使用Fn :: Select选择它。它是数组的最后一部分,是Fn :: Join-ed,因此结果应该是您想要的。

如果需要,可以在区域和帐户ID上使用“选择并拆分”组合。