반응형
Node.js 로 AWS S3 bucket 프로그래밍 하기
사전작업
- AWS 저장소 서비스, S3 (Simple Storage Service) 를 사용하기 위해 AWS가입, S3 bucket 생성, IAM계정 작업이 필요하다. 이 과정은 별도의 포스팅으로 기록할 예정이다.
- AWS 에 가입되어 S3 사용할 수 있는 계정과 저장소가 있다고 가정하고 작성한다.
AWS S3 사용을 위한 정보
AWS S3 에 접속을 위해서 필요한 정보이다. 이 정보를 dotenv 에 저장하여 사용하는 방법을 추천한다.
정보명 | 설명 | 예제 |
AWS 서버 지역 | AWS 서버가 위치한 지역명 | ap-northeast |
AWS S3 bucket 이름 | AWS S3 서비스에서 생성한 bucket 의 이름 | my-123th-bucket |
AWS S3 액세스 키 | AWS 계정 접근을 위한 키 (root 계정이 아닌 별도 IAM 계정 생성 권장) |
- |
AWS S3 비밀 액세스 키 | AWS 계정 접근을 위한 키 (root 계정이 아닌 별도 IAM 계정 생성 권장) |
- |
이 예제에서는 .env 라는 파일에 AWS S3 접속 정보를 저장하였다.
AWS_S3_REGION=ap-northeast...
AWS_S3_BUCKET_NAME=s3-bucket...
AWS_S3_ACCESS_KEY_ID=ABCDEFG....
AWS_S3_SECRET_ACCESS_KEY=1234567890ABC...
AWS S3 SDK - Node.js
AWS S3 프로그래밍을 위한 SDK 가 다양한 언어로 배포된다. Node.js 의 경우 npm 을 통해 SDK 를 설치할 수 있다.
npm install -save aws-sdk
AWS S3 사용을 위한 정보를 저장하기 위한 dotenv 패키지를 설치한다.
npm install -save dotenv
AWS S3 프로그래밍 - bucket 리스트 보기
- dotenv (.env) 파일을 불러온다.
- AWS.config 를 통해 AWS S3 접속 정보를 업데이트 한다.
- AWS.s3 인스턴스를 생성한다.
- AWS.s3 인스턴스의 listBuckets API 로 bucket 을 리스트업 한다.
import AWS from 'aws-sdk'
import fs from 'fs'
import path from 'path'
import dotenv from 'dotenv'
const __dirname = path.resolve();
dotenv.config({ path: __dirname + '/../.env' });
AWS.config.update({
region: process.env.AWS_S3_REGION,
accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY,
});
const s3 = new AWS.S3();
s3.listBuckets().promise().then((data) => {
console.log(JSON.stringify(data, null, 2));
});
AWS S3 프로그래밍 - 파일(오브젝트) 리스트업
- dotenv (.env) 파일을 불러온다.
- AWS.config 를 통해 AWS S3 접속 정보를 업데이트 한다.
- AWS.s3 인스턴스를 생성한다.
- AWS.s3 인스턴스의 listObjects API 로 object 를 리스트업 한다.
import AWS from 'aws-sdk'
import fs from 'fs'
import path from 'path'
import dotenv from 'dotenv'
const __dirname = path.resolve();
// Windows sytle path
dotenv.config({ path: __dirname + '/../.env' });
AWS.config.update({
region: process.env.AWS_S3_REGION,
accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY,
});
const s3 = new AWS.S3();
const s3_bucket_name = process.env.AWS_S3_BUCKET_NAME;
s3.listObjects({ Bucket: s3_bucket_name }).on('success', function handlePage(response) {
for (var name in response.data.Contents) {
console.log(response.data.Contents[name].Key);
}
if (response.hasNextPage()) {
response.nextPage().on('success', handlePage).send();
}
}).send();
AWS S3 프로그래밍 - 파일(오프젝트) 업로드
- dotenv (.env) 파일을 불러온다.
- AWS.config 를 통해 AWS S3 접속 정보를 업데이트 한다.
- AWS.s3 인스턴스를 생성한다.
- 업로드를 위해서 param 을 설정하고 upload API 를 사용해서 업로드 한다.
import AWS from 'aws-sdk'
import fs from 'fs'
import path from 'path'
import dotenv from 'dotenv'
const __dirname = path.resolve();
dotenv.config({ path: __dirname + '/../.env' });
AWS.config.update({
region: process.env.AWS_S3_REGION,
accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY,
});
const s3 = new AWS.S3();
const s3_bucket_name = process.env.AWS_S3_BUCKET_NAME;
var param = {
'Bucket': s3_bucket_name,
'Key': 'mc.png',
'ACL': 'public-read',
'Body': fs.createReadStream('./files/mc.png'),
'ContentType': 'image/png'
}
s3.upload(param, function (err, data) {
if (err) {
console.log(err);
}
console.log(data);
})
참고자료
AWS SDK for JavaScript를 사용하여 Node.js 에서 S3 에 버킷을 관리하는 공식 예제를 참고한다.
https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/s3-node-examples.html
AWS S3 에 폴더 단위로 업로드 하는 방법은 아래 글을 참고한다.
반응형
'기타 > AWS' 카테고리의 다른 글
AWS S3 CLI 명령줄 사용법 (0) | 2023.01.18 |
---|---|
AWS S3 bucket 폴더 업로드 - Node.js (0) | 2023.01.10 |