Javascript SDK for S3 API
AWS S3에서 제공하는 Javascript SDK를 이용하여 네이버 클라우드 플랫폼 Object Storage를 사용하는 방법을 설명합니다.
이 문서는 AWS Javascript SDK 2.348.0 버전을 기준으로 작성되었습니다.
설치
npm install --save aws-sdk@2.348.0
AWS Javascript SDK
- 소스 : https://github.com/aws/aws-sdk-js
- 문서 : https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html
예제
예제에서 사용하는 access_key, secret_key는 등록한 API 인증키 정보로 입력해야 합니다.
버킷 생성
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint,
region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
(async () => {
await S3.createBucket({
Bucket: bucket_name,
CreateBucketConfiguration: {}
}).promise()
})();
버킷 목록 조회
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
(async () => {
let { Buckets } = await S3.listBuckets().promise();
for(let bucket of Buckets) {
console.log(bucket.Name);
}
})();
버킷 삭제
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
(async () => {
await S3.deleteBucket({
Bucket: bucket_name
}).promise();
})();
오브젝트 업로드
const AWS = require('aws-sdk');
const fs = require('fs');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
const local_file_path = '/tmp/test.txt';
(async () => {
let object_name = 'sample-folder/';
// create folder
await S3.putObject({
Bucket: bucket_name,
Key: object_name
}).promise();
object_name = 'sample-object';
// upload file
await S3.putObject({
Bucket: bucket_name,
Key: object_name,
ACL: 'public-read',
// ACL을 지우면 전체공개가 되지 않습니다.
Body: fs.createReadStream(local_file_path)
}).promise();
})();
오브젝트 목록 조회
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
const MAX_KEYS = 300;
var params = {
Bucket: bucket_name,
MaxKeys: MAX_KEYS
};
(async () => {
// List All Objects
console.log('List All In The Bucket');
console.log('==========================');
while(true) {
let response = await S3.listObjectsV2(params).promise();
console.log(`IsTruncated = ${response.IsTruncated}`);
console.log(`Marker = ${response.Marker ? response.Marker : null}`);
console.log(`NextMarker = ${response.NextMarker ? response.NextMarker : null}`);
console.log(` Object Lists`);
for(let content of response.Contents) {
console.log(` Name = ${content.Key}, Size = ${content.Size}, Owner = ${content.Owner.ID}`);
}
if(response.IsTruncated) {
params.Marker = response.NextMarker;
} else {
break;
}
}
// List Top Level Folder And Files
params.Delimiter = '/';
console.log('Top Level Folders And Files In The Bucket');
console.log('==========================');
while(true) {
let response = await S3.listObjectsV2(params).promise();
console.log(`IsTruncated = ${response.IsTruncated}`);
console.log(`Marker = ${response.Marker ? response.Marker : null}`);
console.log(`NextMarker = ${response.NextMarker ? response.NextMarker : null}`);
console.log(` Folder Lists`);
for(let folder of response.CommonPrefixes) {
console.log(` Name = ${folder.Prefix}`)
}
console.log(` File Lists`);
for(let content of response.Contents) {
console.log(` Name = ${content.Key}, Size = ${content.Size}, Owner = ${content.Owner.ID}`)
}
if(response.IsTruncated) {
params.Marker = response.NextMarker;
} else {
break;
}
}
})();
오브젝트 다운로드
const AWS = require('aws-sdk');
const fs = require('fs');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
const object_name = 'sample-object';
const local_file_path = '/tmp/test.txt';
(() => {
let outStream = fs.createWriteStream(local_file_path);
let inStream = S3.getObject({
Bucket: bucket_name,
Key: object_name
}).createReadStream();
inStream.pipe(outStream);
inStream.on('end', () => {
console.log("Download Done");
});
})();
오브젝트 삭제
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
(async () => {
// Delete Folder
let object_name = 'sample-folder/';
await S3.deleteObject({
Bucket: bucket_name,
Key: object_name
}).promise();
// Delete File
object_name = 'sample-object';
await S3.deleteObject({
Bucket: bucket_name,
Key: object_name
}).promise();
})();
ACL 설정
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket'
const object_name = 'sample-object'
const owner_id = 'test-owner-id'
const target_id = 'test-user-id'
(async () => {
await S3.putObjectAcl({
Bucket: bucket_name,
Key: object_name,
AccessControlPolicy: {
'Grants': [
{
'Grantee': {
'ID': owner_id,
'Type': 'CanonicalUser'
},
'Permission': 'FULL_CONTROL'
},
{
'Grantee': {
'ID': target_id,
'Type': 'CanonicalUser'
},
'Permission': 'READ'
}
],
'Owner': {
'ID': owner_id
}
}
}).promise();
})();
Multipart Upload
const AWS = require('aws-sdk');
const fs = require('fs');
const endpoint = new AWS.Endpoint('https://kr.object.ncloudstorage.com');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint: endpoint,
region: region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';
const local_file_name = '/tmp/sample.file';
const object_name = 'sample-large-object';
let options = {
partSize: 5 * 1024 * 1024
};
(async () => {
await S3.upload({
Bucket: bucket_name,
Key: object_name,
Body: fs.createReadStream(local_file_name)
}, options).promise();
})();