初心者SEのつぶやき

初心者SEのつぶやき

AWS LambdaでS3のデータを扱う方法

やりたいこと

AWS S3に格納されているデータをlambdaで扱いたい。
具体的にはs3のファイルをダウンロードし、lambdaで編集を行なった後
s3に再度アップロードさせたい。

言語はPythonを用いて実装したい。

実現方法

boto3を用いて実装を行う。
downloadメソッドに対して、「バケット名」「s3のファイル名」「lambdaの保存先(tmp直下)」を指定する。

uploadメソッドに対して、「アップロードしたいファイル名(lambda)」「バケット名」「アップロード先(s3)のファイル名」を指定する。

実装例は下記となる。

S3ファイル取得処理

import json
import boto3

def lambda_handler(event, context):
    # botoインスタンス生成
    s3 = boto3.client('s3')
   
    bucket_name = 'S3のバケット名を選択'
    tmp_file = '/tmp/' + event['fileName']

    try:
      # s3の対象バケットからlambda内のtmp直下にファイルをダウンロードする。
      s3.download_file(bucket_name, event['fileName'], tmp_file)

      # ファイルに対する処理を記載する。

      # s3の対象バケットに対して、lambda内のtmp直下にファイルをアップロードする。
      s3.upload_file(tmp_file, bucket_name, event['fileName'])

      return return{
        'statusCode':200,
        'body': 'success'
      }
    except Exception as e:
      return{
        'statusCode':500,
        'body': f'{str(e)}'
      }

感想

今回は実装というより、AWSの権限周りで時間がかかった印象だったため、 IAMサービスの権限周りの使い方をまとめたいと思った。
今回は実装までということで...

今回の内容が参考になったら幸いです。