

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Outros casos de uso de pré-scripts e pós-scripts
<a name="script-other-use-cases"></a>

Além de usar scripts prévios e posteriores para automatizar snapshots consistentes com a aplicação, você pode usar os scripts prévios e posteriores juntos ou individualmente para automatizar outras tarefas administrativas antes ou depois da criação do snapshot. Por exemplo:
+ Usar um script prévio para aplicar patches antes de criar os snapshots. Isso pode ajudar você a criar snapshots depois de aplicar as atualizações regulares de software semanais ou mensais.
**nota**  
Se você escolher executar somente um script prévio, a opção **Usar o padrão de snapshots consistentes em caso de falha** será habilitada por padrão.
+ Usar um script posterior para aplicar patches após a criação de snapshots. Isso pode ajudar você a criar snapshots antes de aplicar suas atualizações regulares de software semanais ou mensais.

## Introdução a outros casos de uso
<a name="dlm-script-other"></a>

Esta seção explica as etapas que você precisa executar ao usar scripts de and/or pré-publicação para **casos de uso que não sejam instantâneos consistentes com o aplicativo**.

### Etapa 1: preparar as instâncias-alvo
<a name="dlm-script-other-prep-instance"></a>

**Para preparar suas instâncias de destino para scripts and/or pré-publicação**

1. Instale o SSM Agent nas instâncias-alvo, se ainda não estiver instalado. Se o SSM Agent já estiver instalado em suas instâncias-alvo, pule esta etapa. 
   + (Instâncias do Linux) [Instalar o SSM Agent manualmente em instâncias do EC2 para Linux](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)
   + (Instâncias do Windows) [Trabalhar com o SSM Agent em instâncias do EC2 para Windows Server](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-windows.html)

1. Certifique-se de que o SSM Agent esteja em execução. Para obter mais informações, consulte [Verificar o status do SSM Agent e iniciar o agente](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-status-and-restart.html).

1. Configure o Systems Manager para instâncias do Amazon EC2. Para obter mais informações, consulte [Configuração do Systems Manager para instâncias Amazon EC2](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html) no *AWS Systems Manager Guia do usuário do *.

### Etapa 2: preparar o documento do SSM
<a name="dlm-script-other-prep-document"></a>

Você deve criar um documento de comando SSM que inclua os scripts de and/or pré-publicação com os comandos que você deseja executar.

Você pode criar um documento do SSM usando o modelo de documento do SSM em branco abaixo e adicionar os comandos de script prévio e posterior nas seções apropriadas do documento.

**Observe o seguinte:**  
É sua responsabilidade garantir que o documento do SSM realize as ações corretas e necessárias para a sua workload.
O documento do SSM deve incluir os campos obrigatórios para `allowedValues`, incluindo `pre-script`, `post-script` e `dry-run`. O Amazon Data Lifecycle Manager executará os comandos na instância com base no conteúdo dessas seções. Se o documento do SSM não tiver essas seções, o Amazon Data Lifecycle Manager o tratará como uma execução que falhou.

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

### Etapa 3: preparar o perfil do IAM do Amazon Data Lifecycle Manager
<a name="dlm-script-other-prep-role"></a>

**nota**  
Essa etapa é necessária se:  
Você cria ou atualiza uma política pre/post de snapshot habilitada por script que usa uma função personalizada do IAM.
Você usa a linha de comando para criar ou atualizar uma política de snapshot pre/post habilitada por script que usa o padrão.
Se você usar o console para criar ou atualizar uma política de snapshot pre/post habilitada por script que usa a função padrão para gerenciar snapshots (**AWSDataLifecycleManagerDefaultRole**), pule esta etapa. Nesse caso, anexamos automaticamente a política de **AWSDataLifecycleManagerSSMFullacesso** a essa função.

Você deve garantir que o perfil do IAM que você usa para a política conceda ao Amazon Data Lifecycle Manager permissão para realizar as ações do SSM necessárias para executar scripts prévios e posteriores nas instâncias-alvo da política.

O Amazon Data Lifecycle Manager fornece uma política gerenciada (**AWSDataLifecycleManagerSSMFullAccess**) que inclui as permissões necessárias. Você pode anexar essa política ao perfil do IAM para gerenciar snapshots e garantir que ela inclua as permissões.

**Importante**  
A política gerenciada de AWSData LifecycleManager SSMFull acesso usa a chave de `aws:ResourceTag` condição para restringir o acesso a documentos SSM específicos ao usar scripts anteriores e posteriores. Para permitir que o Amazon Data Lifecycle Manager acesse os documentos do SSM, você deve garantir que eles estejam marcados com `DLMScriptsAccess:true`.

Ou então, você pode criar manualmente uma política personalizada ou atribuir as permissões necessárias diretamente ao perfil do IAM que você usa. Você pode usar as mesmas permissões definidas na política gerenciada do AWSData LifecycleManager SSMFull Access, no entanto, a chave de `aws:ResourceTag` condição é opcional. Se você decidir não usar essa chave de condição, não precisará marcar os documentos do SSM com `DLMScriptsAccess:true`.

Use um dos métodos a seguir para adicionar a política de **AWSDataLifecycleManagerSSMFullacesso** à sua função do IAM.

------
#### [ Console ]

**Para anexar a política gerenciada ao seu perfil personalizado**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, selecione **Roles** (Funções).

1. Pesquise e selecione o perfil personalizado para gerenciar os snapshots.

1. Na guia **Permissões**, escolha **Adicionar permissões**, **Anexar políticas**.

1. Pesquise e selecione a política gerenciada do **AWSDataLifecycleManagerSSMFullAccess** e escolha **Adicionar permissões**.

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

**Para anexar a política gerenciada ao seu perfil personalizado**  
Use o comando [ da attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html). Para `---role-name`, especifique o nome do seu perfil personalizado. Em `--policy-arn`, especifique `arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess`.

```
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess \
--role-name your_role_name
```

------

### Criar uma política de ciclo de vida de snapshots
<a name="dlm-script-other-prep-policy"></a>

------
#### [ Console ]

**Para criar uma política de ciclo de vida de snapshots**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Elastic Block Store**, **Lifecycle Manager** ((Gerenciador de ciclo de vida) e **Create snapshot lifecycle policy** (Criar política de ciclo de vida de snapshot).

1. Na tela **Select policy type** (Selecionar tipo de política), escolha **EBS snapshot policy** (Política de snapshot do EBS) e depois **Next** (Próximo).

1. Na seção **Target resources** (Recursos de destino), faça o seguinte:

   1. Para **Tipos de recursos-alvo**, escolha `Instance`.

   1. Para **Tags de recurso-alvo**, especifique as tags de recurso que identificam as instâncias para backup. Só será feito backup dos recursos que têm as tags especificadas.

1. Para a **função do IAM**, escolha **AWSDataLifecycleManagerDefaultRole**(a função padrão para gerenciar instantâneos) ou escolha uma função personalizada que você criou e preparou para scripts anteriores e posteriores.

1. Configure as agendas e as opções adicionais conforme necessário. Recomendamos que você agende a criação dos snapshots para períodos que atendam à sua workload, como durante janelas de manutenção.

1. Na seção **Scripts prévios e posteriores**, selecione **Habilitar scripts prévios e posteriores** e depois faça o seguinte:

   1. Selecione **Documento do SSM personalizado**.

   1. Para **Opção de automatização**, escolha a opção que corresponde aos scripts que você deseja executar.

   1. Para **Documento do SSM**, selecione o documento do SSM que você preparou.

1. Configure as seguintes opções adicionais se necessário:
   + **Tempo limite do script**: o período limite após o qual o Amazon Data Lifecycle Manager considera que a tentativa de execução do script falhou se ela não foi concluída. Se um script não for concluído dentro do período limite, o Amazon Data Lifecycle Manager considerará que a tentativa falhou. O período de tempo limite se aplica aos scripts prévios e posteriores individualmente. O limite de tempo mínimo e padrão é de 10 segundos. E o tempo limite máximo é de 120 segundos.
   + **Tentar os scripts com falha novamente**: selecione essa opção para fazer novas tentativas de executar os scripts que não forem concluídos dentro do período de tempo limite. Se o script prévio falhar, o Amazon Data Lifecycle Manager tentará realizar novamente todo o processo de criação de snapshots, incluindo a execução dos scripts prévios e posteriores. Se o script posterior falhar, o Amazon Data Lifecycle Manager fará nova tentativa de executar apenas o script posterior; nesse caso, o script prévio estará sido concluído e o snapshot poderá ter sido criado.
   + **Usar o padrão de snapshots consistentes em caso de falha**: selecione essa opção para usar padrão de snapshots consistentes em caso de falha se a execução do script prévio falhar. Esse é o comportamento padrão da criação de snapshots para o Amazon Data Lifecycle Manager se os scripts prévios e posteriores não estiverem habilitados. Se você habilitou novas tentativas, o Amazon Data Lifecycle Manager só usará o padrão de snapshots consistentes em caso de falha após esgotar o todas as tentativas. Se o script prévio falhar e você não usar o padrão de snapshots consistentes em caso de falha, o Amazon Data Lifecycle Manager não criará snapshots para a instância durante da execução agendada.

1. Escolha **Criar política padrão**.
**nota**  
Se receber um erro `Role with name AWSDataLifecycleManagerDefaultRole already exists`, consulte [Solucionar problemas do Amazon Data Lifecycle Manager](dlm-troubleshooting.md) para obter mais informações.

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

**Para criar uma política de ciclo de vida de snapshots**  
Use o [create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html)comando e inclua os `Scripts` parâmetros em`CreateRule`. Para obter mais informações sobre os parâmetros, consulte [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
```

Em que `policyDetails.json` inclui o seguinte:

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

------