Skip to content

AWS S3 にアップロードされたファイルをコピー/移動する Lambda 関数

AWS S3 でファイルがアップロードされた際に、自動的にコピー (または移動) する Lambda 関数をメモしておきます。 尚、権限は適切に設定されているものとします。

ファイルをコピーするサンプル

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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 関数を表示し +トリガーを追加 をクリックし、トリガーの追加を開始します。

file

トリガーを選択 から S3 をクリックします。

file

必要なパラメータを入力していきます。 バケット には対象となる S3 Bucket を選択します。 イベントタイプには すべてのオブジェクト再生イベント を選択します (仮に「ファイルが削除された時に実行したい」といった場合は異なるイベントタイプを選択します)。 プレフィックス/サフィックスには「処理対象の条件」を入力します。 今回は SRC-FOLDER/ へアップロードされたファイルのみを対象とする為、プレフィックスに SRC-FOLDER/ と入力しています。 必要なパラメータを入力し、トリガーの有効化 にもチェックを入れたら 追加 をクリックし、トリガーの追加を完了します。

file