【问题标题】:Deploy Lambda Function to AWS with Alexa Skill Trigger使用 Alexa Skill Trigger 将 Lambda 函数部署到 AWS
【发布时间】:2017-08-11 17:09:22
【问题描述】:

我正在使用 node-aws-lambda 直接使用 gulp 和 node.js 部署 lambda 函数。该功能本身正在正确部署。但是,我尝试配置的触发器是使用 Amazon Alexa Smart Home Skill ARN。验证抱怨不允许使用此 ARN。

这是我的配置(访问和策略都很好):

module.exports = {
  accessKeyId: 'AAAAAAAAAAAAAAAAAAA',  // User: 
  secretAccessKey: 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',  // optional
  region: 'eu-west-1',
  handler: 'index.handler',
  role: 'arn:aws:iam::1234567890:role/SmartHomeSkillRole', // KNXSmartHomeSkillRole
  functionName: 'SmartHomeSkill_Remote',
  timeout: 10,
  memorySize: 128,
  publish: true,
  runtime: 'nodejs4.3',
  description: 'A remotely build skill for alexa',
  eventSource: {
    EventSourceArn: 'amzn1.ask.skill.d9d9f7b1-f7d6-4050-a3d1-753e47e7038a', 
    BatchSize: 200,
    StartingPosition: "TRIM_HORIZON"
  }
}

EventSourceArn 中的值是失败的来源(amzn1.ask.skill 无效,而在控制台中手动放入触发器效果很好):

ValidationException: 1 validation error detected: Value 'amzn1.ask.skill.d9d9f7b1-f7d6-4050-a3d1-753e47e7038a' at 'eventSourceArn' failed to satisfy constraint: Member must satisfy regular  expression pattern: arn:(aws|aws-us-gov):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)
    at Object.extractError (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\protocol\json.js:48:27)
    at Request.extractError (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\protocol\rest_json.js:37:8)
    at Request.callListeners (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\sequential_executor.js:105:20)
    at Request.emit (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\sequential_executor.js:77:10)
    at Request.emit (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\request.js:682:14)
    at Request.transition (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\request.js:22:10)
    at AcceptorStateMachine.runTo (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\state_machine.js:14:12)
    at E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\state_machine.js:26:10
    at Request.<anonymous> (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\request.js:38:9)
    at Request.<anonymous> (E:\DropBox\p\jisageek\IoT\AlexaKNX\node_modules\aws-sdk\lib\request.js:684:12)

这是 sdk 中的一个错误,还是我必须手动配置触发器,还是有其他方法可以以编程方式创建触发器?

感谢任何建议。谢谢!

乔尔格

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda alexa-skill


    【解决方案1】:

    我还没有完成您之前尝试的操作,但快速查看您的错误消息表明您提供了错误的 ARN。

    Value 'amzn1.ask.skill.d9d9f7b1-f7d6-4050-a3d1-753e47e7038a' at 'eventSourceArn' 
    failed to satisfy constraint: 
    Member must satisfy regular  expression pattern: arn:(aws|aws-us-gov):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)
    

    提供的正则表达式表明您的引用应以“arn:”开头,就像 Amazon Lambda 提供的那样。

    例如上面的 ARN

    arn:aws:iam::1234567890:role/SmartHomeSkillRole
    

    您似乎提供了 Alexa 开发人员服务提供的 Alexa 技能标识符。

    amzn1.ask.skill.d9d9f7b1-f7d6-4050-a3d1-753e47e7038a
    

    我会尝试将 EventSourceArn: 与 Roll: 交换,或者尝试将两者都作为 arn 值。 - 希望这会有所帮助,但就像我说的那样,这是对所提供信息的推测。

    【讨论】:

    • 感谢您的回答。我尝试了这个和其他几种组合,但没有运气。请参阅上面我提出的自我回答。一旦亚马逊在这里做功课,我会更新。
    【解决方案2】:

    当我尝试使用触发器(作为包)导出函数时,它抱怨当前不支持触发器。从中我推断上传失败是因为缺乏这种特殊的支持。

    我真的很想看到 AWS 在这方面取得一些进展,因为将技能开发提升到某种自动化水平至关重要。如果有人在修补它可能会很好,但对于专业开发者来说它是一团糟......

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 2018-01-21
      • 2019-11-09
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 2020-09-03
      • 1970-01-01
      相关资源
      最近更新 更多