При использовании Boto3 и Create_Pipeline для получения ошибки PipelineActivity должен быть один и только один член. - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть программа на python, которая использует boto3 для создания пути IoT Analytics. Моя программа смогла успешно создать канал и хранилище данных, но не удается, когда я пытаюсь соединить их через функцию создания конвейера. Мой код выглядит следующим образом:

dactivity =  [{ 
          "channel": { 
          "channelName": channel["channelName"],
          "name": IoTAConfig["channelName"],
          "next" : IoTAConfig["datastoreName"]
           },
          "datastore": { 
          "datastoreName": ds["datastoreName"],
          "name": IoTAConfig["datastoreName"]
          }
          }]
pipeline = iota.create_pipeline(
        pipelineActivities = dactivity,           
        pipelineName = IoTAConfig["pipelineName"]
    )

Код ошибки:

Traceback (most recent call last):
  File "createFullGG.py", line 478, in <module>
    createIoTA()
  File "createFullGG.py", line 268, in createIoTA
    pipelineName = IoTAConfig["pipelineName"]
  File "/usr/lib/python2.7/site-packages/botocore/client.py", line 320, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/lib/python2.7/site-packages/botocore/client.py", line 623, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.InvalidRequestException: An error occurred (InvalidRequestException) when calling the UpdatePipeline operation: PipelineActivity must have one and only one member

Согласно документации конвейерная деятельность может содержать от 1 до 25 записей, если они находятся в массиве из 1 объекта. Я понятия не имею, почему это продолжает терпеть неудачу. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 ноября 2018

Публичная документация выглядит немного запутанно из-за способа представления необязательных элементов, хорошая новость в том, что это легко исправить.

Исправленная версия того, что вы пытаетесь записать, будет иметь вид:

dactivity=[
    {
          "channel": {
                "channelName": channel["channelName"],
                "name": IoTAConfig["channelName"],
                "next" : IoTAConfig["datastoreName"]
           }
    },
    {
          "datastore": {
                "datastoreName": ds["datastoreName"],
                "name": IoTAConfig["datastoreName"]
          }
    }
]

response = client.create_pipeline(
        pipelineActivities = dactivity,
        pipelineName = IoTAConfig["pipelineName"] 
    )

Итак, вы предлагаете целый ряд действий, например [{A1}, {A2}], если это имеет смысл?

Это помогает?

...