Cloud Functions可以在無服務器的環境中運行程式碼,但如何觸發Cloud Functions呢?這篇文章介紹了Cloud Functions的二種觸發器,分別是HTTP觸發器、事件觸發器。你將學習到每種觸發器的特點、用途和實現方法,以及如何選擇合適的觸發器來實現你的業務邏輯和數據處理。.
觸發器(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會有:
可以透過多個Trigger都是對應同一個Event,及每個Trigger各自對應到一個Function,這樣就可以達成一個Event發生時同時多個Function被執行。
點選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,讓整個異常處理流程更為簡潔快速。
Receive direct events from Cloud Storage (gcloud CLI)
0 留言