LambdaからS3のオブジェクトをCopyObjectCommandで移動する(node.js v18) – AWS SDK for JavaScript v3

LambdaからS3のオブジェクトをCopyObjectCommandで移動する(node.js v18) – AWS SDK for JavaScript v3

CopyObjectCommand

aws cliだとaws s3 mvコマンドがありますが、AWS SDK for JavaScript v3だとオブジェクトを移動する操作がありません。

ですので一旦コピーしてから、コピー元を削除する必要があります。

$ aws s3 cp s3://bucket-a/tmp/hoge.json s3://bucket-a/tmp/gomi/hoge.json

まず上記のコピーコマンドをLambdaで実装します。

import { S3Client, CopyObjectCommand } from '@aws-sdk/client-s3'
export const handler = async(event) => {
    const client = new S3Client({
      region: 'ap-northeast-1'
  })
  const input = {
      Bucket: 'bucket-a',
      Key: 'tmp/gomi/hoge.json',
      CopySource: 'bucket-a/tmp/hoge.json'
  }
  const command = new CopyObjectCommand(input)
  await client.send(command)
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda'),
  };
  return response;
}

CopyObjectCommandに指定するパラメータは以下の通りです。

キー
Bucketコピー先バケット名
Keyコピー先バケット名以降のオブジェクトキー
CopySourceコピバケット名/オブジェクトキー

DeleteObjectCommand

コピーができたら、今度はコピー元のオブジェクトを削除します。削除するにはDeleteObjectCommandを使用します。

s3://bucket-a/tmp/hoge.jsonを削除します。

import { S3Client, DeleteObjectCommand } from '@aws-sdk/client-s3'
export const handler = async(event) => {
    const client = new S3Client({
      region: 'ap-northeast-1'
  })
  const input = {
      Bucket: 'bucket-a',
      Key: 'tmp/hoge.json'
  }
  const command = new DeleteObjectCommand(input)
  await client.send(command)
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda'),
  };
  return response;
}

これでaws s3 mvコマンドと同じ事が実装できます。

参考サイト

CopyObjectCommand | S3 Client - AWS SDK for JavaScript v3
Documentation for S3 Client - AWS SDK for JavaScript v3
DeleteObjectsCommand | S3 Client - AWS SDK for JavaScript v3
Documentation for S3 Client - AWS SDK for JavaScript v3
Amazon S3 オブジェクトに対する操作の実行 - AWS SDK for Java 1.x
AWS SDK for Java を使用して Amazon S3 バケットのオブジェクトをリスト表示、アップロード、ダウンロード、コピー、名前変更、移動または削除する方法。

コメント

タイトルとURLをコピーしました