我已经通过Amazon的新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>
UPDATE UPDATE 我在Lambda角色策略屏幕中发现了此警告:
这表明它无法在S3存储桶中创建对象(因此会出现读取URI的错误)。
答案 0 :(得分:0)
我修复了它。 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存储桶中,并且如果您将存储桶设置为允许公众访问,则设备可以将其播放给任何公众。