AWS RDS

Gary Ng
15 min readNov 7, 2020

--

AWS RDS 是 AWS RDBS (關聯型數據庫)的服務, 可提供六種 database 供選擇,Amazon Aurora、Mysql、MariaDB、Oracle、Microsoft SQL Server、PostgreSQL

ps: 不同的引擎費用不一樣

有兩種模式

On-demand

按需計費, 每小時計價

Reserved Mode

跟 AWS 簽約的概念, 倘若要用比較久的話使用此方案可能會便宜一點

多可用區部署 vs 只讀副本

備份方案:

  1. 自動備份
  2. 建立資料庫快照

ps: 可以在 RDS 進去備份也可以透過 AWS Backup 服務進行備份管理, 倘若以 AWS Backup 進行備份的話, 檔名結尾為 awsbackup:AWS-Backup-job-number

ps: 每個手動快照至多 100 個手動快照

ps: 備份的前提資料庫的狀態一定要是 AVAILABLE

備份保留時間:

可以設定備份的保留時間, 倘若透過 API 或 CLI 去建置 RDS 的話, 預設值為 1 天;倘若透過 AWS 網頁去創建 RDS 的話, 預設值為 7 天, 設為 0 則停用自動備份, 值可以設為 0–35天。

ps: 修改備份的保留天數會發生短暫的停機

ps: 停用自動備份時, 將會刪除目前所有的自動備份

資料恢復:

IAM policy:

CreateDBSnapshot: 建立資料庫快照

CreateDBInstanceReadReplica: 建立供讀取的資料庫執行個體

DescribeDBClusters

DescribeDBInstances

DescribeDBLogFiles

DescribeDBSnapshots

創建 RDS

  1. 選擇要創建的方式, 以及 engine, 這邊我們選擇 MariaDB

2. 為了測試可以選用 Dev/Test, 也可以選用免費方案 (1年)

3. 進行 database 用戶名以及密碼設置

ps: identifier: 用於在 RDS 是別用

4. 選用 DB 規格

5. 這邊我們先選用最低規格

6. 設置 DB 容量空間以及是否需要啟用 auto scaling

7. 是否需要創建備用的 instance

8. VPN 設定

9. 這邊要選擇 ec2 的 VPC

10. 設定備份時間, 為了測試所以將此 backup 的時間設為 0, 也就是不自動備份

11. 設置 RDS 的 security group 的 in-bound rule 使其 ec2 可以連到 rds

ps: 點選第一個

12. 點擊 Action

13. 選取 Edit inbound rules

14. 點選 Add Rule

15. 請選擇 TCP, 第二個欄位為 port, 所以要輸入 DB 的 port 3306, 第三個則是要輸入 EC2 的 private address, 讓 EC2 可以連到 RDS 的 3306 port

16. 都設定好之後即可在 EC2 連到 RDS

倘若要多建立一個 read replica

  1. 在你的 database 清單中選取要在哪個地方多增加一個 read r

2. 點擊 Action 即可看到 create read replica

建立 snapshot

  1. 點擊 Action 的 take snapshot

2. 設定 snapshot 的名稱後即可建立 snapshot

3. 建立好之後即可在側邊欄的 snapshot 找到剛剛建立的 snapshot

4. 建立完 snapshot 可以將 snapshot 匯到 aws s3 (手動)

ps: 倘若要將此動作變成自動的話可以特過 aws lambda 的服務去監聽 take snapshot 的 event, 這樣當 rds 的 take snapshot 觸發時, 則會將此 snapshot 匯到 s3

Q: 如何多建立一個 master write node ???

透過 AWS Backup Service 去備份 RDS

  1. 點擊 on-demand

2. 接著備至要備份的相關資訊

3. 在執行此操作的時候請確認 iam 的 role 是否有此角色

4. 然後要配置以下 policy

5. aws backup 也可以設定排程自動備份, 首先新增一個 backup plan

6. 設定備份排程的時間

7. 都設定好了之後直接按下 create, 即可在 backup plan 看到你剛剛新增的 plan

8. 接著設定 Resource assignments

9. 輸入 resource 的名稱以及 將 assign by 的 tags 改為 resource id

10. 選擇自己要備份的 resource type , 以及選定 database 抑或是 table name

AWS Backup Policy

常用 Action

CreateBackupPlan: 創建備份計畫

CreateBackupVault: 創建備份的文件庫, 用於存放備份的資料

DescribeBackupVault: 取得備份的文件庫清單

GetBackupPlan: 取得備份計畫

UpdateBackupPlan: 更新備份計畫

CreateBackupSelection: 創建備份資源的指派

GetBackupSelection: 取得備份資源的指派

ListBackupJobs: 列出備份任務

ListBackupPlans: 列出備份計畫

ListBackupSelections: 列出備份資源列表

ListBackupVaults: 列出文件庫

{
"Sid": "BackupPolicy",
"Effect": "Allow",
"Action": [
"backup:CreateBackupPlan",
"backup:CreateBackupSelection",
"backup:CreateBackupVault",
"backup:DeleteBackupPlan",
"backup:DeleteBackupSelection",
"backup:DeleteBackupVault",
"backup:DescribeBackupVault",
"backup:GetBackupPlan",
"backup:UpdateBackupPlan",
],
"Resource": [
"arn:aws:backup:<region>:<account-id>:backup-plan:*",
"arn:aws:backup:<region>:<account-id>:backup-vault:<Name>*",
"arn:aws:backup:<region>:<account-id>:key:*",
"arn:aws:iam::<region>:<account-id>:role/<Name>*"
]
}

再透過 aws backup 創建 role 以及 assign resource 時, 透過以下 policy

{
“Version”: “2012–10–17”,
“Statement”: [
{
“Sid”: “BackupPolicy”,
“Effect”: “Allow”,
“Action”: [
“backup:CreateBackupPlan”,
“backup:CreateBackupSelection”,
“backup:CreateBackupVault”,
“backup:DeleteBackupPlan”,
“backup:DeleteBackupSelection”,
“backup:DeleteBackupVault”,
“backup:DescribeBackupVault”,
“backup:GetBackupPlan”,
“backup:UpdateBackupPlan”,
“backup:CreateBackupSelection”,
“backup:GetBackupSelection”,
“backup:ListBackupJobs”,
“backup:ListBackupPlans”,
“backup:ListBackupSelections”,
“backup:ListBackupVaults”,
“backup:Create*”,
“backup:List*”
],
“Resource”: [
“*”
]
},
{
“Effect”: “Allow”,
“Action”: [
“iam:GetRole”,
“iam:PassRole”,
“iam:ListRoles”
],
“Resource”: “*”
}
]
}

倘若沒有 AWSBackupDefaultServiceRole 的角色則需要創建並給予以下 policy

定價:

參考資料:

--

--

Gary Ng
Gary Ng

Written by Gary Ng

軟體工程師、後端工程師

No responses yet