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/





    15會員
    63Content count
    留言0
    查看全部
    發表第一個留言支持創作者!
    西尼亞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
    你可能也想看
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
                 Amazon Web Services(AWS)宣布致力於AI安全和研究的公司Anthropic的模型Claude 3系列將於Amazon Bedrock提供服務。Claude 3系列模型具備業界領先的準確性、效能、速度和成本優勢。這一進展將強化各種規模的企業
    Thumbnail
    分享關於 AWS CLF-C02 考試的準備心得,包括考試主要範圍、準備過程中的學習資源及建議,以及考試當日的流程和心得。希望本文能為欲嘗試取得此認證的人提供心得與參考。
    Thumbnail
    在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
    Thumbnail
    研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
    Thumbnail
    Amazon Web Services(AWS)日前舉行2023年製造轉型戰略峰會,以「強化供應韌性,引領智造創新」為主題,邀請AWS台灣暨香港總經理王定愷、AWS日本製造業架構師資深經理岡本京,以及台灣塑膠工業旗下福欣特殊鋼公司、樺緯物聯、天氣風險等多家技術領先的客戶與合作夥伴。
    Thumbnail
    大概是近期三個月,我才開始認真思考是不是要投資時間、金錢、精力去考AWS(Amazon Web Services)的證照,前後參加了他們在台北舉辦的活動後,我心中大概漸漸篤定了。
    Thumbnail
    前幾個禮拜,AWS 舉行 Startup Day Taiwan。想當然爾,最熱門的主題非生成式 AI (Generative AI) 莫屬。既然 AWS 有現成的工具,身為一名工程師,自然看看無妨,這篇文章算是新手開箱文,會說明如何部署一套基礎模型,並使用 AWS SDK 與其互動。
    Thumbnail
    先來一點心得 終於拿到證照了。 儘管我是在重考一次之後,才拿到證照,但還是十分開心。 從上課+準備第一次考試+準備重考,前前後後花了兩個月的時間,同時也花了不少的金錢和精力,真的是付出不少。 所以我打算分享一下自己的心得,給正在準備這個證照的人。 預計是分成兩篇來談,這次應該是先談考試的部分,下次再
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
                 Amazon Web Services(AWS)宣布致力於AI安全和研究的公司Anthropic的模型Claude 3系列將於Amazon Bedrock提供服務。Claude 3系列模型具備業界領先的準確性、效能、速度和成本優勢。這一進展將強化各種規模的企業
    Thumbnail
    分享關於 AWS CLF-C02 考試的準備心得,包括考試主要範圍、準備過程中的學習資源及建議,以及考試當日的流程和心得。希望本文能為欲嘗試取得此認證的人提供心得與參考。
    Thumbnail
    在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
    Thumbnail
    研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
    Thumbnail
    Amazon Web Services(AWS)日前舉行2023年製造轉型戰略峰會,以「強化供應韌性,引領智造創新」為主題,邀請AWS台灣暨香港總經理王定愷、AWS日本製造業架構師資深經理岡本京,以及台灣塑膠工業旗下福欣特殊鋼公司、樺緯物聯、天氣風險等多家技術領先的客戶與合作夥伴。
    Thumbnail
    大概是近期三個月,我才開始認真思考是不是要投資時間、金錢、精力去考AWS(Amazon Web Services)的證照,前後參加了他們在台北舉辦的活動後,我心中大概漸漸篤定了。
    Thumbnail
    前幾個禮拜,AWS 舉行 Startup Day Taiwan。想當然爾,最熱門的主題非生成式 AI (Generative AI) 莫屬。既然 AWS 有現成的工具,身為一名工程師,自然看看無妨,這篇文章算是新手開箱文,會說明如何部署一套基礎模型,並使用 AWS SDK 與其互動。
    Thumbnail
    先來一點心得 終於拿到證照了。 儘管我是在重考一次之後,才拿到證照,但還是十分開心。 從上課+準備第一次考試+準備重考,前前後後花了兩個月的時間,同時也花了不少的金錢和精力,真的是付出不少。 所以我打算分享一下自己的心得,給正在準備這個證照的人。 預計是分成兩篇來談,這次應該是先談考試的部分,下次再