Outros casos de uso para scripts prévios e posteriores - Amazon EBS

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 para scripts prévios e posteriores

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

Esta seção explica as etapas que você precisa realizar ao usar scripts prévios e/ou scripts posteriores para outros casos de uso que não sejam de snapshots consistentes com a aplicação.

Para preparar as instâncias-alvo para scripts prévios e/ou posteriores
  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.

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

  3. 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 no AWS Systems Manager Guia do usuário do .

Você deve criar um documento de comando do SSM que inclua os scripts prévios e/ou posteriores 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."
nota

Essa etapa é necessária se:

  • Você criar ou atualizar uma política de snapshot habilitada para script prévio/posterior que usa um perfil do IAM personalizado.

  • Você usar a linha de comando para criar ou atualizar uma política de snapshot habilitado para script prévio/posterior.

Se você usar o console para criar ou atualizar uma política de instantâneos ativada antes e depois do script que usa a função padrão para gerenciar snapshots () AWSDataLifecycleManagerDefaultRole, pule esta etapa. Nesse caso, anexamos automaticamente a AWSDataLifecycleManagerSSMFullAccesspolítica 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 AWSDataLifecycleManagerSSMFullAccess gerenciada 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 AWSDataLifecycleManagerSSMFullAccess gerenciada, 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 AWSDataLifecycleManagerSSMFullAccesspolítica à sua função do IAM.

Console
Para anexar a política gerenciada ao seu perfil personalizado
  1. Abra o console IAM em https://console.aws.amazon.com/iam/.

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

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

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

  5. Pesquise e selecione a política AWSDataLifecycleManagerSSMFullAccessgerenciada e, em seguida, escolha Adicionar permissões.

AWS CLI
Para anexar a política gerenciada ao seu perfil personalizado

Use o comando attach-role-policy. 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
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/.

  2. 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).

  3. 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).

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

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

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

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

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

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

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

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

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

  9. Escolha Criar política padrão.

    nota

    Se receber um erro Role with name AWSDataLifecycleManagerDefaultRole already exists, consulte Solução de problemas para obter mais informações.

AWS CLI
Para criar uma política de ciclo de vida de snapshots

Use o comando create-lifecycle-policy e inclua os parâmetros de Scripts em CreateRule. Para obter mais informações sobre os parâmetros, consulte Amazon Data Lifecycle Manager API Reference.

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