1

我正在使用CloudFrontS3API GatewayLambda构建动态图像优化器,但现在我仍在让我的CloudFront源回退到我的 s3 自定义错误路径。

这是我正在寻找的流程:

  1. 从CloudFront请求图像
  2. 不存在/不存在?检查S3来源。
  3. 不存在/不存在?重定向到 hellorld.html
  4. 做任何事情(这里的目标,甚至是第三步,是让重定向触发一个Lambda,它会调整图像的大小并将其返回到S3CF和浏览器)

如果我尝试通过CloudFront访问不存在的对象,它会正确地遵循提供的来源,但如果该对象在S3中不存在,则会给出Access Denied如下所示的经典XML 响应。My Bucket 绝对具有正确的写入权限,并且具有公共读取权限(目前)

在此处输入图像描述

这是我的CF起源/行为。最初我只有默认来源和一个默认行为,这正是我所需要的,在我摆弄的过程中,我添加了一个顶层和一个深层resizer/*

在此处输入图像描述

在此处输入图像描述

这是我的 s3 静态网站托管部分和重定向规则

在此处输入图像描述

我觉得我什至不需要重定向规则,因为出错时应该重定向到hellowrld.html(不是拼写错误),这目前只是一个相当空白的测试 html 页面。

任何帮助将不胜感激!我知道这个 otf 图像调整器是一个非常常见的用例,用于在找不到对象时触发Lambda,但我找不到任何将CloudFront放在API Gateway / Lambda前面的S3前面的示例

4

1 回答 1

1

似乎您在上述重定向规则中添加了错误的 http 错误代码。它应该是 404 和 307。我添加了完整的重定向规则,您可以使用:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals/>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>'your_api_gateway_url'</HostName>
      <ReplaceKeyPrefixWith>prefix_name'?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>
于 2018-04-05T11:05:30.117 回答