本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將函數與分佈相關聯
若要將函數與散佈搭配使用,您可以將函數與散發中的一或多個快取行為建立關聯。您可以在多個分佈中將函數與的多個快取行為相關聯。
您可以將函數與下列任何行為建立關聯:
-
現有的緩存行為
-
現有發行版中的新快取行為
-
新發行版中的新快取行為
將函數與快取行為建立關聯時,您必須選擇事件類型。事件類型決定何時 CloudFront 執行函數。
您可以選擇下列事件類型:
您不能將面向起點的事件類型(原始請求和來源響應)與 CloudFront Functions 一起使用。相反,您可以使用 Lambda @Edge。如需詳細資訊,請參閱 CloudFront 可觸發 Lambda@Edge 函數的事件。
在關聯函數之前,您必須將其發佈至 LIVE
階段。
您可以將函數與 CloudFront 控制台中的發行版相關聯,也可以將函數與 AWS Command Line Interface
(AWS CLI) 相關聯。下列程序顯示如何將函數與現有的快取行為建立關聯。
- Console
-
CloudFront 將分配與函數相關聯。等待幾分鐘,讓關聯的分佈完成部署。您可以在功能詳細資訊頁面上選擇檢視分配來檢查進度。
- CLI
-
若要建立函數與現有快取行為的關聯
-
開啟命令列視窗。
-
輸入下列命令,以儲存您要與函數產生關聯之快取行為的發佈組態。此命令會將分佈組態儲存到名為 dist-config.yaml
的檔案中。若要使用此命令,請執行下列動作:
aws cloudfront get-distribution-config \
--id DistributionID
\
--output yaml > dist-config.yaml
當命令成功時,不會 AWS CLI 返回任何輸出。
-
開啟您建立的名稱dist-config.yaml
為的檔案。編輯檔案以進行下列變更。
-
將 ETag
欄位重新命名為 IfMatch
,但不要變更欄位的值。
-
在快取行為中,尋找名為 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
-
進行這些變更後,請儲存檔案。
-
使用以下命令更新分佈,同時新增函數關聯。若要使用此命令,請執行下列動作:
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 邊緣位置上線。通常這需要幾分鐘的時間。