使用 Lambda Edge 函数导航 S3 存储桶

问题描述 投票:0回答:1

我在 Cloudfront 发行版上有一个 Lambda Edge 函数,它对我的后端进行 API 调用,我想使用此 API 调用的响应来导航 S3 存储桶。假设我有一个包含两个目录的 S3 存储桶,每个目录都包含不同的静态站点,并且根据 API 调用的结果,它将为一个或其他静态站点提供服务。在 Edge Lambda 函数中是否可以在 S3 存储桶内导航并提供该导航的内容?如果没有,我可以拥有多个 S3 存储桶并以这种方式分隔静态站点。

无论哪种情况,我如何在 Lambda Edge 函数中将流量定向到不同的 S3 存储桶或 S3 存储桶内的目录?我无法使用重定向,因为用户看到的 URL 在任何情况下都应该相同。

amazon-web-services amazon-s3 amazon-cloudfront aws-lambda-edge
1个回答
0
投票

您可以更新事件数据中的

request.origin.s3
对象以设置与原始数据不同的来源,然后返回修改后的事件数据

这里包括示例 lambdaEdge 函数,用于根据 API 响应路由到不同的 s3 网站

const axios = require('axios');

exports.handler = async (event) => {
    const request = event.Records[0].cf.request;

    // Make an HTTP request to your API Gateway endpoint
    const response = await axios.get('YOUR_API_GATEWAY_ENDPOINT');
        
    // Update the request to use the determined S3 bucket URL
    request = Object.assign(request, {
            origin: {
                s3: {
                    domainName: response.s3BucketUrl
                }      
            }
        });

    return request;
};
© www.soinside.com 2019 - 2024. All rights reserved.