1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud FunctionとCloud Schedulerを使って、定期的にAPIで取得したデータをGCEに格納する

Last updated at Posted at 2022-03-29

この記事の対象と対象外

【対象】
・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のコンソール画面上で「関数の作成」を押す

スクリーンショット 2022-03-29 19.40.48.png

❶-構成の画面では
「関数名」:英数字で名前を設定する
「リージョン」:無料枠の場合はusリージョンしか不可
「トリガーのタイプ」:HTTP
他は初期設定のままでOK

スクリーンショット 2022-03-29 19.44.26.png

❷-コードの画面では
「ランタイム」:python3.7 or python3.8 or python3.9
「エントリ ポイント」:❶の画面で設定した関数名を入力

スクリーンショット 2022-03-29 19.57.40.png

「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

ここまで入力し終えたら、「デプロイ」を押す。

少し待てば、関数が作成されるので完了です!
(右のメニューから手動でテスト可能)

スクリーンショット 2022-03-29 20.19.58.png

Cloud Schedulerの作成

①Cloud Functionのコンソール画面上で「ジョブの作成」を押す

スクリーンショット 2022-03-29 20.25.59.png

②スケジュールを定義するでは

「名前」:同じリージョン内で1意になる名前を入力します
「リージョン」:関数と同じリージョンに作成します
「頻度」:unix-cron形式で入力します。今回は月次更新のデータなので、毎月1日に取得するようスケジュールします
「タイムゾーン」:日本標準時に変更します

スクリーンショット 2022-03-29 20.28.19.png

「続行」を押す

③実行内容を構成するでは

「ターゲットタイプ」:HTTP
「URL」:Cloud Function上で作成した関数内に「トリガー」という項目が存在するので、そこでコピーしたurlを入力する

スクリーンショット 2022-03-29 20.36.06.png

「HTTPメソッド」:GET
「Authヘッダー」:OIDCトークンを追加
「サービスアカウント」:App Engine default service account
「対象」:「URL」と同じ値を入れる

スクリーンショット 2022-03-29 20.41.00.png

④他はそのままの設定で、「作成」を押す

しばらくしたら作成完了する

手動で実行したい場合は下記の「今すぐ実行」を押すことで実行される
スクリーンショット 2022-03-29 20.46.17.png

問題がなければ、Cloud Storageの指定したバケットにデータが入っているはず、、

権限がない場合は権限を追加

IAMのコンソール画面で、「App Engine default service account」のものに、Cloud Functionの起動元の権限を付与の必要がある場合があるため付与(もしかしたら、上記のサービスアカウント以外の場合必要なのかもしれない)

最後に

次はこのデータをBigqueryに連携したり、composerで加工する流れを記事にできればなーと思っています

何か気になった点などあれば教えてください

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?