ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [aws] image backup(2): lambda & s3 & nas
    aws 2021. 5. 19. 03:30

    [Make SSH]

    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

    댓글

Designed by Tistory.