Skip to content

Luna-Runa/s3-to-r2

Repository files navigation

S3 to R2 All File using S3 API

S3에 있던 모든 파일을 R2로 전송합니다.
기본적으론 aws-sdk-js-v3를 사용하며 업로드 로직은 aws-sdk-js-v2를 사용합니다. (R2에서 v3의 upload가 지원되지 않음)

setup

  1. yarn install
  2. .env 설정
SOURCE_STORAGE_REGION=
SOURCE_STORAGE_ENDPOINT=
SOURCE_STORAGE_ACCESS_KEY_ID=
SOURCE_STORAGE_SECRET_ACCESS_KEY=
SOURCE_BUCKET=

# if R2, REGION=auto
DESTINATION_STORAGE_REGION=
DESTINATION_STORAGE_ENDPOINT=
DESTINATION_STORAGE_ACCESS_KEY_ID=
DESTINATION_STORAGE_SECRET_ACCESS_KEY=
DESTINATION_BUCKET=

run

yarn dev

known error

A client error (RequestTimeTooSkewed) occurred when calling the ListObjects operation: The difference between the request time and the current time is too large.

너무 많은 파일을 병렬로 업로드하면 발생합니다.

// src/index.ts
...
const pagePer = 8 // edit this
...

S3 to R2 using worker(Cloudflare)

worker URL에 GET 요청으로 params가 들어오면 S3에 있던 params파일을 R2로 전송해줍니다.

S3에 있던 파일 이름을 Worker의 params로 넘겨주면 해당하는 파일을 R2로 넘겨주는 방식입니다.
기존에 작동하던 로직에서 S3 URL을 R2로 변경하기만 해도 될 때 사용하면 유용합니다. 대용량엔 적합하지 않을 수 있습니다. ex) S3의 test.png라는 파일 -> https://s3-to-r2.{yourWorkers}.workers.dev/test.png에 GET 요청시 S3 파일을 R2에 업로드

핵심 로직은 https://github.com/KianNH/cloudflare-worker-s3-to-r2-migration 에서 가져왔습니다.

setup

  1. yarn global add wrangler (node version >= 16.13 요구)
  2. yarn install
  3. wrangler.toml 생성
name = "s3-to-r2"
compatibility_date = "2022-10-17"
main = "./src/oneFile.ts"

[vars]
AWS_DEFAULT_REGION = {your_region}
AWS_SERVICE = "s3"
AWS_S3_BUCKET_SCHEME = 'https:'
AWS_S3_BUCKET = "{your_S3_bucket}.s3.{your_region}.amazonaws.com"

[[r2_buckets]]
binding = 'R2'
bucket_name = {your_R2_bucket}
  1. wrangler login
  2. wrangler secret put AWS_ACCESS_KEY_ID
  3. wrangler secret put AWS_SECRET_ACCESS_KEY

run

wrangler publish

Published s3-to-r2 (0.33 sec)
   https://s3-to-r2.{yourWorkers}.workers.dev

위의 https://s3-to-r2.{yourWorkers}.workers.dev/{S3에 있는 파일 이름}
으로 GET 요청을 보낼시 자동으로 S3에 있던 파일을 R2로 업로드 후 띄워집니다.

known error

▲ [WARNING] You need to register a workers.dev subdomain before publishing to workers.dev

Cloudflare의 Workers 라는 기능을 사용해서 작동하기 때문에 Worker를 만들어야 합니다.
터미널에 나타난 설명대로 진행하세요.

About

s3 to r2 migration

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published