如何搭配 GCP 完成匯率小程式

如何搭配 GCP 完成匯率小程式
如何搭配GCP完成匯率小程式

透過使用 GCP 的 Cloud Functions, Cloud Scheduler 以及 BigQuery,你也可以輕鬆完成一個簡單的匯率爬蟲小程式!

流程圖

由 Cloud Scheduler 觸發 Cloud Functions,並透過 Cloud Functions 去 parser 銀行匯率,接著再將我們的匯率資料更新至 BigQuery。

開始之前

將 Cloud Functions 儲存至 BigQuery,需要 BigQuery 權限,所以要在 GCP IAM > 服務帳戶建立 BigQuery Service Account。

以下示範使用 gcloud CLI 指令建立 service account :

gcloud iam service-accounts create bigquery \
  --description="BigQuery" --display-name="bigquery"

gcloud projects add-iam-policy-binding {GCP_PROJECT_ID} \
    --member="serviceAccount:bigquery@{GCP_PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/bigquery.admin"

# download service_account json key
gcloud iam service-accounts keys create ~/bigquery.json \
    --iam-account bigquery@${GCP_PROJECT_ID}.iam.gserviceaccount.com

準備應用程式

這次的範例使用 Python 來實作

程式範例:https://github.com/CloudAceTW/taiwanbank_exchange_sample

安裝專案所需要的套件

pip install -r requirements.txt

可以透過下面的指令測試程式有沒有正常以及儲存到 BigQuery

export GOOGLE_APPLICATION_CREDENTIALS=<gcp_bigquery_credential_json>
python main.py

佈署 Cloud Functions

gcloud functions deploy exchange_rate \
  --runtime python37 \
  --trigger-http \
  --region=asia-northeast1 \
  --allow-unauthenticated

設定完後可以在 GCP Cloud Functions 看到名稱為 exchange_rate 就是建立完成,可以透過 URL 的方式去 call 看看,看 BigQuery 有沒有資料。

到這裡已經完成爬蟲匯率的小程式,接著再讓它更自動化,透過 Cloud Scheduler 每天排程去更新我們的匯率。

設定 Cloud Scheduler

gcloud scheduler jobs create http exchange_rate_scheduler \
  --schedule "0 20 * * *" \
  --uri "https://asia-northeast1-<project_id>.cloudfunctions.net/exchange_rate" \
  --http-method GET --time-zone=Asia/Taipei

在這邊我們設定每天的20點去執行我們的 Cloud Functions ,這樣就完成自動每天抓匯率的小程式。

Clean Services

# Remove Scheduler
gcloud scheduler jobs delete exchange_rate_scheduler

# Remove Cloud Functions
gcloud functions delete exchange_rate --region=asia-northeast1

# remove BigQuery
gcloud alpha bq datasets delete taiwan_exchange_rate --remove-tables

程式範例:https://github.com/CloudAceTW/taiwanbank_exchange_sample

#CloudFunctions #CloudScheduler #BigQuery

發佈留言