Невозможно создать сценарий CDK для потока доставки Kinesis Data Firehose

Мне нужно создать сценарий CDK для развертывания конвейера данных. Я уже создал лямбда-функцию, тему SNS, корзину S3 (очень легко), но мне сложно создать поток доставки Kinesis Firehose для помещения файлов в корзину S3.

Мой код stack.py для потока доставки Kinesis Firehose пока не работает:

      delivery_stream = firehose.CfnDeliveryStream(
            self, "CdkworkshopFirehose",
            s3_destination_configuration=firehose.CfnDeliveryStream.S3DestinationConfigurationProperty(
                bucket_arn=destination_bucket.bucket_arn,
                buffering_hints=firehose.CfnDeliveryStream.BufferingHintsProperty(
                    interval_in_seconds=60
                ),
                compression_format="UNCOMPRESSED",
                role_arn=" "
            )
        )

Кто-нибудь знает, в чем проблема и почему? Поскольку этот код возвращает ошибку:

CdkworkshopFirehose Model validation failed (#/S3DestinationConfiguration/RoleARN: failed validation constraint for keyword [pattern])

person Mateja K    schedule 18.02.2021    source источник


Ответы (2)


Роль ARN является обязательной, и если вы посмотрите на сообщение об ошибке, оно сообщит вам, в чем проблема (я выделил ее):

CdkworkshopFirehose Модель не прошла валидацию (# / S3DestinationConfiguration / RoleARN: неудачное ограничение валидации для ключевого слова [шаблон])

Проблема является частью S3DestinationConfiguration, что означает, что ваш firehose.CfnDeliveryStream.S3DestinationConfigurationProperty, а в нем RoleARN не соответствует шаблону, который определяет допустимую роль ARN.

Решение: создайте роль и укажите ее ARN или введите ARN существующей роли.

person Maurice    schedule 18.02.2021
comment
Я разобрался, но не нашел ни одного примера создания роли в CDK - person Mateja K; 19.02.2021
comment
И я попытался ввести ARN существующей роли с консоли, но это тоже не сработало. - person Mateja K; 19.02.2021
comment
Хорошо, не могли бы вы добавить отдельный ответ, чтобы будущие читатели могли извлечь из него пользу? - person Maurice; 19.02.2021

Решение:

firehose_role = iam.Role(self, "firehose-role", assumed_by=iam.ServicePrincipal("firehose.amazonaws.com"))
firehose_role_arn = firehose_role.role_arn


        delivery_stream = firehose.CfnDeliveryStream(
            self, "CdkworkshopFirehose",
            s3_destination_configuration=firehose.CfnDeliveryStream.S3DestinationConfigurationProperty(
                bucket_arn=destination_bucket.bucket_arn,
                buffering_hints=firehose.CfnDeliveryStream.BufferingHintsProperty(
                    interval_in_seconds=60
                ),
                compression_format="UNCOMPRESSED",
                role_arn=firehose_role_arn
            )
        )
person Mateja K    schedule 19.02.2021