학교의 지원을 받아 AI 포토부스 프로젝트를 진행하고 있었습니다. 그러던 중, 비용 문제 때문에 다른 계정으로 서버를 모두 옮겨야 하는 상황이 생겼습니다. 저희 S3 버킷에는 많은 이미지들이 저장되어 있기 때문에 단순 CLI 명령으로는 많은 시간이 소모될 것 같았습니다. 그래서 AWS의 DataSync라는 서비스를 이용해 보기로 했습니다.
DataSync란?
AWS DataSync는 AWS로의 데이터 마이그레이션을 간소화 및 가속화하고 온프레미스 스토리지, 엣지 로케이션, 다른 클라우드 공급자 및 AWS 스토리지 간에 데이터를 빠르고 안전하게 이동하는 데 도움이 되는 온라인 데이터 이동 및 검색 서비스입니다. Amazon S3, Amazon EFS, Amazon FSx 등의 스토리지를 지원하며, 성공적으로 데이터 마이그레이션 및 동기화를 수행할 수 있습니다.
S3 Cross Account 마이그레이션
이번에는 S3 버킷의 데이터를 다른 계정의 S3 버킷으로 복사해봅시다.
IAM 역할 생성
대상 S3 버킷에 액세스 하기 위해 IAM Role을 생성합니다. 사용 사례로 "DataSync - S3 Location"을 선택합니다.
기존 "AmazonS3FullAccess" 정책을 사용해도 되지만, 인라인 정책을 따로 생성해도 됩니다. 정책 JSON은 다음과 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::account-b-bucket"
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:GetObjectTagging",
"s3:PutObjectTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::account-b-bucket/*"
}
]
}
새로운 S3 버킷 생성
객체 소유권 옵션에서 "ACL 비활성화됨"을 선택합니다.
버킷 정책 JSON은 다음과 같습니다. Principal 부분에 이전에 생성했던 IAM Role의 Arn을 입력합니다.
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "DataSyncCreateS3LocationAndTaskAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-a-id:role/name-of-datasync-role"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:GetObjectTagging",
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::account-b-bucket",
"arn:aws:s3:::account-b-bucket/*"
]
}
]
}
DataSync 대상 위치 생성
DataSync 태스크가 동작하려면 위치(Location)가 필요합니다. DataSync와 다른 계정에 대상 버킷이 위치하기 때문에 AWS Console이 아닌 AWS CLI 등을 통해 DataSync 위치를 생성해야 합니다. CloudShell이나 Bash 등을 통해 다음 명령어를 입력합니다.
aws datasync create-location-s3 \
--s3-bucket-arn arn:aws:s3:::account-b-bucket \
--s3-config '{"BucketAccessRoleArn":"arn:aws:iam::account-a-id:role/name-of-datasync-role"}'
성공적으로 위치가 생성되면 LocationArn이 나타나며, AWS Console에도 위치가 생성된 것을 알 수 있습니다.
{
"LocationArn": "arn:aws:datasync:ap-northeast-2:account-a-id:location/loc-08f6a14f42a2f422d"
}
DataSync 태스크 생성
DataSync 콘솔에서 "태스크 생성"을 누릅니다. "새 위치 생성"에서 소스 S3 버킷을 선택하고, IAM Role은 "자동 생성"을 눌러 생성할 수 있습니다.
대상 위치는 AWS CLI를 통해 미리 생성했으므로 "기존 위치 선택"을 눌러 선택할 수 있습니다.
원하는 목적에 따라 나머지 설정 또한 완료합니다. "태스크 생성"을 눌러 DataSync 태스크를 생성할 수 있습니다.
DataSync 태스크 시작
"시작" 버튼을 누르면 이제 데이터 복제가 시작됩니다. 얼마나 복제가 진행되고 있는지 콘솔에서 확인 가능합니다.
총 2,877개(1.26 GiB 용량)의 데이터를 복제했습니다. 태스크가 실패했을 경우 권한들을 다시 한번 확인하시길 바랍니다.
마무리
오늘은 DataSync를 이용해 S3 Cross Account 마이그레이션을 수행해 봤습니다. 앞으로도 대용량의 파일들을 마이그레이션 할 때는 DataSync를 이용하면 좋을 것 같습니다.
자습서: Amazon S3에서 Amazon S3로 데이터 전송AWS 계정 - AWS DataSync
이 자습서의 방법을AWS 계정 사용하여 데이터를 복사하는 방법은 Amazon S3에서만 작동합니다.
docs.aws.amazon.com
How to use AWS DataSync to migrate data between Amazon S3 buckets | Amazon Web Services
Update (6/14/2022): The “Copying objects across accounts” section has been updated to reflect the new Amazon S3 Object Ownership feature, an S3 bucket-level setting that you can use to disable access control lists (ACLs) and take ownership of every obj
aws.amazon.com
오늘의 글은 여기까지입니다. 방문해 주셔서 감사합니다!
'AWS' 카테고리의 다른 글
[AWS] CloudShell VPC 모드에서 잠깐 인터넷 액세스하기 (0) | 2024.12.29 |
---|---|
[AWS] ArgoCD Image Updater로 이미지 자동 배포 (with ECR) (4) | 2024.02.28 |
[AWS] AWS Load Balancer Controller로 HTTPS가 적용된 ALB 생성하기 (0) | 2024.02.21 |
[AWS] Managed Service for Apache Flink로 스트리밍 데이터 분석 - Studio notebooks (2) (2) | 2024.02.16 |
[AWS] Terraform으로 EC2 Instance 생성하기 (0) | 2024.01.19 |