首页 > 解决方案 > 如何为 Amazon Skill Flow Builder 配置 S3

问题描述

我通过亚马逊的新工具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>

更新更新我在 Lambda 角色策略屏幕中发现了这个警告: 拉姆达政策

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

不幸的是,当我编辑策略以允许对象资源时,我收到此错误: 在此处输入图像描述

标签: amazon-web-servicesamazon-s3lambdaalexaalexa-skills-kit

解决方案


我修好了它。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 存储桶中,如果您将存储桶设置为允许公共访问,则设备可以将它们回放给任何公众成员。


推荐阅读