Без сервера wsgi не может импортировать werkzeug - PullRequest
0 голосов
/ 20 февраля 2020

У меня проблемы с развертыванием моего безсерверного приложения на 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, который не идеален.

...