AWS CloudFront + multi S3 架構實驗

更新於 發佈於 閱讀時間約 7 分鐘

實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源

讓我們接續此文,來實作看看~

AWS CloudFront + multi S3 架構需求

這裡準備 4 組 S3 buckets 分別為

美國東部 (維吉尼亞北部) us-east-1,接近美洲用戶
歐洲 (愛爾蘭) eu-west-1,接近歐洲用戶
亞太區域 (東京) ap-northeast-1,接近亞洲用戶
美國西部 (奧勒岡) us-west-2,其他區域所預設的


buckets 會使用 index.html 檔案, 來區分不同區域
如virginia用戶會看到virginia-us畫面


CloudFront 設置

Origins 加入這些 S3 buckets

raw-image


注意到這裡使用的Origin access 是 origin-access-identity 而不是採用 Origin Access Control (OAC) 的 S3 驗證方式


當前使用 L@E 做多 region S3 動態回源時,必須使用舊的 OAI (Origin Accwess Identity) 來做驗證,才支援切換不同 region。

這部分在 L@E 文件中有隱晦的提到 [1],指定不同 region S3 時,在 origin request 的 object 中,需指定 authMethod 為 origin-access-identity,並指定 region 參數



如何建立OAI
到Security > Origin access 選擇 Identities (legacy) 並建立

raw-image
raw-image


套用在 Origin access - Legacy access identities 選項

raw-image


其他Origin重複此步驟即可

behavior 中 Origin and origin groups 將設置為 我們預設的檔案區域


接者我們要建置 Origin request Lambda function,注意該Lambda function 需要在us-east-1 建立

raw-image
raw-image


這裡以 Python 3.8 示範[2]

import json

us_bucket = "mybucket-us.amazonaws.com"
eu_bucket = "mybucket-eu.amazonaws.com"
ap_bucket = "mybucket-ap.amazonaws.com"
default_bucket = "mydefaultbucket-us.amazonaws.com"


regions_mapping = {
"us-east-1": us_bucket,
"us-east-2": us_bucket,
"us-west-1": us_bucket,
"eu-central-1": eu_bucket,
"eu-west-1": eu_bucket,
"eu-west-2": eu_bucket,
"ap-southeast-1": ap_bucket,
"ap-northeast-1": ap_bucket
}


def lambda_handler(event, context):
request = event['Records'][0]['cf']['request']

origin_key = list(request['origin'].keys())[0]
custom_headers = request['origin'][origin_key].get('customHeaders', {})


if origin_key != 's3' in custom_headers:

return request

# Identify edge region
lambda_region = context.invoked_function_arn.split(':')[3]

# Get S3 bucket based on regions mapping
domain_name = regions_mapping.get(lambda_region, default_bucket)
#add
bucket_region = domain_name.split('.')[2]


# Update origin request object
request['origin']['s3']['authMethod'] = "origin-access-identity"
request['origin']['s3']['domainName'] = domain_name
request['origin']['s3']['region'] = bucket_region
request['headers']['host'] = [{'key': 'host', 'value': domain_name}]

return request


Deploy 後,接者要來部署 Lambda@Edge

raw-image


選擇 Distribution 與 behavior

event 為 Origin request,就可以部署

raw-image


稍等CloudFront部署,在對應的 behavior 可以看到設置完成

raw-image


現在來檢視成果


raw-image
raw-image
raw-image
raw-image
raw-image


未來 OAI 將來廢除後如何達成這個需求。 雖然 OAI 被歸類於舊的功能,但是目前尚未有公開將 OAI 廢除的計畫,同時 OAI 仍被許多客戶使用中,此類重要功能如果預計廢除,一般官方會在 2~3 年前開始公告,並提供相關文件描述配套措施及轉移方式,同時也會提供移轉的緩沖期。 因此目前仍可以放心使用 OAI 來達成這項功能,且這是目前唯一可行的方式。謝謝Support Oscar 説明


參考:
[1] Lambda@Edge event structure - Request event fieldshttps://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#request-event-fields

[2] Lambda Function Demo Python Code

https://aws.amazon.com/tw/blogs/networking-and-content-delivery/using-amazon-cloudfront-and-amazon-s3-to-build-multi-region-active-active-geo-proximity-applications/





avatar-img
16會員
80內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
西尼亞ming的沙龍 的其他內容
如何計算 CloudFront 在使用中,回到Origins的數量,以及命中總數量
客戶提出以下需求: 當用戶在日本,會導到離用戶最近的CloudFront節點(亞洲),當CF要回原站時,需要導到新加坡的S3 當用戶為美國,會導到離用戶最近的CloudFront節點(美國東岸),當CF要回原站時,需要導到美國的S3
依據 CloudFront 預設的配額限制 [1],有以下項目會影響流量:
AWS Nitro Enclaves 是一項新的 EC2 功能,使客戶能夠創建隔離的計算環境 (Enclaves) 來進一步保護和安全地處理高度敏感的數據,例如其 Amazon EC2 實例中的個人身份信息 (PII)、醫療保健
使用 AWS CLI 的方式,設定 CloudWatch 偵測到 StatusCheckFailed 時的 Auto recover action
如何計算 CloudFront 在使用中,回到Origins的數量,以及命中總數量
客戶提出以下需求: 當用戶在日本,會導到離用戶最近的CloudFront節點(亞洲),當CF要回原站時,需要導到新加坡的S3 當用戶為美國,會導到離用戶最近的CloudFront節點(美國東岸),當CF要回原站時,需要導到美國的S3
依據 CloudFront 預設的配額限制 [1],有以下項目會影響流量:
AWS Nitro Enclaves 是一項新的 EC2 功能,使客戶能夠創建隔離的計算環境 (Enclaves) 來進一步保護和安全地處理高度敏感的數據,例如其 Amazon EC2 實例中的個人身份信息 (PII)、醫療保健
使用 AWS CLI 的方式,設定 CloudWatch 偵測到 StatusCheckFailed 時的 Auto recover action
你可能也想看
Google News 追蹤
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
疫情世代後,企業在思考的已經不是要不要上雲,而是哪些服務或內容可以上雲,透過混合雲的形式,搭配公司的策略達到靈活且彈性的最佳效益。 而既然要能達到最佳效益,選擇適合公司環境的雲端環境,對於現代企業來說非常重要,這篇文章將與大家分享AWS、GCP、Azure三大公有雲的特點與優勢。
Thumbnail
對 AWS Certified Cloud Practitioner 證照考試難度的看法、學習方法和考試內容的介紹。
Thumbnail
實踐AWS中使用Lambda來負責登入簽核及與OpenAI API溝通,並利用S3容器託管一個靜態網頁做為前端
Thumbnail
Simple Storage Service (S3) 是 AWS 最常應用到的服務,只要是需要將檔案上傳到雲端的狀況都可以使用S3,本篇文章將介紹如何設定與使用AWS S3。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
疫情世代後,企業在思考的已經不是要不要上雲,而是哪些服務或內容可以上雲,透過混合雲的形式,搭配公司的策略達到靈活且彈性的最佳效益。 而既然要能達到最佳效益,選擇適合公司環境的雲端環境,對於現代企業來說非常重要,這篇文章將與大家分享AWS、GCP、Azure三大公有雲的特點與優勢。
Thumbnail
對 AWS Certified Cloud Practitioner 證照考試難度的看法、學習方法和考試內容的介紹。
Thumbnail
實踐AWS中使用Lambda來負責登入簽核及與OpenAI API溝通,並利用S3容器託管一個靜態網頁做為前端
Thumbnail
Simple Storage Service (S3) 是 AWS 最常應用到的服務,只要是需要將檔案上傳到雲端的狀況都可以使用S3,本篇文章將介紹如何設定與使用AWS S3。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的