반응형
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 저장소 폴더 올리기
필요한 사전작업
- AWS 저장소 서비스, S3 (Simple Storage Service) 를 사용하기 위해 AWS가입, S3 bucket 생성, IAM계정 작업이 필요하다. 이 과정은 별도의 포스팅으로 기록할 예정이다.
- 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가지 파라마터가 전달된다.
- 로컬 디렉토리 명 (예. videos/ )
- AWS S3 접속 정보 (credentials)
- option 정보 (아래 표 참고)
- 무효화 정책
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
AWS S3 SDK 를 활용하는 방법은 아래 포스팅을 참고한다.
반응형
'기타 > AWS' 카테고리의 다른 글
AWS S3 CLI 명령줄 사용법 (0) | 2023.01.18 |
---|---|
AWS S3 bucket 프로그래밍 - Node.js (0) | 2022.12.29 |