S3 有個功能叫做 Replication, 可以將 S3 的資料備份到不同地區甚至是不同帳號。以下將簡單說明 Replication 且以及簡單實作。
Replication 基本用途
- 災難還原: 因為可以多個備份,當有問題時可以做緊急災難復原
- Latency 減少: 倘若使用者位於多個地區的話,可以讓他們連線到近的 s3 region
- 異地備份: 儲存至不同帳號甚至是不同 region, 當作備援
S3 Replication 前置作業
- 創建所需權限的 IMA Role
這邊因為我們到時會使用到 Batch Operation, 去複製已存在的 Object 到另外一個地區,所以須額外設定,不然 S3 Replication 只會備份啟用 Replication Rule 之後開始新上傳甚至是變動的物件到你所期望的位置。
注意事項:
Glacier Flexible 跟 Glacier Deep Archive 的 Storage Class 不會被複製。
IAM Role
IAM Dashboard 記得選 batchoperation
要有 batch operation 的 trust policy 之外也別忘記指定 s3 給他
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service": [
"s3.amazonaws.com",
"batchoperations.s3.amazonaws.com"
]
},
"Action":"sts:AssumeRole"
}
]
}
2. 創建 Policy 給該 IAM Role
參數說明:
source bucket: 來源的 s3
destination bucket: 目的地的 s3, 可能為同帳號不同區,也可能為不同帳號
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::<source bucket>"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:GetObject"
],
"Resource":[
"arn:aws:s3:::<source bucket>/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource":"arn:aws:s3:::<destination bucket>/*"
}
]
}
倘若要使用 Batch Replication 還需要再額外設定以下 Policy
{
"Version":"2012-10-17",
"Statement":[
// 複製的權限
{
"Action":[
"s3:InitiateReplication"
],
"Effect":"Allow",
"Resource":[
// 來源 bucket
"arn:aws:s3:::*** replication source bucket ***/*"
]
},
// 複製的權限配置
{
"Action":[
"s3:GetReplicationConfiguration",
"s3:PutInventoryConfiguration"
],
"Effect":"Allow",
"Resource":[
// 來源 bucket
"arn:aws:s3:::*** replication source bucket ***"
]
},
// 取得物件權限
{
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Effect":"Allow",
"Resource":[
// 來源 bucket
"arn:aws:s3:::*** manifest bucket ***/*"
]
},
// 儲存處理的 manifest 甚至是完成報告
{
"Effect":"Allow",
"Action":[
"s3:PutObject"
],
"Resource":[
// 來源 bucket 以及目的地 bucket
"arn:aws:s3:::*** completion report bucket ****/*",
"arn:aws:s3:::*** manifest bucket ****/*"
]
}
]
}
3. 開始創建來源 bucket
創建 bucket 注意事項:
a. 不能勾選 Block all public access 選項
b. 啟用 Bucket 版控
c. Object Lock 改為 Disable
也要設定來源 bucket 對應的 Permission
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "<source bucket>/*"
}
]
}
設定目的地 bucket 的 Permission
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "<destination bucket>/*"
}
]
}
目前 Replication Bucket 為空
4.在 source bucket 設定 replication rule
點選 source bucket 並點選 management
點選創建 Replication Rule
注意: priority 越大優先採用
在 Source Bucket 將規則的範圍改為使用 bucket 所有的 object
選擇前面步驟創建的 IAM Role
使用 Batch Operation 將已存在的 Object 複製至 destination bucket
a. 點選 Create Job
b. 選擇來源的 bucket
c. 選擇複製的狀態(將沒有被複製的進行複製)
d.看要不要儲存完成的報告, 倘若有錯誤的話可以檢查為什麼出錯
e. 選擇前面建立的 IAM Role
f. 要手動點選執行 Job, 否則到一定的時間點則會自動判斷為 failed
複製狀態說明:
倘若想要查看複製的狀態,點選想看的物件並點寫 Property
往下滑就會看到複製的狀態