본문 바로가기

기타/AWS

AWS S3 bucket 폴더 업로드 - Node.js

Node.js 로 AWS S3 에 로컬 폴더 올리기

이 포스팅은 AWS 저장소 서비스, S3 (Simple Storage Service) 에 폴더 단위로 업로드 하는 방법을 설명한다.

Flat Structure, AWS S3 파일구조

AWS S3 는 기본적으로 파일로만 구성된 플랫 구조, Flat structure 이다. AWS S3 SDK 에서는 폴더 단위의 업로드 API 가 없다. 따라서, npm 통해 3rd party 패키지를 이용해서 폴더 업로드를 구현한다.

AWS S3 저장소 폴더 올리기

필요한 사전작업

  1. AWS 저장소 서비스, S3 (Simple Storage Service) 를 사용하기 위해 AWS가입, S3 bucket 생성, IAM계정 작업이 필요하다. 이 과정은 별도의 포스팅으로 기록할 예정이다.
  2. AWS 에 가입되어 S3 사용할 수 있는 계정과 저장소가 있다고 가정하고 작성한다.

s3-folder-upload

Amazon SDK를 사용하여 폴더를 S3 버킷에 업로드할 수 있는 Node.js API 패키지

s3-folder-upload 예제코드

아래 예제 코드는 s3-folder-upload 를 이용하여 videos 폴더를 S3 저장소에 일괄 업로드 하는 Node.js 예제이다.

import AWS from 'aws-sdk'
import fs from 'fs'
import path from 'path'
import dotenv from 'dotenv'

import upload from 's3-folder-upload'

dotenv.config();

const credentials = {
  "region": process.env.AWS_S3_REGION,
  "accessKeyId": process.env.AWS_S3_ACCESS_KEY_ID,
  "secretAccessKey": process.env.AWS_S3_SECRET_ACCESS_KEY,
  "bucket": process.env.AWS_S3_BUCKET_NAME
}

const s3 = new AWS.S3();
const s3_bucket_name = process.env.AWS_S3_BUCKET_NAME;

const directoryName = 'videos'

// optional options to be passed as parameter to the method
const options = {
  useFoldersForFileTypes: false,
  useIAMRoleCredentials: false
}

// optional cloudfront invalidation rule
const invalidation = {
  awsDistributionId: "",
  awsInvalidationPath: ""
}

upload(directoryName, credentials, options, invalidation)

아마존 AWS S3 를 사용하기 위해서 아래의 정보가 필요하다. 보안을 위해서는 Node.js 코드 상에 하드코딩을 지양한다. 위 예제는 dotenv 를 사용해서 중요한 정보를 별도의 파일로 분리하였다.

정보명 설명 예제
AWS 서버 지역 AWS 서버가 위치한 지역명 ap-northeast
AWS S3 bucket 이름 AWS S3 서비스에서 생성한 bucket 의 이름 my-123th-bucket
AWS S3 액세스 키 AWS 계정 접근을 위한 키
(root 계정이 아닌 별도 IAM 계정 생성 권장)
-
AWS S3 비밀 액세스 키 AWS 계정 접근을 위한 키
(root 계정이 아닌 별도 IAM 계정 생성 권장)
-

AWS S3 폴더 업로드를 위해 s3-folder-upload 에 4가지 파라마터가 전달된다.

  1. 로컬 디렉토리 명 (예. videos/ )
  2. AWS S3 접속 정보 (credentials)
  3. option 정보 (아래 표 참고)
  4. 무효화 정책

s3-folder-upload 의 옵션은 아래 표를 참고한다.

옵션명 기본값 설명
useFoldersForFileTypes true 특정 하위 폴더에 파일(오브젝트)을 업로드
useIAMRoleCredentials false IAM 자격 증명 프로필 사용
uploadFolder undefined 업로드될 폴더의 이름, 나중에 Access URL 에 포함됨
ACL public-read Access 권한이 부여된 AWS 계정 또는 그룹과 액세스 유형을 정의
CacheControl public,
max-age=
31536000
HTTP Cache 사용 유무와 유지 시간
Expires 31536000 HTTP Cache 의 만기 시간

참고자료

s3-folder-upload 공식 배포, github 페이지를 참고한다.

https://github.com/midudev/s3-folder-upload

 

GitHub - midudev/s3-folder-upload: Upload easily a folder to Amazon Simple Storage Service (S3)

Upload easily a folder to Amazon Simple Storage Service (S3) - GitHub - midudev/s3-folder-upload: Upload easily a folder to Amazon Simple Storage Service (S3)

github.com

AWS S3 SDK 를 활용하는 방법은 아래 포스팅을 참고한다.

2022.12.29 - [기타/AWS] - AWS S3 bucket 프로그래밍 - Node.js

 

AWS S3 bucket 프로그래밍 - Node.js

Node.js 로 AWS S3 bucket 프로그래밍 하기 사전작업 AWS 저장소 서비스, S3 (Simple Storage Service) 를 사용하기 위해 AWS가입, S3 bucket 생성, IAM계정 작업이 필요하다. 이 과정은 별도의 포스팅으로 기록할 예

makepluscode.tistory.com

'기타 > AWS' 카테고리의 다른 글

AWS S3 CLI 명령줄 사용법  (0) 2023.01.18
AWS S3 bucket 프로그래밍 - Node.js  (0) 2022.12.29