AWS S3 にアップロードされたファイルをコピー/移動する Lambda 関数
AWS S3 でファイルがアップロードされた際に、自動的にコピー (または移動) する Lambda 関数をメモしておきます。 尚、権限は適切に設定されているものとします。
ファイルをコピーするサンプル
| import urllib.parse
import boto3
s3 = boto3.client('s3')
FOLDER = 'DST-FOLDER'
def lambda_handler(event, context):
bucket_name = event['Records'][0]['s3']['bucket']['name']
src = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
dst = FOLDER + '/' + src.split('/')[-1]
s3.copy_object(Bucket=bucket_name, Key=dst, CopySource={'Bucket': bucket_name, 'Key': src})
|
ファイルを移動するサンプル
boto3 には S3 関連でファイルの作成・削除・コピーは出来るのですが、移動用の API は存在しないようです。 その為、コピー後に元ファイルを削除することで「移動」を実装しています。
1
2
3
4
5
6
7
8
9
10
11
12 | import urllib.parse
import boto3
s3 = boto3.client('s3')
FOLDER = 'DST-FOLDER'
def lambda_handler(event, context):
bucket_name = event['Records'][0]['s3']['bucket']['name']
src = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
dst = FOLDER + '/' + src.split('/')[-1]
s3.copy_object(Bucket=bucket_name, Key=dst, CopySource={'Bucket': bucket_name, 'Key': src})
s3.delete_object(Bucket=bucket_name, Key=src)
|
トリガーの設定
実際にこの Lambda 関数を利用するには「S3 へファイルがアップロードされた時に実行する」というトリガー設定が必要です。 Lambda 関数を表示し +トリガーを追加
をクリックし、トリガーの追加を開始します。
トリガーを選択
から S3
をクリックします。
必要なパラメータを入力していきます。 バケット
には対象となる S3 Bucket を選択します。 イベントタイプには すべてのオブジェクト再生イベント
を選択します (仮に「ファイルが削除された時に実行したい」といった場合は異なるイベントタイプを選択します)。 プレフィックス/サフィックスには「処理対象の条件」を入力します。 今回は SRC-FOLDER/
へアップロードされたファイルのみを対象とする為、プレフィックスに SRC-FOLDER/
と入力しています。 必要なパラメータを入力し、トリガーの有効化
にもチェックを入れたら 追加
をクリックし、トリガーの追加を完了します。