설치

1
npm i aws-sdk --save
1
const AWS = require("aws-sdk");

자격증명

global credential file을 통해 자격증명을 할 수도 있고 다양한 방법이 있다. 나는 간단하게 config.json파일을 생성하여 사용했다.

(IAM 사용자 생성 후 sdk 사용을 위한 키-밸류 값들은 받아놓은 상태)

config.json

1
2
3
4
5
{
"accessKeyId": "",
"secretAccessKey": "",
"region": ""
}

파일은 다음과 같이 불러올 수 있다.

1
AWS.config.loadFromPath("./config.json");

S3 생성 및 리스팅

1
2
3
4
5
6
7
8
//create S3 service object
s3 = new AWS.S3(); //{apiVersion: '2006-03-01'} 로 버전 명시도 가능

// call S3 to list the buckets
s3.listBuckets((err, data) => {
if (err) console.log("ERROR,", err);
console.log("SUCCESS", data.Buckets);
});

S3 접근 권한이 있는 계정이라면 해당 계정이 가지고있는 버킷들이 모두 출력 될 것이다.

S3 특정 버킷의 Object 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
s3.listObjects({
Bucket: "examplebucket", // 버킷의 이름
MaxKeys: 2, // 응답받을 object key의 최대 개수
}, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
/*
data = {
Contents: [
{
ETag: "\"70ee1738b6b21e2c8a43f3a5ab0eee71\"",
Key: "example1.jpg",
LastModified: <Date Representation>,
Owner: {
DisplayName: "myname",
ID: "12345example25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc"
},
Size: 11,
StorageClass: "STANDARD"
},
{
ETag: "\"9c8af9a76df052144598c115ef33e511\"",
Key: "example2.jpg",
LastModified: <Date Representation>,
Owner: {
DisplayName: "myname",
ID: "12345example25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc"
},
Size: 713193,
StorageClass: "STANDARD"
}
],
NextMarker: "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAyfQ=="
}
*/
})

그 외 옵션

  • Delimiter(String) : key를 그룹짓기위한 문자열
  • Encoding(String) : object key 값의 인코딩 형식을 지정할 수 있다. object key는 아무 Unicode 문자열을 포함할 수 있지만 XML 1.0 parser는 Unicode의 몇 문자열을 파싱할 수 없기 때문에 필요한 경우 인코딩 형식을 지정한다.
  • Prefix(String) : 특정 prefix로 시작하는 key만을 가져온다.

S3 특정 버킷에 Object 업로드 (multer-S3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
s3.putObject({
Body: "<Binary String>",
Bucket: "examplebucket",
Key: "objectkey",
}, function(err, data) {
if(err) console.log(err, err.stack);
else console.log(data);
/*
data = {
ETag: "\"6805f2cfc46c0f04559748bb039d69ae\"",
VersionId: "tpf3zF08nBplQK1XLOefGskR7mGDwcDk"
}
*/
})

참고