Как я могу обновить DataFormatConversionConfiguration потока доставки FireHose, используя AWS SDK? - PullRequest
0 голосов
/ 26 октября 2018

Есть ли у кого-нибудь рабочий пример использования firehose.update_destination для установки пункта назначения S3 DataFormatConversionConfiguration?Я следую указаниям в Можно ли указать преобразование формата данных в AWS Cloudformation? , используя boto3 (AWS Python SDK), но мне это не удалось.Когда я включаю DFCC в аргумент ExtendedS3DestinationConfiguration, происходит сбой со следующей ошибкой:

Exception during processing: An error occurred (InvalidArgumentException) when calling the UpdateDestination operation: RoleArn must not be null or empty

Если я передаю исходную конфигурацию назначения (возвращенную describe_delivery_stream) без изменений, обновление завершается успешно.Я также могу изменить другие параметры конфигурации, например, BufferingHints.Единственный раз, когда он терпит неудачу, это когда DataFormatConversionConfiguration не равен нулю.

Например, передача этого работает:

{
  "RoleARN": "arn:aws:iam::1234567:role/MyExecutionRole",
  "BucketARN": "arn:aws:s3:::my-bucket",
  "Prefix": "databases/tables/requests/",
  "BufferingHints": {
    "SizeInMBs": 64,
    "IntervalInSeconds": 120
  },
  "CompressionFormat": "UNCOMPRESSED",
  "EncryptionConfiguration": {
    "NoEncryptionConfig": "NoEncryption"
  },
  "CloudWatchLoggingOptions": {
    "Enabled": false
  },
  "S3BackupMode": "Disabled"
}

, но передача этого не удалась:

{
  "RoleARN": "arn:aws:iam::1234567:role/MyExecutionRole",
  "BucketARN": "arn:aws:s3:::my-bucket",
  "Prefix": "databases/tables/requests/",
  "BufferingHints": {
    "SizeInMBs": 64,
    "IntervalInSeconds": 120
  },
  "CompressionFormat": "UNCOMPRESSED",
  "EncryptionConfiguration": {
    "NoEncryptionConfig": "NoEncryption"
  },
  "CloudWatchLoggingOptions": {
    "Enabled": false
  },
  "S3BackupMode": "Disabled",
  "DataFormatConversionConfiguration": {
    "InputFormatConfiguration": {
      "Deserializer": {
        "OpenXJsonSerDe": {
        }
      }
    },
    "SchemaConfiguration": {
      "TableName": "requests",
      "DatabaseName": "mydb"
    },
    "OutputFormatConfiguration": {
      "Serializer": {
        "OrcSerDe": {
        }
      }
    }
  }
}

Единственное отличие - элемент DataFormatConversionConfiguration.

Я пропускаю что-то очевидное?Возможно, элемент DFCC поврежден?Мне не удалось найти какие-либо рабочие примеры, поэтому я исхожу исключительно из документации.

Я также довольно удивлен использованием RoleARN и BucketARN в элементе ввода, противобычное соглашение RoleArn и BucketArn, но не уверен, что оно уместно.

1 Ответ

0 голосов
/ 27 октября 2018

Как вы и подозревали, ваш DataFormatConversionConfiguration поврежден.

Возможно, это сбивает с толку, я думаю, RoleArn, что он жалуется на отсутствие, - DataFormatConversionConfiguration.SchemaConfiguration.RoleARN.

Я не собираюсь копировать все это здесь, но нахожу, что просмотр документации по сервису - лучший способ найти более глубокую информацию о типах, используемых SDK: https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html

...