#aws-cdk #aws-pinpoint
Вопрос:
В AWS CDK создать службу Pinpoint проще простого. Но как вы получаете идентификатор проекта (также называемый идентификатором приложения Pinpoint или идентификатором приложения) для использования в последующем коде CDK.
Создайте проект Pinpoint:
const pinpointProject = new pinpoint.CfnApp(this, 'PinpointNotificationProject', {
name: 'myProject',
});
В документах AWS CloudFormation говорится:
«Когда вы передаете логический идентификатор этого ресурса встроенной функции Ref, Ref возвращает уникальный идентификатор (applicationId) для приложения Amazon Pinpoint».
Однако следующий код CDK возвращает имя проекта, а не идентификатор. Значение logicalId = MyProject .
cdk.Fn.ref(pinpointProject.logicalId); // This returns 'myProject'
pinpointProject.ref; // This also returns 'myProject'
Ответ №1:
Это подтверждено исправлено в последней версии CDK 1.130.0. Теперь ref
свойство возвращает идентификатор проекта Pinpoint.
Ответ №2:
Проблема, с которой вы столкнулись, заключается в том, что pinpoint не является готовым модулем. Вы можете видеть, что все функции внутри имеют префикс Cfn — cloudformation . Это означает, что они являются простыми и не привязаны ко всем интерфейсным перехватчикам, которые использует остальная часть CDK для разбрасывания вещей.
Во-первых, логический идентификатор НЕ является именем проекта. Логический идентификатор является частью шаблона Cloudformation, который создается для любого ресурса, который будет использоваться Cloudformation. Он связывает данный ресурс со стеком, так что любые изменения с тем же логическим идентификатором будут применены к тому же выделенному ресурсу. Он ссылается только на внутренний стек cloudformation и никогда не известен извне. CDK использует LogicalID для генерации имени ресурса, если вы его не указали.
Во-вторых, просмотр документации показывает, что CfnApp обладает следующим свойством: attrArn
. Это означает, что в вашем коде вы должны ссылаться на это с помощью pinpointProject.attrArn
arn ресурса pinpoint примерно так: arn:aws:mobiletargeting:region:accountId:apps/projectId.
с, как вы уже догадались, идентификатором проекта в качестве последнего значения. вы можете разделить строку и получить это значение или использовать методы обработки arn, предоставляемые как часть основного модуля, для извлечения того, что вам нужно.
Наконец, несмотря на то, что модуль Pinpoint в значительной степени является простым, все же может быть возможно передать переменную, хранящую ваш объект Pinpoint Construct, любому другому ресурсу, который этого требует. Я говорю «может«, потому что, как уже упоминалось, большинство функций с префиксом Cfn не имеют надлежащих хуков для выполнения этого хорошо, но некоторые делают, и я никогда не работал с Pinpoint напрямую.
Я рекомендую потратить некоторое время, чтобы понять, как изложена документация CDK. Местами это голые кости, но как только вы поймете, как они его структурировали, на подобные вопросы можно легко ответить.
Комментарии:
1. На основе документации CDK L1 / CFN-РЕСУРСЫ стабильны. Ничто не указывает на то, что оно не завершено, и я ожидал, что документы ClourFormation будут верны. Да — нет L2 / CDK-КОНСТРУКЦИЙ. Но, похоже, по недосмотру AWS не иметь простого доступа к одной из самых важных переменных. Я написал кучу стеков CDK, для которых требовались всевозможные интересные обходные пути, но раньше не сталкивался с этой конкретной проблемой — так что это обходное решение очень полезно, и arn доступен, как вы задокументировали.
2. Я не говорил, что это экспериментально. Но, как вы говорите, конструкций L2 пока нет — и это конечная цель всего CDK, связать их все вместе с помощью этих красивых крючков. Итак, его стабильный, но очень не законченный, я не знаю наверняка, но я думаю, что функции Cfn автоматически генерируются на основе свойств CloudFormation, а затем, конечно, очищаются, но все они имеют одинаковую базовую структуру атрибутов / методов, и они экспериментируют с большим количеством автоматических отраженийсоздание в CDK (см. Все библиотеки CDK, не являющиеся машинописными: grin:)
3. Как вы говорите, есть несколько очень интересных обходных путей, с которыми вам нужно справиться с CDK прямо сейчас, и, вероятно, так будет еще долго. Но, по крайней мере, мы можем их написать! Рад, что это помогло, извиняюсь, если я проявил снисходительность