🐡

Gen2がGAされた。Storage(S3)の機能がとてもありがたい

2024/05/07に公開

これらの続きです。

https://zenn.dev/purpom/articles/d2c30703ddb9e6

https://zenn.dev/purpom/articles/0e34322ca33915

preview版と比べて、Storage(S3)の機能連携のアップデートがとてもありがたい。

bucketのevent駆動で書く、lambdaのtriggerが簡単に設定できる

amplify/storage/resource.ts
export const storage = defineStorage({
  name: 'myProjectFiles',
//ここで、triggerを設定できる。
  triggers: {
//uploadしたときのlambda trigger
    onUpload: defineFunction({
      entry: './on-upload-handler.ts'
    }),
//deleteしたときのlambda trigger
    onDelete: defineFunction({
      entry: './on-delete-handler.ts'
    })
  }
});

https://docs.amplify.aws/react/build-a-backend/storage/lambda-triggers/

lambda関数に関しては、実際にamplify/storage配下に配置できてs3 lambda triggerが何が設定されてるかが特定しやすくなりましたね。gen1の頃は、使用する、lambdaは、全てamplify/backend/function/に入ってて、何かのトリガーで動くものなのか?そうでないものなのか分かりづらかったのですが、gen2になって、s3のtriggerで動くものは、amplify/storage/に入れられるようになったので、認識コストが大幅に押さえられますね

amplify/storage/on-upload-handler.ts
import type { S3Handler } from 'aws-lambda';

export const handler: S3Handler = async (event) => {
  const objectKeys = event.Records.map((record) => record.s3.object.key);
  console.log(`Upload handler invoked for objects [${objectKeys.join(', ')}]`);
};

bucketに追加されたObjectをcopy/removeをしてくれるAPIの追加

copy

ただし、1処理につき、コピーできるファイルの容量は5GBみたいです。

import { copy } from 'aws-amplify/storage';

const copyFile = async () => {
  try {
    const response = await copy({
      source: {
        path: 'album/2024/1.jpg',
        // Alternatively, path: ({identityId}) => `album/{identityId}/1.jpg`
      },
      destination: {
        path: 'shared/2024/1.jpg',
        // Alternatively, path: ({identityId}) => `shared/{identityId}/1.jpg`
      },
    });
  } catch (error) {
    console.error('Error', err);
  }
};

https://docs.amplify.aws/react/build-a-backend/storage/copy-files/

remove

frontend側で、onClick={}とかで簡単にファイルが削除できるようになりますね。

import { remove } from 'aws-amplify/storage';

try {
  await remove({ 
    path: 'album/2024/1.jpg',
    // Alternatively, path: ({identityId}) => `album/{identityId}/1.jpg`
  });
} catch (error) {
  console.log('Error ', error);
}

https://docs.amplify.aws/react/build-a-backend/storage/remove-files/

PURPM MEDIA LAB Tech blog

Discussion