Flask-ASK 和 Amazon S3

Flask-ASK & Amazon S3

正在尝试部署 Alexa 技能。我以前用过node.js部署技能,但从来没有python。我使用 Flask-ASK 框架开发代码并使用 HTTPS enpoint 和 ngrok 进行测试。测试代码成功,所以我正在尝试部署。我按照 AWS 的说明将 python 文件和依赖项压缩到同一个根文件夹中,并且只压缩内容,而不压缩文件夹本身。 .zip 文件太大,我无法直接上传到 lamda(16.1 MB -- 尝试上传超时),所以我尝试使用 Amazon S3 云服务。这是非常直接的,所以我不认为我在这方面犯了任何错误。创建了我的存储桶并上传了我的 zip。将路径输入到 lambda 中。 下一步是我不确定 right/wrong 是什么。 我必须定义 lambda_handler。我唯一编辑和创建的 python 脚本名为 main.py --> main.lambda_handler我假设 {}。 Alexa Developer Portal 已正确配置为 lambda 函数 ID。我保存它,构建函数,切换到测试,调用技能,然后我得到 "There was a problem ... etc." 响应。

显示 zip 的根目录(文件夹只是解压缩以显示内容预览)-- main.py 文件和依赖项在同一文件夹级别

显示S3路径和上传名称(实际上是上传的-我只是在上传新版本之前抓取了图片)

显示开发者控制台设置

问题与权限有关。很难找到,但 IAM 角色需要从 S3 读取的权限(我只是给了它完整的 S3 访问权限,但你可以限制读取)

  1. 导航至 console.aws.amazon.com -> 登录
  2. 滚动到安全、身份和合规性
  3. Select IAM -> 角色(window 左侧)
  4. 创建角色 -> select Lambda 作为将使用角色的 AWS 服务
  5. 附加 S3 的权限 -> 添加和 AWSLambdaExecute 以及以下其中一项:AmazonS3ReadOnlyAccess 或 AmazonS3FullAccess
  6. 为角色命名
  7. 切换到 Lambda 控制台并将此角色用于 lambda 函数

我已经几个月没做这个了。因此,如果这对您不起作用,请告诉我,稍后我会深入研究文档。但据我所知,这应该是你所需要的。