跳至內容

如何將 AWS DMS 錯誤日誌刪除程序自動化,以避免複寫執行個體進入儲存體已滿狀態?

2 分的閱讀內容
0

我想要將 AWS Database Migration Service (AWS DMS) 錯誤日誌刪除程序自動化,以便更頻繁地刪除。

簡短說明

如果 AWS DMS 錯誤日誌在 DMS 複寫執行個體中占用大量空間,則複寫執行個體可能會進入 storage-full 狀態。若要解決此問題,請刪除 DMS 任務的 DMS 任務錯誤日誌。

若要刪除 AWS DMS 任務的錯誤日誌,請使用下列其中一種方法:

  • AWS DMS 主控台
  • AWS Command Line Interface (AWS CLI)
  • API
  • Lambda 排程器

**注意:**有多種原因可能導致發生 storage-full 狀態。如需更多資訊,請參閱為什麼我的 AWS DMS 複寫資料庫執行個體處於 storage-full 狀態?

解決方法

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

使用 AWS DMS 主控台

若要手動刪除 DMS 任務錯誤日誌,請參閱如何開啟、存取或刪除 AWS DMS 的 CloudWatch 日誌?

使用 AWS CLI

若要使用 AWS CLI 修改任務設定並刪除 DMS 任務日誌,請執行 modify-replication-task 命令:

aws dms modify-replication-task --replication-task-arn <DMS task ARN> --replication-task-settings '{"Logging": { "DeleteTaskLogs": true}}'

此命令會變更 "DeleteTaskLogs": true 參數,以修改任務。在您使用此參數新增任務設定後,任務的所有日誌都會從複寫執行個體中刪除。在日誌刪除後,任務設定會移除 "DeleteTaskLogs": true 參數。在您執行此命令後,請確認日誌已從複寫執行個體中刪除。

若要定期刪除日誌,請使用 "DeleteTaskLogs": true 參數修改任務設定。您可以使用 cron 作業排程 modify-replication-task 定期執行。

使用 API

若要自動刪除 AWS DMS 任務日誌,請建立指令碼,讓它每天執行,或依您想要的頻率執行。下列範例使用 AWS Lambda 和 Python 程式碼,為提供的任務 ARN 將任務錯誤日誌刪除作業自動化。

設定 Lambda 函式

若要設定 Lambda 函式,請完成下列步驟:

1.    開啟 Lambda console (Lambda 主控台),然後選擇包含 DMS 資源的 AWS 區域。

2.    在 Functions (函式) 面板上,選擇 Create function (建立函式)。

3.    輸入 Function name (函式名稱)。

4.    對於 Runtime (執行時期),選擇 python 3.8

5.    對於 Change default execution role (變更預設執行角色),選擇 Create a new role with basic Lambda permissions (使用基本 Lambda 權限建立新角色)。記下 Lambda 建立的 AWS Identity and Access Management (IAM) 角色名稱。

6.    選擇 Create function (建立函式)。

7.    開啟 AWS IAM console (AWS IAM 主控台),然後開啟 Lambda 函式建立的 IAM 角色。

8.    若要 建立 IAM 政策,請使用下列 JSON。將範例任務 ARN 替換為您的任務 ARN:

{    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dms:ModifyReplicationTask"
            ],
            "Resource": "arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
        }
    ]
}

9.    將政策附加到 Lambda 函式建立的角色。

10.    開啟 Lambda console (Lambda 主控台),然後選擇您建立的 Lambda 函式。

11.    對於 Function code (函式程式碼),輸入下列程式碼,然後選擇 Deploy (部署):

import boto3import json
client = boto3.client('dms')
def lambda_handler(event, context):
    # specific task ARN
    taskarn = 'arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
    # modify the DMS task
    response = client.modify_replication_task(
        ReplicationTaskArn=taskarn,
        ReplicationTaskSettings='{"Logging": { "DeleteTaskLogs": true}}'
    )

12.    選擇 Test (測試),然後使用預設範本輸入 Event name (事件名稱)。

13.    選擇 Create (建立),然後再次選擇 Test (測試)。

DMS 任務狀態會變更為修改中。同時,複寫執行個體下的 DMS 任務錯誤日誌會遭到刪除。

使用 Lambda 排程器

若要使用 Lambda 排程器將 DMS 任務錯誤日誌自動化,請完成下列步驟:

  1. 開啟 Lambda console (Lambda 主控台),然後選擇您建立的 Lambda 函式。
  2. 對於 Designer (設計器),選擇 Add trigger (新增觸發程序)。
  3. 從下拉式清單中,選擇 EventBridge (Cloudwatch Events)
  4. 對於 Rule, (規則),選擇 Create a new rule (建立新規則)。
  5. 輸入 Rule name (規則名稱) 和 Rule description (規則描述)。
  6. 對於 Schedule expression (排程表達式),輸入 rate 表達式。如需更多資訊,請參閱 使用 rate 或 cron 的排程表達式
  7. 選擇 Add (新增)。

**注意:**您可以變更並最佳化此程式碼。您也可以使用 cron 作業或 Lambda 排程器,排程此指令碼定期執行。

AWS 官方已更新 3 年前