У меня проблемы с развертыванием моего безсерверного приложения на AWS. В AWS журналы показывают:
Unable to import module 'wsgi_handler': No module named 'werkzeug'
Я явно указал werkzeug в своем файле require.txt, но кажется, что при запуске sls deploy
указанные пакеты не помещаются в zip-файл, который загружено в мое ведро S3.
Ниже приведена копия моего файла serverless.yml:
service: serverless-flask
plugins:
- serverless-python-requirements
- serverless-wsgi
- serverless-dynamodb-local
custom:
tableName: 'transactions-table-${self:provider.stage}'
wsgi:
app: app.app # entrypoint is app.app, which means the app object in the app.py module.
packRequirements: false
pythonRequirements:
dockerizePip: true
dynamodb:
stages:
- test
- dev
start:
migrate: true
provider:
name: aws
runtime: python3.6
stage: dev
region: us-east-1
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
Resource:
- { "Fn::GetAtt": ["TransactionsDynamoDBTable", "Arn" ] }
environment:
TRANSACTIONS_TABLE: ${self:custom.tableName}
functions:
app:
handler: wsgi_handler.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
resources:
Resources:
TransactionsDynamoDBTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
-
AttributeName: transactionId
AttributeType: S
-
AttributeName: timestamp
AttributeType: S
KeySchema:
-
AttributeName: transactionId
KeyType: HASH
-
AttributeName: timestamp
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:custom.tableName}
Вот мои требования. tx:
boto3==1.11.17
botocore==1.14.17
Click==7.0
docutils==0.15.2
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.11.1
jmespath==0.9.4
MarkupSafe==1.1.1
python-dateutil==2.8.1
s3transfer==0.3.3
six==1.14.0
urllib3==1.25.8
Werkzeug==1.0.0
Насколько насколько я знаю, использование плагина serverless-wsgi
должно автоматически выполнять установку этого пакета, но я не вижу, чтобы папка .requirements создавалась в папке .serverless или в zip-файле, который создает без обслуживания.
Требования Файл .txt, содержащийся внутри zip-файла, содержит только следующее:
-i https://pypi.org/simple
Я не уверен, что я делаю не так, но единственное решение до сих пор было сносить инфраструктуру и перераспределить с новым URL, который не идеален.