【AWS】LambdaでAPIから取得したデータをS3に格納する(準備編)

ローカル実行で、株価のデータを取得することに成功したのでLambda関数でも実装をしていきたいと思います。

今回は、外部API(J-Quants)からLambda関数を利用して取得したデータをCSVに加工して、S3バケットに保存する。という処理を実装していきたいと思います。

まずは、Lambda関数とS3を作成していきます。

今回やりたいこと
  1. Lambda関数の作成
  2. S3バケットの作成

目次

Lambda関数の作成

①マネジメントコンソールからLambdaを検索

マネジメントコンソールにログインしてLambdaを検索します。

②コンソール画面から作成

Lambdaのコンソール画面が開くので、「関数の作成」ボタンを押下します。

③詳細の設定画面

関数の作成画面に遷移するので、作成に必要な項目を入力していきます。

④実行ロールの変更を展開して、中身を確認

 今回は、「基本的なLambdaアクセス権限で新しいロールを作成」が選択されていたのでそれを利用します。

【ご参考:設計図の使用】

⑤関数作成後のイメージ

⑥コードソース欄

禄太
以前作成したコードをそのまま利用しても、Lambda関数では実行することができません。
ですので、関数化したりパッケージをインポートしたりして加工します。
import requests
import json
import pandas as pd
import boto3
import os

def lambda_handler(event, context):
    #リフレッシュトークンの取得
    data={"mailaddress":"メールアドレス", "password":"パスワード"}
    r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data))
    r_post.json()
    
    #IDトークンの取得
    REFRESH_TOKEN = r_post.json()["refreshToken"]
    idtoken = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={REFRESH_TOKEN}")
    idtoken.json()
    
    #株価四本値情報の取得
    idToken = idtoken.json()["idToken"]
    headers = {'Authorization': 'Bearer {}'.format(idToken)}
    r = requests.get("https://api.jquants.com/v1/prices/daily_quotes?code=66320&from=20220901&to=20230908", headers=headers)
    ohlc = r.json()

    #四本値情報から、データを抽出
    df_ohlc = pd.DataFrame(ohlc["daily_quotes"])
    
    #抽出したデータをCSVに変換して、/tmpに一時格納する
    df_ohlc.to_csv("/tmp/jvc_stock.csv", index=False)
    
    #/tmp領域から、S3にCSVファイルをアップロードする
    s3 = boto3.client('s3')
    s3.upload_file('/tmp/jvc_stock.csv', 'jq-6632jvc-ohlc', 'jvc_stock.csv')
    
    #/tmpのCSVはゴミデータとなるため削除する
    os.remove('/tmp/jvc_stock.csv')
    
    return {
        'status_code': 200
    }

【Python】JPX提供データ(J-Quants API)を利用して株価データを取得する

2023年12月22日

S3バケットの準備

いったんLambda関数の作成は終わったので、次はS3バケットを作っていきます。

このS3バケットに、Lambda関数で取得した株価情報CSVを格納したいと思います。

⑦S3バケットの作成

⑧バケット作成後とアクセス許可画面

⑨アクセス許可からバケットポリシーを編集画面を選択する

禄太
ここでバケットポリシーを編集することができるのですが、記事が長くなってきてしまったので一旦休憩させてください!
次回、Lambda関数に付与したロールのARNを取得してバケットポリシーに割り当てる。というところからスタートしていきたいと思います。

では、また次回!