본문 바로가기

기타/AWS

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

Node.js 로 AWS S3 bucket 프로그래밍 하기

사전작업

  1. AWS 저장소 서비스, S3 (Simple Storage Service) 를 사용하기 위해 AWS가입, S3 bucket 생성, IAM계정 작업이 필요하다. 이 과정은 별도의 포스팅으로 기록할 예정이다.
  2. 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 리스트 보기

  1. dotenv (.env) 파일을 불러온다.
  2. AWS.config 를 통해 AWS S3 접속 정보를 업데이트 한다.
  3. AWS.s3 인스턴스를 생성한다.
  4. 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 프로그래밍 - 파일(오브젝트) 리스트업

  1. dotenv (.env) 파일을 불러온다.
  2. AWS.config 를 통해 AWS S3 접속 정보를 업데이트 한다.
  3. AWS.s3 인스턴스를 생성한다.
  4. 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 프로그래밍 - 파일(오프젝트) 업로드

  1. dotenv (.env) 파일을 불러온다.
  2. AWS.config 를 통해 AWS S3 접속 정보를 업데이트 한다.
  3. AWS.s3 인스턴스를 생성한다.
  4. 업로드를 위해서 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

 

Amazon S3 Node.js 예제 - AWS SDK for JavaScript

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

AWS S3 에 폴더 단위로 업로드 하는 방법은 아래 글을 참고한다.

2023.01.10 - [기타/AWS] - AWS S3 bucket 폴더 업로드 - Node.js

 

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

Node.js 로 AWS S3 에 로컬 폴더 올리기 이 포스팅은 AWS 저장소 서비스, S3 (Simple Storage Service) 에 폴더 단위로 업로드 하는 방법을 설명한다. Flat Structure, AWS S3 파일구조 AWS S3 는 기본적으로 파일로만

makepluscode.tistory.com

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

AWS S3 CLI 명령줄 사용법  (0) 2023.01.18
AWS S3 bucket 폴더 업로드 - Node.js  (0) 2023.01.10