隨著資料量的增長,有效管理和保護儲存在 Amazon S3 的資料變得至關重要。利用 S3 的生命週期規則,可以根據預先定義的策略自動將物件轉換到更經濟的儲存類別,例如 STANDARD_IA 或 Glacier,從而降低儲存成本。智慧分層則更進一步,根據物件的存取頻率自動在不同儲存層級之間行動資料,在效能和成本之間取得平衡。此外,為了滿足企業的資料保護和合規性要求,S3 的儲存桶複製功能允許在同一區域或跨區域複製物件,確保資料的可用性和永續性,並達成設定的復原點目標(RPO)。最後,S3 Storage Lens 提供了一個全面的分析平台,可以監控 S3 使用情況、分析儲存成本並識別潛在的最佳化機會,讓管理者更有效地管理和控制 S3 儲存資源。
自動化 Amazon S3 儲存類別轉換與備份策略
前言
Amazon S3 提供多種儲存類別,以滿足不同的效能、成本和資料保護需求。本文將探討如何利用 S3 的生命週期規則(Lifecycle Rules)和智慧分層(Intelligent-Tiering)功能,自動化儲存類別轉換,以及如何設定 S3 儲存桶複製以滿足復原點目標(RPO)。
使用 S3 生命週期規則自動轉換儲存類別
問題描述
需要將 S3 儲存桶中的物件在特定時間後自動轉換至較低成本的儲存類別。
解決方案
建立 S3 儲存桶並上傳物件:首先,建立一個 S3 儲存桶並上傳一些測試物件。
設定生命週期規則:建立一個生命週期規則,指定在物件上傳後多少天轉換至其他儲存類別,例如 STANDARD_IA 或 Glacier。
範例生命週期規則組態:
{
"Rules": [
{
"ID": "TransitionToIA",
"Filter": {},
"Status": "Enabled",
"Transitions": [
{
"Days": 30,
"StorageClass": "STANDARD_IA"
}
]
}
]
}
驗證
使用 AWS CLI 命令檢查物件的儲存類別是否已變更:
aws s3api list-objects-v2 --bucket awscookbook301-$RANDOM_STRING
討論
S3 的生命週期規則允許管理員自動化物件的儲存類別轉換,從而最佳化成本和效能。對於需要長期儲存但不常存取的資料,可以轉換至 STANDARD_IA 或 Glacier。
使用 S3 智慧分層歸檔策略自動歸檔物件
問題描述
需要在不影響效能的情況下,自動將不常存取的物件轉換至歸檔儲存類別。
解決方案
- 建立智慧分層組態檔案:定義一個 JSON 組態檔案,指定物件在多少天後轉換至歸檔存取層。
範例組態檔案 tiering.json:
{
"Id": "awscookbook302",
"Status": "Enabled",
"Tierings": [
{
"Days": 90,
"AccessTier": "ARCHIVE_ACCESS"
}
]
}
- 套用智慧分層組態:使用 AWS CLI 將組態套用至 S3 儲存桶。
aws s3api put-bucket-intelligent-tiering-configuration \ --bucket awscookbook302-$RANDOM_STRING \ --id awscookbook302 \ --intelligent-tiering-configuration "$(cat tiering.json)"
驗證
檢查智慧分層組態是否已套用,並驗證物件的儲存類別是否已變更。
討論
S3 智慧分層提供了一種機制,可以根據物件的存取模式自動轉換其儲存類別。這有助於最佳化成本和效能,尤其是在需要長期保留資料的情況下。
複製 S3 儲存桶以滿足復原點目標
問題描述
企業的安全政策要求在同一區域內複製 S3 儲存桶中的物件,以滿足 15 分鐘的復原點目標(RPO)。
解決方案
建立來源和目標 S3 儲存桶:啟用版本控制。
建立 IAM 角色和政策:允許 S3 將物件從來源儲存桶複製到目標儲存桶。
建立 S3 複製政策:參照 IAM 角色,並將該政策套用至來源儲存桶。
討論
S3 複製功能允許在同一區域或跨區域複製物件,以滿足資料保護和合規性要求。啟用版本控制後,可以更有效地管理物件的不同版本。
在 AWS 上實作 S3 儲存桶的複製以滿足復原點目標
前言
作為一名在 AWS 平台上工作的工程師、開發人員或架構師,您很可能會使用 S3 儲存服務。為了滿足應用程式的需求,您可能需要對 S3 儲存桶進行複製。AWS S3 提供了兩種複製方式:同區域複製(Same-Region Replication, SRR)和跨區域複製(Cross-Region Replication, CRR),以滿足不同的需求。
準備工作
在開始之前,請確保您已完成以下準備工作:
- 建立一個已啟用版本控制的 S3 儲存桶作為來源儲存桶。
- 按照程式碼儲存函式庫中本章節資料夾下的步驟進行操作。
步驟
1. 建立目標 S3 儲存桶
aws s3api create-bucket --bucket awscookbook303-dst-$RANDOM_STRING
2. 啟用目標 S3 儲存桶的版本控制
aws s3api put-bucket-versioning \
--bucket awscookbook303-dst-$RANDOM_STRING \
--versioning-configuration Status=Enabled
3. 建立 IAM 角色的信任策略檔案
建立一個名為 s3-assume-role-policy.json 的檔案,內容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
4. 建立 IAM 角色
ROLE_ARN=$(aws iam create-role --role-name AWSCookbook303S3Role \
--assume-role-policy-document file://s3-assume-role-policy.json \
--output text --query Role.Arn)
5. 建立 S3 複製許可權策略檔案
建立一個名為 s3-perms-policy-template.json 的檔案,內容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::SRCBUCKET/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetReplicationConfiguration"
],
"Resource": [
"arn:aws:s3:::SRCBUCKET"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"
],
"Resource": "arn:aws:s3:::DSTBUCKET/*"
}
]
}
6. 修改許可權策略檔案中的儲存桶名稱
sed -e "s/DSTBUCKET/awscookbook303-dst-${RANDOM_STRING}/g" \
-e "s|SRCBUCKET|awscookbook303-src-${RANDOM_STRING}|g" \
s3-perms-policy-template.json > s3-perms-policy.json
7. 將許可權策略附加到 IAM 角色
aws iam put-role-policy \
--role-name AWSCookbook303S3Role \
--policy-document file://s3-perms-policy.json \
--policy-name S3ReplicationPolicy
8. 建立 S3 複製組態範本檔案
建立一個名為 s3-replication-template.json 的檔案,內容如下:
{
"Rules": [
{
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"Destination": {
"Bucket": "arn:aws:s3:::DSTBUCKET",
"Metrics": {
"Status": "Enabled",
"EventThreshold": {
"Minutes": 15
}
},
"ReplicationTime": {
"Status": "Enabled",
"Time": {
"Minutes": 15
}
}
},
"DeleteMarkerReplication": {
"Status": "Disabled"
},
"Priority": 1
}
],
"Role": "ROLEARN"
}
9. 修改複製組態範本檔案中的儲存桶名稱和 IAM 角色 ARN
sed -e "s|ROLEARN|${ROLE_ARN}|g" \
-e "s|DSTBUCKET|awscookbook303-dst-${RANDOM_STRING}|g" \
s3-replication-template.json > s3-replication.json
10. 組態來源 S3 儲存桶的複製策略
aws s3api put-bucket-replication \
--replication-configuration file://s3-replication.json \
--bucket awscookbook303-src-${RANDOM_STRING}
驗證檢查
- 檢視來源儲存桶的複製組態:
aws s3api get-bucket-replication \
--bucket awscookbook303-src-${RANDOM_STRING}
- 上傳一個物件到來源儲存桶:
aws s3 cp ./book_cover.png s3://awscookbook303-src-$RANDOM_STRING
- 檢視上傳物件的複製狀態:
aws s3api head-object --bucket awscookbook303-src-${RANDOM_STRING} \
--key book_cover.png
您應該會看到類別似以下的輸出:
{
"AcceptRanges": "bytes",
"LastModified": "2021-06-20T00:17:25+00:00",
"ContentLength": 255549,
"ETag": "\"d<<>>d\"",
"VersionId": "I<>>X",
"ContentType": "image/png",
"Metadata": {},
"ReplicationStatus": "PENDING"
}
- 15 分鐘後再次檢視複製狀態,確認
ReplicationStatus為COMPLETED。
清理資源
請按照程式碼儲存函式庫中本章節資料夾下的步驟進行清理。
程式碼解密:
上述步驟中的程式碼實作了 S3 儲存桶的複製功能,主要包括以下幾個方面:
- 建立 IAM 角色和許可權策略:透過建立 IAM 角色和附加許可權策略,允許 S3 服務代表您執行複製操作。
- 組態 S3 複製:透過建立複製組態範本檔案和修改其中的儲存桶名稱和 IAM 角色 ARN,實作了來源儲存桶到目標儲存桶的複製。 這些程式碼和步驟共同實作了 S3 儲存桶的複製功能,從而滿足復原點目標(RPO)的需求。
未來趨勢與實務應用評估
隨著雲端運算和資料量的不斷增長,S3 儲存桶的複製功能將變得越來越重要。未來,我們可以預期 S3 複製功能將會更加完善和強大,例如支援更多的複製選項、更快的複製速度等。在實務應用中,S3 複製功能可以用於資料備份、災難還原、資料分享等多種場景。
圖表說明
此圖示展示了 S3 複製的架構圖,包括來源儲存桶、目標儲存桶和 IAM 角色。
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 圖表說明
rectangle "複製" as node1
rectangle "授權" as node2
node1 --> node2
@enduml
圖表解說:
此圖表清晰地展示了 S3 複製的架構,包括來源儲存桶、目標儲存桶和 IAM 角色之間的關係。透過這個圖表,您可以更好地理解 S3 複製的工作原理和流程。
使用 Amazon S3 Storage Lens 觀察儲存與存取指標
Amazon S3 Storage Lens 提供了一個強大的分析引擎,幫助您視覺化 S3 的使用情況和活動。本篇文章將指導您如何建立 S3 Storage Lens 儀錶板,並使用其指標來最佳化您的 S3 儲存成本。
前提條件
- 擁有一個 S3 儲存桶
準備工作
請按照本章節程式碼儲存函式庫中相關資料夾內的步驟進行準備。
建立 S3 Storage Lens 儀錶板
根據檔案說明,您無法使用帳戶根使用者憑證檢視 Amazon S3 Storage Lens 儀錶板。
- 從 S3 控制檯左側導覽列中選擇 S3 Storage Lens。
- 點選 “Create dashboard” 按鈕。
- 所有 AWS 帳戶都有一個預設的儀錶板,顯示透過 S3 Storage Lens 可用的免費指標。啟用進階指標可提供更深入的 S3 使用洞察,並提供成本文省建議。
- 為您的儀錶板命名,如圖 3-5 所示。
- 圖 3-5:S3 Storage Lens 儀錶板建立
- 包含所有儲存桶和區域(使用預設值)作為 “Dashboard scope”(參見圖 3-6)。
- 圖 3-6:儀錶板範圍
- 啟用 “Advanced metrics and recommendations”,保留預設值,如圖 3-7 所示。
- 圖 3-7:選擇進階指標
- 選擇匯出設定的預設值(無匯出)。
- 您可以啟用自動匯出,以定期將指標匯出為 CSV 和 Apache Parquet 格式,並將其傳送到您選擇的 S3 儲存桶,以執行自己的報告和視覺化。
- 點選 “Create dashboard”,然後從儀錶板選擇中檢視您的儀錶板。
- 可能需要長達 48 小時,進階指標才會開始累積您的使用情況和存取模式。同時,您可以檢視與您的 S3 使用相關的免費指標的預設儀錶板。
程式碼解析:
aws s3control create-access-point --name cookbook305-app-1 \
--account-id $AWS_ACCOUNT_ID \
--bucket $BUCKET_NAME --vpc-configuration VpcId=$VPC_ID
內容解密:
此命令用於為應用程式 1 建立一個 S3 存取點。它指定了存取點名稱、帳戶 ID、S3 儲存桶名稱以及 VPC 組態。透過此命令,您可以為特定的應用程式建立專屬的存取點,以控制其對 S3 儲存桶的存取許可權。
驗證檢查
開啟 Storage Lens,檢視您組態的儀錶板。您應該會看到對應於您的 S3 使用情況的指標。範例如圖 3-8 所示。
- 圖 3-8:範例 S3 Storage Lens 儀錶板
您可以深入瞭解 “Cost efficiency” 和 “Data protection” 等指標。經過一段時間後,您將能夠檢視歷史資料,從而根據您的資料存取模式和可用性需求,將物件移至符合您需求的儲存層級。
清理
請按照本章節程式碼儲存函式庫中相關資料夾內的步驟進行清理。
討論
S3 是最早的 AWS 服務之一,因此許多客戶長期使用 S3。隨著客戶儲存使用量的指數級增長,分析儲存內容成為了一項明確的需求。S3 Storage Lens 使您能夠「洞察」您的 S3 使用情況,分析儲存桶使用情況、觀察儲存成本並發現異常(如未刪除的多部分上傳片段)等。
透過 Storage Lens,您可以透過視覺化儀錶板和強大的分析引擎來發現物件的儲存位置,從而在不影響效能的情況下最佳化成本。您還可以啟用進階指標,以獲得更深入的洞察和成本文省建議。
挑戰
- 使用 Storage Lens 的發現結果來觀察指標,並設定警示以持續監控您的使用情況。
- 建立新的 Storage Lens 組態,以僅檢視特定的儲存桶。