【Lambda】python で s3 を使ってテキストの読み書きをしてみる

Lambda で python を使う時、テキストファイルの入出力は、s3 と連携してできるようです。

前提として、s3 の バケットやその中にあるファイルにアクセスできること。

権限がない時は、lambda からアクセスできるように、権限を付加しましょう!

書き込み

import boto3

BUCKET_NAME = '【バケット名】'
s3 = boto3.resource('s3')
file_name = '【ディレクトリ】/test.txt'
file_contents = 'テキストの中身' 
bucket = s3.Object(BUCKET_NAME,file_name)
bucket.put(Body=file_contents)

読み込み

import boto3

BUCKET_NAME = '【バケット名】'
s3 = boto3.client('s3')
file_name = '【ディレクトリ】/test.txt'
res = s3.get_object(Bucket=BUCKET_NAME, Key=file_name)
body = res['Body'].read() # b'テキストの中身'
bodystr = body.decode('utf-8')
print(bodystr)

注意事項

・s3 のアクセス権限を付加する
・書き込みの時は【boto3.resource('s3')】、読み込みの時は【boto3.client('s3')】
・読み込んだテキストを utf-8 に変換してあげる
・関数によって、引数に項目名がいる時といらない時の差がいまいちよくわからない

追記

ファイルを書き込む度に、読み込み権限がなくなるという事態に陥りました。

↓こちらのサイトを参考にして、

AWS SDK (Node.js) で S3 putObjectするときに気をつけること

ACLの読み取り権限を付加しつつ書き込むと、あとから読み込みができました。

ret = bucket.put( \
    ACL='public-read-write', \
    Body=file_contents, \
    Key=FILENAME, \
    ContentType='text/plain' \
)

IAM のロールで、S3 のアクセス権限を付加しましょう。