하면 된다!!!

'AWS'에 해당되는 글 2건

  1. File Transfer - scp, rsync
  2. [nodejs] AWS S3 file 관리하기

File Transfer - scp, rsync

프로그래밍/기타

 

서버 작업을 하다보면 서버와 서버 사이에 파일 전송 이슈가 있는 경우가 있다.

개인적으로 주로 SFTP나 FTP를 이용해서 파일을 전송했었는데... 요즘은 rsync 를 이용해서 파일 전송을 주로 하고 있습니다.

그중 많이 쓰이는 scp, rsync 에 대해서... 간단히 커맨드 정리 해둔다.

 

SCP (Secure Copy) 

ssh를 통해서 파일을 전송하는 도구로 서버에서 서버로 쌍방향 전송이 가능하다.

 

다른 장비로 파일 복사하기
scp -rp sourcedirectory user@dest:/path
-r means recursive
-p preserves modification times, access times, and modes from the original file.
scp *.pdf sean@123.12.1.123:/home/sean/download/
>> 모든 PDF 파일을 123.12.1.123 서버의 /home/sean/download 폴더로 복사
scp -rp ~/files sean@123.12.1.123:/home/sean/download/
>> files 폴더 이하에 있는 모든 파일을 123.12.1.123 서버의 /home/sean/download 폴더로 복사

 

다른 장비에서 파일 복사해오기
scp -rp user@dest:/path sourcedirectory
scp sean@123.12.1.123:/home/sean/download/*.pdf ./download
>> 123.12.1.123 서버의 /home/sean/download 폴더의 모든 PDF 파일을 ./download 폴더로 복사
scp -rp sean@123.12.1.123:/home/sean/download/ ~/files 
>> 123.12.1.123 서버의 /home/sean/download 폴더 하위의 모든 파일을 ~/files 폴더로 복사

참고로 파일명에 공백 등이 들어간 경우 " " 로 둘러싸주면 된다. ex) "abc file.txt" 

 

 

rsync

서버간에 파일을 동기화하는 도구이다. 이 또한 쌍방향 전송이 가능하다.

필자는 AWS에서 서버 관리를 주로 하고 있는데 인증 파일(.pem)을 이용해서 서버에 파일을 싱크할때 자주 사용하고 있다.

파일 싱크하기 (일반)
rsync -a -e ssh user@source-server:/source/ /dest/
rsync -a -e ssh /source/ user@source-server:/dest/

-a : archive mode (include a lot of default common options, including preserving symlinks)
-z : compress
-v : verbose : show files
-P : show progess as files done/remaining files
-e ssh : do rsync in ssh protocol
--delete : delete files in the destination that are not anymore in the source
rsync -avz -e ssh pi@123.12.1.123:download/ files/
>> 123.12.1.123 서버의 download 폴더의 파일을 ./files 폴더로 복사
rsync -avz -e ssh files/ pi@123.12.1.123:download/
>> ~/files 의 파일들을 123.12.1.123 서버의 /home/sean/download 폴더로 복사
인증서 파일 (.pem) 파일을 이용해서 싱크하기
sudo rsync -avzP -e "ssh -i /root/.ssh/my_certificate.pem" /source/ user@source-server:/dest/
sudo rsync -avzP -e "ssh -i /root/.ssh/my_certificate.pem" user@source-server:/source/ /dest/

 

[nodejs] AWS S3 file 관리하기

프로그래밍/Javascript

급작스럽게 AWS S3 에서 파일을 올리고, 내리고 관리할 일이 발생했는데 임시 작업 이라서 nodejs 를 이용해서 처리 하기로 결정했다.

개발했던 내용을 좀 정리 해둔다.

 

 

먼저 aws-sdk 를 설치해야한다.

 

$ npm install aws-sdk

 

간단하게 목록 조회, 업로드, 다운로드 함수 구현한 내용중 일부를 기록해 둔다~

const fs = require('fs');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
    accessKeyId: "Your API Access Key ID",
    secretAccessKey: "Your API Secret Access Key"
});

/**
 * Object List from AWS S3 bucket
 * @param {Bucket: XXX, Prefix: XXX, MaxKeys: xxx} params 
 */
const listObjects = params => {
    s3.listObjectsV2(params, function (err, data) {
        if (err) {
            console.log(err);
            throw err;
        } else {
            if (data != null && data != undefined) {
                let fileList = data.Contents;
                if (fileList != null && fileList.length > 0) {
                    fileList.forEach((fileInfo, idx) => {
                        console.log(fileInfo);
                    });
                }
            } else {
                console.log(params.Prefix, "is not exists.");
            }
        }
    });
}

listObjects({ Bucket: 'My Bucket Name', Prefix: "path/to/", MaxKeys: 1000 });

/**
 * Download file from AWS S3
 * @param {*} params 
 */
const downloadFile = params => {
    s3.getObject(params.downloadParams, function (s3Err, data) {
        if (s3Err) throw s3Err
        fs.writeFileSync(params.savePath, data.Body)
    console.log('file downloaded successfully')
    });
}

var downParams = {
    downloadParams: {
        Bucket: "My bucket name",
        Key: "My object key"
    },
    savePath: "/path/to/abcde.txt"
};
downloadFile(downParams);

/**
 * File Upload to AWS S3
 * @param {*} uploadInfo 
 */
const uploadFile = uploadInfo => {
    fs.readFile(uploadInfo.filePath, function(err, data) {
        if (err) throw err;
        const params = {
            Bucket: uploadInfo.Bucket,
            Key: uploadInfo.Key,
            Body: JSON.stringify(data, null, 2)
        };
        s3.upload(params, function (s3Err, uploadData) {
            if (s3Err) throw s3Err
            console.log(`File uploaded successfully at ${uploadData.Location}`)
        });
    });
}

uploadFile({
    Bucket: "My Bucket Name",
    Key: "upload path and object key",
    filePath: "/path/to/abcde.txt"
});