Python で Lambda から S3 に年月のフォルダを作成してみた

今回は Python で書いてみました。
2022.03.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。アノテーションの中村(誠)です。 以前、Node.js で Lambda から S3 に年月のフォルダを作成してみた という記事を書きましたが、今回は、Python で書いてみたので紹介します。

対象読者

・Python を使用している方
AWS SDK for Python (Boto3) の基本的な使用方法がわかる方
・Lambda の基本的な使用方法がわかる方
・プログラムから S3 に年月ごとのフォルダを作成したいと思っている方

使用する API

PutObject API を使用することで、フォルダを作成できます。

コード

import boto3
import datetime

def lambda_handler(event, context):
    dt = datetime.datetime.now()
    year_and_month = dt.strftime("%Y/%m/")

    s3 = boto3.client("s3", region_name='ap-northeast-1')
    try:
        response = s3.put_object(
            Bucket='your-bucket-name',
            Key=year_and_month,
        )
        print(response)
    except Exception as e:
        print(e)

解説

年月取得

dt = datetime.datetime.now()
year_and_month = dt.strftime("%Y/%m/")

datetime.now()で取得した日時を、strftime("%Y/%m/")で年/月の形式に変換しています。

フォルダ作成

response = s3.put_object(
    Bucket='your-bucket-name',
    Key=year_and_month,
)

"your-bucket-name"に使用したい S3 バケット名を入力します。 Keyには、フォルダがyear/monthの形式で作成されるように指定しています。

putObjectに上記のパラメーターを渡し、フォルダを作成します。

Lambda の設定

コードは適宜アップロードしてください。
・ランタイム
 Python 3.9

・必要な権限
 AWSLambdaBasicExecutionRole
 AmazonS3FullAccess (必要に応じて権限を絞ってください)

設定後にテスト実行すると、S3 にフォルダが作成されているはずです。

S3 で確認

S3 コンソールで確認してみましょう。

現在の年月でフォルダができていることが確認できました。 ファイルなどはアップロードしていないので、月フォルダの中身は空です。 必要に応じでログや生成したファイルなどをフォルダに PUT してください。

まとめ

今回は、Python で Lambda から S3 に年月のフォルダを作成するコードを紹介しました。 まだまだ Python を勉強中の身なので、シンプルなコードですが、参考になれば幸いです。

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。