らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Python の boto3 でファイルを作らず、S3 上へオブジェクトを作成する

Python の boto3 から S3 へ「存在するファイルをアップロードする」サンプルはよく見かけるのですが、ファイルは生成せずに直接、オブジェクトをアップロードするサンプルは少ないように思えたので書いてみました。

オブジェクトを作成する (指定した名前で作成バージョン)

#!/usr/bin/env python
"""Create new object."""
import datetime
import sys
import boto3

ARGS = sys.argv
if len(ARGS) != 3:
    print('Usage: python create_object.py [BUCKET] [KEY]')
    sys.exit(1)

S3 = boto3.resource('s3')
S3BUCKET = ARGS[1]
KEY = ARGS[2]
TIME = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")

S3.Object(S3BUCKET, KEY).put(Body=TIME)
print(KEY + " created.")

以下のように実行します。

python create_object.py s3.example.com folder/file.txt

オブジェクトを作成する (オブジェクト名を時刻にするバージョン)

テスト時はファイル名も適当に、例えば時刻から生成すると便利な場合があると思います。 そのようなケース用に「時刻をオブジェクト名にする」バージョンも作成してみました。

#!/usr/bin/env python
"""Create new object."""
import datetime
import sys
import boto3

ARGS = sys.argv
if len(ARGS) != 3:
    print('Usage: python create_object.py [BUCKET] [FOLDER]')
    sys.exit(1)

S3 = boto3.resource('s3')
S3BUCKET = ARGS[1]
TIME = datetime.datetime.now().strftime('%Y-%m-%d_%H%M')
KEY = ARGS[2] + '/' + TIME

S3.Object(S3BUCKET, KEY).put(Body=TIME)
print(KEY + " created.")

以下のように実行します。

python create_object.py s3.example.com folder