amazon-web-services - 如何为 Amazon Skill Flow Builder 配置 S3
问题描述
我通过亚马逊的新工具Skill Flow Builder
和ASK CLI
工具成功部署了我的技能。
在该abcConfig
文件中,可以选择添加S3
用于 Polly 服务的存储桶。我创建了一个存储桶并设置了权限,因此它是公开可用的。我相信这样做是正确的,但是很难判断 lambda 函数是否正在查找存储桶并使用它。当我测试 lambda 时,它会显示它使用配置中的这些设置构建的 URL:
"s3-domain-name": "s3.amazonaws.com",
"s3-bucket-name": "<BUCKET NAME>",
...但在设备上找不到音频文件。我认为这是因为它不是该文件的正确公共 URL。
所以,我的问题是,域名的正确格式是什么,以确保它击中我创建的存储桶?
更新
加载 Lambda 测试返回的 URL 时出现此错误:
<Error>
<Code>PermanentRedirect</Code>
<Message>
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
</Message>
<Endpoint>**********.s3.eu-west-2.amazonaws.com</Endpoint>
<Bucket>**********</Bucket>
<RequestId>6FBBDF******DC89</RequestId>
<HostId>
i7op6+RMyiHAcf*********LW58FSOKIily2ouNg3L/bp8IV0=
</HostId>
</Error>
这表明它无法在 S3 存储桶中创建对象(因此读取 URI 时出错)。
解决方案
我修好了它。Amazon Skill Builder 文档不正确。当您为SFB Lambda
帐户设置策略时,您需要确保为它提供"s3:PutObjectAcl"
操作以及标准"s3:PutObject"
。
您还需要告诉策略您允许它在 S3 存储桶中创建对象。由于 AWS UI 错误(见上文),这是我必须手动创建的策略 JSON 文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"polly:SynthesizeSpeech",
"dynamodb:PutItem",
"dynamodb:DeleteItem",
"dynamodb:GetItem"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
}
]
}
使用此策略,您的 lambda 函数可以使用 Polly 服务,创建 MP3 文件并将其上传到您的 S3 存储桶中,如果您将存储桶设置为允许公共访问,则设备可以将它们回放给任何公众成员。
推荐阅读
- c++ - C ++如何在不使用字符串类的情况下读取CSV文件
- java - 如何通过只调用一次 OutofOrder 来进一步简化 InOrder 代码?
- python - 使用两个数组之间的行组合创建网格网格
- xcode - Fish shell 很慢,在 MacOS 10.15.6 上的每个命令大约需要 1 秒
- typo3-10.x - TYPO3中DCE的图像裁剪工具不起作用
- arrays - 反向字符串中的递归执行
- xaml - Xamarin - CollectionView,将当前项目作为命令参数传递
- javascript - 将 PDF 链接下载为同一页面中的文件,而不是在浏览器中打开
- php - 如何正确使用 msqli bind_param?
- html - 在部门内滚动 UL 列表