【AWS】S3にアップロードされた画像にLambdaでタグをつける

Lambdaを使ってS3にアップロードされた画像ファイルへタグをつけます。タグはファイルアップロードが完了したタイミングでつけます。

Lambdaの作成

Lambda関数を以下のように作成します。Lambdaを起動するトリガーをS3、イベントタイプをObjectCreatedとします。

ハンドラ関数の引数eventからアップロードされたオブジェクトのキーを取得し、そのキーを使ってPutObjectTaggingを実行します。

import json
import boto3

def lambda_handler(event, context):

    s3 = boto3.client("s3")

    key = event['Records'][0]['s3']['object']['key']
  
    s3.put_object_tagging(
        Bucket = 'xxxxxxx', 
        Key = key,
        Tagging = {
        'TagSet': [
            {
                'Key': 'uploaded',
                'Value': 'ok'
            }
        ]
    })
    
    return {
        'statusCode': 200,
        'body': json.dumps('Success!')
    }

トリガーの設定は以下のようになります。

Lmabdaのトリガー設定

LambdaへS3オブジェクトへタグをつける権限を付与する

Lambdaに付与するIAMポリシーの作成

Lambdaから特定のS3バケット内のオブジェクトへのタグの付与のみ許可するIAMポリシーを作成します。作成したポリシーは以下のようなものです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging"
            ],
            "Resource": "arn:aws:s3:::xxxxxxxxxxxx/*"
        }
    ]
}

Lambdaのロールへ作成したIAMポリシーをアタッチ

作成したIAMポリシーをLambdaのロールへアタッチします。以下のようにLmbdaのコンソール画面からIAMロールの画面へ移動し、ポリシーをアタッチします。

Lmabdaの実行ロール名
Lambdaコンソール

IAMロールの画面へ移動したら「ポリシーをアタッチします」をクリックし、作成したポリシーを選択してアタッチを行います。

IAMロールへのポリシーのアタッチ
IAMロールコンソール

AWS

Posted by fanfanta