如何讓 Amazon Aurora 叢集停止超過七天?

4 分的閱讀內容
0

我想讓 Amazon Relational Database Service (Amazon Aurora 叢集) 停止超過為期七天的時間。

簡短描述

只要幾分鐘的時間,就可以輕鬆地啟動和停止 Amazon Aurora 叢集。此功能可讓您從不需要一直執行的資料庫省下成本。您最多可以讓資料庫 (DB) 叢集停止七天。七天之後,如果您未手動啟動資料庫叢集,該資料庫叢集便會自動啟動。發生這種情況是因為叢集不會落後於任何必要的維護更新。

若要讓 Aurora 叢集停止超過七天又不會錯過必要的維護更新,請執行下列動作:

1.    設定 AWS Identity Access Management (IAM) 許可,允許 AWS Lambda 執行以下作業:啟動執行個體。停止執行個體。擷取執行個體的相關資訊。

2.    為您要自動啟動和停止的 Aurora 叢集新增標籤。

3.    建立用來啟動叢集的 Lambda 函數。

4.    建立用來停止叢集的 Lambda 函數。

5.    建立排程以執行下列作業:在每週維護時段開始時啟動 Aurora 叢集。在維護時段結束時停止 Aurora 叢集。

解決方案

設定 IAM 許可

建立 IAM 政策以允許 Lambda 啟動和停止叢集,並擷取叢集的相關資訊。

1.    開啟 IAM 主控台

2.    在導覽窗格中,選擇 Policies (政策)。

3.    選擇 Create Policy (建立政策)

4.    選擇 JSON 標籤。

5.    複製下列政策並將政策貼到 JSON 標籤下,以授與所需的 IAM 許可:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "rds:StartDBCluster",
        "rds:StopDBCluster",
        "rds:ListTagsForResource",
        "rds:DescribeDBInstances",
        "rds:StopDBInstance",
        "rds:DescribeDBClusters",
        "rds:StartDBInstance"
      ],
      "Resource": "*"
    }
  ]
}

6.    選擇 Next: Tags (下一步:標籤)

7.    (選擇性) 若要新增標籤,請選擇 Add tag (新增標籤),然後為 Key (索引鍵)Value - optional (值 - 選擇性) 欄位輸入適當的值。

8.    選擇 Next: Review (下一步:檢閱)

9.    在 Review policy (檢閱政策) 頁面上,於 Name (名稱) 中輸入政策的名稱。檢閱 Summary (摘要) 區段,以查看政策所授與的許可。

10.    選擇 Create policy (建立政策)

如需詳細資訊,請參閱在 JSON 標籤上建立政策

建立 IAM 角色,然後連接所需政策

1.    開啟 IAM 主控台

2.    在導覽窗格中,選擇 Roles (角色)

3.    選擇 Create role (建立角色)。

4.    在 Select type of trusted entity (選取受信任實體的類型) 中,選擇 AWS service (AWS 服務)

5.    在 Or select a service to view its use cases (或選取服務以檢視其使用案例) 底下,選擇 Lambda

6.    選擇 Next: Permissions (下一步:許可)。

7.    在 Filter-policies 中,輸入上一節所建立的政策名稱。當您建立的政策出現時,請選取該政策。在 Filter-policies 中,輸入 AWSLambdaBasicExecutionRole。當您建立的受管政策 AWSLambdaBasicExecutionRole 出現時,請選取該政策。

8.    選擇 Next: Tags (下一步:標籤)。

9.    (選擇性) 若要新增標籤,請為 Key (索引鍵) 和 Value - optional (值 - 選擇性) 欄位輸入適當的值。

10.    選擇 Next: Review (下一步:檢閱)。

11.    在 Create role (建立角色) 頁面上,於 Role name (角色名稱) 中輸入所要建立角色的名稱。

12.    選擇 Create role (建立角色)。

如需詳細資訊,請參閱建立 AWS 服務的角色 (主控台)

為資料庫叢集新增標籤

1.    開啟 Amazon RDS 主控台

2.    在導覽窗格中,選擇 Databases (資料庫)。

3.    選擇您要自動啟動和停止的資料庫叢集。

4.    在詳細資料區段中,向下捲動至 Tags (標籤) 區段。

5.    在 Tags (標籤) 標籤下,選擇 Add (新增)。在 Tag key (標籤鍵) 中,輸入自動啟動。在 Value (值) 中,輸入。選擇 Add (新增) 以儲存變更。

6.    再次選擇 Add (新增)。在 Tag key (標籤鍵) 中,輸入自動停止。在 Value (值) 中,輸入。選擇 Add (新增) 以儲存變更。

如需詳細資訊,請參閱新增、列出和移除標籤

建立用來啟動已加上標籤的資料庫執行個體的 Lambda 函數

1.    開啟 Lambda 主控台

2.    在導覽窗格中,選擇 Functions (函數)

3.    選擇 Create function (建立函數)

4.    選擇 Author from scratch (從頭編寫)

5.    在 Function name (函數名稱) 中,輸入函數的名稱。

6.    在 Runtime (執行時間) 中,選取 Python 3.7

7.    在 Architecture (架構) 中,保留預設選取的 x86_64

7.    展開 Change default execution role (變更預設執行角色)

8.    在 Execution role (執行角色) 中,選擇 Use an existing role (使用現有的角色)

9.    在 Existing role (現有角色) 中,選取您之前建立的 IAM 角色。

10.    選擇 Create function (建立函數)

11.    選擇 Code (程式碼) 標籤。

12.    在 Code source (程式碼來源) 編輯器中,刪除範例程式碼並貼上下列程式碼:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Start DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster stopped. Start it if eligible.
        if (db['Status'] == 'stopped'):
            doNotStart=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for cluster, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Starting cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStart == 1):
                    doNotStart=1
            except Exception as e:
                print ("Cannot start cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

13.    選擇 File (檔案)、選擇 Save (儲存),然後選擇 Deploy (部署)

15.    選擇 Configuration (組態) 標籤、選擇 General configuration (一般組態),然後選擇 Edit (編輯)

16.    在 Timeout (逾時) 下,執行下列作業:於 min (分) 中選取 0。於 sec (秒) 中選取 10。17.    選擇 Save (儲存)

建立用來停止已加上標籤的資料庫執行個體的 Lambda 函數

使用上一節建立 Lambda 函數來啟動標記資料庫叢集中的指示,以停止標記資料庫叢集。您必須進行以下變更:

Code source (程式碼來源) 編輯器中,刪除範例程式碼並貼上下列程式碼:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Stop DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster started. Stop it if eligible.
        if (db['Status'] == 'available'):
            doNotStop=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for cluster, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Stopping cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStop == 1):
                    doNotStop=1
            except Exception as e:
                print ("Cannot stop cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

執行函數測試

假設已加上標籤的資料庫叢集處於 Stopped (已停止) 狀態。若要執行函數測試,請執行下列作業:

1.    開啟 Lambda 函數清單。

2.    選擇您所建立來啟動資料庫叢集的函數。

3.    選擇 Actions (動作),然後選擇 Test (測試)。

4.    在 Test (測試) 標籤下,於 Name (名稱) 中輸入事件的名稱。

5.    選擇 Save changes (儲存變更),然後選擇 Test (測試)。

建立排程

假設已加上標籤的資料庫叢集每週維護時段為星期日 22:00 - 22:30。您可以為下列事件建立兩個規則來設定排程:

  • 在維護時段開始前 30 分鐘自動啟動資料庫叢集
  • 在維護時段結束後 30 分鐘自動停止資料庫叢集

若要建立規則以在維護時段開始前 30 分鐘自動啟動資料庫執行個體,請執行下列步驟:

1.    開啟 Lambda 函數清單。

2.    選擇您所建立來啟動資料庫執行個體的函數。

3.    在 Function overview (函數概觀) 下,選擇 Add trigger (新增觸發)。

4.    選取 EventBridge (CloudWatch Events) (EventBridge (CloudWatch 事件)),然後選取 Create a new rule (建立新規則)。

5.    在 Rule name (規則名稱) 中,輸入所要建立規則的名稱。

6.    在 Schedule Expression (排程表達式) 中,為自動的排程新增 cron 表達式 (範例:cron(30 21 ? * SUN *))。

7.    選擇 Add (新增)。

使用相同指示建立另一個規則,以便在維護時段結束 30 分鐘後自動停止資料庫叢集。請務必相應地變更自動排程的規則名稱和 cron 運算式 (範例:cron(00 23 ? * SUN *))。


相關資訊

如何讓 Amazon RDS 執行個體停止超過七天?

AWS 官方
AWS 官方已更新 1 年前