Google Cloud Functions 回應了 403 錯誤

最近因為一些因素,開始接觸 Google Cloud Functions,目的只是為了要做監控用的 Telegram 通知機器人。

尚屬開發初心者的我,跟著 Google Cloud Functions 首次佈署教學,簡直是輕鬆容易,程式碼先用 Hello World,完全沒什麼難度可言,運作起來也完全沒有問題。

但是真的自己從頭開始進行佈署時,卻碰壁連連,程式能不能運作,是一回事。但到了正式發佈時,卻一直回應了 403 錯誤給我。我不是只要把程式碼往上丟,然後佈署,一切應該要正常運作呀!先大致瞭解一下 Google Cloud Functions,如果是 AWS 的使用者,那麼它就會對應到 AWS Lambda,屬於 Serverless 裡的 FaaS(Functions as a Service)。

因為我的目的是做一個 Telegram 機器人,它的用量不高,我想要專注在我的功能面,而不想再去煩惱更底層的像是硬體規格,或是作業環境的建構。Cloud Functions 剛好很符合我的需求:

  • 底層硬體免煩惱
  • 作業環境也不用自己去搭建(例如:Node.js 或 Python……等)
  • 用多少,算多少錢。這指的是「程式碼運作的時間」,用量不太的情況,甚至有可能都不需要付費
  • 單純想學習點東西

先來看看如何快速建一個 Function

如果 GCP 專案裡,完全沒有任何 Functions,GCP 會引導我們建立一個。

上半部,我通通都沒有調整,唯一有調整的,就只有執行階段變更為 Python。

下半部,我沒做什麼調,而且 Google 超好心地幫我把 Hello World 的程式碼寫好了。

都建立之後,會回到 Cloud Functions 首頁,然後只要等待就好了,不會花很多時間。

Functions 建好後,就可以測試了。因為我是 HTTP 的方式觸發,所以會有一個可以用來觸發的網址。

如果沒有問題,這個網址,會秀出 Hello World 的字眼。

如果專案裡已經有 Functions,其實建立 Functions 的步驟和畫面,會和 GCP 引導模式完全一樣。不會因為是引導模式,就格外簡單。

當我開心地另外建一個 Functinos,然後再在 Functions 做了一次測試,結果正確。

這時再在網頁上進行測試時,卻得到了 403 錯誤。心裡一直覺得納悶,又不是我自己架了 Apache 或其他 Web Server,權限我也沒特別調整,事實上也沒有可以調整的地方呀!

突然,在一個莫名其妙的情況下,我看到了一個畫面,讓我突然有了警覺性,覺得很不尋常,是不是有什麼大問題!

所以,我就開始檢查我的 Functions,除了最一開始 GCP 引導我建立的,我還另外建了兩個。GCP 建立的,有上面的圖,但我自己建立則完全沒有。突然之間,我想通了!我也明白為什麼我的 Functions 老是拿到 403。之前我說沒有可以調整權限的地方也根本是錯的。有點算是自己眼殘。但憑良心講,GCP 把這個功能擺在外層,而不是在 Functions 裡,我暫時還無法很能理解為何 GCP 要這樣設計。

要看到權限設定,要在外層先

  1. 勾選一個或數個 Functions
  2. 資訊面板要沒有被隱藏
  3. 權限設定才會出現


至於 403 的解法,就很簡單,只要加入適當的人員,再給予的權限就夠了。點下新增成員後,可以看到類似畫面。

我先調整「角色」,在「Cloud Functions」可以看到一個「Cloud Functions 叫用者」,右邊同時也會有說明這個角色的功能。

角色調好了,再來就是「成員」,如果點右邊問題,看說明,其實會很莫名其妙,我本來就不想限定誰才能用,也就是匿名使用,還要加特定的人,真的很麻煩耶 XDD,難道就不能給我一個匿名使用者嗎 XDD

不過事實上,是有匿名使用者,「allUsers」其實就算是另一種的匿名使用者,設定好後,應該就不會再出現 403 錯誤了

Comments

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Google reCAPTCHA 保護機制,這項服務遵循 Google 隱私權政策服務條款