【问题标题】:How to make substring of stream dynamodb arn?如何制作流dynamodb arn的子串?
【发布时间】:2019-06-09 02:29:16
【问题描述】:

我在 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'隐藏在嵌套堆栈中。

【问题讨论】:

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


    【解决方案1】:

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

    TableName: !Ref "TableName"
    

    一种选择是构建 ARN

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

    【讨论】:

      【解决方案2】:

      尝试组合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 上使用 Select & Split 组合。

      【讨论】:

      • 我可以添加个人定义的函数或宏来替换这个丑陋的组合吗?
      • 当然可以。宏很强大,你可以用它们做几乎任何你想做的事情。
      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 2017-05-20
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      相关资源
      最近更新 更多