Как сделать подстроку в потоке DynamodB Arn? - PullRequest
0 голосов
/ 15 января 2019

Я определил таблицу DynamoDB внутри вложенного стека в cloudformaion, только что строка выходного потока 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? или комбинированные функции для получения соответствующей строки.

пс:

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

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

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

Ответы [ 2 ]

0 голосов
/ 18 января 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 steam вызывает Fn :: Split для символа /, поэтому books_table является вторым элементом в результирующем массиве. Он выбирается с помощью Fn :: Select. Это последняя часть массива Fn :: Join-ed, поэтому результат должен быть таким, какой вы хотите.

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

0 голосов
/ 16 января 2019

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

TableName: !Ref "TableName"

вариант будет построить ARN

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