Я разрабатываю лямбда-функцию в Python. Функция доступа к базе данных RDS с помощью библиотеки pyodbc. Для работы с библиотекой я использую слои. Мой шаблон SAM выглядит следующим образом, и все отлично работает при развертывании в AWS.
Resources:
# ODBC Lambda Layer
PyODBCLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: pyodbc_layer.zip
# Lambda function
TaskIDFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: taskid/
Handler: app.lambda_handler
Layers:
- !Ref PyODBCLayer
Role: !GetAtt TaskIDFunctionIamRole.Arn
Runtime: python3.6
Environment:
Variables:
ODBCINI: /opt/bin/odbcinst.ini
ODBCSYSINI: /opt/bin
Events:
SendTaskID:
Type: Api
Properties:
Path: /task/{id}
Method: get
Проблема начинается, когда я пытаюсь запустить это локально с sam build && sam local invoke -d 5890 TaskIDFunction --event myEvent.json
Я получаю сообщение об ошибке Unable to import module 'app': No module named 'pyodbc'
, которое я понимаю, и обычно решением было бы добавить pyodbc
в файл requiremens.txt для локальной отладки.
Однако после того, как я это сделал, команда sam build
завершается неудачно со следующим сообщением
Build Failed
Error: PythonPipBuilder:ResolveDependencies - {pyodbc==4.0.26(wheel)}
Я могу pip install pyodbc
без проблем, но по какой-то причине sam build
дает сбой.
Я пробовал различные комбинации с удалением слоя из шаблона и установкой PyODBC вручную, чтобы запустить его локально, но безуспешно.