Как сделать подстроку потока DynaModb Arn?

Я определил таблицу DynamoDB внутри вложенного стека в cloudformaion, просто имею строку выходного потока, например:

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

Я хочу получить подстроку этого потока и получить строку:

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

Можете ли вы привести пример, как сделать подстроку потока в приведенном выше случае? Как просто вырезать две последние части? использовать какую функцию для этого в aws cloudformation? или комбинированные функции для получения соответствующей строки.

ps:

Я не могу использовать:

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

напрямую, так как dynamodbTableLogicalId скрыт внутри вложенного стека.


person user504909    schedule 15.01.2019    source источник


Ответы (2)


Предполагая, что вы создаете таблицу DynamoDB с помощью CloudFormation, вы уже называете свою таблицу.

TableName: !Ref "TableName"

вариантом было бы построить ARN

!Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${TableName}" 
person George Rushby    schedule 16.01.2019

Попробуйте объединить 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']]]
]

Обратите внимание, что я не тестировал этот код. Интересно то, что паровой ARN вызывает Fn::Split для символа /, поэтому books_table является вторым элементом результирующего массива. Выбирается с помощью Fn::Select. Это последняя часть массива, которая будет Fn::Join-ed, поэтому результат должен быть тем, что вы хотите.

При необходимости вы можете использовать комбинацию «Выбрать и разделить» для региона и идентификатора учетной записи.

person Milan Cermak    schedule 18.01.2019
comment
Могу ли я добавить личную функцию или макрос заменить этот уродливый комбайн? - person user504909; 20.01.2019
comment
Безусловно. Макросы мощны, вы можете делать с ними практически все, что захотите. - person Milan Cermak; 20.01.2019