2024. 1. 14. 19:57ใAWS
โ๏ธ ๊ฐ์
S3 ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๊ณ์ , ๊ฐ์ ๋ฆฌ์ ์ ์๋ ๋ค๋ฅธ S3 ๋ฒํท์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋ค.
# aws s3 cp <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>
# cp: ์
๋ก๋/๋ค์ด๋ก๋ & rsync: ๋ณ๊ฒฝ๋ ํ์ผ๋ง ์ถ์ ํ์ฌ ์
๋ก๋/๋ค์ด๋ก๋
aws s3 cp {source} {destination} --recursive
S3 CLI (aws s3 cp)๋ก ๋ก์ปฌ์ ๋ค์ด๋ก๋ ํ ๋ค์ ๋ชฉ์ ์ง ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ก๋ํ๊ธฐ์๋ ๋ฐ์ดํฐ ์์ด ๋ง์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ณ ์ ํ๋ค.
๐ก AWS DataSync๋?
ํ์ผ ๋๋ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ AWS ์คํ ๋ฆฌ์ง ์๋น์ค ๊ฐ์ ๋น ๋ฅด๊ณ , ์ฝ๊ณ , ์์ ํ๊ฒ ์ ์กํ ์ ์๋๋ก ์ง์ํ๋ ์จ๋ผ์ธ ๋ฐ์ดํฐ ์ด๋ ๋ฐ ๊ฒ์ ์๋น์ค์ด๋ค. ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ฐ์ํํ ์ ์๋ค. ์จํ๋ ๋ฏธ์ค ์คํ ๋ฆฌ์ง↔AWS, AWS ์คํ ๋ฆฌ์ง ์๋น์ค ๊ฐ(ํ ๋ฆฌ์ ๊ฐ์๋ ๊ฐ๋ฅ), ํ cloud ์คํ ๋ฆฌ์ง ์๋น์ค↔AWS ์คํ ๋ฆฌ์ง ์๋น์ค ๊ฐ ๋ฐ์ดํฐ ์ด๋์ด ๊ฐ๋ฅํ๋ค. AWS DataSync๋ก ์ด๋ํ ์ ์๋ ๋ฐ์ดํฐ ์์น๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค. DataSync๋ฅผ ์ด์ฉํ๋ฉด ์ ์กํ ๋ฐ์ดํฐ์ ํ์ผ ํ์ฅ์, ๊ฐ์ฒด ๋ฐ ํด๋ ํจํด์ ํํฐ๋งํ์ฌ ์ ์กํ ์ ์๋ค.
๐ซ ์ฌ์ฉ ๋ฐฉ๋ฒ
1. IAM Role ์์ฑํ๊ธฐ
Datasync ์๋น์ค์ ๋ถ์ฌํ IAM ์ญํ ์ ์์ฑํ๋ค. ์ญํ ์ AWS Managed Policy์ธ AWSDataSyncFullAccess์ AWSDataSyncReadOnlyAccess๋ฅผ ์ฐ๊ฒฐํ๋ค. ์ถ๊ฐ๋ก ๋ชฉ์ ์ง์ ์ถ๋ฐ์ง๊ฐ ๋ S3 ๋ฒํท์ ๋ช ์ํ ์๋ inline ์ ์ฑ ์ ์ฐ๊ฒฐํ๋ค. Resource์ S3 ๋ฒํท ARN์ ๋ค๋ฅด๊ฒ ์์ฑํ์ฌ ์ถ๋ฐ์ง์ ๋ชฉ์ ์ง bucket์ ๊ถํ์ ๊ฐ๊ฐ ๋ถ๋ฆฌํด์ ์ ์ฉํด์ฃผ๋ ๊ฒ๋ ์ข๋ค. ๋จ, s3:GetBucketLocation, s3:ListBucket, s3:ListBucketMultipartUploads๋ ์ถ๋ฐ์ง, ๋ชฉ์ ์ง ๋ฒํท์ ๊ณตํต์ผ๋ก ํ์ฉํด์ผ ํ๋ค.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{bucket-name}"
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:GetObjectTagging",
"s3:PutObjectTagging",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{bucket-name}/*"
}
]
}
์ ๋ขฐ ๊ด๊ณ๋ ์๋์ ๊ฐ์ด ์ ์ฉํ๋ค.
// Trust Relationship
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "datasync.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "{account-id}"
},
"StringLike": {
"aws:SourceArn": "arn:aws:datasync:{region}:{account-id}:*"
}
}
}]
}
2. DataSync Location ์์ฑํ๊ธฐ
์ถ๋ฐ์ง, ๋ชฉ์ ์ง ๋ณ Location(๋ฐ์ดํฐ ์ ์ก ์์น)์ ์์ฑํ๋ค. S3๋ก location type ์ง์ ์, ์ด๋ํ ๋ฐ์ดํฐ๊ฐ ์๋ folder prefix๋ฅผ ์ง์ ํ ์ ์๋ค.
3. DataSync Task ์์ฑํ๊ธฐ
DataSync Task๋ Datasync๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ถ๋ฐ์ง์ ๋ชฉ์ ์ง, ์ ์ก ๋ฐฉ๋ฒ์ ๊ตฌ์ฑํ๋ค. ํน์ ํด๋๋ฅผ ์ ์ธํ๊ฑฐ๋ ํน์ ํ์ผ ํ์๋ง ํฌํจํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ํ๋ ๋ฐ์ดํฐ๋ง ๋ณต์ฌํ ์ ์๋๋ก task๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๋ฐ์ดํฐ ๋๋ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ง ์ ์กํ ์๋ ์๋ค. (์ ํ) CloudWatch Log Group์ ๋ก๊น ์ ํ๊ธฐ ์ํด์๋ ๋ก๊ทธ ๊ทธ๋ฃน ์ง์ ๋ฐ 1์์ ์์ฑํ Role์ cloudwatch log group์ ๋ก๊น ๊ถํ์ ์ถ๊ฐ๋ก ๋ถ์ฌํด์ผ ํ๋ค.
Task ์์ฑ ํ, Start > Start with defaults ๋ฒํผ์ ์ ํํ์ฌ ๋ฐ์ดํฐ ์ ์ก์ ์์ํ ์ ์๋ค.
๐ ๋๋ ์
Source S3 ๋ฒํท์ ๋ฐ์ดํฐ๊ฐ ์ค์๊ฐ์ผ๋ก ์์ด์ง ์์ ๋จ ํ ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋ฆฌ์ , ๊ฐ์ ๊ณ์ ์ ๋ฒํท์ ์ผ๊ด ๋ณต์ฌํ๋ฉด ๋๋ ๊ฐ๋จํ ์์ ์ด์๋๋ฐ, DataSync๋ฅผ ํตํด ๋์ฑ ๊ฐํธํ๊ฒ ํด๊ฒฐํ ์ ์์๋ค. ๋ฐ์ดํฐ ๋ณต์ฌ ์ฑ๊ณต ~ ๐
๐ ์ฐธ๊ณ ๋งํฌ
- AWS Docs: What is AWS DataSync?
- AWS Docs: Configuring AWS DataSync transfers with Amazon S3
- AWS Repost: Why can't I copy an object between two Amazon S3 buckets?