-
[aws] image backup(2): lambda & s3 & nasaws 2021. 5. 19. 03:30
[Make SSH]
SFTP를 이용하여 파일 업로드를 진행하기에 스토리지에 공개키를 등록한다. 정말 간단하다. 공개키를 ~/.ssh/authorized_keys 파일 아래에 추가하도록 하자.
[Make Lambda]
AWS Lambda 이전에 작성한 글에서도 사용한 Lambda를 다시 선택했다. S3에서 발생된 이벤트를 수신하기 위한 방법은 Amazon SNS, Amazon SQS도 사용할 수 있지만 기획 의도에 맞춰 메시징을 관리하지 않아도 되어서 Lambda를 선택했다. 그렇게 작성된 코드는 다음과 같다.
const aws = require('aws-sdk'); const client = require('ssh2-sftp-client'); const fs = require('fs'); const s3 = new aws.S3(); const sftp = new client(); exports.handler = async (event, context) => { const bucket = event.Records[0].s3.bucket.name; const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); const params = { Bucket: bucket, Key: key, }; const object = await s3.getObject(params).promise(); await sftp.connect({ host: process.env.HOST, port: 22, username: process.env.USERNAME, privateKey: process.env.PRIVATE_KEY, strictVendor: true }).then(() => { console.log('conn: success'); return sftp.put(object.Body, `/files/${bucket}/${key}`); }).catch(err => { console.error('conn: error', err); }).finally(() => { sftp.end(); }) };
[마치며]
NAS, SFTP, S3, Lambda만을 알면 구성할 수 있는 백업 서버를 구현했다. 당연히 이미지는 데이터로 사용하기에 조심스럽게 다뤄야만 하지만 인생사가 쉽지만은 않다. 개발 환경과 운영 환경이 분리되지 않은 레거시만을 보더라도 조심스럽게 다룰 수 없는 환경이다. 그럴 때 백업만큼 완벽한 대처는 없을 것이다. 빠욤!
'aws' 카테고리의 다른 글
[aws] health check(gray): elastic beanstalk (0) 2021.05.25 [aws] image backup(1): lambda & s3 & nas (0) 2021.05.18 [aws] image resize(2): s3 batch & lambda (1) 2021.05.16 [aws] image resize(1): s3 batch & lambda (1) 2021.05.16 [aws] what is aws? (0) 2021.05.14