회사에서 AWS를 마이그레이션하는데, 기존에 사용하던 계정 버킷에 업로드된 이미지들을 옮기려고하는 계정으로 가져와야해서 작성하게됐다.
구글링을 해보면 수많은 방법이 존재하는데, 본인은 AWS CLI를 이용하는 방법을 채택하여 계정간 S3 버킷 내 데이터를 migration을 하기로 했다.
AWS S3에 업로드된 이미지를 다른 계정으로 migration을 해야하는 상황에서 처음에는 버킷 전체를 다운로드 받아서 직접 업로드하는 수동적인 방식을 생각했었다.
하지만 이 방법은 너무 비효율적이고, 그래도 개발자인데,, 뭔가 이런 귀찮음을 해결해서 효율적이고 편한 방법을 생각해냈다.
우선 S3 이미지를 가지고 있는 계정을 source라고 가정하고, 옮기려고 하는 계정을 target으로 가정을하고 진행을 한다.
우선 source 계정의 버킷에 대한 접근 권한 설정을 해야한다.
source계정에서 S3 콘솔로 이동하여 버킷 정책을 선택하고, JSON 정책을 아래와 같이 수정한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::(target-account-id):root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::test-chopsticks-image-upload-resized/*",
"arn:aws:s3:::test-chopsticks-image-upload-resized"
]
}
]
}
만약 Principal
이 *
로 저장이 되었다면 무조건 위와같이 수정을 해야한다.
왜냐하면 현재 우리는 계정간 S3 버킷 내 데이터를 migration을 하기 때문에 target 계정만 접근이 가능하도록 수정을 해줘야햔다.
그 다음 target 계정에서 S3 콘솔로 이동하여 버킷 정책을 선택하여 접근 권한 설정을 해준다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1701675569052",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::(source-account-id):root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::chopsticks-upload-image",
"arn:aws:s3:::chopsticks-upload-image/*"
]
}
]
}
target 계정까지 버킷 정책 설정을 다 했다면 이제 AWS CLI를 이용해서 객체들을 이전을 할 것이다.
이때 객체 이전을 할 때 옮기려하는 target 계정에서 명령어를 실행해야한다.
aws s3 sync s3://(source-bucket) s3://(target-bucket)
(source 버킷과 target 버킷은 본인이 설정한 버킷의 이름으로 하면된다.)
위와 같이 명령어를 입력을하면 migration이 되는 것을 확인할 수 있다!