簡體   English   中英

為什么 Lambda@Edge 沒有轉發到正確的存儲桶?

[英]Why is Lambda@Edge not forwarding to the correct bucket?

我有 3 個 S3 存儲桶:

  • 我的路由測試 ap-southeast-2
  • 我的路由測試-eu-west-2
  • 我的路由測試我們東 1

它們都被配置為靜態網站,關閉block all public access和(示例)此策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Demo",
            "Effect": "Allow",
            "Principal": "*",
            "Action": ["s3:GetObject","s3:GetObjectVersion"],
            "Resource": "arn:aws:s3:::my-routing-test-us-east-1/*"
        }
    ]
}

我已經配置了一個具有一個來源的雲端分發:

  • my-routing-test-us-east-1.s3.us-east-1.amazonaws.com

以及為上述源配置的behaviour和使用CloudFront-Viewer-Country值設置的Legacy cache settings標頭選項。

我應該在這里指出,基於請求標頭的緩存文檔說明:

指定是否希望 CloudFront 根據指定標頭的值緩存對象:

白名單 – CloudFront 僅根據指定標頭的值緩存您的對象。 使用 Whitelist Headers 選擇您希望 CloudFront 作為緩存基礎的標頭。

但是,CloudFront 控制台的Edit behaviour部分將“緩存鍵和源請求”選項顯示為:

Legacy cache settings > Headers > Include the following headers > CloudFront-Viewer-Country

當然,這似乎不包括“白名單”選項。

該分布還將Origin request設置為 Lambda@Edge 函數(代碼從該文檔頁面中提取):

'use strict';

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

    const countryToRegion = {
        'US': 'us-east-1',
        'AU': 'ap-southeast-2',
        'GB': 'eu-west-2'
    };

    if (request.headers['cloudfront-viewer-country']) {
        const countryCode = request.headers['cloudfront-viewer-country'][0].value;
        const region = countryToRegion[countryCode];
        
        console.log('countryCode: '+countryCode+' region: '+region);
        
        if (region) {
            console.log('region: '+region);
            request.origin.s3.region = region;
            const domainName = `my-routing-test-${region}.s3.${region}.amazonaws.com`;
            request.origin.s3.domainName = domainName;
            console.log('request.origin.s3.domainName: '+domainName);
            request.headers['host'] = [{ key: 'host', value: domainName }];
        }
    }

    callback(null, request);
};

當我調用雲端 URL 來檢索我的區域 (eu-west-2) 的測試文件時,我在我所在區域的日志組中看到了這個:

countryCode: GB region: eu-west-2
region: eu-west-2
request.origin.s3.domainName: origin-routing-eu-west-2.s3.eu-west-2.amazonaws.com

但該文件始終是從us-east-1區域提供的相同圖像。 這不應該是這種情況,因為每個桶包含每個區域的不同圖像。

此配置中缺少什么或不正確?

事實證明,“緩存鍵和原始到期”對象緩存設置為默認值(1 年),當我測試初始文件檢索時,基本上存儲在緩存中的主要原始文件無法被區域版本替換. 檢查你的緩存設置,伙計們!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM