本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自動化跨AWS帳戶複寫 Amazon RDS 執行個體
創建者帕拉格納格韋卡 (AWS) 和阿倫·錢達皮萊 () AWS
環境:生產 | 技術:資料庫;無伺服器 DevOps;基礎架構 | 工作負載:所有其他工作 |
AWS服務:AWSLambda; AmazonRDS; AWS SDK Python(Boto3); AWS Step Functions; Amazon SNS |
Summary
此模式說明如何使用 AWS Step Functions 數和 AWS Lambda,將 Amazon 關聯式資料庫服務 (AmazonRDS) 資料庫執行個體跨不同AWS帳戶複寫、追蹤和復原的程序自動化。您可以使用此自動化功能來執行RDS資料庫執行個體的大規模複寫,而不會對效能造成任何影響或營運超額,無論您的組織規模如何。您也可以使用此模式來協助組織遵守強制性資料控管策略或合規性要求,這些策略要求您的資料在不同AWS帳戶和AWS區域之間進行複寫和備援。大規模跨帳戶複寫 Amazon RDS 資料是效率低下且容易出錯的手動程序,成本高昂且耗時,但此模式的自動化可協助您安全、有效且有效率地實現跨帳戶複寫。
先決條件和限制
先決條件
兩個AWS帳戶
在來源AWS帳戶中啟動並執行的RDS資料庫執行個體
目的地AWS帳戶中RDS資料庫執行個體的子網路群組
在來源AWS帳戶中建立並與目標帳戶共用的金AWS鑰管理服務 (AWSKMS) 金鑰 (如需有關策略詳細資訊的詳細資訊,請參閱此模式的其他資訊一節)。
目的地帳戶中用來加密目的地AWS帳戶中的資料庫的AWSKMS金鑰
產品版本
Python 3.9(使用 AWS Lambda)
波斯格雷第 SQL 11.3, 13.x, 和 14 倍
架構
技術, 堆
Amazon Relational Database Service(AmazonRDS)
Amazon 簡單通知服務(AmazonSNS)
AWS金鑰管理服務 (AWSKMS)
AWSLambda
AWS Secrets Manager
AWS Step Functions
目標架構
下圖顯示使用 Step Functions 協調RDS資料庫執行個體從來源帳戶 (帳戶 A) 到目標帳戶 (帳戶 B) 的排程隨選複寫的架構。
![使用 Step Functions 數跨來源和目標帳戶複寫 Amazon RDS 資料庫執行個體。](images/pattern-img/6310ad9b-1b1a-4a67-b684-ef605fef3e87/images/8a8beeb1-0c77-4a38-88e9-9c689a59b990.png)
在來源帳戶 (圖表中的帳戶 A) 中,「Step Functions」狀態機器會執行下列動作:
從帳戶 A 中的RDS資料庫執行個體建立快照。
使用帳戶 A 的AWSKMS金鑰複製並加密快照,為確保傳輸過程中的加密,無論資料庫執行個體是否加密,快照都會加密。
將快照存取權授予帳戶 B,與帳戶 B 共用資料庫快照。
將通知推送至SNS主題,然後主SNS題叫用帳戶 B 中的 Lambda 函數。
在目標帳戶 (圖表中的帳戶 B) 中,Lambda 函數會執行 Step Functions 數狀態機器來協調下列項目:
將共用快照從帳戶 A 複製到帳戶 B,同時先使用帳戶 A 中的AWSKMS金鑰解密資料,然後使用帳戶 B 中的AWSKMS金鑰加密資料。
從 Secret 管理員讀取密碼,以擷取目前資料庫執行個體的名稱。
使用 Amazon 的新名稱和預設AWSKMS金鑰從快照還原資料庫執行個體RDS。
讀取新資料庫的端點,並使用新的資料庫端點更新 Secrets Manager 中的密碼,然後標記先前的資料庫執行個體,以便稍後將其刪除。
保留資料庫的最新 N 個執行個體,並刪除所有其他執行個體。
工具
AWS工具
Amazon Relational Database Service (AmazonRDS) 可協助您在AWS雲端中設定、操作和擴展關聯式資料庫。
Amazon 簡易通知服務 (AmazonSNS) 可協助您協調和管理發佈者和客戶之間的訊息交換,包括 Web 伺服器和電子郵件地址。
AWS CloudFormation協助您設定AWS資源、快速且一致地佈建資源,並在整個AWS帳戶和區域的整個生命週期中進行管理。
AWS金鑰管理服務 (AWSKMS) 可協助您建立和控制加密金鑰,以協助保護您的資料。
AWSLambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。
AWSSDK對於 Python(Boto3)
是一個軟件開發工具包,可幫助您將 Python 應用程序,庫或腳本與AWS服務集成。 AWSSecrets Manager 可協助您取代程式碼中的硬式編碼認證 (包括密碼),並API呼叫 Secret Manager 以程式設計方式擷取密碼。
AWSStep Functions 是一種無伺服器協調服務,可協助您結合 Lambda 函數和其他服務,以建置關鍵業AWS務應用程式。
Code
此模式的代碼可在 GitHub 跨帳戶RDS複寫
史诗
任務 | 描述 | 所需技能 |
---|---|---|
在來源帳戶中部署 CloudFormation 堆疊。 |
| 雲端管理員、雲端架構師 |
在目的地帳戶中部署 CloudFormation 堆疊。 |
| 雲端架構師、 DevOps 工程師、雲端管理員 |
確認目的地帳戶中RDS資料庫執行個體的建立。 |
| 雲端管理員、雲端架構師、 DevOps 工程師 |
訂閱 Lambda 函數以瞭解SNS主題。 | 您必須執行下列AWS命令列介面 (AWSCLI) 命令,才能將目標帳戶 (帳戶 B) 中的 Lambda 函數訂閱至來源帳戶 (帳戶 A) 中的SNS主題。 在帳戶 A 中,執行下列命令:
在帳戶 B 中,執行下列命令:
在帳戶 B 中,執行下列命令:
| 雲端管理員、雲端架構師、DBA |
將來源帳戶中的RDS資料庫執行個體與目標帳戶同步。 | 啟動來源帳戶中的「Step Functions 數」狀態機器,以起始隨選資料庫複寫。
備註:排程器可協助您按排程自動執行複製,但排程器預設為關閉。您可以在目標帳戶 CloudFormation 堆疊的 [資源] 索引標籤中找到排程器的 Amazon CloudWatch 規則名稱。如需有關如何修改 CloudWatch 事件規則的指示,請參閱 CloudWatch 使用指南中的刪除或停用 CloudWatch 事件規則。 | 雲端架構師、 DevOps 工程師、雲端管理員 |
如有需要,請將資料庫復原至任何先前的副本。 |
| 雲管理員DBA, DevOps 工程師 |
相關資源
其他資訊
您可以使用下列範例政策跨AWS帳戶共用AWSKMS金鑰。
{ "Version": "2012-10-17", "Id": "cross-account-rds-kms-key", "Statement": [ { "Sid": "Enable user permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<SourceAccount>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<DestinationAccount>:root" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<DestinationAccount>:root", "arn:aws:iam::<SourceAccount>:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*" } ] }