將各種原始伺服器與 CloudFront分佈搭配使用 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將各種原始伺服器與 CloudFront分佈搭配使用

建立分佈時,您可以指定 CloudFront 傳送檔案請求的原始伺服器。您可以搭配 使用數種不同類型的原始伺服器 CloudFront。例如,您可以使用 Amazon S3 儲存貯體、 MediaStore 容器、 MediaPackage 頻道、Application Load Balancer 或 AWS Lambda 函數 URL。

使用 Amazon S3 儲存貯體

下列主題說明您可以使用 Amazon S3 儲存貯體作為 CloudFront 分佈來源的不同方式。

使用標準 Amazon S3 儲存貯體

當您使用 Amazon S3 作為分發的原始伺服器時,您可以將 CloudFront 要交付的物件放置在 Amazon S3 儲存貯體中。您可以使用 Amazon S3 支援的任何方法將物件放入 Amazon S3,例如,您可以使用 Amazon S3 主控台或 API,或第三方工具。如同使用其他標準 Amazon S3 儲存貯體一樣,您可以在儲存貯體中建立階層結構以存放物件。

使用現有的 Amazon S3 儲存貯體作為 CloudFront 原始伺服器不會以任何方式變更儲存貯體;您仍然可以像平常一樣使用它,以標準 Amazon S3 價格存放和存取 Amazon S3 物件。您需要定期支付 Amazon S3 費用才能將物件存放在儲存貯體中。如需使用 之費用的詳細資訊 CloudFront,請參閱 Amazon CloudFront Pricing 。如需 CloudFront 搭配現有 S3 儲存貯體使用 的詳細資訊,請參閱 CloudFront 新增至現有的 Amazon S3 儲存貯體

重要

若要讓您的儲存貯體使用 CloudFront,名稱必須符合DNS命名要求。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的儲存貯體命名規則

當您將 Amazon S3 儲存貯體指定為 的原始伺服器時 CloudFront,建議您使用下列格式:

bucket-name.s3.region.amazonaws.com

當您以此格式指定儲存貯體名稱時,您可以使用下列CloudFront 功能:

請勿使用以下格式指定儲存貯體:

  • Amazon S3 路徑樣式:s3.amazonaws.com/bucket-name

  • Amazon S3 CNAME

使用 Amazon S3 Object Lambda

在您建立 Object Lambda 存取點時,Amazon S3 會自動為您的 Object Lambda 存取點產生唯一的別名。您可以使用此別名,而非 Amazon S3 儲存貯體名稱作為 CloudFront 分發的原始伺服器。

當您使用 Object Lambda Access Point 別名作為 的原始伺服器時 CloudFront,建議您使用下列格式:

alias.s3.region.amazonaws.com

如需有關尋找 alias 的詳細資訊,請參閱《Amazon S3 使用者指南》中的如何為您的 S3 儲存貯體 Object Lambda 存取點使用儲存貯體式別名

重要

當您使用 Object Lambda 存取點作為 的原始伺服器時 CloudFront,您必須使用原始伺服器存取控制

如需範例使用案例,請參閱搭配使用 Amazon S3 Object Lambda 與 Amazon CloudFront 為最終使用者量身打造內容。

CloudFront 處理 Object Lambda Access Point 原始伺服器的方式與標準 Amazon S3 儲存貯體原始伺服器相同。

如果您使用 Amazon S3 Object Lambda 作為分發的原始伺服器,則必須設定下列四個許可。

Object Lambda Access Point
新增 Object Lambda 存取點的許可
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在導覽窗格中,選擇 物件 Lambda 存取點

  3. 選擇您要使用的 Object Lambda 存取點。

  4. 選擇許可索引標籤標籤。

  5. 物件 Lambda 存取點政策 部分中選擇 編輯

  6. 將以下政策貼入 政策 欄位。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3-object-lambda:Get*", "Resource": "arn:aws:s3-object-lambda:region:AWS-account-ID:accesspoint/Object-Lambda-Access-Point-name", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::AWS-account-ID:distribution/CloudFront-distribution-ID" } } } ] }
  7. 選擇 Save changes (儲存變更)。

Amazon S3 Access Point
新增 Amazon S3 Access Point 的許可
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在導覽窗格中,選擇 存取點

  3. 選擇您要使用的 Amazon S3 存取點。

  4. 選擇許可索引標籤標籤。

  5. 存取點政策 部分中選擇 編輯

  6. 將以下政策貼入 政策 欄位。

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "s3objlambda", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name", "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name/object/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "s3-object-lambda.amazonaws.com" } } } ] }
  7. 選擇 Save (儲存)。

Amazon S3 bucket
將許可新增至 Amazon S3 儲存貯體
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在導覽窗格中,選擇 儲存貯體

  3. 選擇您要使用的 Amazon S3 儲存貯體。

  4. 選擇許可索引標籤標籤。

  5. 儲存貯體政策 區段中,選擇 編輯

  6. 將以下政策貼入 政策 欄位。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "*", "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "AWS-account-ID" } } } ] }
  7. 選擇 Save changes (儲存變更)。

AWS Lambda function
將許可新增至 Lambda 函數
  1. 登入 AWS Management Console 並在 開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/

  2. 在導覽視窗中,選擇函數

  3. 選擇您要使用的 AWS Lambda 函數。

  4. 依序選擇 組態 索引標籤和 許可

  5. 基於資源的政策聲明 區段中選擇 新增許可

  6. 選擇 AWS 帳戶

  7. 輸入 聲明 ID 的名稱。

  8. 主體 輸入 cloudfront.amazonaws.com

  9. 動作 下拉式選單中選擇 lambda:InvokeFunction

  10. 選擇 Save (儲存)。

使用 Amazon S3 存取點

當您使用 S3 Access Point 時,Amazon S3 會自動為您產生唯一的別名。您可以使用此別名,而非 Amazon S3 儲存貯體名稱作為分發的 CloudFront原始伺服器。

當您使用 Amazon S3 Access Point 別名作為 的原始伺服器時 CloudFront,建議您使用下列格式:

alias.s3.region.amazonaws.com

如需尋找 的詳細資訊alias,請參閱 Amazon S3 使用者指南 中的為 S3 儲存貯體存取點使用儲存貯體樣式別名Amazon S3

重要

當您使用 Amazon S3 Access Point 作為 的原始伺服器時 CloudFront,您必須使用原始伺服器存取控制

CloudFront 處理 Amazon S3 Access Point 原始伺服器的方式與標準 Amazon S3 儲存貯體原始伺服器相同。

如果您使用 Amazon S3 Object Lambda 作為分發的原始伺服器,則必須設定下列兩個許可。

Amazon S3 Access Point
新增 Amazon S3 Access Point 的許可
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在導覽窗格中,選擇 存取點

  3. 選擇您要使用的 Amazon S3 存取點。

  4. 選擇許可索引標籤標籤。

  5. 存取點政策 部分中選擇 編輯

  6. 將以下政策貼入 政策 欄位。

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "s3objlambda", "Effect": "Allow", "Principal": {"Service": "cloudfront.amazonaws.com"}, "Action": "s3:*", "Resource": [ "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name", "arn:aws:s3:region:AWS-account-ID:accesspoint/Access-Point-name/object/*" ], "Condition": { "StringEquals": {"aws:SourceArn": "arn:aws:cloudfront::AWS-account-ID:distribution/CloudFront-distribution-ID"} } } ] }
  7. 選擇 Save (儲存)。

Amazon S3 bucket
將許可新增至 Amazon S3 儲存貯體
  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在導覽窗格中,選擇 儲存貯體

  3. 選擇您要使用的 Amazon S3 儲存貯體。

  4. 選擇許可索引標籤標籤。

  5. 儲存貯體政策 區段中,選擇 編輯

  6. 將以下政策貼入 政策 欄位。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "*", "Resource": [ "arn:aws:s3:::bucket-name", "arn:aws:s3:::bucket-name/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "AWS-account-ID" } } } ] }
  7. 選擇 Save changes (儲存變更)。

使用設定為網站端點的 Amazon S3 儲存貯體

您可以使用設定為網站端點的 Amazon S3 儲存貯體,作為具有 的自訂原始伺服器CloudFront。當您設定 CloudFront 分佈時,請為原始伺服器輸入儲存貯體的 Amazon S3 靜態網站託管端點。這個值會顯示在 Amazon S3 主控台 Properties (屬性) 索引標籤中的 Static website hosting (靜態網站託管) 窗格裡。例如:

http://bucket-name.s3-website-region.amazonaws.com

如需指定 Amazon S3 靜態網站端點的詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的網站端點

當您以此格式指定儲存貯體名稱做為您的原始伺服器時,可以使用 Amazon S3 重新引導和 Amazon S3 自訂錯誤文件。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的設定自訂錯誤文件設定重新引導部分。(CloudFront 也提供自訂錯誤頁面。 如需詳細資訊,請參閱 為特定HTTP狀態碼創建自定義錯誤頁面。)

使用 Amazon S3 儲存貯體作為 CloudFront 原始伺服器不會以任何方式變更儲存貯體。您可以如一般情況般繼續使用,且需支付一般 Amazon S3 費用。如需使用 之費用的詳細資訊 CloudFront,請參閱 Amazon CloudFront Pricing

注意

如果您使用 CloudFront API使用設定為網站端點的 Amazon S3 儲存貯體建立分佈,則必須使用 來設定分佈CustomOriginConfig,即使網站託管在 Amazon S3 儲存貯體中。如需使用 建立分佈的詳細資訊CloudFront API,請參閱 Amazon 參考 CreateDistribution 中的 。 CloudFront API

CloudFront 新增至現有的 Amazon S3 儲存貯體

如果您將物件存放在 Amazon S3 儲存貯體中,您可以讓使用者直接從 S3 取得物件,也可以設定 CloudFront 以從 S3 取得物件,然後將物件分發給使用者。如果您的使用者經常存取物件,使用 CloudFront 會更符合成本效益,因為使用量越高, CloudFront 資料傳輸的價格低於 Amazon S3 資料傳輸的價格。此外,下載 CloudFront 速度比單獨使用 Amazon S3 更快,因為物件會存放在更接近使用者的位置。

注意

如果您想要 CloudFront 尊重 Amazon S3 跨來源資源共用設定,請將 CloudFront 設定為將Origin標頭轉送至 Amazon S3。如需詳細資訊,請參閱根據要求標頭快取內容

如果您目前使用自己的網域名稱 (例如 example.com) 直接從 Amazon S3 儲存貯體分發內容,而不是使用 Amazon S3 儲存貯體的網域名稱 (例如 amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com),則可以 CloudFront使用下列程序新增 而不中斷。

當您已從 Amazon S3 分發內容 CloudFront 時新增
  1. 建立 CloudFront 分佈。如需詳細資訊,請參閱建立分發

    當您建立分佈時,請指定 Amazon S3 儲存貯體的名稱做為原始伺服器。

    重要

    若要讓您的儲存貯體使用 CloudFront,名稱必須符合DNS命名要求。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的儲存貯體命名規則

    如果您將 CNAME 與 Amazon S3 搭配使用,也CNAME請為您的分佈指定 。

  2. 建立一個在 Amazon S3 儲存貯體中包含公開可讀取物件的連結之測試 Web 頁面,並測試該連結。對於此初始測試,請在物件 中使用分佈的CloudFront 網域名稱URLs,例如 https://d111111abcdef8.cloudfront.net/images/image.jpg

    如需有關 格式的詳細資訊 CloudFront URLs,請參閱 自訂 中檔案的URL格式 CloudFront

  3. 如果您使用的是 Amazon S3 CNAMEs,您的應用程式會使用網域名稱 (例如 example.com) 來參考 Amazon S3 儲存貯體中的物件,而不是使用儲存貯體的名稱 (例如 amzn-s3-demo-bucket.s3.amazonaws.com)。若要繼續使用網域名稱來參考物件,而不是使用分佈的 CloudFront 網域名稱 (例如 d111111abcdef8.cloudfront.net),您需要向DNS服務供應商更新設定。

    若要CNAMEs讓 Amazon S3 正常運作,您的DNS服務供應商必須為您的網域設定CNAME資源記錄集,以將網域的查詢路由至您的 Amazon S3 儲存貯體。例如,如果使用者請求該物件:

    https://example.com/images/image.jpg

    該請求會自動重新路由,且使用者看到此物件:

    https://amzn-s3-demo-bucket.s3.amazonaws.com/images/image.jpg

    若要將查詢路由至您的 CloudFront 分發,而非您的 Amazon S3 儲存貯體,您需要使用DNS服務供應商提供的方法來更新網域CNAME的資源記錄集。此更新CNAME的記錄會將DNS查詢從網域重新導向至分佈的 CloudFront 網域名稱。如需詳細資訊,請參閱DNS服務供應商提供的文件。

    注意

    如果您使用 Route 53 作為DNS服務,則可以使用CNAME資源記錄集或別名資源記錄集。如需編輯資源紀錄集的詳細資訊,請參閱編輯記錄。如需別名資源紀錄集的詳細資訊,請參閱選擇別名或非別名記錄。這兩個主題都在 Amazon Route 53 開發人員指南中。

    如需CNAMEs搭配 使用 的詳細資訊 CloudFront,請參閱 新增替代網域名稱 (CNAMEs) URLs 以使用自訂

    更新CNAME資源記錄集後,變更可能需要最多 72 小時才能在整個DNS系統中傳播,但通常速度更快。在此期間,您的內容的某些請求將繼續路由至您的 Amazon S3 儲存貯體,而其他請求則會路由至 CloudFront。

將 Amazon S3 儲存貯體移至不同的 AWS 區域

如果您使用 Amazon S3 作為 CloudFront 分佈的原始伺服器,並將儲存貯體移至不同的 AWS 區域, CloudFront 當下列兩項都為 true 時,可能需要最多一小時的時間來更新其記錄以使用新區域:

  • 您正在使用 CloudFront 原始存取身分 (OAI) 來限制對儲存貯體的存取。

  • 您將儲存貯體移至需要簽章版本 4 進行身分驗證的 Amazon S3 區域。

當您使用 時OAIs, CloudFront 會使用區域 (以及其他值) 來計算用來從儲存貯體請求物件的簽章。如需 的詳細資訊OAIs,請參閱 使用原始存取身分識別 (舊版,不建議使用)。如需 AWS 區域 支援 Signature 第 2 版的清單,請參閱中的 Signature 第 2 版簽署程序Amazon Web Services 一般參考

若要強制更快速地更新 CloudFront的記錄,您可以更新分佈 CloudFront,例如,透過更新 CloudFront 主控台中一般索引標籤上的描述欄位。當您更新分佈時, CloudFront 請立即檢查儲存貯體所在的區域。將變更傳播到所有節點只需幾分鐘即可完成。

使用 MediaStore 容器或 MediaPackage 頻道

若要使用 串流影片 CloudFront,您可以設定設定為 MediaStore容器的 Amazon S3 儲存貯體,或使用 建立頻道和端點 MediaPackage。然後,在 中建立和設定分佈 CloudFront 以串流影片。

如需詳細資訊和 step-by-step指示,請參閱下列主題:

使用 Application Load Balancer

如果您的原始伺服器是託管在一或多個 Amazon EC2執行個體上的一或多個 HTTP(S) 伺服器 (網路伺服器),您可以使用面向網際網路的 Application Load Balancer 將流量分發給執行個體。面向網際網路的負載平衡器具有可公開解析DNS的名稱,並透過網際網路將請求從用戶端路由到目標。

如需使用 Application Load Balancer 作為 原始伺服器的詳細資訊 CloudFront,包括如何確保檢視器只能透過 存取您的 Web 伺服器 CloudFront ,而不是直接存取負載平衡器,請參閱 限制對應用程式負載平衡器的存取

使用 Lambda 函數 URL

Lambda 函數URL是 Lambda 函數的專用HTTPS端點。您可以使用 Lambda 函數URL來建置完全在 Lambda 內的無伺服器 Web 應用程式。您可以直接透過 函數叫用 Lambda Web 應用程式URL,而不需要與 API Gateway 或 Application Load Balancer 整合。

如果您使用 Lambda 函數搭配函數 建置無伺服器 Web 應用程式URLs,您可以新增 CloudFront 以取得下列優點:

  • 在更接近檢視者的位置快取內容,加快應用程式的速度

  • 讓您的 Web 應用程式使用自訂網域

  • 使用 CloudFront 快取行為將不同的URL路徑路由至不同的 Lambda 函數

  • 使用 CloudFront 地理限制或 AWS WAF (或兩者) 封鎖特定請求

  • AWS WAF 搭配 使用 CloudFront ,有助於保護您的應用程式免受惡意機器人攻擊、協助防止常見的應用程式漏洞,並增強對DDoS攻擊的保護

若要使用 Lambda 函數URL作為 CloudFront 分佈的原始伺服器,請指定 Lambda 函數的完整網域名稱URL作為原始網域。Lambda 函數URL網域名稱使用下列格式:

function-URL-ID.lambda-url.AWS-Region.on.aws

當您使用 Lambda 函數URL作為 CloudFront 分佈的原始伺服器時,該函數URL必須可公開存取。若要這麼做,請使用下列其中一個選項:

  • 如果您使用原始伺服器存取控制 (OAC),Lambda 函數的 AuthType 參數URL必須使用 AWS_IAM值,並在資源型政策中允許 lambda:InvokeFunctionUrl許可。如需URLs針對 使用 Lambda 函數的詳細資訊OAC,請參閱 限制對 AWS Lambda 函數 URL 來源的訪問

  • 如果您不使用 OAC,您可以將函數的 AuthType 參數設定為 ,URLNONE並在資源型政策中允許 lambda:InvokeFunctionUrl許可。

您也可以將自訂原始伺服器標頭新增至 CloudFront 傳送至原始伺服器的要求,如果請求中沒有標頭,也可以編寫函數程式碼來傳回錯誤回應。這有助於確保使用者只能透過 存取您的 Web 應用程式 CloudFront,而不是直接使用 Lambda 函數 URL。

如需 Lambda 函數 的詳細資訊URLs,請參閱 AWS Lambda 開發人員指南 中的下列主題:

使用 Amazon EC2(或其他自訂原始伺服器)

自訂原始伺服器是具有可公開解析DNS名稱的 HTTP(S) Web 伺服器,可透過網際網路將請求從用戶端路由至目標。HTTP(S) 伺服器可以託管在 AWS- 例如 Amazon EC2執行個體 - 或託管在其他地方。設為網站端點的 Amazon S3 原始伺服器也會被視為自訂原始伺服器。如需詳細資訊,請參閱使用設定為網站端點的 Amazon S3 儲存貯體

當您使用自己的HTTP伺服器做為自訂原始伺服器時,您可以指定伺服器DNS的名稱,以及 HTTP和 HTTPS 連接埠,以及 CloudFront 您要從原始伺服器擷取物件時使用的通訊協定。

使用自訂原始伺服器時,除了私有內容之外,大多數 CloudFront 功能都受支援。雖然您可以使用已簽署 URL 來分發來自自訂原始伺服器的內容,但對於 CloudFront 存取自訂原始伺服器,原始伺服器必須保持可公開存取。如需詳細資訊,請參閱提供具有已簽章URLs和已簽章 Cookie 的私有內容

請依照下列準則,將 Amazon EC2執行個體和其他自訂原始伺服器與 搭配使用CloudFront。

  • 在為相同原始伺服器提供內容的所有伺服器上託管和提供相同的 CloudFront內容。如需詳細資訊,請參閱 分佈設定參考 主題中的 原始設定

  • 如果您需要 AWS Support 或 使用此值進行偵錯CloudFront ,請在所有伺服器上記錄X-Amz-Cf-Id標頭項目。

  • 將請求限制為自訂原始伺服器接聽的 HTTP和 HTTPS 連接埠。

  • 同步實作中所有伺服器的時鐘。請注意, CloudFront 會將國際標準時間 (UTC) 用於已簽署URLs和已簽章的 Cookie、日誌和報告。此外,如果您使用 CloudWatch指標監控 CloudFront 活動,請注意 CloudWatch 也會使用 UTC。

  • 使用冗餘伺服器來處理故障。

  • 如需有關使用自訂原始伺服器來提供私有內容的詳細資訊,請參閱限制存取自訂原始伺服器上的檔案

  • 如需請求和回應行為以及支援HTTP狀態碼的相關資訊,請參閱 請求和回應行為

如果您將 Amazon EC2 用於自訂原始伺服器,建議您執行下列動作:

  • 使用 Amazon Machine Image,會自動為 Web 伺服器安裝軟體。如需詳細資訊,請參閱 Amazon EC2 文件

  • 使用 Elastic Load Balancing 負載平衡器來處理多個 Amazon EC2執行個體的流量,並隔離您的應用程式與 Amazon EC2執行個體的變更。例如,如果您使用負載平衡器,則可以新增和刪除 Amazon EC2執行個體,而無需變更應用程式。如需詳細資訊,請參閱 Elastic Load Balancing 說明文件

  • 建立 CloudFront 分佈時,請為原始伺服器網域名稱指定URL負載平衡器的 。如需詳細資訊,請參閱建立分發

使用 CloudFront 原始伺服器群組

例如,如果您想要為需要高可用性的案例設定原始伺服器容錯移轉,您可以指定 CloudFront 原始伺服器原始伺服器群組。使用原始伺服器容錯移轉來指定 的主要原始伺服器, CloudFront 加上當主要原始伺服器傳回特定HTTP狀態碼失敗回應時 CloudFront 自動切換為 的第二個原始伺服器。

如需詳細資訊,包括原始伺服器群組的設定步驟,請參閱透過 CloudFront原始容錯移轉來最佳化高