如何为Amazon Skill Flow Builder配置S3

时间:2019-08-18 17:33:10

标签: amazon-web-services amazon-s3 lambda alexa alexa-skills-kit

我已经通过Amazon的新Skill Flow BuilderASK 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角色策略屏幕中发现了此警告: lambda policy

这表明它无法在S3存储桶中创建对象(因此会出现读取URI的错误)。

不幸的是,当我编辑策略以允许对象资源时,出现此错误: enter image description here

1 个答案:

答案 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存储桶中,并且如果您将存储桶设置为允许公众访问,则设备可以将其播放给任何公众。