CloudFront:使用 RoutingRule 在内部重定向到 S3 存储桶文件中的特定文件



我正在使用 AWS CDK 设置一个新的私有 S3 静态站点存储桶,其中包含 CloudFront 配置来为其提供服务。S3 存储桶的结构如下:

bucketname/1.2.3-SNAPSHOT/
bucketname/1.2.3-SNAPSHOT/index.html
bucketname/1.2.3-SNAPSHOT/config
bucketname/1.2.3-SNAPSHOT/config/config-dev.js
bucketname/1.2.3-SNAPSHOT/config/config-tst.js
bucketname/1.2.3-SNAPSHOT/config/config-acc.js
bucketname/1.2.3-SNAPSHOT/config/config-prd.js

例如,当我部署静态站点的版本 4.5.6-SNAPSHOT 时,会在bucketnameS3 存储桶中创建一个新文件夹 4.5.6-SNAPSHOT。目前,index.html 由以下内容组成:

<html>
<head>
<script src="https://dev.somesite.com/config/config-dev.js" />
</head>
<body>...</body>
</html>

我已经设法配置了 cloudfront 配置以使用 S3destinationPrefix将 https://dev.somesite.com/some-path 映射到bucketname/1.2.3-SNAPSHOT/some-path。当我导航到https://dev.somesite.com/索引时.html被提供并加载了配置 js。目前为止,一切都好。

但是,正如您在 HTML 中看到的那样,对config-dev.js的引用仍然是硬编码的。我希望 CloudFront 配置在内部(而不是 30x)将呼叫https://dev.somesite.com/config/config.js重定向到bucketname/1.2.3-SNAPSHOT/config/config-dev.js。我尝试使用多种KeyPrefixEqualsReplaceKeyWith值来设置RoutingRule,但无济于事。我正在尝试设置与此类似的配置(示例 2)。

我的 CDK 脚本生成以下路由规则:

<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>1.2.3-SNAPSHOT/config</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>1.2.13-SNAPSHOT/config/config-dev.js</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>

但是,对https://dev.somesite.com/config/anything的调用不会重定向到所需的 config-dev.js 文件。有谁知道这个问题的最佳方法?设置路由规则是正确的方法吗?

[编辑]

我使用 S3destinationPrefix=1.2.3-SN设置来确保新文件夹上传到存储桶bucketName新目标(前缀)文件夹"1.2.3-SN"中。同时,我将 CloudFront 的originPath配置为/1.2.3-SN,以确保该文件夹设置为"根"文件夹。这按预期工作;导航到 https://dev.somesite.com/会导致bucketname/1.2.3-SN/index.html正在投放。

我想完成的是能够将对 https://dev.somesite.com/config/**.js 的任何调用"重新路由"到位于bucketname/1.2.3-SN/config中的单个配置文件。我想这样做的原因是为了确保index.html中的脚本引用不需要更改每个环境,同时屏蔽当前环境中不需要的其他配置文件。

您可以在 CloudFront 边缘运行 Lambda 函数。它叫lambda@edge 当 CDN 收到请求(查看器请求)时,您可以设置许多内容,例如:

  • 转发到特定存储桶
  • 设置响应标头

我相信这就是你需要的。

相关内容

最新更新