首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Runtime.ImportModuleError:错误:找不到模块'onCreateRadonData‘

Runtime.ImportModuleError:错误:找不到模块'onCreateRadonData‘
EN

Stack Overflow用户
提问于 2021-08-01 12:28:54
回答 1查看 189关注 0票数 1

我正在尝试使用AppSync和Serverless将DynamoDB流部署为lambda函数。部署进行得很顺利,没有任何错误。但是当我触发lambda在我的DynamoDB表中创建一个新实例时,它失败了,抛出了这个错误:

代码语言:javascript
运行
复制
{
    "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module 'onCreateRadonData'\nRequire stack:\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module 'onCreateRadonData'",
        "Require stack:",
        "- /var/runtime/UserFunction.js",
        "- /var/runtime/index.js",
        "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
        "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
        "    at Object.<anonymous> (/var/runtime/index.js:43:30)",
        "    at Module._compile (internal/modules/cjs/loader.js:999:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
        "    at Module.load (internal/modules/cjs/loader.js:863:32)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
        "    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)",
        "    at internal/main/run_main_module.js:17:47"
    ]
}

这很奇怪,因为我通常在以一种不好的方式导入一些模块/依赖项时会发生这种情况。但是在错误onCreateRadonData中提到的函数是lambda本身的名称,并且在部署过程中,可以清楚地看到该函数部署得很好,所以我不知道发生了什么……

serverless.yaml文件:

代码语言:javascript
运行
复制
service: aws

plugins:
  - serverless-appsync-plugin
  - serverless-offline

provider:
  name: aws
  runtime: nodejs12.x
  region: eu-west-1
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:Scan
        - dynamodb:Query
        - dynamodb:PutItem
      Resource:
        - !GetAtt RadonDataTable.Arn
        - !Join [ '', [ !GetAtt RadonDataTable.Arn, '/*' ] ]
    - Effect: Allow
      Action:
        - appsync:GraphQL
      Resource: 
      - !GetAtt GraphQlApi.Arn
      - !Join [ '/', [ !GetAtt GraphQlApi.Arn, 'types', 'Mutation', 'fields', 'createRadonData' ] ]

custom:
  appSync:
    name: ${self:service}
    authenticationType: AWS_IAM
    mappingTemplates:
      - dataSource: RadonData
        type: Query
        field: listRadonData
        request: Query.listRadonData.request.vtl
        response: Query.listRadonData.response.vtl
      - dataSource: None
        type: Mutation
        field: createRadonData
        request: Mutation.createRadonData.request.vtl
        response: Mutation.createRadonData.response.vtl
    schema: src/schema.graphql
    dataSources:
      - type: NONE
        name: None
      - type: AMAZON_DYNAMODB
        name: RadonData
        description: 'DynamoDB Radon Data table'
        config:
          tableName: !Ref RadonDataTable

functions:
  handleDynamoDbStream:
    maximumRetryAttempts: 1
    maximumRecordAgeInSeconds: 1
    handler: src/handlers/onCreateRadonData.handler
    environment:
      APP_SYNC_API_URL: !GetAtt GraphQlApi.GraphQLUrl
    events:
      - stream:
          type: dynamodb
          arn: !GetAtt RadonDataTable.StreamArn

resources:
  Resources:
    RadonDataTable:
      Type: AWS::DynamoDB::Table
      Properties:
        ProvisionedThroughput:
          ReadCapacityUnits: 5
          WriteCapacityUnits: 5
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        StreamSpecification:
          StreamViewType: NEW_IMAGE

和lambda函数onCreateRadonData.ts

代码语言:javascript
运行
复制
export const handler = (event) => {
  console.log('Hello from lambda')

  return;
}

注意:我也尝试过exports.handler = (event) ...方法,但我抛出了相同的错误。

代码结构如下:

代码语言:javascript
运行
复制
- src/handlers/onCreateRadonData.ts
- mapping-templates/files with mapping templates.vtl
- serverless.yml
- package.json

如您所见,我在srchandlers文件夹中只有一个名为onCreateRadonData.ts的文件。这就是全部,其余的文件都在根目录中。

你知道我做错了什么吗?谢谢大家!

EN

回答 1

Stack Overflow用户

发布于 2021-08-01 13:53:00

好了,伙计们,我知道了。因为我使用的是typescript,所以我必须导入serverless-typescript插件来将所有的ts文件转换为js。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68610427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档