«[ОШИБКА] Ошибка операционной системы: [Ошибка 38] Функция не реализована» — Доступ к trend deepsecurity.ComputersApi через Лямбда

#python #aws-lambda #deepsecurity

Вопрос:

Я написал скрипт на python, который успешно запрашивает вызовы API trend deepsecurity при локальном запуске на моей машине. Мне было поручено запустить сценарий в aws lambda, чтобы он был автоматизирован и мог быть запланирован.

Сценарий следует примерам из ссылки на api и успешно вызывает устаревший api. Однако, когда я пытаюсь выполнить запрос с помощью API компьютеров, он взрывается в строке : computers_api = deepsecurity.ComputersApi(deepsecurity.ApiClient(configuration))

 def get_computer_status_api():
    # Include computer status information in the returned Computer objects
    #expand = deepsecurity.Expand(deepsecurity.Expand.computer_status)
    expand = deepsecurity.Expand()
    expand.add(deepsecurity.Expand.security_updates)
    expand.add(deepsecurity.Expand.computer_status)
    expand.add(deepsecurity.Expand.anti_malware)

    # Set Any Required Values
    computers_api = deepsecurity.ComputersApi(deepsecurity.ApiClient(configuration))

    try:
        computers = computers_api.list_computers(api_version, expand=expand.list(), overrides=False)
        print("Querying ComputersApi...")
        api_response_str=str(computers)
        computer_count = len(computers.computers)
        print(str(computer_count)   " Computers listed in Trend")
    ...
 

ошибка, которую я получаю, такова :

 [ERROR] OSError: [Errno 38] Function not implemented
Traceback (most recent call last):
  File "/var/task/handler.py", line 782, in main
    get_computer_status_api()
  File "/var/task/handler.py", line 307, in get_computer_status_api
    computers_api = deepsecurity.ComputersApi(deepsecurity.ApiClient(configuration))
  File "/var/task/deepsecurity/api_client.py", line 69, in __init__
    self.pool = ThreadPool()
  File "/var/lang/lib/python3.8/multiprocessing/pool.py", line 925, in __init__
    Pool.__init__(self, processes, initializer, initargs)
  File "/var/lang/lib/python3.8/multiprocessing/pool.py", line 196, in __init__
    self._change_notifier = self._ctx.SimpleQueue()
  File "/var/lang/lib/python3.8/multiprocessing/context.py", line 113, in SimpleQueue
    return SimpleQueue(ctx=self.get_context())
  File "/var/lang/lib/python3.8/multiprocessing/queues.py", line 336, in __init__
    self._rlock = ctx.Lock()
  File "/var/lang/lib/python3.8/multiprocessing/context.py", line 68, in Lock
    return Lock(ctx=self.get_context())
  File "/var/lang/lib/python3.8/multiprocessing/synchronize.py", line 162, in __init__
    SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
  File "/var/lang/lib/python3.8/multiprocessing/synchronize.py", line 57, in __init__
    sl = self._semlock = _multiprocessing.SemLock(
 

поиск этой ошибки подразумевает, что я не могу использовать API deepsecurity в лямбде, потому что лямбды не поддерживают многопроцессорную обработку.

Ищу либо подтверждение того, что это так, либо предложения о том, что я могу изменить, чтобы это сработало.

Билет поддержки тренда предложил разместить здесь.

Ответ №1:

Устранена проблема путем изменения версии python с 3.8 на 3.7 в лямбде. Теперь скрипт успешно выполняется