將函數與分佈相關聯 - Amazon CloudFront

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

將函數與分佈相關聯

若要將函數與散佈搭配使用,您可以將函數與散發中的一或多個快取行為建立關聯。您可以在多個分佈中將函數與的多個快取行為相關聯。

您可以將函數與下列任何行為建立關聯:

  • 現有的緩存行為

  • 現有發行版中的新快取行為

  • 新發行版中的新快取行為

將函數與快取行為建立關聯時,您必須選擇事件類型。事件類型決定何時 CloudFront 執行函數。

您可以選擇下列事件類型:

  • 檢視器要求 — 當 CloudFront 收到來自檢視器的要求時,函數會執行。

  • 查看器響應」— 該函數在 CloudFront 返回給查看器響應之前運行。

您不能將面向起點的事件類型(原始請求和來源響應)與 CloudFront Functions 一起使用。相反,您可以使用 Lambda @Edge。如需詳細資訊,請參閱 CloudFront 可觸發 Lambda@Edge 函數的事件

注意

在關聯函數之前,您必須將其發佈LIVE 階段。

您可以將函數與 CloudFront 控制台中的發行版相關聯,也可以將函數與 AWS Command Line Interface (AWS CLI) 相關聯。下列程序顯示如何將函數與現有的快取行為建立關聯。

Console
若要建立函數與現有快取行為的關聯
  1. 登入 CloudFront 主控台,https://console.aws.amazon.com/cloudfront/v4/home#/functions然後選擇「功能」頁面。

  2. 選擇您要關聯的函數。

  3. 在 [數] 頁面上,選擇 [發佈] 索引標籤。

  4. 選擇「發佈功能」。

  5. 選擇 Add association (建立關聯)。在出現的對話方塊中,選擇發佈、事件類型和/或快取行為。

    在事件類型中,選擇您希望此函數執行的時間:

    • 檢視器請求 — 每次 CloudFront 收到請求時執行函數。

    • 瀏覽器響應 — 每次 CloudFront 返回響應時運行該函數。

  6. 若要儲存組態,請選擇新增關聯

CloudFront 將分配與函數相關聯。等待幾分鐘,讓關聯的分佈完成部署。您可以在功能詳細資訊頁面上選擇檢視分配來檢查進度。

CLI
若要建立函數與現有快取行為的關聯
  1. 開啟命令列視窗。

  2. 輸入下列命令,以儲存您要與函數產生關聯之快取行為的發佈組態。此命令會將分佈組態儲存到名為 dist-config.yaml 的檔案中。若要使用此命令,請執行下列動作:

    • DistributionID 取代為分佈的 ID。

    • 在一行上執行命令。在此範例中,提供分行符號以使範例更具可讀性。

    aws cloudfront get-distribution-config \ --id DistributionID \ --output yaml > dist-config.yaml

    當命令成功時,不會 AWS CLI 返回任何輸出。

  3. 開啟您建立的名稱dist-config.yaml為的檔案。編輯檔案以進行下列變更。

    1. ETag 欄位重新命名為 IfMatch,但不要變更欄位的值。

    2. 在快取行為中,尋找名為 FunctionAssociations 的物件。更新此物件以新增函數關聯。如下的範例給出函數關聯的 YAML 語法。

      • 下列範例顯示檢視者請求事件物件 (觸發條件)。若要使用檢視者回應事件類型,請將 viewer-request 取代為 viewer-response

      • arn:aws:cloudfront::111122223333:function/ExampleFunction 取代為與此快取行為相關聯之函數的 Amazon Resource Name (ARN)。要獲取函數 ARN,您可以使用 aws cloudfront list-functions 命令。

      FunctionAssociations: Items: - EventType: viewer-request FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction Quantity: 1
    3. 進行這些變更後,請儲存檔案。

  4. 使用以下命令更新分佈,同時新增函數關聯。若要使用此命令,請執行下列動作:

    • DistributionID 取代為分佈的 ID。

    • 在一行上執行命令。在此範例中,提供分行符號以使範例更具可讀性。

    aws cloudfront update-distribution \ --id DistributionID \ --cli-input-yaml file://dist-config.yaml

    如果命令成功執行,您會看到如下所示的輸出,其中描述剛使用函數關聯更新的分佈。為便於閱讀,對如下的範例輸出進行了截斷。

    Distribution: ARN: arn:aws:cloudfront::111122223333:distribution/EBEDLT3BGRBBW ... truncated ... DistributionConfig: ... truncated ... DefaultCacheBehavior: ... truncated ... FunctionAssociations: Items: - EventType: viewer-request FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction Quantity: 1 ... truncated ... DomainName: d111111abcdef8.cloudfront.net Id: EDFDVBD6EXAMPLE LastModifiedTime: '2021-04-19T22:39:09.158000+00:00' Status: InProgress ETag: E2VJGGQEG1JT8S

重新部署分佈時,此分佈的 Status 變更為 InProgress。當新發佈組態到達 CloudFront 邊緣位置時,該邊緣位置會開始使用關聯的函數。當發行版完全部署時,會Status變更回Deployed. 這表示關聯的 CloudFront 功能在全球的所有 CloudFront 邊緣位置上線。通常這需要幾分鐘的時間。