隨著資訊科技元素在每個金融機構以及各行各業中扎根,強大的存儲容量形成了可用性、耐久性和可擴展性的支柱。在這些元素中,Amazon S3是滿足這些需求的其中一個最受歡迎的服務。隨著企業地理擴張,地點之間的數據複製需求開始顯著。因此,有必要開發Amazon S3中的跨區域複製,允許從一個AWS區域來源桶到不同AWS區域中的另一個桶進行數據複製。
本文將描述如何使用Terraform,一款IaC軟體在Amazon S3中配置跨區域複製。它提供了如何設置服務水準協定的一般概述,討論了為什麼要實施跨區域複製,並展示了如何運行概念證明。
什麼是跨區域複製?
CRR代表跨區域複製,是Amazon S3的一項功能,將物件從一個桶複製到另一個不同區域的桶。這種複製有助於符合合規法規、災難恢復和通過將數據存儲在用戶附近來優化性能。
跨區域複製的主要特點
- 它自動在桶之間複製物件。
- 區域是獨立的;即源桶和目的地桶可以來自不同的區域。
- 規則:這使得可以對複製的內容進行細粒度控制。
- 加密和標記支援:支援加密資料和物件標記的複製。
為什麼要使用 Terraform 進行 CRR?
Terraform 通過聲明性配置實現雲資源管理。雖然 AWS 管理控制台 具有默認的複寫策略,但 Terraform 允許版本控制模板。
Terraform 的好處
- 一致性。此過程降低設置變異的機會。
- 自動化。實現快速部署、更新和拆除。
- 版本控制。簡化回滾和歷史追蹤。
先決條件
在使用 Terraform 設置 CRR 之前,應準備以下內容:
- 具有 S3 和 IAM 權限的 AWS 帳戶
- 在本地安裝 Terraform
- 配置 AWS CLI 以供驗證使用
實施
步驟 1:定義您的 S3 存儲桶
您應該建立至少兩個存儲桶:源存儲桶和目的地存儲桶。
resource "aws_s3_bucket" "source_bucket" {
bucket = "my-source-bucket-example"
acl = "private"
versioning {
enabled = true
}
tags = {
Name = "SourceBucket"
Environment = "Production"
}
}
resource "aws_s3_bucket" "destination_bucket" {
bucket = "my-destination-bucket-example"
acl = "private"
versioning {
enabled = true
}
tags = {
Name = "DestinationBucket"
Environment = "Production"
}
}
步驟 2:為複寫創建 IAM 角色
要使用 CRR,必須有具備 CRR 所需權限的 IAM 角色。讓我們創建一個:
resource "aws_iam_role" "replication_role" {
name = "s3-replication-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "s3.amazonaws.com"
}
}
]
})
}
resource "aws_iam_policy" "replication_policy" {
name = "s3-replication-policy"
description = "Allows S3 to replicate objects"
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"s3:GetObject",
"s3:ListBucket",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
]
Effect = "Allow"
Resource = [
"arn:aws:s3:::my-source-bucket-example/*",
"arn:aws:s3:::my-source-bucket-example"
]
},
{
Action = "s3:PutObject"
Effect = "Allow"
Resource = "arn:aws:s3:::my-destination-bucket-example/*"
}
]
})
}
resource "aws_iam_role_policy_attachment" "replication_role_attachment" {
role = aws_iam_role.replication_role.name
policy_arn = aws_iam_policy.replication_policy.arn
}
步驟 3:S3 複寫配置
配置一個複寫配置來關聯源存儲桶和目的地存儲桶。
resource "aws_s3_bucket_replication_configuration" "replication_config" {
bucket = aws_s3_bucket.source_bucket.id
role = aws_iam_role.replication_role.arn
rule {
id = "ReplicationRule1"
status = "Enabled"
filter {
prefix = ""
}
destination {
bucket = aws_s3_bucket.destination_bucket.arn
storage_class = "STANDARD"
}
}
}
步驟 4:初始化並應用配置
執行 Terraform 配置使用這些命令:
terraform init
terraform apply
在執行 terraform apply
時,只需檢查計劃並確認其執行。
如何測試 CRR 設置
在源桶中創建一個對象,並查看它是否在目標桶中被複製。
# Put a file in the source bucket
aws s3 cp test-file.txt s3://my-source-bucket-example/
# Check if file is there in the destination bucket
aws s3 ls s3://my-destination-bucket-example/
跨區域複製的優勢
- 災難恢復。通過在不同地理區域之間鏡像數據來保護數據。
- 合規性。滿足數據位置和備份的法規要求。
- 性能提升。通過將數據儲存更接近用戶來減少延遲。
- 備份自動化。在不需要額外工具或腳本的情況下管理備份和存檔。
故障排除提示
- 權限錯誤。驗證 IAM 角色在源桶和目標桶上的權限是否正確。
- 未啟用版本控制。確保源桶和目標桶上均已啟用版本控制。
- 複製延遲。複製是最終一致的。使用 CloudWatch 監控複製情況。
結論
Amazon S3 跨區域複製是一個非常強大的功能,讓任何企業都能實現適當的數據冗餘和合規性。Terraform 使您能夠自動化和簡化實施過程,確保基礎設施設置保持一致且可擴展。
在本教程中,我們已經學習了如何使用 Terraform 實現 CRR,從存儲桶配置到複製規則定義。根據本文描述的方法,您可以設計您的最佳存儲架構,以滿足現代企業應用程序的需求。
Source:
https://dzone.com/articles/amazon-s3-cross-region-replication-terraform