この記事の対象と対象外
【対象】
・APIで取得したデータをGCEに格納したい人
・APIを定期的に実行させたい人
・ドキュメントでは、具体的にどうすれば良いかわからない人
・GCPを使おうとしている人
(勉強のために自分でやったことを記載しているものです。気づきがあればご指摘いただけると嬉しいです)
【対象外】
・GCPってなに?という人
・登録方法がわからない人
・サービスの選択方法、GCP上でサービスのAPIを有効にする方法がわからない人
・セキュリティ面、運用面を考慮した設定方法を知りたい人
使うもの一覧
【今回取得したいデータ】
サービス産業動向調査
【取得サイト】:
e-Stat 政府統計の総合窓口
https://www.e-stat.go.jp/
【取得方法】
API
【使用するサービス】
・Google Cloud Storage
・Google Cloud Function
・Google Cloud Scheduler
【使用言語】
python
事前に準備したもの
■e-statsのID
下記で登録して取得可
https://www.e-stat.go.jp/api/
■gcpのアカウント
以下より登録
こちら
■
注意:今回使うGoogle Cloud Platformのサービスはお金がかかります、3ヶ月&300$の無料枠を使えない人は、注意ください。また同じメールアドレスでは1度しか無料枠は使えないので注意ください
Cloud Functionの作成
Cloud Functionのコンソール画面上で「関数の作成」を押す
❶-構成の画面では
「関数名」:英数字で名前を設定する
「リージョン」:無料枠の場合はusリージョンしか不可
「トリガーのタイプ」:HTTP
他は初期設定のままでOK
❷-コードの画面では
「ランタイム」:python3.7 or python3.8 or python3.9
「エントリ ポイント」:❶の画面で設定した関数名を入力
「main.py」には以下を記載
def sukina_namae(request):
import requests
import json
import csv
from google.cloud import storage as gcs
project_id = "******" #プロジェクトIDを*の箇所に入力
client = gcs.Client(project_id)
bucket = client.bucket('******') #プロジェクトIDを*の箇所に入力
blob = bucket.blob('*****.csv') #ファイルを保存するときの名前を入力する
url = "http://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData"
#appIdの*に取得したe-statのIDを入力
payload = {"cdTab":"001","cdArea":"00000","appId":"******","lang":"J", "statsDataId":"0003179100","metaGetFlg":"N","cntGetFlg":"N","explanationGetFlg":"N","annotationGetFlg":"N","replaceSpChars":"2","sectionHeaderFlg":"2"}
r = requests.get(url, params=payload)
blob.upload_from_string(data=r.text, content_type="text/csv")
return print("success")
「request.py」には以下を記載(installしたいライブラリなどを記載)
# Function dependencies, for example:
# package>=version
requests
google-cloud-storage
ここまで入力し終えたら、「デプロイ」を押す。
少し待てば、関数が作成されるので完了です!
(右のメニューから手動でテスト可能)
Cloud Schedulerの作成
①Cloud Functionのコンソール画面上で「ジョブの作成」を押す
②スケジュールを定義するでは
「名前」:同じリージョン内で1意になる名前を入力します
「リージョン」:関数と同じリージョンに作成します
「頻度」:unix-cron形式で入力します。今回は月次更新のデータなので、毎月1日に取得するようスケジュールします
「タイムゾーン」:日本標準時に変更します
「続行」を押す
③実行内容を構成するでは
「ターゲットタイプ」:HTTP
「URL」:Cloud Function上で作成した関数内に「トリガー」という項目が存在するので、そこでコピーしたurlを入力する
「HTTPメソッド」:GET
「Authヘッダー」:OIDCトークンを追加
「サービスアカウント」:App Engine default service account
「対象」:「URL」と同じ値を入れる
④他はそのままの設定で、「作成」を押す
しばらくしたら作成完了する
手動で実行したい場合は下記の「今すぐ実行」を押すことで実行される
問題がなければ、Cloud Storageの指定したバケットにデータが入っているはず、、
権限がない場合は権限を追加
IAMのコンソール画面で、「App Engine default service account」のものに、Cloud Functionの起動元の権限を付与の必要がある場合があるため付与(もしかしたら、上記のサービスアカウント以外の場合必要なのかもしれない)
最後に
次はこのデータをBigqueryに連携したり、composerで加工する流れを記事にできればなーと思っています
何か気になった点などあれば教えてください