【问题标题】:Redirection rules not working in Amazon S3重定向规则在 Amazon S3 中不起作用
【发布时间】:2020-02-16 12:56:38
【问题描述】:

我在 S3 中创建了一个存储桶来存储图像,并按照 Resize Images on the Fly with Amazon S3, AWS Lambda, and Amazon API Gateway | AWS Compute Blog 使用 Lambda 调整它们的大小。

到目前为止它运行良好,但我无法使重定向规则起作用。出于某种原因,当它应该重定向到 REST api 以调整图像大小时,我不断收到“没有这样的键”。

这是我的重定向规则配置:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals/>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <Protocol>https</Protocol>
            <HostName>8mxk2saka6.execute-api.sa-east-1.amazonaws.com</HostName>
            <ReplaceKeyPrefixWith>default/pp-create-thumbnails-for-user-assets?key=</ReplaceKeyPrefixWith>
            <HttpRedirectCode>307</HttpRedirectCode>
        </Redirect>
    </RoutingRule>
</RoutingRules>

这里是错误的截图:

为 Lambda 中的 API 配置添加屏幕截图:

还有一个屏幕截图,显示了我在 Lambda 仪表板中看到的内容:

我做错了什么?


更新

正如汤姆在下面的回答中所说,非常重要的是要注意有两种方法可以从浏览器访问存储桶:

1. https://YOUR_BUCKET.s3-sa-east-1.amazonaws.com

另一个是

2. http://YOUR_BUCKET.s3-website-sa-east-1.amazonaws.com

您将能够将重定向规则应用于第一个,只有第二个知道它们。

因此,在完成配置以调整图像大小后,请确保使用第二个 url(静态网站托管一个)进行重定向。

希望这可以帮助其他人解决这个问题。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    我可以看到您的版本和我的工作版本之间的唯一区别是您的 API 触发器的 default/Prod/ 前缀。要检查这一点,请转到 API 网关,选择您的 api,然后转到仪表板。有一个链接说“在……调用你的 API”,然后是一个 URL。如果最后有 Prod,你就发现了问题。它区分大小写。这花了我一两个小时...

    <RoutingRules>
      <RoutingRule>
        <Condition>
          <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
          <Protocol>https</Protocol>
          <HostName>***YOUR API DOMAIN***.amazonaws.com</HostName>
          <ReplaceKeyPrefixWith>Prod/***YOUR API TRIGGER***?key=</ReplaceKeyPrefixWith>
          <HttpRedirectCode>307</HttpRedirectCode>
        </Redirect>
      </RoutingRule>
    </RoutingRules>
    

    我也为此苦苦挣扎了一段时间。

    仔细检查您的 API 触发器名称 pp-create-thumbnails-for-user-assets,检查 lambda 日志,看看您是否成功了。如果您正在点击它,请确保您正确处理了 lambda 函数中的 event.queryStringParameters.key。如果您没有点击 lambda 函数,请检查您是否按照说明设置了静态网站托管,转到该 S3 选项卡并复制 endpoint。它应该类似于

    http://YOUR_BUCKET.s3-website-sa-east-1.amazonaws.com。

    如果你不使用端点,它不会操作重定向规则。

    希望有帮助

    【讨论】:

    • 嗨,汤姆,感谢您的回答。刚刚添加了一些截图。它在“调用...”中显示“默认/”。将查看日志以查看是否正在调用 lambda 函数。
    • 另外,我从您的浏览器屏幕截图中注意到,您并没有尝试访问存储桶的 url 端点上的图像。如果您已按照说明设置了静态网站托管,请转到该 S3 选项卡并复制端点。它应该类似于 http://.s3-website-sa-east-1.amazonaws.com。如果你不使用端点它不会操作重定向规则
    • Tom,这是pp-user-assets.s3-sa-east-1.amazonaws.com/34x34/ricky.jpg,它是应该在 404 上重定向到 API 网关的 s3 存储桶
    • 一切顺利,一切顺利!区别在于 s3 对象地址和 s3 网站端点地址。重定向规则仅在您使用网站端点地址时有效。
    【解决方案2】:

    看起来您的 ReplaceKeyPrefixWith 不同。您从哪里获得 default/pp-create-thumbnails-for-user-assets?

    【讨论】:

    • 我在 Lambda 配置中的 API 端点是:8mxk2saka6.execute-api.sa-east-1.amazonaws.com/default/…;所以我设置了https,它的主机名和路径,是不是错了?
    • 文章中,设置为APIGateway endPoint - 主机名部分之后的剩余部分。我不确定您是否遵循相同的流程。
    • 贾斯汀,是的,但问题是我相信它甚至不匹配重定向规则,否则我会得到一个不同的错误。刚刚附上截图,看上面:)
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2020-03-30
    相关资源
    最近更新 更多