반응형
S3
- Simple Storage Service의 약자로, 파일을 저장할 수 있는 서비스이다.
- 99.9%의 객체 내구성을 보장하도록 설계된 인프라를 제공한다.
- 데이터가 여러 시설, 여러 디바이스에 중복으로 저장된다.
- 가용성도 높고, 가격도 저렴하며, 보안성 및 확장성이 보장되기 때문에 유용하다.
S3 사용해보기
- AWS 홈페이지에서 Services 중 S3에 접속하고,
Create Bucket
을 만들어Bucket
을 생성한다. Bucket
은 일종의 저장장치라고 생각하면 된다.Bucket
의 이름과 지역을 설정하고 생성하면 된다. (이름중복X)
- 홈페이지에서는 간단하게
Upload
버튼으로 파일을 업로드할 수 있으며, 그렇게 업로드된 파일을 클릭해보면 해당 파일에 접속할 수 있는 link도 존재하게 된다. (다른 사람도 접속할 수 있도록하려면 link에 대한 권한설정작업이 필요하다.)
- 일반적으로는 이렇게 홈페이지에서 사용하기 보단, 개발환경을 구성하여 사용한다.
Node.js에서 S3 사용하기 (S3 SDK)
- S3 SDK를 활용하면 Node.js를 통해 S3를 제어할 수 있다.
- 사용자에게 AmazonS3FullAccess 권한이 있어야한다. (by IAM)
- 아래는 사용의 예시이고, 이를 활용해 우리의 웹 애플리케이션에도 기능들을 적용할 수 있다.
업로드
var AWS = require('aws-sdk');
var fs = require('fs');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
var param = {
'Bucket':'codingeverybody2',
'Key':'logo.png',
'ACL':'public-read',
'Body':fs.createReadStream('94.png'),
'ContentType':'image/png'
}
s3.upload(param, function(err, data){
console.log(err);
console.log(data);
})
- S3 객체를 이용해 파일을 업로드한다.
param
에는Bucket
의 이름과 저장 파일명, 권한(ACL)을 설정한다.Stream
을 설정해 원하는 파일을 잘 전송될 수 있는 형태로 만들고,ContentType
도 적어준다. (Type을 Image/png로 잘 입력해야 브라우저가 해당 파일을 이미지로 인식한다.)- 이렇게 작성된
param
을 통해s3
의upload
매소드를 입력하면 원하는 bucket에 파일이 업로드된다.
목록가져오기
var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
s3.listObjects({Bucket: 'codingeverybody2'}).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();
- 어떤
Bucket
의 데이터를 가져올건지 표기하고, 해당 데이터를 성공적으로 불러왔을 경우 handlePage 함수를 실행한다. - response에는 우리가 업로드한 파일들을 나타내는 객체이다. 이를 순회하여 파일의 이름(Key)만 불러온다.
- 만약 response에 다음 페이지가 존재한다면 이를 기반으로 같은 작업을 반복한다.
다운로드
var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-2';
var s3 = new AWS.S3();
var file = require('fs').createWriteStream('logo.png');
var params = {Bucket:'codingeverybody2', Key:'logo.png'};
s3.getObject(params).createReadStream().pipe(file);
- stream을 기반으로 파일을
Bucket
에 존재하는 파일을 저장한다.
반응형
'🛠 기타 > 인프라' 카테고리의 다른 글
Node.js - AWS SDK (0) | 2021.01.30 |
---|---|
AWS - Scalability (0) | 2021.01.29 |
AWS - EC2 (0) | 2021.01.28 |
AWS - region, availability zone (0) | 2021.01.28 |