AWS S3 Bucket 마이그레이션 하기 (서로 다른 계정 간)
보통 레거시 서비스를 마이그레이션 하면서 세 가지가 가장 큰 숙제라고 봅니다.
- New DB에 Legacy DB를 마이그레이션
- 기존의 비즈니스 로직를 새로운 DB나 연관된 API 등에 맞게 마이그레이션
- 이미지 서비스(커머스, SNS 등) 하는 경우, AWS 새로운 계정의 S3 Bucket으로 Object 마이그레이션
여기서는 AWS 새로운 계정의 S3 Bucket으로 Object를 옮기는 과정을 6단계로 설명하겠습니다.
- S3 Objects를 옮기게 될 Destination Account의 Account Id를 가져옵니다.
- Source Account의 S3 Bucket에 Bucket Policy를 셋팅합니다.
- Destination Account의 S3 Bucket을 생성합니다.
- Destination Account의 IAM user 생성
- 생성된 IAM user를 이용해서 AWS CLI 셋팅
- 마지막으로 AWS CLI에서 명령어를 통해서 마이그레이션
마이그레이션에 앞서 준비해야하는 것
1.AWS 계정 2개
- Source Account :기존 S3 Bucket Objects가 있는 계정
- Destination Account : 기존 S3 Bucket Objects가 옮겨질 계정
2.Destination Account 안에서 생성한 IAM user 1개
3.AWS CLI 모듈이 설치된 시스템 환경에 IAM user에서 가져온 credentials 값 셋팅
이제 위 "마이그레이션에 앞서 준배해야하는 것"을 준비하는 과정을 설명하겠습니다.
1. S3 Objects를 옮기게 될 Destination Account의 Account Id를 가져옵니다.
가져올 Account Id는 숫자로 된 12자리입니다.
다음 단계에서 쓰일 것이니 저장해둡니다.
2. Source Account의 S3 Bucket에 Bucket Policy를 셋팅합니다.
여기서 Bucket Policy를 Source Account의 S3 Bucket에 셋팅하는 이유는 다음과 같습니다.
- 일단, 해당하는 Bucket에서 Bucket List를 가져올 수 있습니다.
- 그리고 Bucket에 들어있는 옮기게 될 Object를 가져올 수 있습니다.
우선 Source account에 로그인하고, Source Account의 S3 Bucket으로 들어갑니다.
아래에...
"ACCOUNT_ID"는 아까 첫 번째에서 가져온 "Account Id" 숫자 12자리 숫자입니다.
"SOURCE_BUCKET_NAME"는 Objects를 옮기려는 Bucket의 이름입니다.
Resource의 "SOURCE_BUCKET_NAME", "SOURCE_BUCKET_NAME/*"는 Source bucket과 내용에 대해 모두 접근 가능하게 됩니다.
위 두 가지 "ACCOUNT_ID", "SOURCE_BUCKET_NAME"를 가져와서 바꾸어주고,
다음 S3 bucket policy를 넣어주고 save 해줍니다.( Bucket Policy를 더 공부하시려면 다음 링크를 참고하세요.)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT_ID:root"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::SOURCE_BUCKET_NAME/*",
"arn:aws:s3:::SOURCE_BUCKET_NAME"
]
}
]
}
3. Destination Account의 S3 Bucket을 생성합니다.
여기서 Source Account의 S3 bucket objects를 옮길 Destination Account의 S3 bucket을 생성합니다.
4. Destination Account의 IAM user 생성
Destination Account의 IAM user를 생성하는 이유는 다음과 같습니다.
- 이미 Source Account의 S3 bucket에 대한 접근은 두 번째 과정에서 허용받았기 때문에,
- Destination Account의 S3 bucket에 IAM user로 AWS CLI에 셋팅하고,
- IAM user의 권한으로 Destination Account의 S3 bucket에 Objects를 마이그레이션하기 위함입니다.
링크) IAM user 생성 방법
이제 Destination Account에 Service "IAM"에 들어갑니다.
"User" 클릭 > "Add user" 클릭
AWS CLI에서 사용하기 위해서 사용할 IAM user를 생성하기 위해서 다음 과정을 따라갑니다.
User name 입력 > Access type: Programmatic access 선택 > Next: Permissions 클릭
AWS CLI에서 Source Bucket, Destination Bucket에 IAM user의 키를 활용해서 접근하기 위해서 user에 policy를 생성해주기 위해서 추가합니다.
"Attach existing policies directly" 클릭 > "Create policy" 클릭
다음 Policy를 아래 과정에 넣어줍니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::SOURCE_BUCKET_NAME",
"arn:aws:s3:::SOURCE_BUCKET_NAME/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::DESTINATION_BUCKET_NAME",
"arn:aws:s3:::DESTINATION_BUCKET_NAME/*"
]
}
]
}
"JSON" 클릭 >"Review policy" 클릭
"Name" 입력 > "Create policy" 클릭
최종적으로 Policy가 생성이 되어집니다.
다시 아까 Add user로 돌아가서,
방금 생성한 policy를 검색 > IAM user 생성의 policy 클릭 > "Next: Tags"
IAM user에 tag를 붙일 수도 있습니다. 나중에 구분하는 구분자이기 때문에 원하시는 분은 넣어주셔도 됩니다.
여기서는 넣지는 않겠습니다. > "Next: Review"
"Create user" 클릭
최종적으로 IAM user가 생성됩니다.
"Download .csv" 클릭 > "Close"
.csv 파일로 된 IAM user의 "Access key ID", "Secret access key"를 다운로드합니다.
이제 IAM user가 생성된 것을 확인하실 수 있습니다.
5. 생성된 IAM user를 이용해서 AWS CLI 셋팅
이제 생성된 IAM user에서 .csv 파일로 된 IAM user의 "Access key ID", "Secret access key"를 활용해서 AWS CLI에 셋팅을 해보겠습니다.
일단은 IAM user를 셋팅하기 위한 AWS CLI를 여러분의 맥, 윈도우, EC2 등에 설치하겠습니다.
설치를 끝나게 되면 $ aws --version 를 통해서 확인해보시고 정상적으로 설치가 되었으면 ,
AWS CLI에 IAM user를 셋팅해보겠습니다.
CLI로 들어갑니다.
"AWS Access Key ID", "AWS Secret Access Key"는 IAM user .csv 파일에서 확인합니다.
"Default region name"은 링크를 통해 찾아서 본인에 맞는 리전을 넣습니다.
"Default output format"는 json을 넣습니다.
아래 처럼 셋팅을 마무리 합니다.
// Previous IAM user setting
$ aws configure
AWS Access Key ID [None]: IAM user .csv 파일에서 확인
AWS Secret Access Key [None]: IAM user .csv 파일에서 확인
Default region name [None]: ap-northeast-2
Default output format [None]: json
6. 마지막으로 AWS CLI에서 명령어를 통해서 마이그레이션
다음 Command를 가지고, 명령어를 실행하면 ex)를 가지고 설명드리면,
source-bucket에 있는 Objects를 destination-bucket으로 Objects를 옮깁니다.
$ aws s3 sync s3://SOURCE-BUCKET-PATH s3://DESTINATION-BUCKET-PATH --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
ex)
aws s3 sync s3://source-bucket s3://destination-bucket --source-region ap-northeast-2 --region ap-northeast-2
차근 차근 내려오셨는지 모르겠네요.
Bucket 마이그레이션에 대해서 어려움을 가지고 계신 분들이 이 글을 보고 쉽게 해결하셨으면 합니다.
이상으로 AWS S3 Bucket 마이그레이션 하기 (계정 간) 를 마치겠습니다.