Altri casi d'uso per gli script pre e post - Amazon EBS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Altri casi d'uso per gli script pre e post

Oltre a utilizzare script pre e post per automatizzare gli snapshot coerenti con le applicazioni, è possibile utilizzarli insieme o singolarmente per automatizzare altre attività amministrative prima o dopo la creazione degli snapshot. Per esempio:

  • Mediante uno script pre per applicare le patch prima di creare gli snapshot. Questo può aiutarti a creare snapshot dopo aver applicato i regolari aggiornamenti software settimanali o mensili.

    Nota

    Se decidi di eseguire solo uno script pre, l'opzione Predefinito su snapshot crash-consistent è abilitata per impostazione predefinita.

  • Mediante uno script post per applicare le patch prima di creare gli snapshot. Questo può aiutarti a creare snapshot prima di applicare i regolari aggiornamenti software settimanali o mensili.

Guida introduttiva per altri casi d'uso

In questa sezione sono spiegati i passaggi da completare quando si utilizzano script pre e/o post per casi d'uso diversi dagli snapshot coerenti con l'applicazione.

Preparazione delle istanze di destinazione per script pre e/o post
  1. Installa l'agente SSM sulle istanze di destinazione, se non è già installato. Se l'agente SSM è già installato sulle istanze di destinazione, salta questo passaggio.

  2. Assicurati che l'agente SSM sia in esecuzione. Per ulteriori informazioni, consulta Verifica dello stato dell'agente SSM e avvio dell'agente.

  3. Configura Systems Manager per le istanze Amazon EC2. Per ulteriori informazioni, consulta Configurazione di Systems Manager per le istanze Amazon EC2 nella Guida per l'utente di AWS Systems Manager .

È necessario creare un documento di comandi SSM che includa gli script pre e/o post con i comandi che si desidera eseguire.

È possibile creare un documento SSM utilizzando il modello di documenti SSM vuoto riportato di seguito e aggiungendo i comandi degli script pre e post nelle sezioni appropriate del documento.

Tieni presente quanto segue:
  • È tua responsabilità assicurarti che il documento SSM esegua le azioni corrette e necessarie per il carico di lavoro.

  • Il documento SSM deve includere i campi obbligatori per allowedValues, tra cui pre-script, post-script e dry-run. Amazon Data Lifecycle Manager eseguirà comandi sull'istanza in base al contenuto di tali sezioni. Se il documento SSM non contiene queste sezioni, Amazon Data Lifecycle Manager lo considererà un'esecuzione non riuscita.

###===============================================================================### # 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."
Nota

Questo passaggio è necessario se:

  • Crei o aggiorni una policy di snapshot abilitata per script pre/post che utilizza un ruolo IAM personalizzato.

  • Si utilizza la riga di comando per creare o aggiornare una policy di snapshot abilitata per script pre/post che utilizza il ruolo predefinito.

Se utilizzi la console per creare o aggiornare una politica di snapshot pre/post abilitata agli script che utilizza il ruolo predefinito per la gestione delle istantanee (), salta questo passaggio. AWSDataLifecycleManagerDefaultRole In questo caso, alleghiamo automaticamente la policy a quel ruolo. AWSDataLifecycleManagerSSMFullAccess

Devi assicurarti che il ruolo IAM che usi per le policy conceda ad Amazon Data Lifecycle Manager l'autorizzazione a eseguire le azioni SSM necessarie per eseguire gli script pre e post sulle istanze oggetto della policy.

Amazon Data Lifecycle Manager fornisce una policy gestita (AWSDataLifecycleManagerSSMFullAccess) che include le autorizzazioni richieste. Puoi collegare questa policy al tuo ruolo IAM per la gestione degli snapshot per assicurarti che includa le autorizzazioni.

Importante

La policy AWSDataLifecycleManagerSSMFullAccess gestita utilizza la chiave di aws:ResourceTag condizione per limitare l'accesso a documenti SSM specifici quando si utilizzano script pre e post. Per consentire ad Amazon Data Lifecycle Manager di accedere ai documenti SSM, devi assicurarti che i tuoi documenti SSM siano etichettati con DLMScriptsAccess:true.

In alternativa, puoi creare manualmente una policy personalizzata o assegnare le autorizzazioni richieste direttamente al ruolo IAM utilizzato. È possibile utilizzare le stesse autorizzazioni definite nella politica AWSDataLifecycleManagerSSMFullAccess gestita, tuttavia la chiave di aws:ResourceTag condizione è facoltativa. Se decidi di non utilizzare quella chiave di condizione, non è necessario etichettare i documenti SSM con DLMScriptsAccess:true.

Utilizza uno dei seguenti metodi per aggiungere la AWSDataLifecycleManagerSSMFullAccesspolicy al tuo ruolo IAM.

Console
Collegamento della policy gestita al ruolo personalizzato
  1. Aprire la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel riquadro di navigazione, selezionare Ruoli.

  3. Cerca e seleziona il tuo ruolo personalizzato per la gestione degli snapshot.

  4. Nella scheda Autorizzazioni, scegli Aggiungi autorizzazioni, quindi Collega policy.

  5. Cerca e seleziona la policy AWSDataLifecycleManagerSSMFullAccessgestita, quindi scegli Aggiungi autorizzazioni.

AWS CLI
Collegamento della policy gestita al ruolo personalizzato

Usa il comando attach-role-policy. Per ---role-name, specifica il nome del tuo ruolo personalizzato. Per --policy-arn, specificare 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
Creazione di una policy del ciclo di vita dello snapshot
  1. Apri la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, scegliere Elastic Block Store, Lifecycle Manager, quindi selezionare Create lifecycle policy (Crea policy del ciclo di vita).

  3. Nella schermata Seleziona il tipo di policy, seleziona Policy di snapshot EBS e quindi Successivo.

  4. Nella sezione Risorse di destinazione, procedere come segue:

    1. Per Tipi di risorse di destinazione, scegli Instance.

    2. Per Tag delle risorse interessate, specifica i tag delle risorse che identificano le istanze di cui eseguire il backup. Verrà eseguito il backup solo delle risorse con i tag specificati.

  5. Per il ruolo IAM, scegli AWSDataLifecycleManagerDefaultRole(il ruolo predefinito per la gestione delle istantanee) o scegli un ruolo personalizzato che hai creato e preparato per le fasi precedenti e successive agli script.

  6. Configura le pianificazioni e le opzioni aggiuntive in base alla necessità. Si consiglia di pianificare gli orari di creazione degli snapshot per periodi di tempo corrispondenti al carico di lavoro, ad esempio durante le finestre di manutenzione.

  7. Nella sezione Script pre e post, seleziona Abilita script pre e post, quindi procedi come segue:

    1. Seleziona Documento SSM personalizzato.

    2. Per Opzione Automatizza, scegli l'opzione che corrisponde agli script che desideri eseguire.

    3. Per Documento SSM, seleziona il documento SSM che hai preparato.

  8. Configura le seguenti opzioni aggiuntive, se necessario:

    • Timeout dello script: il periodo di timeout dopo il quale Amazon Data Lifecycle Manager fallisce il tentativo di esecuzione dello script se non è stato completato. Se uno script non viene completato entro il periodo di timeout, Amazon Data Lifecycle Manager fallisce il tentativo. Il periodo di timeout si applica ai singoli script pre e post. Il periodo di timeout minimo e predefinito è 10 secondi. E il periodo massimo di timeout è di 120 secondi.

    • Riprova gli script non riusciti: seleziona questa opzione per riprovare gli script che non vengono completati entro il periodo di timeout. Se lo script preliminare fallisce, Amazon Data Lifecycle Manager riprova l'intero processo di creazione degli snapshot, inclusa l'esecuzione degli script pre e post. Se lo script post fallisce, Amazon Data Lifecycle Manager riprova solo lo script post; in questo caso, lo script pre sarà completato e lo snapshot potrebbe essere stato creato.

    • Predefinito su snapshot crash-consistent: seleziona questa opzione per impostare come impostazione predefinita gli snapshot crash-consistent se lo script pre non viene eseguito. Questo è il comportamento di creazione di snapshot predefinito per Amazon Data Lifecycle Manager se gli script pre e post non sono abilitati. Se hai abilitato i nuovi tentativi, Amazon Data Lifecycle Manager utilizzerà per impostazione predefinita gli snapshot crash-consistent solo dopo aver esaurito tutti i tentativi. Se lo script pre non riesce e per impostazione predefinita non utilizzi snapshot crash-consistent, Amazon Data Lifecycle Manager non creerà gli snapshot per l'istanza durante l'esecuzione della pianificazione.

  9. Scegli Crea policy predefinita.

    Nota

    Se viene restituito l'errore Role with name AWSDataLifecycleManagerDefaultRole already exists, consulta Risoluzione dei problemi per ulteriori informazioni.

AWS CLI
Creazione di una policy del ciclo di vita dello snapshot

Usa il comando create-lifecycle-policy e includi i parametri Scripts in CreateRule. Per ulteriori informazioni sui parametri, consulta la Documentazione di riferimento delle API di Amazon Data Lifecycle Manager.

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

Dove policyDetails.json include quanto segue.

{ "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 } }] }