Otros casos de uso de scripts previos y posteriores en Data Lifecycle Manager - Amazon EBS

Otros casos de uso de scripts previos y posteriores en Data Lifecycle Manager

Además de utilizar scripts previos y posteriores para automatizar las instantáneas coherentes con la aplicación, puede utilizarlos de forma conjunta o individual para automatizar otras tareas administrativas antes o después de la creación de las instantáneas. Por ejemplo:

  • Puede usar un script previo para aplicar las revisiones antes de crear las instantáneas. Esto puede ser de utilidad para crear instantáneas después de aplicar las actualizaciones de software semanales o mensuales habituales.

    nota

    Si opta por ejecutar solo un script previo, la opción Instantáneas coherentes ante bloqueos predeterminadas está habilitada de forma predeterminada.

  • Puede usar un script posterior para aplicar las revisiones después de crear las instantáneas. Esto puede ser de utilidad para crear instantáneas antes de aplicar las actualizaciones de software semanales o mensuales habituales.

Introducción para otros casos de uso

En esta sección se explican los pasos que hay que seguir cuando se utilizan scripts previos o posteriores para casos de uso distintos de las instantáneas coherentes con la aplicación.

Preparación de las instancias de destino para los scripts previos o posteriores
  1. Instale SSM Agent en las instancias de destino, si aún no está instalado. Si SSM Agent ya está instalado en las instancias de destino, omita este paso.

  2. Asegúrese de que SSM Agent esté en ejecución. Para obtener más información, consulte Verificación del estado de SSM Agent e inicio del agente.

  3. Configure Systems Manager para instancias de Amazon EC2. Para obtener más información, consulte Configuración de Systems Manager para instancias de Amazon EC2 en la Guía del usuario de AWS Systems Manager.

Debe crear un documento de comandos de SSM que incluya los scripts previos o posteriores con los comandos que desee ejecutar.

Puede crear un documento de SSM utilizando la plantilla de documento de SSM vacía que aparece a continuación y agregar los comandos previos y posteriores al script en las secciones del documento correspondientes.

Tenga en cuenta lo siguiente:
  • Es su responsabilidad asegurarse de que el documento de SSM realice las acciones correctas y necesarias para su carga de trabajo.

  • El documento de SSM debe incluir los campos obligatorios para allowedValues, incluidos pre-script, post-script y dry-run. Amazon Data Lifecycle Manager ejecutará comandos en la instancia en función del contenido de esas secciones. Si su documento de SSM no incluye esas secciones, Amazon Data Lifecycle Manager lo considerará una ejecución fallida.

###===============================================================================### # 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

Este paso es necesario si:

  • Debe crear o actualizar una política de instantáneas con scripts previos o posteriores que utilice un rol de IAM personalizado.

  • La línea de comandos se utiliza para crear o actualizar una política de instantáneas habilitada para scripts previos o posteriores que utilice el rol predeterminado.

Si usa la consola para crear o actualizar una política de instantáneas habilitada para scripts previos o posteriores que utilice el rol predeterminado para administrar las instantáneas (AWSDataLifecycleManagerDefaultRole), omita este paso. En este caso, asociamos automáticamente la política AWSDataLifecycleManagerSSMFullAccess a ese rol.

Debe asegurarse de que el rol de IAM que utilice para la política conceda permiso a Amazon Data Lifecycle Manager para realizar las acciones de SSM necesarias para ejecutar scripts previos y posteriores en las instancias incluidas en la política.

Amazon Data Lifecycle Manager proporciona una política administrada (AWSDataLifecycleManagerSSMFullAccess) que incluye los permisos necesarios. Puede asociar esta política a su rol de IAM para administrar las instantáneas y asegurarse de que incluya los permisos.

importante

La política administrada AWSDataLifecycleManagerSSMFullAccess utiliza la clave de condición aws:ResourceTag para restringir el acceso a documentos de SSM específicos cuando se utilizan scripts previos y posteriores. Para permitir que Amazon Data Lifecycle Manager acceda a los documentos de SSM, debe asegurarse de que sus documentos de SSM estén etiquetados con DLMScriptsAccess:true.

Como alternativa, puede crear manualmente una política personalizada o asignar los permisos necesarios directamente al rol de IAM que utilice. Puede usar los mismos permisos que se definen en la política administrada AWSDataLifecycleManagerSSMFullAccess; sin embargo, la clave de condición aws:ResourceTag es opcional. Si decide no utilizar esa clave de condición, no tendrá que etiquetar sus documentos de SSM con DLMScriptsAccess:true.

Utilice uno de los métodos siguientes para agregar la política AWSDataLifecycleManagerSSMFullAccess al rol de IAM.

Console
Asociación de la política administrada a su rol personalizado
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, elija Roles.

  3. Busque y seleccione el rol personalizado para administrar instantáneas.

  4. En la pestaña Permisos, elija Agregar permisos, Asociar políticas.

  5. Busque y seleccione la política administrada AWSDataLifecycleManagerSSMFullAccess y, a continuación, elija Agregar permisos.

AWS CLI
Asociación de la política administrada a su rol personalizado

Utilice el comando attach-role-policy. En ---role-name, especifique el nombre de su rol personalizado. En --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
Creación de una política de ciclo de vida de las instantáneas
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, elija Elastic Block Store, Lifecycle Manager (Administrador de ciclo de vida) y, a continuación, Create lifecycle policy (Crear política de ciclo de vida).

  3. En la pantalla Select policy type (Seleccionar el tipo de política), elija EBS snapshot policy (Política de instantáneas de EBS) y, luego, seleccione Next (Siguiente).

  4. En la sección Target resources (Recursos de destino), haga lo siguiente:

    1. En Tipos de recursos de destino, elija Instance.

    2. En Etiquetas de recursos de destino, especifique las etiquetas de recursos que identifican las instancias de las que se va a realizar una copia de seguridad. Solo se realizará una copia de seguridad de los recursos que tengan las etiquetas especificadas.

  5. En Rol de IAM, elija AWSDataLifecycleManagerDefaultRole (el rol predeterminado para administrar las instantáneas) o elija un rol personalizado que haya creado y preparado para los scripts previos y posteriores.

  6. Configure las programaciones y las opciones adicionales según sea necesario. Le recomendamos que programe las horas de creación de las instantáneas para periodos de tiempo que coincidan con su carga de trabajo; por ejemplo, durante los periodos de mantenimiento.

  7. En la sección Scripts previos y posteriores, seleccione Habilitar scripts previos y posteriores y, a continuación, haga lo siguiente:

    1. Seleccione Documento de SSM personalizado.

    2. En Automatizar opción, elija la opción que coincida con los scripts que desee ejecutar.

    3. En Documento de SSM, seleccione el documento de SSM que ha preparado.

  8. Configure las siguientes opciones adicionales si es necesario:

    • Tiempo de espera del script: es el periodo de espera tras el cual Amazon Data Lifecycle Manager no logra ejecutar el script si no se ha completado. Si un script no se completa dentro de su periodo de espera, Amazon Data Lifecycle Manager devuelve un error. El periodo de espera se aplica individualmente a los scripts previos y posteriores. El valor mínimo y predeterminado del periodo de espera es de 10 segundos. Y el periodo de espera máximo es de 120 segundos.

    • Reintentar los scripts fallidos: seleccione esta opción para volver a intentar ejecutar los scripts que no se completen dentro del periodo de espera. Si el script previo falla, Amazon Data Lifecycle Manager vuelve a intentar todo el proceso de creación de instantáneas, incluida la ejecución de los scripts previos y posteriores. Si se produce un error en el script posterior, Amazon Data Lifecycle Manager vuelve a intentarlo únicamente con el script posterior; en este caso, el script previo se habrá completado y es posible que se haya creado la instantánea.

    • Instantáneas coherentes ante bloqueos predeterminadas: seleccione esta opción para utilizar de forma predeterminada las instantáneas coherentes ante bloqueos si el script previo no se ejecuta. Este es el comportamiento de creación de instantáneas predeterminado para Amazon Data Lifecycle Manager si los scripts previos y posteriores no están habilitados. Si ha habilitado los reintentos, Amazon Data Lifecycle Manager utilizará de forma predeterminada las instantáneas coherentes ante bloqueos solo después de que se hayan agotado todos los reintentos. Si el script previo falla y no utiliza de forma predeterminada instantáneas coherentes ante bloqueos, Amazon Data Lifecycle Manager no creará instantáneas para la instancia durante esa ejecución programada.

  9. Elija Crear política predeterminada.

    nota

    Si detecta un error Role with name AWSDataLifecycleManagerDefaultRole already exists, consulte Solucionar problemas de Amazon Data Lifecycle Manager para obtener más información.

AWS CLI
Creación de una política de ciclo de vida de las instantáneas

Utilice el comando create-lifecycle-policy e incluya los parámetros Scripts en CreateRule. Para obtener más información sobre los parámetros, consulte la Referencia de la API de 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

Donde policyDetails.json incluye lo siguiente.

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