我在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”隐藏在嵌套堆栈中。
答案 0 :(得分:0)
假设您正在使用CloudFormation创建DynamoDB表,那么您已经在命名您的表了。
TableName: !Ref "TableName"
一种选择是构建ARN
!Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${TableName}"
答案 1 :(得分:0)
尝试合并Fn::Join,Fn::Select和Fn::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上使用“选择并拆分”组合。