使用各種來源與 CloudFront分佈 - Amazon CloudFront

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

使用各種來源與 CloudFront分佈

當您建立發佈時,您可以指定 CloudFront 傳送檔案要求的來源。您可以使用幾種不同種類的起源 CloudFront。例如,您可以使用 Amazon S3 儲存貯體、 MediaStore 容器、 MediaPackage 通道、應用程式負載平衡器或 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 定價。如需搭配現有 S3 儲存貯體使 CloudFront 用的詳細資訊,請參閱添加 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 對象 Lambda

在您建立 Object Lambda 存取點時,Amazon S3 會自動為您的 Object Lambda 存取點產生唯一的別名。您可以使用此別名而不是 Amazon S3 儲存貯體名稱做為 CloudFront 分發的來源。

當您使用物件 Lambda 存取點別名作為原點時 CloudFront,建議您使用下列格式:

alias.s3.region.amazonaws.com

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

重要

當您使用物件 Lambda 存取點做為的原點時 CloudFront,您必須使用原始存取控制

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

CloudFront 將物件 Lambda 存取點原點視為標準 Amazon S3 儲存貯體來源相同。

如果您使用 Amazon S3 物件 Lambda 做為分發的來源,則必須設定以下四個許可。

Object Lambda Access Point
若要新增物件 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. 選擇儲存變更

Amazon S3 Access Point
若要新增 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", "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. 選擇儲存

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. 選擇儲存變更

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. 選擇儲存

使用 Amazon S3 存取點

當您使用 S3 存取點時,Amazon S3 會自動為您產生唯一的別名。您可以使用此別名而不是 Amazon S3 儲存貯體名稱做為 CloudFront分發的來源。

當您使用 Amazon S3 存取點別名做為來源時 CloudFront,建議您使用下列格式:

alias.s3.region.amazonaws.com

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

重要

當您使用 Amazon S3 存取點做為來源時 CloudFront,必須使用來源存取控制

CloudFront 將 Amazon S3 存取點來源視為標準 Amazon S3 儲存貯體來源相同。

如果您使用 Amazon S3 物件 Lambda 做為分發的來源,則必須設定以下兩個許可。

Amazon S3 Access Point
若要新增 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", "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. 選擇儲存

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. 選擇儲存變更

使用設定為網站端點的 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 定價

注意

如果您使用 CloudFront API 透過設定為網站端點的 Amazon S3 儲存貯體建立分發,則即使該網站託管於 Amazon S3 儲存貯體CustomOriginConfig,也必須使用以進行設定。如需使用 CloudFront API 建立分發的詳細資訊,請參閱 Amazon CloudFront API 參考CreateDistribution中的。

添加 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 儲存貯體的網域名稱 (例如文件範例儲存貯體 .s3.US 西部 2.Amazons.com),您可以使用下列程序在不中斷的情況下新增內容。 CloudFront

若要新增您已經從 Amazon S3 發佈內容的 CloudFront 時間
  1. 創建一個 CloudFront 分佈。如需詳細資訊,請參閱 建立分發

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

    重要

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

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

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

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

  3. 如果您目前使用 Amazon S3 CNAME,您的應用程式會使用網域名稱 (例如 example.com) 參照 Amazon S3 儲存貯體中的物件,而不是使用儲存貯體的名稱 (例如 DOC-EXAMPLE-BUCKET.s3.amazonaws.com)。若要繼續使用您的網域名稱來參考物件,而不是使用網 CloudFront 域名稱進行分發 (例如 d111111abcdef8.cloudfront.net),您必須透過 DNS 服務供應商更新您的設定。

    針對使用 Amazon S3 CNAME,您的 DNS 服務供應商必須有網域的 CNAME 資源紀錄集,該記錄目前將網域查詢路由到您的 Amazon S3 儲存貯體。例如,如果使用者請求該物件:

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

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

    https://DOC-EXAMPLE-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,請參閱透過新增替代網域名稱 (CNAME) 來使用自訂 URL

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

將 Amazon S3 存儲桶移動到另一個 AWS 區域

如果您使用 Amazon S3 做為 CloudFront 分發的來源,而您將儲存貯體移到另一個儲存貯體 AWS 區域,則當下列兩項都成立時,最多 CloudFront 可能需要一個小時才能更新其記錄才能使用新區域:

  • 您正在使用 CloudFront 來源存取身分識別 (OAI) 來限制儲存貯體的存取權。

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

當您使用 OAI 時, CloudFront 會使用 Region (以及其他值) 來計算用來從值區要求物件的簽章。如需 OAI 的詳細資訊,請參閱使用原始存取身分識別 (舊版,不建議使用)。如需支援簽名版本 2 的 AWS 區域 清單,請參閱 Amazon Web Services 一般參考.

若要強制更新記錄 CloudFront的速度,您可以更新您的 CloudFront發行版,例如,透過更新 CloudFront 主控台中 [一般] 索引標籤上的 [說明] 欄位。當您更新分配時,請 CloudFront 立即檢查值區所在的區域。將變更傳播到所有節點只需幾分鐘即可完成。

使用 MediaStore 容器或通 MediaPackage 道

若要使用串流影片 CloudFront,您可以設定設定為 MediaStore容器的 Amazon S3 儲存貯體,或使用建立通道和端點 MediaPackage。然後,您可以在中創建並配置分發 CloudFront 以流式傳輸視頻。

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

使用應用程式負載平衡器

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

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

使用 Lambda 函數網址

Lambda 函數網址是 Lambda 函數的專用 HTTPS 端點。您可以使用 Lambda 函數 URL,完全在 Lambda 中建置無伺服器 Web 應用程式。您可以直接透過這個函數 URL 叫用 Lambda Web 應用程式,完全無需與 API Gateway 或 Application Load Balancer 進行整合。

如果您使用 Lambda 函數搭配函數 URL 來建置無伺服器 Web 應用程式,您可以新增 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 函數 URL 的AuthType參數必須使用該AWS_IAM值,並允許以資源為基礎的政策中的lambda:InvokeFunctionUrl權限。如需有關針對 OAC 使用 Lambda 函數 URL 的詳細資訊,請參閱限制對 AWS Lambda 函數 URL 來源的訪問

  • 如果您不使用 OAC,您可以將函數 URL 的AuthType參數設定為,NONE並允許以資源為基礎的原則中的lambda:InvokeFunctionUrl權限。

您也可以將自訂 Origin 標頭新增至 CloudFront 傳送至來源的要求,並撰寫函數程式碼以在要求中不存在標頭時傳回錯誤回應。這有助於確保使用者只能透過存取您的 Web 應用程式 CloudFront,而不能直接使用 Lambda 函數 URL 存取您的 Web 應用程式。

如需 Lambda 函數 URL 的詳細資訊,請參閱 AWS Lambda 開發人員指南

使用 Amazon EC2(或其他自定義源地)

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

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

當您使用自訂來源 (私人內容除外) 時,支援大多數 CloudFront 功能。雖然您可以使用已簽署的 URL 從自訂來源散發內容,但 CloudFront 若要存取自訂來源,原始伺服器必須保持可公開存取。如需詳細資訊,請參閱 使用已簽署網址和已簽署 Cookie 來提供私人內容

請遵循下列準則,將 Amazon EC2 執行個體和其他自訂來源搭配使用CloudFront。

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

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

  • 限制對您自訂原始伺服器所監聽的 HTTP 與 HTTPS 連接埠提出請求。

  • 同步實作中所有伺服器的時鐘。請注意,針對已簽署的 URL 和已簽署的 Cookie、記錄和報告 CloudFront 使用國際標準時間 (UTC)。此外,如果您使用 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原始容錯移轉來最佳化高