2017-06-13 318 views
0

我正在使用node-aws-lambda直接使用gulp和node.js部署lambda函數。該功能本身正在正確部署。但是,我嘗試配置的觸發器是使用Amazon Alexa智能家居技能ARN。驗證過程中抱怨說這個ARN是不允許的。使用Alexa Skill觸發器將AWS Lambda功能部署到AWS

這是我的配置(接入和政策都很好):

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中的錯誤或做我必須手動配置觸發或有另一種方式來編程創建觸發器?

任何意見表示讚賞。謝謝!

約爾格

回答

0

我沒有做你的努力過,但快速瀏覽一下你的錯誤信息會顯示你提供了錯誤的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:與輥:或試圖既爲阿爾恩值。 - 希望這可以幫助,但就像我說的這是從所提供的信息的猜測。

+0

感謝您的回答。我試過這個和其他幾個組合,但沒有運氣。看到我上面提出的自我回答。一旦亞馬遜在這裏做作業,我會更新。 –

0

當我試圖用觸發器(作爲包)導出函數時,它抱怨目前不支持觸發器。從中我推斷上傳失敗,因爲缺乏這種特殊的支持。

Trigger not supported

我真的想在這裏從AWS看到一些進展,因爲這是必須把技能商發展到一定程度的自動化水平。如果有人正在修補它可能會很好,但對於專業開發人員來說這是一團糟...