AWS Lambda Boto3 "Неизвестный сервис: 'sqs'" - PullRequest
0 голосов
/ 06 февраля 2019

Я только что написал лямбда-функцию Python, которая выполняет некоторые функции MySQL, а затем отправляет сообщение в SQS.Все это прекрасно работает локально, и сообщение успешно отправляется в SQS.

Я создаю SQS Client следующим образом:

sqsClient = boto3.client('sqs')

Однако после развертывания моей упакованной функции Lambda в AWS и ее запускавстроенная функция лямбда-теста.Я получаю следующую ошибку:

{
  "errorMessage": "Unknown service: 'sqs'. Valid service names are: ",
  "errorType": "UnknownServiceError",
  "stackTrace": [
    "  File \"/var/lang/lib/python3.7/imp.py\", line 234, in load_module\n    return load_source(name, filename, file)\n",
    "  File \"/var/lang/lib/python3.7/imp.py\", line 171, in load_source\n    module = _load(spec)\n",
    "  File \"<frozen importlib._bootstrap>\", line 696, in _load\n",
    "  File \"<frozen importlib._bootstrap>\", line 677, in _load_unlocked\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 728, in exec_module\n",
    "  File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed\n",
    "  File \"/var/task/main.py\", line 20, in <module>\n    sqsClient = boto3.client('sqs')\n",
    "  File \"/var/task/boto3/__init__.py\", line 91, in client\n    return _get_default_session().client(*args, **kwargs)\n",
    "  File \"/var/task/boto3/session.py\", line 263, in client\n    aws_session_token=aws_session_token, config=config)\n",
    "  File \"/var/task/botocore/session.py\", line 838, in create_client\n    client_config=config, api_version=api_version)\n",
    "  File \"/var/task/botocore/client.py\", line 79, in create_client\n    service_model = self._load_service_model(service_name, api_version)\n",
    "  File \"/var/task/botocore/client.py\", line 117, in _load_service_model\n    api_version=api_version)\n",
    "  File \"/var/task/botocore/loaders.py\", line 132, in _wrapper\n    data = func(self, *args, **kwargs)\n",
    "  File \"/var/task/botocore/loaders.py\", line 378, in load_service_model\n    known_service_names=', '.join(sorted(known_services)))\n"
  ]
}

Моя первоначальная мысль заключалась в том, что, возможно, лямбда-версия boto3 еще не включает SQS.Я не думаю, что это проблема, так как я развертываю свою собственную версию boto и botocore.Я также добавил следующие строки в свою функцию, чтобы убедиться, что Lambda использует мою развернутую версию boto, а не встроенную версию:

print("boto3 version:"+boto3.__version__)
print("botocore version:"+botocore.__version__)

, которая выводит следующие версии:

boto3 version:1.9.87
botocore version:1.12.87

Это правильно и так же, как мои локальные версии.

Любая помощь будет оценена.Спасибо.

РЕДАКТИРОВАТЬ: В настоящее время я использую пакетный файл для развертывания моего кода, который выглядит следующим образом:

powershell.exe -nologo -noprofile -command "& {& Remove-Item .\deploy -Force -Recurse }"
mkdir deploy
powershell.exe -nologo -noprofile -command "& {& Get-ChildItem .\src -Exclude '__pycache__' | Copy-Item -Destination .\deploy }"
cd deploy
pipenv lock -r > dependencies.txt
pip install -r dependencies.txt --no-deps -t .
powershell.exe -nologo -noprofile -command "& {& Get-ChildItem . -Exclude '__pycache__' | Compress-Archive -DestinationPath deploy.zip -Force }"
aws lambda update-function-code --function-name API-LogUserInterest --zip-file fileb://deploy.zip
echo Deployment finished!
pause

Это создает папку "deploy" вмой рабочий каталог, установка там зависимостей, а также копирование моего исходного кода из папки "src".Затем вся эта папка развертывания архивируется с помощью powershell и передается в Lambda с помощью команды AWS CLI update-function-code.

Вот снимок экрана с содержимым deploy.zip:

enter image description here

...