Cloud Functions Triggers 說明Cloud Functions如何設定觸發器,及Cloud Functions接收到事件後如何完成工作。

Cloud Functions可以在無服務器的環境中運行程式碼,但如何觸發Cloud Functions呢?這篇文章介紹了Cloud Functions的二種觸發器,分別是HTTP觸發器、事件觸發器。你將學習到每種觸發器的特點、用途和實現方法,以及如何選擇合適的觸發器來實現你的業務邏輯和數據處理。.


目錄


※ Cloud Functions的觸發器

觸發器(Trigger)是指可以觸發Function的來源,HTTP請求(Http Triggers)是最基本的觸發方式,之前的說明文件也都是採用HTTP請求觸發Function執行。

另一種觸發Function的來源是事件觸發器(Event Triggers):將Function裡的觸發器連結到一個事件(例如,當Cloud Storage的Bucket建立時),當事件發生時,Function就會被執行。

具體動作是,新增Function時,指定一個Trigger,這個Trigger對應到指定Event,當Event發生時Function會收到通知並執行。這一連串的動作,會在新增Function時設定,Cloud Functions會自動把Trigger及對應的Event新增到事件弧(Eventarc)裡。

至於Function是如何收到通知的呢?主要是透過Pub/Sub的訂閱來實現(是否Eventarc全部的Trigger都是透過Pub/Sub實現,還要確認一下Google官方說法🤔),後續會再進行說明,這邊先瞭解到Eventarc即可操作Cloud Functions的事件觸發器。

因為Cloud Functions二代(2nd gen)的事件觸發器是透過Eventarc的Trigger,所以Eventarc裡包含的所有事件都可以成為Function的事件來源,範圍比一代廣泛非常多,所以新建Function時請記得選二代。

在Eventarc裡,一個Trigger只對應到一個Event,每個Trigger會有:

  • 事件來源渠道(Event Channel),例如事件來至Google或其它第三方平台等;
  • 事件提供者(Event Provider),例如事件是在Cloud Storage發生;
  • 事件類別(Event Type),例如Cloud Audit Logs寫入後就觸發等,指觸發時機點的意思;
  • 目的地(Destination Platform/Destination),例如Cloud Functions會被觸發。

可以透過多個Trigger都是對應同一個Event,及每個Trigger各自對應到一個Function,這樣就可以達成一個Event發生時同時多個Function被執行。


※ 建立Function及Eventarc Trigger

點選CREATE FUNCTION。


選擇2nd gen環境、輸入Function名稱,並確定Region(稍等作業會需要這個Region所以要謹慎選)後,點選ADD EVENTARC TRIGGER。


第一次使用的話,點選ENABLE EVENTARC API。


選擇事件,這裡以Cloud Storage裡新增一個Object為例。第一次使用這個事件時,會出現這個事件的觸發時間點是Cloud Audit Logs寫入時觸發,所以需要增加補捉的Log,點選ENABLE ALL。


點選ENABLE。


選擇偵測事件的Region,注意,要跟Function在同一個Region裡,要不然會補捉不到Log或通知不到Function。點選SAVE TRIGGER。


點選Runtime, build, connections and security settings進行設定。


如下設定,不確定怎麼設定可以看這篇。點選NEXT。


選擇程式語言,留意右邊程式碼第5行,是採用cloud_event事件觸發器的框架,程式碼是指Function執行時,將事件的資訊寫到Log中。點選DEPLOY。


點部署時可能會看到這個錯誤訊息,先不用緊張,如果是第一次使用Eventarc要等大約10分鐘左右,讓Google Cloud的一些權限設定完畢才能正常部署。點選CLOSE後,稍等一下再重新按DEPLOY。


部署完畢後,點選TRIGGER來檢視跟Eventarc裡的Trigger連結設定。


Trigger已經順利寫入Eventarc了。接著點選LOGS來檢視記錄。


可以看到剛剛第一次錯誤部署及第二次成功部署的記錄。


也可以點選Eventarc的Trigger來檢視剛剛的設定。


有一筆Trigger,點選Name欄進入。


可以看到Trigger的詳細資訊,點選Destination會連結到Cloud Functions對應的Function畫面。



※ 地端開發

地端開發的步驟沒什麼不同(這篇),但設定還是回到Cloud Console執行比較方便,如果想用gcloud指令部署,就要包含Eventarc等設定都要自己部署,有點麻煩。


※ 事件觸發及檢視記錄

現在來測試看看事件是否會正確觸發Function。點選Cloud Storage的Buckets。


選擇一個同Region的Bucket。重要!要同Region才能觸發事件才能通知到Function。


檢查Region。點選UPLOAD FILES或其它新增Object的方式。


確認上傳檔案成功。


回到Function的LOGS畫面,會發現剛剛Function已被觸發一次,事件相關資訊也都有記錄下來。

實務上Logs的查詢會有些微的延遲,要以Logs裡的日期時間為準。


回到Eventarc的Trigger畫面,會發現剛剛事件有補捉到一次,點選INVOCATION及LATENCY可以看詳細資訊。


或是連接到Logging的Logs Explorer功能。


會看到跟Function裡相同的Logs。如果太多記錄,也可以點選左邊的Cloud Run Revision來限定記錄。


可以看到剛剛Function被觸發的記錄。



※ 總結

第二代的Cloud Functions覆蓋的事件範圍真的很廣泛,在數據工程裡很常需要等待檔案到位後執行處理,這個時候使用Event Trigger就非常方便且即時。

以Cloud Functions做為處理資料程式碼的載體還有一個好處,發生任何錯誤時,最終仍然可以手動的發送HTTP請求觸發Funcion,讓整個異常處理流程更為簡潔快速。


※ References

Cloud Functions triggers

Receive direct events from Cloud Storage (gcloud CLI)


線上課程登入

張貼留言

0 留言

Close Menu