【问题标题】:serverless events are missing缺少无服务器事件
【发布时间】:2017-04-23 14:42:55
【问题描述】:

我的无服务器配置存在问题,导致 lambda 函数在没有触发器的情况下被部署。

我的技能有一个主要的 serverless.yml,如下所示:

服务:${file(./${env:DEPLOY_FILE_NAME}):service}

provider:
  name: aws
  custom:
    globalSchedule: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):globalSchedule}
    roleName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):roleName}
    profileName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):profileName}
  plugins:
    - pluginHandler
  runtime: nodejs4.3
  cfLogs: true

  stage: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):stage}
  region: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):region}
  memorySize: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):memorySize}
  timeout: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):timeout}
  keepWarm: false
  useApigateway: false
  events:
    ${file(./${env:DEPLOY_FILE_NAME}):events}

package:
  exclude:
    ${file(./${env:DEPLOY_FILE_NAME}):exclude}
functions:
  smartHome:
    handler: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):handler}

然后,我有两组 yaml 设置文件。一个用于 ${skill_type}_${localization},即customskill_eu.yml,另一个用于特定阶段的 ${skill_type}${localization}{$stage},如 smarthome_us_dev.yml 等。

service: alexa-SmartHomeSkillAdapter
exclude:
  - app.js
  - .idea/**
  - .npmignore/**
  - .jshintrc
  - build/**
  - documentation.docx
  - dist/**
  - event.json
  - lambda_function_custom_skill.js
  - resources/**
  - custom_skill_eu.yml
  - custom_skill_us.yml
  - smart_home_eu.yml
  - smart_home_us.yml
  - serverless_settings/**
  - tests/**
events:
  - s3: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):s3}
  - alexaSmartHome: amzn1.ask.skill.d48263be-c7ef-4d61-a773-d6431567e6d6

怎么了?请指教。

谢谢。

【问题讨论】:

  • @Anthon - 你为什么要编辑我的标签?
  • 您的文件是正确的 YAML,您的问题与 YAML 的关系与例如ASCII。阅读 YAML 的标签说明,您会发现它不恰当且具有误导性。
  • 在我看来,当一个无所事事的人投票反对某人,也许是为了获得一个无用的徽章,它说明了一切。如果我要改写我最喜欢的电影角色......
  • 如果人们对您的问题投反对票,原因可能是:“这个问题没有显示任何研究成果;不清楚或没有用”。作为我们创建具有质量问题和答案的数据库(这是Stack Overflow 的目标)的努力的一部分,否决投票通常是必要的,因此它是本网站的一个有目的的功能。除此之外,您已经表现出拒绝通过恢复对您的帖子的改进来获得帮助,实际上在必要时进一步改进。更好的问题更有可能吸引答案。
  • 这里需要处理的是您的帖子,但您并没有改进它,而是将您的时间花在了一位试图帮助您学习如何使用本网站的人身上。稍微努力一下就可以使它成为一个可以接受的帖子,但是因为没有:-1

标签: node.js amazon-web-services yaml aws-lambda serverless-framework


【解决方案1】:

您需要在函数中添加事件。阅读无服务器 documentation 以了解事件。

目前,无服务器支持 API Gateway、Kinesis、DynamoDB、S3、Schedule、SNS 和 Alexa Skill 调用 lambda。 (read more)

所以在这种情况下,添加一个必需的events 标签应该可以解决您的问题。

...
functions:
  smartHome:
    handler: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):handler}
    events: ${file(./${env:DEPLOY_FILE_NAME}):events}
...

或者,您始终可以在无服务器 resources 节点中使用传统 CloudFormation 格式定义所有资源及其操作。

【讨论】:

  • 嗯,我认为这正是我所需要的 - 将事件添加到功能配置中。我的配置在上面。你觉得我的有什么奇怪的地方吗?
  • 您需要做的第一件事是将您的事件标签移动到函数元素中。请参阅更新答案中的示例。
  • 谢谢,开始找了。感谢您抽出宝贵时间。
  • 是的,你完全正确。我仍然收到错误,但现在又出现了一个错误。原来的问题已经解决了。现在,由于某种原因,当我使用 events: ${file(./${env:DEPLOY_FILE_NAME}):events} 时,就像我对排除所做的那样,就像你建议的那样,它告诉参数必须是一个数组而不是字符串。希望能解决这个问题。非常感谢。
  • 找到了一个无服务器 PR 来解决我的最后一个问题。感谢@lebryant 帮助配置。
猜你喜欢
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
相关资源
最近更新 更多