【AWS】Lambda関数とS3を連携する! 外部API(J-Quants)から株価データを取得してみた。

前回、Lambda関数とS3の作成を終えました。

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

2023年12月23日

しかしこれだけではLambda関数からアクセスして、S3にオブジェクトを保存する。という動作ができません。

この処理を実装するには、S3バケットのバケットポリシーと、Lambda関数にIAMロールを付与する必要があります。

それぞれの権限付与について、実装していきたいと思います。

今回やりたいこと
  1. S3バケットのアクセス許可設定
  2. Lambda関数のロール追加
  3. Lambda関数の実行

目次

S3のバケットポリシーを編集する

1. Lambda関数に付与したIAMロールのARNを調べる

【ご参考】設定タブではLambda関数の各種設定が行えます。

試しに、タイムアウト値を変更してみました。

変更をすると、一般設定画面のところの表示が変更されていることがわかります。

Lambdaの最大実行時間は、最大で15分ですので、ご留意ください。

2.実行ロール欄から、IAMのコンソールへ遷移する

既存のロールの項目についてはブランクにしていますが、実際はここにロールの名称が入力されています。

3.Lambda関数に割り当てられているロールのARNをコピーする

前回の再掲:S3のアクセス許可画面を開く

4.コピーしたARNを、S3のバケットポリシーに記述する

サンプル

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Sid": "TEST_Statementid",
   "Effect": "Allow",
   "Principal": {
    "AWS": "arn:aws:iam::xxxxx:role/lambda_role"
   },
   "Action": "s3:PutObject",
   "Resource": "arn:aws:s3:::bucket_name/*"
  }
 ]
}

再掲:3.のLambda関数のIAMコンソールを開く

5.許可ポリシーを付与する

禄太
本当は権限をもっと絞った方がいいのだと思うのですが、学習の趣旨とずれますので今回は割愛します。
本当はね、、、余計な権限は付与しない。がお約束です。

6.Lambda関数のコンソール画面からイベントを作成する

禄太
今回は引数等は指定しないので、なんでもOKです。

【補足】このまま実行するとエラーになる

このまま実行するとエラーになる場合があります。

その理由は、Pythonのパッケージがインストールされていないことに起因します。

Lambda関数でPythonを利用する場合、外部パッケージは都度インストールしてあげる必要があります。

が、それが手間ということであれば、すでにそういったパッケージを提供してくれている人がいます。

今回は、ありがたく利用させていただきました。

【AWS】Lambda関数実行時にエラー発生!そんなモジュールインポートしてないよ。とお怒られたらLayerを追加する(”errorMessage”: “Unable to import module ‘XXXX’: No module named ‘????'”,)

2023年12月25日

7.テストイベントを実行して、S3にCSVがアップロードされていることを確認する

禄太
格納されているCSVファイルの中身を確認して、出力条件に指定した内容と一致していればOKです!
お疲れ様でした!

EOF

Lambda関数を利用してみたい。という思いから、Lambda関数+S3のハンズオンをしてみました。

外部APIのコールの仕方や、ロールの指定などそれぞれでお作法が学べたのが大きな成果と思います。

この記事がどなたかのお役に立てたら幸甚です。