Автономный сервер: ошибка во время работы обработчика, не удается найти модуль - PullRequest
0 голосов
/ 20 ноября 2018

Я пытался использовать serverless-offline / serverless-offline-python и семейство других пакетов узлов (например, serverless-s3-local) для создания среды автономного тестирования для некоторых лямбд, которые я написал.

Используя serverless-offline-python, я могу запустить свои python-лямбды и вызывать каждую функцию вручную с помощью:

sls offline start --stage local --noTimeout --watch --port 3000
sls invoke local --stage local -f import-processor-stage-1 -d '{"event": "", "context": ""}'

Это работает, но не совсем имитирует, что на самом деле делает лямбда.В идеале я бы смоделировал ведро S3 с импортированным новым объектом, и это действие было бы катализатором для лямбды (import-processor-stage-1).

Enter serverless-s3-local.

Я установил довольно фантастическую конфигурацию с плагином, но по какой-то причине, когда serverless-s3-localидет, чтобы вызвать событие к моему лямбда-обработчику, я получаю эту ошибку:

Error while running handler { Error: Cannot find module '/Users/user/Documents/project/manager/infra/main/import_processor_stage_1'
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.createHandler (/usr/local/lib/node_modules/serverless-offline/src/functionHelper.js:167:17)
    at Object.func (/Users/user/node_modules/serverless-s3-local/index.js:308:50)
    at /Users/user/node_modules/serverless-s3-local/index.js:170:11
    at SafeSubscriber.s3eventSubscription.client.s3Event.pipe.subscribe [as _next] (/Users/user/node_modules/serverless-s3-local/index.js:176:7)
    at SafeSubscriber.__tryOrUnsub (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:270:10)
    at SafeSubscriber.next (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:212:14)
    at Subscriber._next (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:141:22)
    at Subscriber.next (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:101:12)
    at MergeMapSubscriber.notifyNext (/Users/user/node_modules/rxjs/src/internal/operators/mergeMap.ts:159:22)
    at InnerSubscriber._next (/Users/user/node_modules/rxjs/src/internal/InnerSubscriber.ts:17:17)
    at InnerSubscriber.Subscriber.next (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:101:12)
    at /Users/user/node_modules/rxjs/src/internal/util/subscribeToArray.ts:9:16
    at Object.subscribeToResult (/Users/user/node_modules/rxjs/src/internal/util/subscribeToResult.ts:25:29)
    at MergeMapSubscriber._innerSub (/Users/user/node_modules/rxjs/src/internal/operators/mergeMap.ts:145:5)
    at MergeMapSubscriber._tryNext (/Users/user/node_modules/rxjs/src/internal/operators/mergeMap.ts:138:10)
    at MergeMapSubscriber._next (/Users/user/node_modules/rxjs/src/internal/operators/mergeMap.ts:122:12)
    at MergeMapSubscriber.Subscriber.next (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:101:12)
    at MapSubscriber._next (/Users/user/node_modules/rxjs/src/internal/operators/map.ts:86:22)
    at MapSubscriber.Subscriber.next (/Users/user/node_modules/rxjs/src/internal/Subscriber.ts:101:12)
    at Subject.next (/Users/user/node_modules/rxjs/src/internal/Subject.ts:68:17)
    at triggerS3Event (/Users/user/node_modules/s3rver/lib/controllers.js:56:21)
    at store.putObject (/Users/user/node_modules/s3rver/lib/controllers.js:498:11)
    at storeMetadata.err (/Users/user/node_modules/s3rver/lib/stores/filesystem.js:291:13)
    at /Users/user/node_modules/graceful-fs/graceful-fs.js:111:16
    at /usr/local/lib/node_modules/serverless/node_modules/graceful-fs/graceful-fs.js:43:10
    at FSReqWrap.oncomplete (fs.js:135:15) code: 'MODULE_NOT_FOUND' }

К сожалению, я знаю, что эти плагины находятся в их воображении (особенно serverless-offline-python), но я совершенно уверен, что это должнобыть очень легко исправить.Модуль, который не найден, фактически существует в пакете!Я думаю, что это потому, что это файл Python, а не файл JS.Есть ли способ в сценарии js принимать файлы Python?До сих пор я пытался заменить все ссылки serverless-offline на serverless-offline-python в базе кода serverless-s3-local, но я получаю ту же ошибку.

Для справки, вот мой файл serverless.yml (длязапись, файл обработчика доступен, правильно расположен и работает нормально при вызове его вручную):

service: catalog-import-manager

plugins:
 - serverless-s3-local
 - serverless-dynamodb-local
 - serverless-offline-python

provider:
  name: aws
  runtime: python3.6
  region: us-west-2


custom:
  s3:
    port: 8090
    directory: s3-simulated-buckets
    cors: false


resources:
  Resources:
    stage-one:
      Type: 'AWS::DynamoDB::Table'
      Properties:
        AttributeDefinitions:
          -
            AttributeName: import_id
            AttributeType: S
        KeySchema:
          -
            AttributeName: import_id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: stage-one

    ImportBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: import


functions:
  import-processor-stage-1:
    handler: import_processor_stage_1.process_file_import
    events:
      - existingS3:
          bucket: import
          events:
            - s3:ObjectCreated:*

Любая помощь приветствуется!Спасибо, что заглянули!


Можно подтвердить, что это работает для среды js.

1 Ответ

0 голосов
/ 28 ноября 2018

В итоге я настроил библиотеку serverless-s3-local для возможности вызова .py файлов.Я могу в итоге создать новый репозиторий и пакет узлов github для этой настройки, но сейчас я отошлю пользователей к упомянутым настройкам, которые я описал здесь .

...