將函數與分佈相關聯
若要將函數與分佈搭配使用,請將該函數與分佈中的一或多個快取行為建立關聯。您可以將函數與多個分佈中的多個快取行為相關聯。
您可以將函數與下列任何行為建立關聯:
-
現有的快取行為
-
現有分佈中新的新快取行為
-
新分佈中的新快取行為
將函數與快取行為建立關聯時,您必須選擇事件類型。事件類型決定 CloudFront 何時執行該函數。
您可以選擇下列事件類型:
您不能將面向原始伺服器的事件類型 (原始伺服器請求和原始伺服器回應) 與 CloudFront Functions 搭配使用。您可以改為使用 Lambda@Edge。如需更多詳細資訊,請參閱 可以觸發 Lambda@Edge 函數的 CloudFront 事件。
在關聯函數之前,您必須將其發佈至 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 邊緣節點中上線。通常這需要幾分鐘的時間。