'클라우드/aws'에 해당되는 글 1건

  1. 2019.02.26 aws transfer (SFTP)를 이용하여 백업 데이터 이전하기 (ucloud biz -> aws)
클라우드/aws2019. 2. 26. 16:13

쇼핑몰 + 메시지 발송 서비스를 운영하다가 인프라를 변경하는 작업을 진행했습니다.


실제 솔루션이 구동되는 웹서버와 DB서버는 별 문제 없이(수 많은 오류 끝에) 이전을 완료했습니다.


이제 덜 급하고 덜 중요했던(?) 백업 파일들을 옮길 차례 입니다.


대충 보니 1TB 정도 되는군요! (얼마 안되네)



여러 방법을 생각하던 중 최종적으로 이러한 작업 로직을 생각하게 됐습니다.



ucloud 파일 선별 -> aws에 데이터를 받아줄 ec2 생성 -> 1TB 저장 공간 할당 -> ftp로 데이터 이동 -> ec2에서 s3로 전송



아무리 생각해봐도 ec2에서 s3로 한번 더 옮겨야 한다는 것과, 임시로라도 1TB의 공간을 써야 한다는게 참 찝찝합니다.


아무튼 이렇게 진행할 생각으로 aws에서 s3를 검색하자 눈에 띄는 서비스가 보입니다.




AWS Transfer for SFTP


!? 관리형 SFTP 서비스라니! 역시 갓마존! 나의 생각을 이미 읽고 있었구나!


무릎을 치며 해당 서비스 페이지로 들어갑니다.



당연하게도 영어가 맞이해줍니다. 오 그나마 알아보는 걸 찾아보니 시간당 $0.3이고 데이터 업/다운로드 기가당 $0.04 로군요.


계산해보니 ec2만들고 어쩌고 하는 비용보다 훨씬 저렴해보입니다. 더군다나 이번 데이터 이전에만 써먹고 버릴거였으니까요.


그리고 가장 좋은건 임시로 데이터를 보관할 필요 없이 바로 S3로 보내준다는겁니다!


당장 관련 문서를 찾아봤고, 당연히 영어입니다. ㅠㅠ 번역기도 시원찮네요. 그래도 일단 하나하나 해나가기로 합니다.


이번 포스팅은 그 과정 입니다.



AWS Transfer 문서 (https://docs.aws.amazon.com/transfer/latest/userguide/getting-started.html)




1. 데이터 파악, 압축 최대로!

우선 데이터는 대부분 DB파일을 매일매일 코드 백업하던 파일들이었습니다.

굳이 일자별로 필요할까 싶기도 한데.... 그건 제가 판단할 문제가 아니니 우선 접어두죠 :)

그 외엔 쇼핑몰 운영시 필연적으로 만들어질 수 밖에 없는 이미지 파일'들' 입니다.

DB백업 파일은 덩어리가 크지만 숫자가 그리 많은편이 아니지만 이미지'들'은 비교적 수가 많습니다.


이미지 압축은 포기하고 DB파일의 경우 mysqldump를 떠서 바로 옮기지 말고 꼭 압축을 해서 옮겨야 합니다.


왜냐면,



압축 효율이 너무 꿀입니다. 6.2GB가 1.1GB가 되는 마술을 볼 수 있기 때문입니다.

해당 DB파일은 라이브 서비스가 이전된 이후 만든 구 시스템의 최종 DB 백업 파일 입니다.


그 외에 이미지 파일들도 tar 등으로 묶어줄 수 있습니다만, 숫자가 너무 많고 그걸 카운팅 하거나 묶어주는 과정이 너무 오래 걸려서 그냥 일반 전송을 하기로 했습니다.




2. aws Transfer 서버 생성

https://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/getting-started-server.html


간단합니다. 서버 도메인의 경우 route53에 등록된 도메인의 서브 도메인을 입력하면 자동으로 생성되며 바로 연결 됩니다. 입력하지 않을 경우 aws가 기본적으로 생성해주는 주소를 사용하면 됩니다.


그 외에 설정은 딱히 건드려줄게 없어서 그냥 넘어갑니다.




3.  사용자 추가 (aws IAM 설정)


가장 어려웠던건 IAM 설정 입니다.

사실 aws에서 메뉴얼에 알려준대로 따라치기만 하면 되는건데... IAM 은 해도해도 익숙해지질 않네요.


1) 역할 추가

사용자를 추가하기에 앞서 역할을 추가해둬야 합니다. IAM에 들어가서 '역할추가'를 해줍니다.

필요한 권한은 s3와 transferLogging, 버킷권한 입니다.


2) 정책연결

https://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/requirements-roles.html


아래 정책들을 연결해줍니다.


- AmazonS3FullAccess

- AWSTransferLoggingAccess


인라인 정책 추가를 눌러 버킷에 대한 권한을 추가해줍니다.


{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Sid": "AllowListingOfUserFolder",

            "Action": [

                "s3:ListBucket",

                "s3:GetBucketLocation"

            ],

            "Effect": "Allow",

            "Resource": [

                "arn:aws:s3:::##버킷이름##"

            ]

        },

        {

            "Sid": "HomeDirObjectAccess",

            "Effect": "Allow",

            "Action": [

                "s3:PutObject",

                "s3:GetObject",

                "s3:DeleteObjectVersion",

                "s3:DeleteObject",

                "s3:GetObjectVersion"

            ],

            "Resource": "arn:aws:s3:::##버킷이름##/*"

        }

    ]

}



인라인 정책에서 버킷 이름을 수정해서 넣어주셔야 합니다.


이렇게 총 세가지 역할을 만들어줬습니다.







3) 키 생성


SFTP의 사용자를 추가하는 과정에서는 IAM 설정이 필요합니다. 더불어 SSH 통신을 하는 키가 필요하니 미리 puttygen 등을 통해 생성해두시기 바랍니다.



4) 사용자를 추가할 서버 선택




5) 우측 상단 사용자 추가



6) 내용 입력


- username : 접속할 사용자의 이름을 넣어줍니다.

- Access : 2)에서 생성했던 역할(룰) 선택

- Policy : None

- Home directory : S3의 버킷 선택

- SSH public key : 개인키의 public 값을 복붙





4. ucloud biz에서 접속하기

SFTP 입니다. 접속하려는 곳에서 SFTP 접속 방법을 찾아 하셔야 합니다.

aws에서 몇가지 사례를 들어 설명해줍니다.


https://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/getting-started-use-the-service.html


그 중 KT서버는 centos를 사용중이니 OpenSSH 접속 방법을 쓰면 되는데......

centos 6.x 버전에서 SFTP 접속 방법을... 결국 못찾았습니다 --;;; openssl 버전이 낮아서 안된다는 소리가 있던데 아무튼 안되더라구요.

(KT........)


다행히 centos 7.x 버전도 있어서 해당 버전으로 VM을 만드니 접속이 가능하여 다행히 옮길 수 있었습니다.


우선 비밀키를 옮기고 아래와 같이 접속해줍니다.


sftp -i 키파일.pem 사용자명@서버주소






5. 신나게 옮겨줍니다 :)

속도가 생각보다 잘 나오고(?) 잉여자원이 있어서 세션을 여러개 열어서 전송했습니다.


1TB가 조금 안되는, 800GB 정도 옮기는데 약 3시간이 안되게 걸린듯 하네요.



위에 나왔던 1.1GB짜리 파일 전송하는데 25초가 걸렸네요.





6. 뒷정리

작업이 완료된 후 aws의 역할과 sftp 서버, kt의 vm을 삭제하면 끝 :)









Posted by 마PD