iT邦幫忙

2023 iThome 鐵人賽

0
Software Development

跟著 OXXO 一起學 Python系列 第 70

( Day 34.1 ) Python 使用 Google Cloud Functions

  • 分享至 

  • xImage
  •  

Google Cloud Functions 是一個無伺服器的雲端執行環境,常作為輕量化的 API 以及 webhooks 使用。這篇教學將會介紹如何使用使用 Google Cloud Functions。

原文參考:使用 Google Cloud Functions

什麼是 Google Cloud Functions?

Google Cloud Functions 是 Google Cloud 裡的服務,一個無伺服器的雲端執行環境,可以部署一些簡單或單一用途的程式,當監聽的事件被觸發時,就會觸發 Cloud Function 裡所部署的程式,由於不需要伺服器的特性,常常作為輕量化的 API 以及 webhooks 使用。

前往:Google Cloud Functions

Google Cloud Functions 可以使用 Node.js、Python、Go、Java、.NET 或 Ruby 程式語言進行編輯,執行環境也會因為選擇的運行時而產生差異,針對伺服器管理、軟體設置、框架更新或作業系統更新等基礎設施的建置,全都由 Google 負責管理,使用者完全不需要做任何事情,只需要專注在自己的程式碼邏輯即可。

Python 教學 - 使用 Google Cloud Functions -  什麼是 Google Cloud Functions?

Cloud Functions 計費方式

啟用 Cloud Functions 需要綁定個人信用卡,但 Cloud Functions 有提供免費的額度供開發者使用,如果用量不超過額度,則第一年內不會收費 ( Google 提供第一年幾百美金的額度,通常單純個人操作或小型的應用開發,基本上不可能一天百萬次的呼叫額度 ),第二年開始的計費依據則會以函式的執行時間長度、函式的叫用次數,以及您為函式佈建的資源數量來計算,最低一個月約 0.01 美金。

詳細收費方式可參考:Cloud Functions 定價

建立 Cloud Cloud 專案

前往 Google Cloud Functions 頁面,點擊「免費試用」。

前往:Google Cloud Functions

Python 教學 - 使用 Google Cloud Functions - 前往 Google Cloud Functions 頁面

第一步,下拉選擇個人基本資訊,勾選同意服務條款。

Python 教學 - 使用 Google Cloud Functions - 同意服務條款

第二步,輸入電話號碼,取得驗證碼後輸入。

Python 教學 - 使用 Google Cloud Functions - 取得驗證碼

第三步,輸入個人住址、信用卡資訊,點擊開始免費試用,就能開始使用。

Python 教學 - 使用 Google Cloud Functions - 輸入個人住址、信用卡資訊

完成後,進入 Google Cloud Platform ( GCP ) 控制台,建立一個專案,如果沒有建立過專案,可能會要求建立一個新專案。

Python 教學 - 使用 Google Cloud Functions - 建立 Cloud Cloud 專案

如果建立過專案,也可以點擊專案名稱開啟視窗後,點擊右上角新增專案進行新增。

Python 教學 - 使用 Google Cloud Functions - 點擊專案名稱開啟視窗

Python 教學 - 使用 Google Cloud Functions - 點擊右上角新增專案進行新增

啟用 Cloud Build API

因為 Cloud Functions 需要搭配 Cloud Build API,必須先啟用 Cloud Build API,建立專案之後,點擊左上方圖示開啟左側選單,選擇「API 和服務 > 程式庫」。

Python 教學 - 使用 Google Cloud Functions - API 和服務程式庫

從程式庫裡搜尋「build api」。

Python 教學 - 使用 Google Cloud Functions - build api

搜尋到 Build API 後,點擊「啟用」。

Python 教學 - 使用 Google Cloud Functions - 啟用 Cloud Build API

接著點擊「啟用計費功能」。

Python 教學 - 使用 Google Cloud Functions - 啟用計費功能

選擇付款的帳戶後,就可以啟用 Cloud Build API ( 不需要太過擔心付費的問題,因為如果是個人用戶的用量,第一年基本上完全免費 )。

Python 教學 - 使用 Google Cloud Functions - 選擇付款的帳戶

完成後會出現「API」已啟用的標示,表示啟用完成。

Python 教學 - 使用 Google Cloud Functions - 啟用完成

啟用 Google Cloud Functions

專案建立完成後,如果沒有自動跳轉到 Cloud Functions,點選左上角圖示展開選單,選擇 Cloud Functions。

Python 教學 - 使用 Google Cloud Functions - 選擇 Cloud Functions

點選「建立函式」,就能開始建立第一支 Cloud Functions 的程式。

Python 教學 - 使用 Google Cloud Function - 建立第一支 Cloud Functions 的程式

點選建立函式後,設定基本資訊,環境選擇「第一代」( 因為第二代在這個時間點貌似在 beta 階段 ),函式名稱自行定義,區域選擇「asia-east1」台灣主機 ( 理論上速度比較快 )。

Python 教學 - 使用 Google Cloud Functions - 環境選擇「第一代」

觸發條件選擇「HTTP」,勾選「允許未經驗證的叫用」,如此一來就能單純透過 request POST 或 GET 的方法進行叫用,也符合大多數聊天機器人的叫用機制。

Python 教學 - 使用 Google Cloud Functions - 允許未經驗證的叫用

執行階段、建構作業、連線和安全型設定則不需要更動,保留預設值即可。

Python 教學 - 使用 Google Cloud Functions - 執行階段、建構作業、連線和安全型設定

點選下一步,進入程式碼編輯畫面,從左上方下拉選單選擇 Python 版本( 3.7~3.9 皆可 ),程式編輯區就會自動出現預設的 Python 樣板,就可以準備開始編輯程式。

Python 教學 - 使用 Google Cloud Functions - 選擇 Python 版本

部署第一支程式

畫面左側目錄裡 main.py 表示這支程式的主程式碼,requirements.txt 表示要額外安裝的外部函式庫。

Python 教學 - 使用 Google Cloud Functions - 左側目錄介紹

右上方的「進入點」表示使用 HTTP 的方式叫用這支程式時,要執行的 funciton,也就是下方程式碼的 hello_world。

Python 教學 - 使用 Google Cloud Functions - 進入點 funciton

在完全不執行任何動作的情況下 ( 使用預設 Python 樣板 ),點擊下方的「部署」,就能部署最基本的網頁應用程式。

Python 教學 - 使用 Google Cloud Functions - 部署最基本的網頁應用程式

部署完成後,前方會出現綠色打勾的圖示,表示部署一切正常 ( 沒有發生任何錯誤 )。

Python 教學 - 使用 Google Cloud Functions - 部署完成

點擊進入程式,選擇「觸發條件」,點擊並開啟網址,就會看見網頁出現「Hello World!」,表示已經可以透過外部呼叫所部署的程式。

Python 教學 - 使用 Google Cloud Functions - 觸發條件

讀取參數

由於 Cloud Functions 的 Python 是使用 Flask 函式庫的架構,因此讀取參數的方式和 Flask 相同,將原本的程式碼改成下方的內容,修改並重新部署完成後,輸入網址叫用程式後,從「記錄」裡,就能看到叫用時對應的參數資訊。

參考:Flask 函式庫 - 讀取參數

def hello_world(request):
    request_json = request.get_json()
    print(request.args )   # 讀取 GET 方法參數
    print(request.form )   # 讀取 POST 方法參數
    print(request.path )   # 讀取網址
    print(request.method)  # 讀取叫用方法
    if request.args and 'message' in request.args:
        return request.args.get('message')
    elif request_json and 'message' in request_json:
        return request_json['message']
    else:
        return f'Hello World!'

Python 教學 - 使用 Google Cloud Functions - 讀取參數

如果使用後端程式,亦可發出 POST 的請求。

import requests
data = {'name': 'oxxo', 'age': '18'}
web = requests.post('https://asia-east1-XXXXXX.cloudfunctions.net/test', data=data)   # 發送 POST 請求
print(web.text)

Python 教學 - 使用 Google Cloud Functions - POST 的請求

處理跨域問題

透過瀏覽器開啟網頁呼叫 API 時,常常會遭遇「跨域」的問題 ( 因為瀏覽器的安全性限制,不同網域間無法直接叫用 ),使用 Cloud Functions 建立的 API 預設禁止跨域叫用,但只要加入下方的程式碼,就能夠允許跨域叫用。

def hello_world(request):
    request_json = request.get_json()
    print(request.args )   # 讀取 GET 方法參數
    print(request.form )   # 讀取 POST 方法參數
    print(request.path )   # 讀取網址
    print(request.method)  # 讀取叫用方法

    headers = {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Headers': 'Content-Type',
        'Access-Control-Max-Age': '3600'
    }

    return ('Hello World!', 200, headers)  # 回傳同意跨域的 header

完成後,在網頁端執行對應的 JavaScript,就能得到正確的結果 ( 下方程式碼為 JavaScript )。

javascript >>>>
let uri = '你的網址';
fetch(uri, {method:'GET'})
.then(res => {
    return res.text()
}).then(result => {
    console.log(result);
});

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 33.2 ) Python 使用 ngrok 服務
下一篇
( Day 34.2 ) Python 串接 Gmail 寄送電子郵件
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言