![](/img/trans.png)
[英]Lambda@Edge limitation to be deployed to us-east-1 prevents me from deploying S3 bucket to Europe
[英]Why is Lambda@Edge not forwarding to the correct bucket?
我有 3 個 S3 存儲桶:
它們都被配置為靜態網站,關閉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/*"
}
]
}
我已經配置了一個具有一個來源的雲端分發:
以及為上述源配置的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.