文章段落
透過使用 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