

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 degli script pre e post di Data Lifecycle Manager
<a name="script-other-use-cases"></a>

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. 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
<a name="dlm-script-other"></a>

Questa sezione spiega i passaggi da eseguire quando si utilizzano script pre and/or post per **casi d'uso diversi** dagli snapshot coerenti con l'applicazione.

### Fase 1: Preparazione delle istanze di destinazione
<a name="dlm-script-other-prep-instance"></a>

**Per preparare le istanze di destinazione per gli script pre post and/or**

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. 
   + (Istanze Linux) [Installazione manuale di SSM Agent su](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html) istanze EC2 per Linux
   + (Istanze Windows) [Utilizzo di SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-windows.html) su istanze EC2 per Windows Server

1. Assicurati che l'agente SSM sia in esecuzione. Per ulteriori informazioni, consulta [Verifica dello stato dell'agente SSM e avvio dell'agente](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-status-and-restart.html).

1. Configura Systems Manager per le istanze Amazon EC2. Per ulteriori informazioni, consulta [Configurazione di Systems Manager per le istanze Amazon EC2](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html) nella *Guida per l'utente di AWS Systems Manager *.

### Fase 2: Preparazione del documento SSM
<a name="dlm-script-other-prep-document"></a>

È necessario creare un documento di comando SSM che includa gli script pre and/or 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.

**Tenere 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."
```

### Fase 3: Preparazione del ruolo IAM di Amazon Data Lifecycle Manager
<a name="dlm-script-other-prep-role"></a>

**Nota**  
Questo passaggio è necessario se:  
Crei o aggiorni una policy di snapshot pre/post abilitata agli script che utilizza un ruolo IAM personalizzato.
Si utilizza la riga di comando per creare o aggiornare una policy di snapshot pre/post abilitata agli script che utilizza quella predefinita.
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, associamo automaticamente la politica di **AWSDataLifecycleManagerSSMFullaccesso** a quel ruolo.

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 gestita di AWSData LifecycleManager SSMFull Access 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 gestita di AWSData LifecycleManager SSMFull Access, 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 policy di **AWSDataLifecycleManagerSSMFullaccesso** 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/](https://console.aws.amazon.com/iam/).

1. Nel riquadro di navigazione, selezionare **Ruoli**.

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

1. Nella scheda **Autorizzazioni**, scegli **Aggiungi autorizzazioni**, quindi **Collega policy**.

1. Cerca e seleziona la policy gestita di **AWSDataLifecycleManagerSSMFullAccess**, quindi scegli **Aggiungi autorizzazioni**.

------
#### [ AWS CLI ]

**Collegamento della policy gestita al ruolo personalizzato**  
Utilizza il comando [ attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html). 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
```

------

### Creazione di una policy del ciclo di vita dello snapshot
<a name="dlm-script-other-prep-policy"></a>

------
#### [ 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/](https://console.aws.amazon.com/ec2/).

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

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

1. Nella sezione **Risorse di destinazione**, procedere come segue:

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

   1. 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.

1. 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 la fase precedente e successiva agli script.

1. 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.

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

   1. Seleziona **Documento SSM personalizzato**.

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

   1. Per **Documento SSM**, seleziona il documento SSM che hai preparato.

1. 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.

1. Scegli **Crea policy predefinita**.
**Nota**  
Se viene restituito l'errore `Role with name AWSDataLifecycleManagerDefaultRole already exists`, consulta [Risolvi i problemi relativi ad Amazon Data Lifecycle Manager](dlm-troubleshooting.md) per ulteriori informazioni.

------
#### [ AWS CLI ]

**Creazione di una policy del ciclo di vita dello snapshot**  
Usa il [create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html)comando e includi i `Scripts` parametri in. `CreateRule` Per ulteriori informazioni sui parametri, consulta la [https://docs.aws.amazon.com/dlm/latest/APIReference/API_Script.html](https://docs.aws.amazon.com/dlm/latest/APIReference/API_Script.html).

```
$ 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
        }
    }]
}
```

------