Data Lifecycle Manager 指令碼前後的其他使用案例 - Amazon EBS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Data Lifecycle Manager 指令碼前後的其他使用案例

除了使用前置和後置指令碼來自動執行應用程式一致快照之外,您也可以同時或分別使用前置和後置指令碼,以便在建立快照之前或之後自動執行其他管理工作。例如:

  • 使用前置指令碼以在建立快照前套用修補程式。這可協助您在套用每週或每月定期軟體更新後建立快照。

    注意

    如果您選擇僅執行前置指令碼,預設情況下會啟用預設為當機一致快照

  • 使用後置指令碼以在建立快照後套用修補程式。這可協助您在套用每週或每月定期軟體更新前建立快照。

開始使用其他使用案例

本節說明若要在應用程式一致快照以外的使用案例中使用前置和/或後置指令碼,您需要執行的步驟。

為前置和/或後置指令碼準備目標執行個體
  1. 如果尚未安裝SSM代理程式,請在目標執行個體上安裝代理程式。如果SSM代理程式已安裝在您的目標執行個體上,請略過此步驟。

  2. 確保SSM代理程式正在執行。如需詳細資訊,請參閱檢查SSM客服人員狀態和啟動客服人員

  3. 為 Amazon EC2執行個體設定 Systems Manager。如需詳細資訊,請參閱 AWS Systems Manager 使用者指南 中的為 Amazon EC2執行個體設定 Systems Manager

您必須建立SSM命令文件,其中包含包含要執行之命令的前置和/或後置指令碼。

您可以使用下方的空白SSM文件範本建立文件,並在適當的SSM文件區段中新增指令碼前和後命令。

注意下列事項:
  • 您有責任確保SSM文件為您的工作負載執行正確且必要的動作。

  • SSM 文件必須包含 的必要欄位allowedValues,包括 pre-scriptpost-scriptdry-run。Amazon Data Lifecycle Manager 會根據這些區段的內容,在執行個體上執行命令。如果您的SSM文件沒有這些區段,Amazon Data Lifecycle Manager 會將文件視為執行失敗。

###===============================================================================### # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # Permission is hereby granted, free of charge, to any person obtaining a copy of this # software and associated documentation files (the "Software"), to deal in the Software # without restriction, including without limitation the rights to use, copy, modify, # merge, publish, distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ###===============================================================================### schemaVersion: '2.2' description: SSM Document Template for Amazon Data Lifecycle Manager Pre/Post script feature parameters: executionId: type: String default: None description: (Required) Specifies the unique identifier associated with a pre and/or post execution allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$ command: # Data Lifecycle Manager will trigger the pre-script and post-script actions during policy execution. # 'dry-run' option is intended for validating the document execution without triggering any commands # on the instance. The following allowedValues will allow Data Lifecycle Manager to successfully # trigger pre and post script actions. type: String default: 'dry-run' description: (Required) Specifies whether pre-script and/or post-script should be executed. allowedValues: - pre-script - post-script - dry-run mainSteps: - action: aws:runShellScript description: Run Database freeze/thaw commands name: run_pre_post_scripts precondition: StringEquals: - platformType - Linux inputs: runCommand: - | #!/bin/bash ###===============================================================================### ### Error Codes ###===============================================================================### # The following Error codes will inform Data Lifecycle Manager of the type of error # and help guide handling of the error. # The Error code will also be emitted via AWS Eventbridge events in the 'cause' field. # 1 Pre-script failed during execution - 201 # 2 Post-script failed during execution - 202 # 3 Auto thaw occurred before post-script was initiated - 203 # 4 Pre-script initiated while post-script was expected - 204 # 5 Post-script initiated while pre-script was expected - 205 # 6 Application not ready for pre or post-script initiation - 206 ###===============================================================================### ### Global variables ###===============================================================================### START=$(date +%s) # For testing this script locally, replace the below with OPERATION=$1. OPERATION={{ command }} # Add all pre-script actions to be performed within the function below execute_pre_script() { echo "INFO: Start execution of pre-script" } # Add all post-script actions to be performed within the function below execute_post_script() { echo "INFO: Start execution of post-script" } # Debug logging for parameters passed to the SSM document echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}" # Based on the command parameter value execute the function that supports # pre-script/post-script operation case ${OPERATION} in pre-script) execute_pre_script ;; post-script) execute_post_script ;; dry-run) echo "INFO: dry-run option invoked - taking no action" ;; *) echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run." exit 1 # return failure ;; esac END=$(date +%s) # Debug Log for profiling the script time echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
注意

在下列情況中,需執行此步驟:

  • 您可以使用自訂IAM角色建立或更新啟用指令碼的前後快照政策。

  • 您可以使用命令列建立或更新使用預設值且已啟用前置/後置指令碼的快照政策。

如果您使用主控台建立或更新啟用指令碼的快照政策,該政策使用預設角色來管理快照 (AWSDataLifecycleManagerDefaultRole),請略過此步驟。在此情況下,我們會自動將AWSDataLifecycleManagerSSMFullAccess政策連接至該角色。

您必須確保用於政策IAM的角色授予 Amazon Data Lifecycle Manager 許可,以執行在政策目標執行個體上執行指令碼前和後所需的SSM動作。

Amazon Data Lifecycle Manager 提供包含必要許可的受管政策 (AWSDataLifecycleManagerSSMFullAccess)。您可以將此政策連接至您的IAM角色來管理快照,以確保它包含 許可。

重要

AWSDataLifecycleManagerSSMFullAccess 受管政策使用 aws:ResourceTag 條件索引鍵,限制使用指令碼前後存取特定SSM文件。若要允許 Amazon Data Lifecycle Manager 存取SSM文件,您必須確保您的SSM文件已標記 DLMScriptsAccess:true

或者,您可以手動建立自訂政策,或直接將所需的許可指派給您使用IAM的角色。您可以使用受 AWSDataLifecycleManagerSSMFullAccess 管政策中定義的相同許可,但aws:ResourceTag條件索引鍵是選用的。如果您決定不使用該條件索引鍵,則不需要使用 標記SSM文件DLMScriptsAccess:true

使用下列其中一種方法來將AWSDataLifecycleManagerSSMFullAccess政策新增至您的IAM角色。

Console
將受管政策連接至自訂角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

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

  3. 搜尋並選取您要管理快照的自訂角色。

  4. 許可索引標籤上,依序選擇新增許可連接政策

  5. 搜尋並選取AWSDataLifecycleManagerSSMFullAccess受管政策,然後選擇新增許可

AWS CLI
將受管政策連接至自訂角色

使用 attach-role-policy命令。在 ---role-name 指定自訂角色的名稱。對於 --policy-arn,請指定 arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess

$ aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess \ --role-name your_role_name
Console
建立快照生命週期政策
  1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格中,選擇 Elastic Block StoreLifecycle Manager (生命週期管理員),然後選擇 Create lifecycle policy (建立生命週期政策)

  3. 選取政策類型畫面上,選擇EBS快照政策,然後選擇下一個

  4. Target resources (目標資源) 區段中,執行下列動作:

    1. 針對目標資源類型,選擇 Instance

    2. 目標資源標籤,指定用來識別待備份磁碟區或執行個體的資源標籤。系統只會備份具有指定標籤的資源。

  5. 對於IAM角色 ,請選擇 AWSDataLifecycleManagerDefaultRole(用於管理快照的預設角色),或選擇您為指令碼前後建立和準備的自訂角色。

  6. 根據需要設定排程和其他選項。建議您針對配合工作負載的期間 (例如維護時段) 排程快照建立時間。

  7. 前置和後置指令碼區段中,選取啟用前置和後置指令碼,然後執行下列操作:

    1. 選取自訂SSM文件

    2. 自動執行選項選擇與您要執行的指令碼相符的選項。

    3. 針對SSM文件 ,選取您準備SSM的文件。

  8. 視需要設定下列其他選項:

    • 指令碼逾時:此逾時期間過後,如果指令碼未完成,Amazon Data Lifecycle Manager 的指令碼執行嘗試就會失敗。如果指令碼沒有在逾時期間內完成,Amazon Data Lifecycle Manager 的嘗試就會失敗。逾時期限會分別套用至前置和後置指令碼。最低和預設逾時期間為 10 秒。最大逾時期間為 120 秒。

    • 重試失敗的指令碼:選取此選項可重試在逾時期間內未完成的指令碼。如果前置指令碼失敗,Amazon Data Lifecycle Manager 會重試整個快照建立程序,包括執行前置和後置指令碼。如果後置指令碼失敗,Amazon Data Lifecycle Manager 只會重試後置指令碼;在此情況下,前置指令碼應該已完成,而且快照可能已建立。

    • 預設為當機一致快照:選取此選項可在前置指令碼執行失敗時,預設為當機一致快照。如果未啟用前置和後置指令碼,這是 Amazon Data Lifecycle Manager 的預設快照建立行為。如果您啟用重試功能,Amazon Data Lifecycle Manager 只會在用盡所有重試嘗試次數之後,才會預設為當機一致快照。如果前置指令碼失敗,且您沒有預設為當機一致快照,Amazon Data Lifecycle Manager 就不會在該排程執行期間為執行個體建立快照。

  9. 選擇建立預設政策

    注意

    如果出現 Role with name AWSDataLifecycleManagerDefaultRole already exists 錯誤,請參閱 對 Amazon Data Lifecycle Manager 問題進行故障診斷 以取得更多資訊。

AWS CLI
建立快照生命週期政策

使用 create-lifecycle-policy命令,並在 中包含 Scripts 參數CreateRule。如需參數的詳細資訊,請參閱 Amazon Data Lifecycle Manager API參考

$ aws dlm create-lifecycle-policy \ --description "policy_description" \ --state ENABLED \ --execution-role-arn iam_role_arn \ --policy-details file://policyDetails.json

policyDetails.json 包括以下項目。

{ "PolicyType": "EBS_SNAPSHOT_MANAGEMENT", "ResourceTypes": [ "INSTANCE" ], "TargetTags": [{ "Key": "tag_key", "Value": "tag_value" }], "Schedules": [{ "Name": "schedule_name", "CreateRule": { "CronExpression": "cron_for_creation_frequency", "Scripts": [{ "Stages": ["PRE" | "POST" | "PRE","POST"], "ExecutionHandlerService":"AWS_SYSTEMS_MANAGER", "ExecutionHandler":"ssm_document_name|arn", "ExecuteOperationOnScriptFailure":true|false, "ExecutionTimeout":timeout_in_seconds (10-120), "MaximumRetryCount":retries (0-3) }] }, "RetainRule": { "Count": retention_count } }] }