本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將函數與分佈建立關聯
若要搭配分佈使用函數,請將函數與分佈中的一或多個快取行為建立關聯。您可以在多個分佈中將函數與的多個快取行為相關聯。
您可以將函數與下列任何行為建立關聯:
-
現有的快取行為
-
現有分佈中的新快取行為
-
新分佈中的新快取行為
將函數與快取行為建立關聯時,您必須選擇事件類型。事件類型會決定 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 節點中上線。通常這需要幾分鐘的時間。