

• El panel de AWS Systems Manager CloudWatch dejará de estar disponible después del 30 de abril de 2026. Los clientes pueden seguir utilizando la consola de Amazon CloudWatch para ver, crear y administrar sus paneles de Amazon CloudWatch, tal y como lo hacen actualmente. Para obtener más información, consulte la [documentación del panel de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

# Herramientas de administración de cambios de AWS Systems Manager
<a name="systems-manager-actions-and-change"></a>

AWS Systems Manager proporciona las siguientes herramientas para hacer cambios en los recursos de AWS.

**Topics**
+ [AWS Systems Manager Automation](systems-manager-automation.md)
+ [AWS Systems Manager Change Calendar](systems-manager-change-calendar.md)
+ [AWS Systems Manager Change Manager](change-manager.md)
+ [Documentos de AWS Systems Manager](documents.md)
+ [AWS Systems Manager Maintenance Windows](maintenance-windows.md)
+ [AWS Systems Manager Quick Setup](systems-manager-quick-setup.md)

# AWS Systems Manager Automation
<a name="systems-manager-automation"></a>

Automatización, una herramienta de AWS Systems Manager, simplifica las tareas comunes de mantenimiento, implementación y corrección para Servicios de AWS como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift, Amazon Simple Storage Service (Amazon S3), etc. Para comenzar a utilizar Automation, abra la [consola de Systems Manager](https://console.aws.amazon.com/systems-manager/automation). En el panel de navegación, elija **automatización**. 

Automation lo ayuda a crear soluciones automatizadas para implementar, configurar y administrar recursos de AWS a escala. Con Automation, tiene un control pormenorizado de la simultaneidad de sus automatizaciones. Esto significa que puede especificar a cuántos recursos desea dirigirse simultáneamente y cuántos errores pueden producirse antes de que se detenga una automatización. 

Para ayudarlo a comenzar a utilizar Automation, AWS desarrolla y mantiene varios manuales de procedimientos predefinidos. Según su caso de uso, puede utilizar estos manuales de procedimientos predefinidos que realizan diversas tareas o puede crear sus propios manuales de procedimientos personalizados que se adapten mejor a sus necesidades. Para monitorear el progreso y el estado de las automatizaciones, puede utilizar la consola de Automatización de Systems Manager o la herramienta de la línea de comandos que prefiera. Automation también se integra con Amazon EventBridge para ayudarlo a crear una arquitectura basada en eventos a escala.

**nota**  
Para los clientes nuevos de Systems Manager Automation a partir del 14 de agosto de 2025, el nivel gratuito de Automation no estará disponible. Para los clientes que ya utilizan Automation, el nivel de servicio gratuito finaliza el 31 de diciembre de 2025. Para obtener más información sobre los costos actuales del servicio, consulte [Precios de AWS Systems Manager](https://aws.amazon.com/systems-manager/pricing/).

## ¿Cómo puede beneficiar a mi organización Automation?
<a name="automation-benefits"></a>

Automation ofrece los siguientes beneficios:
+ **Compatibilidad con scripting en el contenido del manual de procedimientos**

  Mediante la acción `aws:executeScript`, puede ejecutar funciones personalizadas de Python y PowerShell directamente desde sus manuales de procedimientos. Esto le proporciona mayor flexibilidad a la hora de crear manuales de procedimientos personalizados porque puede completar varias tareas que otras acciones de Automation no admiten. También tiene un mayor control sobre la lógica del manual de procedimientos. Para ver un ejemplo de cómo se puede utilizar esta acción y cómo puede ayudar a mejorar una solución automatizada existente, consulte [Creación de manuales de procedimientos de Automation](automation-authoring-runbooks.md).
+  **Ejecutar automatizaciones en varias Cuentas de AWS y Regiones de AWS desde una ubicación centralizada** 

  Los administradores pueden ejecutar automatizaciones de recursos en varias cuentas y regiones desde la consola de Systems Manager.
+  **Mejora de la seguridad de las operaciones** 

  Los administradores disponen de un lugar centralizado para conceder y denegar el acceso a manuales de procedimientos. Si utiliza solo políticas de AWS Identity and Access Management (IAM), puede controlar qué usuarios individuales o grupos de la organización pueden utilizar la Automation y a qué manuales de procedimientos pueden acceder.
+  **Automatizar las tareas de TI habituales** 

  La automatización de tareas comunes puede ayudar a mejorar la eficiencia operativa, cumplir los estándares organizativos y reducir los errores del operador. Por ejemplo, puede utilizar el manual de procedimientos `AWS-UpdateCloudFormationStackWithApproval` para actualizar los recursos que se implementaron con una plantilla de AWS CloudFormation. La actualización aplica una nueva plantilla. Puede configurar Automation para solicitar la aprobación de uno o varios usuarios de antes de que la actualización se ponga en marcha.
+  **Realización de tareas disruptivas en lote de forma segura** 

  Automation incluye características, como controles de frecuencia, que le permiten controlar la implementación de una automatización en su flota al especificar un valor de simultaneidad y un umbral de error. Para obtener más información acerca del uso de controles de frecuencias, consulte [Ejecución de operaciones automatizadas a escala](running-automations-scale.md).
+ **Simplificar tareas complejas**

  Automation proporciona manuales de procedimientos predefinidos que agilizan tareas complejas y lentas, como la creación de Amazon Machine Images maestras (AMIs). Por ejemplo, puede utilizar los manuales de procedimientos `AWS-UpdateLinuxAmi` y `AWS-UpdateWindowsAmi` para crear AMIs maestras a partir de una AMI de origen. Mediante los manuales de procedimientos puede ejecutar scripts personalizados antes y después de la aplicación de actualizaciones. Asimismo, puede incluir paquetes de software específicos en la instalación o excluirlos de ella. Para ver ejemplos de cómo ejecutar estos manuales de procedimientos, consulte [Tutoriales](automation-tutorials.md).
+ **Definir restricciones para las entradas**

  Puede definir restricciones en manuales de procedimientos personalizados para limitar los valores que Automation aceptará para un parámetro de entrada concreto. Por ejemplo, `allowedPattern` solo aceptará valores para un parámetro de entrada que coincidan con la expresión regular que defina. Si especifica `allowedValues` para un parámetro de entrada, solo se aceptan los valores especificados en el manual de procedimientos.
+  **Registre la salida de las acciones de automatización en Amazon CloudWatch Logs** 

  Para cumplir los requisitos operativos y de seguridad de su organización, es posible que tenga que proporcionar un registro de los scripts que se ejecutan durante un manual de procedimientos. Con CloudWatch Logs, puede acceder a los archivos de registros de diversos , monitorearlos y almacenarlos Servicios de AWS. Puede utilizar la salida de la acción `aws:executeScript` almacenada en el grupo de registros de CloudWatch Logs para depurar y resolver problemas. Los datos de registro se pueden enviar al grupo de registros con o sin cifrado de AWS KMS usando su clave de KMS. Para obtener más información, consulte [Registro de salida de acción de Automation con CloudWatch Logs](automation-action-logging.md).
+  **Integración con Amazon EventBridge** 

  Automation se admite como tipo de *destino* en las normas de Amazon EventBridge. Esto significa que puede activar manuales de procedimientos mediante eventos. Para obtener más información, consulte [Cómo monitorear eventos de Systems Manager con Amazon EventBridge](monitoring-eventbridge-events.md) y [Referencia: patrones y tipos de eventos de Amazon EventBridge para Systems Manager](reference-eventbridge-events.md).
+ **Compartir prácticas recomendadas de la organización**

  Puede definir prácticas recomendadas para la administración de recursos, tareas de operaciones y más en manuales de procedimientos que comparte entre cuentas y regiones.

## ¿Quién debe utilizar Automation?
<a name="automation-who"></a>
+ Todo cliente de AWS que desea mejorar su eficiencia operativa a escala, reducir los errores asociados a la intervención manual y reducir el tiempo de resolución de problemas comunes.
+ Expertos en infraestructura que deseen automatizar las tareas de implementación y configuración.
+ Administradores que deseen resolver problemas comunes de forma fiable, mejorar la eficiencia de la solución de problemas y reducir las operaciones repetitivas.
+ Usuarios que deseen automatizar una tarea que normalmente realizan de forma manual.

## ¿Qué es una automatización?
<a name="what-is-an-automation"></a>

Una *automatización* se compone de todas las tareas que se definen en un manual de procedimientos y que realiza el servicio de Automation. Automation utiliza los siguientes componentes para ejecutar flujos de trabajo de automatización.


****  

| Concepto | Details | 
| --- | --- | 
|  Manual de procedimientos de automatización  |  Un manual de procedimientos de Automatización de Systems Manager define la automatización (las acciones que Systems Manager realiza en los nodos administrados y los recursos de AWS). Automation incluye varios manuales de procedimientos predefinidos que se pueden utilizar para realizar tareas comunes, como reiniciar una o más instancias de Amazon EC2, o crear una Amazon Machine Image (AMI). También puede crear sus propios manuales de procedimientos. Los manuales de procedimientos utilizan YAML o JSON, e incluyen los pasos y parámetros que especifique. Los pasos se ejecutan en orden secuencial. Para obtener más información, consulte [Creación de sus propios manuales de procedimientos](automation-documents.md). Los manuales de procedimientos son documentos de Systems Manager de tipo `Automation`, a diferencia de los documentos de `Command`, `Policy` y `Session`. Los manuales de procedimientos admiten la versión de esquema 0.3. Los documentos de comandos utilizan las versiones de esquema 1.2, 2.0 o 2.2. Los documentos de políticas utilizan la versión de esquema 2.0 o una posterior.  | 
|  Acción de Automation  |  La automatización definida en un manual de procedimientos incluye uno o más pasos. Cada paso está asociado a una acción concreta. La acción determina las entradas, el comportamiento y las salidas del paso. Los pasos se definen en la sección `mainSteps` de su manual de procedimientos. La automatización admite 20 tipos de acción distintos. Para obtener más información, consulte la [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).  | 
|  Cuota de Automation  |  Cada Cuenta de AWS puede ejecutar 100 automatizaciones de manera simultánea. Esto incluye automatizaciones secundarias (automatizaciones iniciadas por otra automatización) y automatizaciones de control de frecuencia. Si intenta ejecutar más automatizaciones, Systems Manager agrega las automatizaciones adicionales a una cola y muestra el estado Pending (Pendiente). Esta cuota se puede ajustar empleando simultaneidad adaptativa. Para obtener más información, consulte [Permitir que Automation se adapte a sus necesidades de simultaneidad](adaptive-concurrency.md). Para obtener más información sobre la ejecución de las automatizaciones, consulte [Ejecución de una operación automatizada con la tecnología de automatización de Systems Manager](running-simple-automations.md).  | 
|  Cuota de cola de Automation  |  Si intenta ejecutar más automatizaciones que las permitidas por el límite de automatizaciones simultáneas, las automatizaciones posteriores se agregarán a una cola. Cada Cuenta de AWS puede mantener en cola 5000 automatizaciones. Cuando se completa una automatización (o alcanza un estado terminal), se inicia la primera automatización que se encuentra en la cola.  | 
|  Cuota de automatización de control de frecuencia  |  Cada Cuenta de AWS puede ejecutar 25 automatizaciones de control de frecuencia de manera simultánea. Si intenta ejecutar más automatizaciones de control de frecuencia que las permitidas por el límite de automatizaciones simultáneas de control de frecuencia, Systems Manager agrega las automatizaciones de control de frecuencia posteriores a una cola y muestra el estado Pending (Pendiente). Para obtener más información acerca de la ejecución de automatizaciones de control de frecuencia, consulte [Ejecución de operaciones automatizadas a escala](running-automations-scale.md).  | 
|  Cuota de cola de automatización de control de frecuencia  |  Si intenta ejecutar más automatizaciones que las permitidas por el límite de automatizaciones simultáneas de control de frecuencia, las automatizaciones posteriores se agregarán a una cola. Cada Cuenta de AWS puede mantener en cola 1000 automatizaciones de control de frecuencia. Cuando se completa una automatización (o alcanza un estado terminal), se inicia la primera automatización que se encuentra en la cola.  | 

**Topics**
+ [¿Cómo puede beneficiar a mi organización Automation?](#automation-benefits)
+ [¿Quién debe utilizar Automation?](#automation-who)
+ [¿Qué es una automatización?](#what-is-an-automation)
+ [Configuración de Automation](automation-setup.md)
+ [Ejecución de una operación automatizada con la tecnología de automatización de Systems Manager](running-simple-automations.md)
+ [Volver a ejecutar las ejecuciones de automatización](automation-rerun-executions.md)
+ [Ejecución de una automatización que requiere aprobaciones](running-automations-require-approvals.md)
+ [Ejecución de operaciones automatizadas a escala](running-automations-scale.md)
+ [Ejecución de automatizaciones en varias cuentas y Regiones de AWS](running-automations-multiple-accounts-regions.md)
+ [Ejecución de automatizaciones a partir de eventos EventBridge](running-automations-event-bridge.md)
+ [Ejecutar una automatización paso a paso](automation-working-executing-manually.md)
+ [Programación de automatizaciones con asociaciones de State Manager](scheduling-automations-state-manager-associations.md)
+ [Programación de automatizaciones con periodos de mantenimiento](scheduling-automations-maintenance-windows.md)
+ [Referencia de acciones de Automatización de Systems Manager](automation-actions.md)
+ [Creación de sus propios manuales de procedimientos](automation-documents.md)
+ [Referencia del manual de procedimientos de Automatización de Systems Manager](automation-documents-reference.md)
+ [Tutoriales](automation-tutorials.md)
+ [Obtenga información sobre los estados devueltos por la automatización de Systems Manager](automation-statuses.md)
+ [Solución de problemas de Automatización de Systems Manager](automation-troubleshooting.md)

# Configuración de Automation
<a name="automation-setup"></a>

Para configurar Automatización, una herramienta de AWS Systems Manager, debe verificar el acceso de los usuarios al servicio de Automatización y configurar los roles según la situación de manera que el servicio pueda llevar a cabo acciones en sus recursos. También le recomendamos que opte por el modo de simultaneidad adaptable en sus preferencias de Automation. La simultaneidad adaptativa escala automáticamente la cuota de automatización para satisfacer sus necesidades. Para obtener más información, consulte [Permitir que Automation se adapte a sus necesidades de simultaneidad](adaptive-concurrency.md).

Para garantizar el acceso adecuado a AWS Systems Manager Automation, revise los siguientes requisitos de usuario y rol de servicio.

## Comprobación del acceso del usuario para manuales de procedimientos
<a name="automation-setup-user-access"></a>

Verifique que tiene permiso para usar manuales de procedimientos. Si su usuario, grupo o rol tiene asignados permisos de administrador, entonces tendrá acceso a Automatización de Systems Manager. Si no tiene permisos de administrador, un administrador debe concederle permiso mediante la asignación de la política administrada `AmazonSSMFullAccess` o de una política que proporcione permisos comparables a su usuario, grupo o rol.

**importante**  
La política de IAM `AmazonSSMFullAccess` concede permisos para las acciones de Systems Manager. Sin embargo, algunos manuales de procedimientos necesitan permisos para otros servicios, como el manual de procedimientos `AWS-ReleaseElasticIP`, que requiere permisos de IAM para `ec2:ReleaseAddress`. Por lo tanto, debe revisar las acciones realizadas en un manual de procedimientos a fin de asegurarse de que se asignen a su usuario, grupo o rol los permisos necesarios para realizar las acciones incluidas en el manual.

## Configuración del acceso de un rol de servicio (rol de asunción) para automatizaciones
<a name="automation-setup-configure-role"></a>

Las automatizaciones se pueden iniciar en el contexto de un rol de servicio (o *rol de asunción*). Esto permite al servicio realizar acciones en su nombre. Si no especifica un rol de asunción, Automation utiliza el contexto del usuario que invocó la automatización.

Sin embargo, en las siguientes situaciones es necesario especificar un rol de servicio para Automation:
+ Cuando se desea restringir los permisos de un usuario para un recurso, pero se desea que el usuario ejecute una automatización que requiere permisos más avanzados. En este escenario, puede crear un rol de servicio con permisos más avanzados y permitir al usuario que ejecute la automatización.
+ Cuando crea una asociación de Systems Manager State Manager que ejecuta un manual de procedimientos.
+ Cuando tenga operaciones que espera que se ejecuten durante más de 12 horas.
+ Cuando ejecuta un manual de procedimientos que no es propiedad de Amazon y que utiliza la acción `aws:executeScript` para llamar una operación de la API de AWS o para actuar sobre un recurso de AWS. Para obtener más información, consulte [Permisos para utilizar los manuales de procedimientos](automation-document-script-considerations.md#script-permissions).

Si precisa crear un rol de servicio para Automation, puede emplear uno de los siguientes métodos.

**Topics**
+ [Comprobación del acceso del usuario para manuales de procedimientos](#automation-setup-user-access)
+ [Configuración del acceso de un rol de servicio (rol de asunción) para automatizaciones](#automation-setup-configure-role)
+ [Creación de un rol de servicio para Automation mediante CloudFormation](automation-setup-cloudformation.md)
+ [Cree los roles de servicio para la automatización mediante la consola](automation-setup-iam.md)
+ [Ejemplos de configuración de políticas basadas en identidad](automation-setup-identity-based-policies.md)
+ [Permitir que Automation se adapte a sus necesidades de simultaneidad](adaptive-concurrency.md)
+ [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md)
+ [Implementación de controles de cambio para Automatización](automation-change-calendar-integration.md)

# Creación de un rol de servicio para Automation mediante CloudFormation
<a name="automation-setup-cloudformation"></a>

Puede crear un rol de servicio para Automatización, una herramienta de AWS Systems Manager, a partir de una plantilla de AWS CloudFormation. Después de crear el rol de servicio, puede especificar el rol de servicio en manuales de procedimientos mediante el parámetro `AutomationAssumeRole`.

## Crear el rol de servicio utilizando CloudFormation
<a name="create-iam-service-role"></a>

Utilice el siguiente procedimiento a fin de crear el rol de AWS Identity and Access Management (IAM) necesario para la Automatización de Systems Manager con CloudFormation.

**Para crear el rol de IAM necesario**

1. Descargue y descomprima el archivo [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationServiceRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationServiceRole.zip). Esta carpeta incluye el archivo de plantilla `AWS-SystemsManager-AutomationServiceRole.yaml` de CloudFormation.

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Elija **Create Stack**.

1. En la sección **Specify template (Especificar plantilla)** seleccione **Upload a template file (Cargar un archivo de plantilla)**.

1. Elija **Browse (Examinar)** y, a continuación, elija el archivo de plantilla de CloudFormation `AWS-SystemsManager-AutomationServiceRole.yaml`.

1. Elija **Siguiente**.

1. En la página **Especificar los detalles de la pila**, escriba un nombre en el campo **Nombre de la pila**. 

1. En la página **Configure stack options (Configurar opciones de la pila)** no es necesario seleccionar ninguna opción. Elija **Siguiente**.

1. En la página **Review (Revisar)**, desplácese hacia abajo y elija la opción **I acknowledge that CloudFormation might create IAM resources (Confirmo que puede crear recursos de IAM)**.

1. Seleccione **Crear**.

CloudFormation muestra el estado **CREATE\$1IN\$1PROGRESS** durante tres minutos aproximadamente. El estado cambia a **CREATE\$1COMPLETE** una vez que se haya creado la pila y los roles estén listos para su uso.

**importante**  
Si ejecuta un flujo de trabajo de automatización que invoca otros servicios mediante un rol de servicio de AWS Identity and Access Management (IAM), tenga en cuenta que el rol de servicio debe configurarse con el permiso necesario para invocar dichos servicios. Este requisito se aplica a todos los manuales de procedimientos de automatización de AWS (manuales de `AWS-*`), como los manuales de procedimientos `AWS-ConfigureS3BucketLogging`, `AWS-CreateDynamoDBBackup` y `AWS-RestartEC2Instance`, por nombrar algunos. Este requisito también se aplica a cualquier manual de procedimientos de automatización personalizado que cree para llamar otros Servicios de AWS mediante acciones que llaman a otros servicios. Por ejemplo, si utiliza las acciones `aws:executeAwsApi`, `aws:createStack` o `aws:copyImage`, configure el rol de servicio con el permiso necesario para invocar dichos servicios. Puede conceder permisos a otros Servicios de AWS mediante la incorporación de una política insertada de IAM al rol. Para obtener más información, consulte [(Opcional) Agregar una política insertada de Automatización o una política administrada por el cliente para invocar otros Servicios de AWS](automation-setup-iam.md#add-inline-policy).

## Copia de la información de roles para Automation
<a name="copy-iam-role-info"></a>

Utilice el siguiente procedimiento para copiar información sobre el rol de perfil de instancia y el rol de servicio de Automation desde la consola de CloudFormation. Debe especificar estos roles cuando utiliza un manual de procedimientos.

**nota**  
No es necesario que copie la información de los roles con este procedimiento si ejecuta los manuales de procedimientos `AWS-UpdateLinuxAmi` o `AWS-UpdateWindowsAmi`. Estos manuales de procedimientos ya tienen los roles obligatorios especificados como valores predeterminados. Los roles especificados en estos manuales de procedimientos usan las políticas administradas de IAM. 

**Para copiar los nombres de rol**

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Seleccione el nombre de pila de Automation que creó en el procedimiento anterior en **Stack name (Nombre de la pila)**.

1. Elija la pestaña **Recursos**.

1. Elija el enlace **Physical ID** para **AutomationServiceRole**. La consola de IAM se abre en un resumen del rol del servicio de Automation.

1. Copie el nombre de recurso de Amazon (ARN) situado junto a **Role ARN (ARN del rol)**. El ARN es similar al que se muestra a continuación: `arn:aws:iam::12345678:role/AutomationServiceRole`

1. Pegue el ARN en un archivo de texto para utilizarlo más adelante.

Ha terminado de configurar el rol de servicio de Automation. Ahora, puede utilizar el ARN del rol de servicio de Automation en sus manuales de procedimientos.

# Cree los roles de servicio para la automatización mediante la consola
<a name="automation-setup-iam"></a>

Si necesita crear un rol de servicio para Automatización, una herramienta de AWS Systems Manager, complete las siguientes tareas. Para obtener más información acerca de cuándo se necesita un rol de servicio para Automation, consulte [Configuración de Automation](automation-setup.md).

**Topics**
+ [Tarea 1: crear un rol de servicio para Automation](#create-service-role)
+ [Tarea 2: asociar la política iam:PassRole al rol de Automation](#attach-passrole-policy)

## Tarea 1: crear un rol de servicio para Automation
<a name="create-service-role"></a>

Siga este procedimiento a fin de crear un rol de servicio (o *rol de asunción*) para la Automatización de Systems Manager.

**nota**  
También puede utilizar este rol en manuales de procedimientos, como `AWS-CreateManagedLinuxInstance`. La utilización de este rol o del nombre de recurso de Amazon (ARN) de un rol de AWS Identity and Access Management (IAM) en los manuales de procedimientos permite a Automation realizar acciones en su entorno, como lanzar instancias nuevas y realizar acciones en su nombre.

**Para crear una función de IAM y permitir que Automation la asuma**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Roles** y luego seleccione **Create role**.

1. En **Seleccionar tipo de entidad de confianza**, seleccione **Servicio de AWS**.

1. En la sección **Elija un caso de uso**, elija **Systems Manager** y, a continuación, elija **Next: Permissions (Siguiente: Permisos)**.

1. En la página **Attached permissions policy (Política de permisos adjunta)**, busque la política **AmazonSSMAutomationRole**, elíjala y, después, seleccione **Next: Review (Siguiente: Revisión)**. 

1. En la página **Review** (Revisar), ingrese un nombre en el cuadro **Role name** (Nombre de rol) y, a continuación, escriba una descripción.

1. Elija **Create role**. El sistema le devuelve a la página **Roles**.

1. En la página **Roles**, elija el rol que acaba de crear para abrir la página **Summary (Resumen)**. Anote los valores de **Role Name (Nombre de rol)** y **Role ARN (ARN de rol)**. Especificará el ARN de rol al asociar la política **iam:PassRole** a su cuenta de IAM en el procedimiento siguiente. También puede especificar el nombre del rol y el ARN en los manuales de procedimientos.

**nota**  
La política `AmazonSSMAutomationRole` asigna al rol de Automation permiso para acceder a un subconjunto de funciones de AWS Lambda en su cuenta. Estas funciones comienzan por "Automation". Si piensa utilizar Automation con funciones de Lambda, el ARN de Lambda debe utilizar el siguiente formato:  
`"arn:aws:lambda:*:*:function:Automation*"`  
Si dispone de funciones de Lambda cuyos ARN no utilizan este formato, también debe adjuntar una política de Lambda adicional al rol de automatización, como la política **AWSLambdaRole**. La política o el rol adicionales deben proporcionar un acceso más amplio a las funciones de Lambda en la Cuenta de AWS.

Después de crear su rol de servicio, le recomendamos que modifique la política de confianza para ayudar a evitar el problema del suplente confuso entre servicios. El *problema de la sustitución confusa* es una cuestión de seguridad en la que una entidad que no tiene permiso para realizar una acción puede obligar a una entidad con más privilegios a realizar la acción. En AWS, la suplantación entre servicios puede dar lugar al problema de la sustitución confusa. La suplantación entre servicios puede producirse cuando un servicio (el *servicio que lleva a cabo las llamadas*) llama a otro servicio (el *servicio al que se llama*). El servicio que lleva a cabo las llamadas se puedes manipular para utilizar sus permisos a fin de actuar en función de los recursos de otro cliente de una manera en la que no debe tener permiso para acceder. Para evitarlo, AWS proporciona herramientas que lo ayudan a proteger sus datos para todos los servicios con entidades principales de servicio a las que se les ha dado acceso a los recursos de su cuenta. 

Le recomendamos que utilice las claves de contexto de condición global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) y [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) en las políticas de recursos a fin de limitar los permisos que Automation le concede a otro servicio para el recurso. Si el valor de `aws:SourceArn` no contiene el ID de cuenta, como un ARN de bucket de Amazon S3, debe utilizar ambas claves de contexto de condición global para limitar los permisos. Si utiliza claves de contexto de condición global y el valor de `aws:SourceArn` contiene el ID de cuenta, el valor de `aws:SourceAccount` y la cuenta en el valor de `aws:SourceArn` deben utilizar el mismo ID de cuenta cuando se utiliza en la misma instrucción de política. Utiliza `aws:SourceArn` si desea que solo se asocie un recurso al acceso entre servicios. Utiliza `aws:SourceAccount` si quiere permitir que cualquier recurso de esa cuenta se asocie al uso entre servicios. El valor de `aws:SourceArn` debe ser el ARN para las ejecuciones de automatización. Si no conoce el ARN completo del recurso o si especifica varios recursos, utilice la clave de condición de contexto global `aws:SourceArn` con comodines (`*`) para las partes desconocidas del ARN. Por ejemplo, `arn:aws:ssm:*:123456789012:automation-execution/*`. 

En el ejemplo siguiente, se muestra cómo se pueden utilizar las claves de contexto de condición global `aws:SourceArn` y `aws:SourceAccount` para Automation para evitar el problema del suplente confuso.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ssm.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:ssm:*:123456789012:automation-execution/*"
        }
      }
    }
  ]
}
```

------

**Para modificar una política de confianza de rol**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. En la lista de roles de su cuenta, elija el nombre del rol de servicio de Automation.

1. Elija la pestaña **Relaciones de confianza** y, a continuación, **Editar relación de confianza**.

1. Edite la política de confianza mediante las claves de contexto de condición global `aws:SourceArn` y `aws:SourceAccount` para Automation a fin de evitar el problema de la sustitución confusa.

1. Para guardar los cambios, elija **Update Trust Policy** (Actualizar política de confianza).

### (Opcional) Agregar una política insertada de Automatización o una política administrada por el cliente para invocar otros Servicios de AWS
<a name="add-inline-policy"></a>

Si ejecuta una automatización que invoca otros Servicios de AWS mediante un rol de servicio de IAM, el rol de servicio debe configurarse con el permiso necesario para invocar dichos servicios. Este requisito se aplica a todos los manuales de procedimientos de automatización de AWS (manuales de `AWS-*`), como los manuales de procedimientos `AWS-ConfigureS3BucketLogging`, `AWS-CreateDynamoDBBackup` y `AWS-RestartEC2Instance`, por nombrar algunos. Este requisito también se aplica a cualquier manual de procedimientos personalizado que cree para invocar otros Servicios de AWS mediante acciones que llaman a otros servicios. Por ejemplo, si utiliza las acciones `aws:executeAwsApi`, `aws:CreateStack` o `aws:copyImage`, entre otras, debe configurar el rol de servicio con el permiso necesario para invocar dichos servicios. Puede conceder permisos a otros Servicios de AWS mediante la incorporación de una política insertada de IAM o política administrada por el cliente, al rol. 

**Para integrar una política insertada de un rol de servicio (consola de IAM)**

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. En la lista, seleccione el nombre del rol que desee editar.

1. Elija la pestaña **Permisos**.

1. En la lista desplegable para **Agregar permisos**, elija **Asociar políticas** o **Crear política insertada**.

1. Si elige **Asociar políticas**, active la casilla de verificación situada al lado de la política que desea agregar y elija **Agregar permisos**.

1. Si elige **Crear política insertada**, elija la pestaña **JSON**.

1. Ingrese un documento de política JSON para los Servicios de AWS que desee invocar. A continuación, se muestran dos documentos de política JSON a modo de ejemplo.

   **Ejemplo de PutObject y GetObject de Amazon S**

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

------

   **Ejemplo de CreateSnapshot y DescribeSnapShots de Amazon EC**

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":"ec2:CreateSnapshot",
            "Resource":"*"
         },
         {
            "Effect":"Allow",
            "Action":"ec2:DescribeSnapshots",
            "Resource":"*"
         }
      ]
   }
   ```

------

   Para obtener información acerca del lenguaje de la política de IAM, consulte [Referencia de políticas JSON de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) en la *Guía del usuario de IAM*.

1. Cuando haya terminado, elija **Review policy (Revisar política)**. El [validador de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html) notifica los errores de sintaxis.

1. En la página **Review policy** (Revisar política), complete el campo **Name** (Nombre) de la política que está creando. Revise el **Summary** (Resumen) de la política para ver los permisos concedidos por su política. A continuación, elija **Create policy** (Crear política) para guardar su trabajo.

1. Una vez que cree una política insertada, se integra de manera automática a su rol.

## Tarea 2: asociar la política iam:PassRole al rol de Automation
<a name="attach-passrole-policy"></a>

Siga este procedimiento para asociar la política `iam:PassRole` al rol de servicio de Automation. Esto permite al servicio Automatización transferir el rol a otros servicios o herramientas de Systems Manager a la hora de ejecutar las automatizaciones.

**Para asociar la política iam:PassRole al rol de Automation**

1. En la página **Summary** del rol que acaba de crear, elija la pestaña **Permissions**.

1. Elija **Agregar política insertada**.

1. En la página **Create policy** (Crear política), elija la pestaña **Visual editor** (Editor visual).

1. Elija **Service** (Servicio) y, a continuación, **IAM**.

1. Elija **Select actions (Seleccionar acciones)**.

1. En el cuadro de texto **Filter actions (Filtrar acciones)**, escriba **PassRole** y, a continuación, elija la opción **PassRole**.

1. Seleccione **Recursos**. Compruebe que esté seleccionado **Specific (Específicos)** y elija **Add ARN (Añadir ARN)**.

1. En el campo **Specify ARN for role** (Especificar el ARN del rol), pegue el ARN del rol de Automation que copió al final de la tarea 1. El sistema rellena los campos **Account (Cuenta)** y **Role name with path (Nombre del rol con ruta)**.
**nota**  
Si desea que el rol de servicio de Automation adjunte un rol de perfil de instancia de IAM a una instancia de EC2, debe agregar el ARN del rol de perfil de instancia de IAM. Esto permite que el rol de servicio de Automation transfiera el rol de perfil de instancia de IAM a la instancia de EC2 de destino.

1. Elija **Add (Agregar)**.

1. Elija **Review policy** (Revisar política).

1. En la página **Review Policy** (Revisar política), ingrese un nombre y, a continuación, elija **Create policy** (Crear la política).

# Ejemplos de configuración de políticas basadas en identidad
<a name="automation-setup-identity-based-policies"></a>

Las siguientes secciones incluyen ejemplos de políticas de IAM para el servicio de Automatización de AWS Systems Manager. Para obtener más información acerca de cómo crear una política basada en identidad de IAM con estos documentos de políticas de JSON de ejemplo, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor) en la *Guía del usuario de IAM*.

**nota**  
Todos los ejemplos contienen ID de cuenta ficticios. No debe especificarse el ID de cuenta en el Nombre de recurso de Amazon (ARN) para documentos públicos propiedad de AWS.

 **Ejemplos** 
+  [Ejemplo 1: permitir a un usuario ejecutar un documento de automatización y ver la ejecución de la automatización](#automation-setup-identity-based-policies-example-1) 
+  [Ejemplo 2: permitir a un usuario usar ejecutar una versión específica de un documento de automatización](#automation-setup-identity-based-policies-example-2) 
+  [Ejemplo 3: permitir a un usuario ejecutar documentos de automatización con una etiqueta específica](#automation-setup-identity-based-policies-example-3) 
+  [Ejemplo 4: permitir que un usuario ejecute un documento de automatización cuando se proporcione un parámetro de etiqueta específico para la ejecución de la automatización](#automation-setup-identity-based-policies-example-4) 

## Ejemplo 1: permitir a un usuario ejecutar un documento de automatización y ver la ejecución de la automatización
<a name="automation-setup-identity-based-policies-example-1"></a>

El siguiente ejemplo de política de IAM permite a un usuario hacer lo siguiente:
+ Ejecute el documento de automatización especificado en la política. El nombre del documento se determina con la siguiente entrada:

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ Detener y enviar señales a una ejecución de automatización.
+ Vea los detalles sobre la ejecución de la automatización una vez iniciada.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/{{DocumentName}}",
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ]
        },
        {
            "Action": [
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

## Ejemplo 2: permitir a un usuario usar ejecutar una versión específica de un documento de automatización
<a name="automation-setup-identity-based-policies-example-2"></a>

La siguiente política de IAM de ejemplo permite a un usuario ejecutar una versión específica de un documento de automatización:
+ El nombre del documento de automatización se determina con la siguiente entrada.

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ La versión del documento de automatización se determina con la siguiente entrada.

  ```
  "ssm:DocumentVersion": "5"
  ```

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/{{DocumentName}}"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                   "ssm:DocumentVersion": ["5"]
                }
            }
        },
        {
            "Action": [
                "ssm:StartAutomationExecution"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

## Ejemplo 3: permitir a un usuario ejecutar documentos de automatización con una etiqueta específica
<a name="automation-setup-identity-based-policies-example-3"></a>

La siguiente política de IAM de ejemplo permite a un usuario ejecutar cualquier documento de automatización que tenga una etiqueta específica:
+ El nombre del documento de automatización se determina con la siguiente entrada.

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ La etiqueta del documento de automatización se determina con la siguiente entrada.

  ```
  "ssm:DocumentVersion": "5"
  ```

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stage": "production"
                }
            }
        },
        {
            "Action": [
                "ssm:StartAutomationExecution"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

## Ejemplo 4: permitir que un usuario ejecute un documento de automatización cuando se proporcione un parámetro de etiqueta específico para la ejecución de la automatización
<a name="automation-setup-identity-based-policies-example-4"></a>

La siguiente política de IAM de ejemplo permite que un usuario ejecute un documento de automatización cuando se proporcione un parámetro de etiqueta específico para la ejecución de la automatización:
+ Ejecute el documento de automatización especificado en la política. El nombre del documento se determina con la siguiente entrada:

  ```
  arn:aws:ssm:*:111122223333:document/{{DocumentName}}
  ```
+ Debe proporcionar un parámetro de etiqueta específico para la ejecución de la automatización. El parámetro de etiqueta para el recurso de ejecución de automatización se determina con la siguiente entrada.

  ```
  "aws:ResourceTag/stage": "production"
  ```
+ Detenga y envíe señales a las ejecuciones de automatización que tengan la etiqueta especificada.
+ Consulte los detalles sobre las ejecuciones de automatización que tienen la etiqueta especificada.
+ Agregue la etiqueta especificada a los recursos SSM.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:document/{{DocumentName}}"
            ]
        },
        {
            "Action": [
                "ssm:StartAutomationExecution",
                "ssm:StopAutomationExecution",
                "ssm:GetAutomationExecution",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeAutomationStepExecutions",
                "ssm:SendAutomationSignal"
            ],
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ],
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "beta"
                }
            }
        },
        {
            "Action": "ssm:AddTagsToResource",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:111122223333:automation-execution/*"
            ]
        }
    ]
}
```

------

# Permitir que Automation se adapte a sus necesidades de simultaneidad
<a name="adaptive-concurrency"></a>

De forma predeterminada, Automation le permite ejecutar hasta 100 automatizaciones simultáneas a la vez. Automation también proporciona una configuración opcional que puede utilizar para ajustar automáticamente la cuota de automatización de la simultaneidad. Con esta configuración, la cuota de automatización de la simultaneidad puede acomodar hasta 500 automatizaciones simultáneas, según los recursos disponibles. 

**nota**  
Si su automatización llama a operaciones de API, el escalado adaptativo a sus destinos puede dar lugar a excepciones de limitación. Si se producen excepciones de limitación periódicas cuando se ejecutan automatizaciones con la simultaneidad adaptativa activada, es posible que deba solicitar aumentos de cuota para la operación de la API si esta opción está disponible.

**Para activar la simultaneidad adaptativa con la Consola de administración de AWS**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automation**.

1. Elija la pestaña **Preferences (Preferencias)** y, a continuación, **Edit (Editar)**.

1. Marque la casilla situada junto a **Enable adaptive concurrency** (Activar la simultaneidad adaptativa).

1. Seleccione **Save**.

**Para activar la simultaneidad adaptativa con la línea de comandos**
+ Abra la AWS CLI o Tools para Windows PowerShell y ejecute el siguiente comando para activar la simultaneidad adaptativa en su cuenta en la región solicitante.

------
#### [ Linux & macOS ]

  ```
  aws ssm update-service-setting \
      --setting-id /ssm/automation/enable-adaptive-concurrency \
      --setting-value True
  ```

------
#### [ Windows ]

  ```
  aws ssm update-service-setting ^
      --setting-id /ssm/automation/enable-adaptive-concurrency ^
      --setting-value True
  ```

------
#### [ PowerShell ]

  ```
  Update-SSMServiceSetting `
      -SettingId "/ssm/automation/enable-adaptive-concurrency" `
      -SettingValue "True"
  ```

------

# Configurar el reintento automático para operaciones limitadas
<a name="automation-throttling-retry"></a>

Existe un límite sobre el número de ejecuciones de automatización simultáneas que se pueden ejecutar en cada cuenta. Intentar ejecutar varias automatizaciones de forma simultánea en una cuenta puede provocar problemas de limitación. Puede usar la capacidad de reintento automático de limitación para configurar el comportamiento de los reintentos en los pasos de automatización limitada.

El reintento automático de limitación para las acciones de automatización proporciona un entorno de ejecución más resistente para operaciones de gran escala. La capacidad del reintento de limitación es compatible con todas las [acciones de automatización](automation-actions.md), excepto `aws:executeScript`.

La configuración del reintento de limitación funciona además de la propiedad del paso `maxAttempts` existente. Cuando se configuran ambas, el sistema primero realiza los reintentos de limitación dentro del límite de tiempo especificado y, a continuación, aplica la configuración `maxAttempts` si el paso sigue fallando.

**Para configurar la el reintento de limitación mediante la Consola de administración de AWS**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automation**.

1. Elija la pestaña **Preferences (Preferencias)** y, a continuación, **Edit (Editar)**.

1. En el campo **Límite de tiempo de reintento de limitación**, introduzca un valor entre 0 y 3600 segundos. Esto especifica el tiempo máximo que el sistema reintenta un paso que está limitado.

1. Seleccione **Save**.

**Para configurar la el reintento de limitación mediante la línea de comandos**
+ Abra la AWS CLI o Tools para Windows PowerShell y ejecute el siguiente comando para configurar el reintento de limitación para su cuenta en la región solicitante.

------
#### [ Linux & macOS ]

  ```
  aws ssm update-service-setting \
      --setting-id /ssm/automation/throttling-retry-time-limit \
      --setting-value 3600
  ```

------
#### [ Windows ]

  ```
  aws ssm update-service-setting ^
      --setting-id /ssm/automation/throttling-retry-time-limit ^
      --setting-value 3600
  ```

------
#### [ PowerShell ]

  ```
  Update-SSMServiceSetting `
      -SettingId "/ssm/automation/throttling-retry-time-limit" `
      -SettingValue "3600"
  ```

------

# Implementación de controles de cambio para Automatización
<a name="automation-change-calendar-integration"></a>

De forma predeterminada, Automatización le permite utilizar manuales de procedimiento sin restricciones de fecha y hora. Al integrar Automatización con Change Calendar, puede implementar controles de cambios en todas las automatizaciones de su Cuenta de AWS. Con esta configuración, las entidades principales de AWS Identity and Access Management (IAM) de su cuenta solo pueden ejecutar automatizaciones durante los periodos que su calendario de cambios permite. Para obtener más información sobre el uso de Change Calendar, consulte [Uso de Change Calendar](systems-manager-change-calendar-working.md).

**Para activar los controles de cambios (consola)**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automation**.

1. Elija la pestaña **Preferences (Preferencias)** y, a continuación, **Edit (Editar)**.

1. Seleccione la casilla de verificación situada junto a **Activar la integración de Change Calendar**.

1. En la lista desplegable **Elegir un calendario de cambios**, seleccione el calendario de cambios que desee que siga Automatización.

1. Seleccione **Save**.

# Ejecución de una operación automatizada con la tecnología de automatización de Systems Manager
<a name="running-simple-automations"></a>

De forma predeterminada, cuando se ejecuta una automatización, se hace en el contexto del usuario que inicia la automatización. Esto significa que, por ejemplo, si el usuario tiene permisos de administrador, la automatización se ejecuta con permisos de administrador y tiene acceso pleno a los recursos que configura la automatización. Como práctica recomendada de seguridad, le recomendamos que ejecute la automatización con un rol de servicio de IAM, que también se conoce como un rol de *asunción*, configurado con la política administrada AmazonSSMAutomationRole. Es posible que tenga que agregar políticas de IAM adicionales al rol asumido para usar diferentes manuales de procedimientos. El uso de un rol de servicio de IAM para ejecutar la automatización se denomina *administración delegada*.

Cuando se utiliza un rol de servicio, se puede ejecutar la automatización en los recursos de AWS, pero el usuario que ejecutó la automatización tiene el acceso restringido a dichos recursos (o no puede acceder a ellos). Por ejemplo, puede configurar un rol de servicio y utilizarlo con Automation para reiniciar una o más instancias de Amazon Elastic Compute Cloud (Amazon EC2). Automatización es una herramienta de AWS Systems Manager. La automatización reinicia las instancias, pero el rol de servicio no concede al usuario permiso para acceder a dichas instancias.

Puede especificar un rol de servicio en el tiempo de ejecución de una automatización, o bien, puede crear manuales de procedimientos personalizados y especificar el rol de servicio directamente en el manual. Si especifica un rol de servicio, ya sea en el tiempo de ejecución o en un manual de procedimientos, el servicio se ejecuta en el contexto del rol de servicio especificado. Si no especifica un rol de servicio, el sistema crea una sesión temporal en el contexto del usuario y ejecuta la automatización.

**nota**  
Debe especificar un rol de servicio para las automatizaciones que espera que se ejecuten durante más de 12 horas. Si inicia una automatización cuya ejecución tarda mucho tiempo en el contexto de un usuario, la sesión temporal del usuario caduca después de 12 horas.

La administración delegada garantiza mayor control y seguridad de los recursos de AWS. También permite tener una mejor experiencia en las auditorías, ya que las acciones se realizan sobre los recursos a través de un rol de servicio centralizado en lugar de varias cuentas de IAM.

**Antes de empezar**  
Antes de completar los siguientes procedimientos, cree el rol de servicio de IAM y configure una relación de confianza para Automatización, una herramienta de AWS Systems Manager. Para obtener más información, consulte [Tarea 1: crear un rol de servicio para Automation](automation-setup-iam.md#create-service-role).

Los siguientes procedimientos describes cómo utilizar la consola de Systems Manager o su herramienta de línea de comandos preferida para ejecutar una automatización sencilla.

## Ejecución de una automatización sencilla (consola)
<a name="simple-console"></a>

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para ejecutar una automatización sencilla.

**Para ejecutar una automatización sencilla**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la lista **Documento de automatización**, elija un manual de procedimientos. Elija una o más opciones en el panel **Categorías de documentos** para filtrar documentos SSM según su propósito. Para ver un manual de procedimientos que le pertenezca, seleccione la pestaña **De mi propiedad**. Para ver un manual de procedimientos que se haya compartido con su cuenta, elija la pestaña **Compartido conmigo**. Para ver todos los manuales de procedimientos, seleccione la pestaña **Todos los documentos**.
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. En la sección **Detalles del documento**, verifique que **Versión del documento** esté establecido como la versión que desea ejecutar. El sistema incluye las siguientes opciones de versión: 
   + **Versión predeterminada en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y se asigna una nueva versión predeterminada.
   + **Última versión en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y desea ejecutar la versión que se ha actualizado más recientemente.
   + **1 (Predeterminado)**: seleccione esta opción para ejecutar la primera versión del documento, que es la predeterminada.

1. Elija **Siguiente**.

1. En la sección **Modo de ejecución**, seleccione **Ejecución sencilla**.

1. En la sección **Parámetros de entrada**, especifique las entradas necesarias: De forma opcional, puede elegir un rol de servicio de IAM de la lista **AutomationAssumeRole**.

1. (Opcional) Elija una alarma de CloudWatch para aplicarla a la automatización de monitoreo. Para adjuntar una alarma de CloudWatch a su automatización, la entidad principal de IAM que ejecuta esta última debe tener permiso para la acción `iam:createServiceLinkedRole`. Para obtener más información sobre las alarmas de CloudWatch, consulte [Uso de alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html). Tenga en cuenta que si la alarma se activa, la automatización se detiene. Si usa AWS CloudTrail, verá la llamada a la API en el registro de seguimiento. 

1. Elija **Ejecutar**. 

La consola muestra el estado de la automatización. Si no se logra ejecutar la automatización, consulte [Solución de problemas de Automatización de Systems Manager](automation-troubleshooting.md).

Una vez completada la ejecución de una automatización, puede volver a ejecutarla con los mismos parámetros o con parámetros modificados. Para obtener más información, consulte [Volver a ejecutar las ejecuciones de automatización](automation-rerun-executions.md).

## Ejecución de una automatización sencilla (línea de comandos)
<a name="simple-cli"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows) o las Herramientas de AWS para PowerShell para ejecutar una automatización sencilla.

**Para ejecutar una automatización sencilla**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Ejecute el siguiente comando para iniciar una automatización sencilla. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --parameters runbook parameters
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --parameters runbook parameters
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
     -DocumentName runbook name `
     -Parameter runbook parameters
   ```

------

   A continuación, se muestra un ejemplo en el que se utiliza el manual de procedimientos `AWS-RestartEC2Instance` para reiniciar la instancia de EC2 especificada.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-RestartEC2Instance" \
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "AWS-RestartEC2Instance" ^
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
     -DocumentName AWS-RestartEC2Instance `
     -Parameter @{"InstanceId"="i-02573cafcfEXAMPLE"}
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab"
   }
   ```

------
#### [ PowerShell ]

   ```
   4105a4fc-f944-11e6-9d32-0123456789ab
   ```

------

1. Ejecute el siguiente comando para recuperar el estado de la automatización.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-executions \
       --filter "Key=ExecutionId,Values=4105a4fc-f944-11e6-9d32-0123456789ab"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-executions ^
       --filter "Key=ExecutionId,Values=4105a4fc-f944-11e6-9d32-0123456789ab"
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecutionList | `
     Where {$_.AutomationExecutionId -eq "4105a4fc-f944-11e6-9d32-0123456789ab"}
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionMetadataList": [
           {
               "AutomationExecutionStatus": "InProgress",
               "CurrentStepName": "stopInstances",
               "Outputs": {},
               "DocumentName": "AWS-RestartEC2Instance",
               "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab",
               "DocumentVersion": "1",
               "ResolvedTargets": {
                   "ParameterValues": [],
                   "Truncated": false
               },
               "AutomationType": "Local",
               "Mode": "Auto",
               "ExecutionStartTime": 1564600648.159,
               "CurrentAction": "aws:changeInstanceState",
               "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
               "LogFile": "",
               "Targets": []
           }
       ]
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionMetadataList": [
           {
               "AutomationExecutionStatus": "InProgress",
               "CurrentStepName": "stopInstances",
               "Outputs": {},
               "DocumentName": "AWS-RestartEC2Instance",
               "AutomationExecutionId": "4105a4fc-f944-11e6-9d32-0123456789ab",
               "DocumentVersion": "1",
               "ResolvedTargets": {
                   "ParameterValues": [],
                   "Truncated": false
               },
               "AutomationType": "Local",
               "Mode": "Auto",
               "ExecutionStartTime": 1564600648.159,
               "CurrentAction": "aws:changeInstanceState",
               "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
               "LogFile": "",
               "Targets": []
           }
       ]
   }
   ```

------
#### [ PowerShell ]

   ```
   AutomationExecutionId       : 4105a4fc-f944-11e6-9d32-0123456789ab
   AutomationExecutionStatus   : InProgress
   AutomationType              : Local
   CurrentAction               : aws:changeInstanceState
   CurrentStepName             : startInstances
   DocumentName                : AWS-RestartEC2Instance
   DocumentVersion             : 1
   ExecutedBy                  : arn:aws:sts::123456789012:assumed-role/Administrator/Admin
   ExecutionEndTime            : 1/1/0001 12:00:00 AM
   ExecutionStartTime          : 7/31/2019 7:17:28 PM
   FailureMessage              : 
   LogFile                     : 
   MaxConcurrency              : 
   MaxErrors                   : 
   Mode                        : Auto
   Outputs                     : {}
   ParentAutomationExecutionId : 
   ResolvedTargets             : Amazon.SimpleSystemsManagement.Model.ResolvedTargets
   Target                      : 
   TargetMaps                  : {}
   TargetParameterName         : 
   Targets                     : {}
   ```

------

# Volver a ejecutar las ejecuciones de automatización
<a name="automation-rerun-executions"></a>

Puede volver a ejecutar las ejecuciones de automatización de AWS Systems Manager con parámetros idénticos o modificados para agilizar las tareas repetidas. La capacidad de volver a ejecutar le permite replicar de manera eficiente las ejecuciones de automatización sin tener que volver a crear manualmente las configuraciones de automatización, lo que reduce la sobrecarga operativa y los posibles errores de configuración.

Al volver a ejecutar una ejecución de automatización, Systems Manager conserva los parámetros originales del manual de procedimientos, las alarmas de Amazon CloudWatch y las etiquetas de la ejecución anterior. El sistema crea una nueva ejecución con un nuevo ID de ejecución y marcas de tiempo actualizadas. Puede volver a ejecutar cualquier tipo de ejecución de automatización, incluidas las ejecuciones simples, las ejecuciones con control de velocidad, las ejecuciones entre cuentas y regiones, y las ejecuciones manuales.

## Volver a ejecutar una ejecución de automatización (consola)
<a name="rerun-console"></a>

Los siguientes procedimientos describen cómo utilizar la consola de Systems Manager para volver a ejecutar una automatización.

**Para volver a ejecutar una ejecución de automatización desde la página de inicio de Automation**

Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. En la lista de ejecuciones, seleccione la ejecución que desee volver a ejecutar.

1. Seleccione **Volver a ejecutar una ejecución**.

1. En la página **Ejecutar documento de automatización**, revise los parámetros predefinidos, el modo de ejecución y la configuración del objetivo de la ejecución original.

1. (Opcional) Modifique los parámetros, objetivos u otros ajustes según sea necesario para la vover a ejecutarla.

1. Seleccione **Ejecutar** para volver a ejecutar la ejecución con un nuevo ID de ejecución.

**Para volver a ejecutar una ejecución de automatización desde la página de detalles de la ejecución**

Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Elija el ID de ejecución de la automatización que desea volver a ejecutar.

1. En la página de detalles de la ejecución, elija **Volver a ejecutar la ejecución**.

1. En la página **Ejecutar documento de automatización**, revise los parámetros predefinidos, el modo de ejecución y la configuración del objetivo de la ejecución original.

1. (Opcional) Modifique los parámetros, objetivos u otros ajustes según sea necesario para la vover a ejecutarla.

1. Seleccione **Ejecutar** para volver a ejecutar la ejecución con un nuevo ID de ejecución.

**Para copiar una ejecución de automatización en una nueva ejecución**

Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Seleccione el ID de ejecución de la automatización que desea copiar.

1. En la página de detalles de la ejecución, elija **Acciones** y, a continuación, elija **Copiar a nuevo**.

1. En la página **Ejecutar documento de automatización**, revise los parámetros predefinidos, el modo de ejecución y la configuración del objetivo de la ejecución original.

1. (Opcional) Modifique los parámetros, objetivos u otros ajustes según sea necesario para la nueva ejecución.

1. Elija **Ejecutar** para iniciar la nueva ejecución.

# Ejecución de una automatización que requiere aprobaciones
<a name="running-automations-require-approvals"></a>

Los siguientes procedimientos describen cómo utilizar la consola de AWS Systems Manager y la AWS Command Line Interface (AWS CLI) para ejecutar una automatización con aprobaciones mediante una ejecución sencilla. La automatización utiliza la acción de automatización `aws:approve`, lo que detiene de forma temporal la automatización hasta que las entidades principales designadas aprueben o denieguen la acción. La automatización se ejecuta en el contexto del usuario actual. Esto significa que no tiene que configurar más permisos de IAM siempre y cuando cuente con el permiso necesario para usar el manual de procedimientos y cualquier acción que este solicite. Si tiene permisos de administrador en IAM, ya cuenta con el permiso necesario para usar este manual de procedimientos.

**Antes de empezar**  
Además de las entradas estándares requeridas por el manual de procedimientos, la acción `aws:approve` necesita los siguientes dos parámetros: 
+ Una lista de aprobadores. La lista de aprobadores debe contener al menos un aprobador en forma de nombre de usuario o ARN de usuario. Si se proporcionan varios aprobadores, también debe especificarse el recuento de aprobaciones mínimo correspondiente en el manual de procedimientos. 
+ El ARN de un tema de Amazon Simple Notification Service (Amazon SNS). El nombre del tema de Amazon SNS debe empezar con `Automation`.

En este procedimiento, se da por hecho que ya ha creado un tema de Amazon SNS, lo que es necesario para entregar una solicitud de aprobación. Para obtener información, consulte [Creación de un tema](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html#CreateTopic) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

## Ejecución de una automatización con aprobadores (consola)
<a name="approval-console"></a>

**Para ejecutar una automatización con aprobadores**

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para ejecutar una automatización con aprobadores.

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la lista **Documento de automatización**, elija un manual de procedimientos. Elija una o más opciones en el panel **Categorías de documentos** para filtrar documentos SSM según su propósito. Para ver un manual de procedimientos que le pertenezca, seleccione la pestaña **De mi propiedad**. Para ver un manual de procedimientos que se haya compartido con su cuenta, elija la pestaña **Compartido conmigo**. Para ver todos los manuales de procedimientos, seleccione la pestaña **Todos los documentos**.
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. En la sección **Detalles del documento**, verifique que **Versión del documento** esté establecido como la versión que desea ejecutar. El sistema incluye las siguientes opciones de versión: 
   + **Versión predeterminada en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y se asigna una nueva versión predeterminada.
   + **Última versión en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y desea ejecutar la versión que se ha actualizado más recientemente.
   + **1 (Predeterminado)**: seleccione esta opción para ejecutar la primera versión del documento, que es la predeterminada.

1. Elija **Siguiente**.

1. En la página **Ejecutar documento de automatización**, seleccione **Ejecución simple**.

1. En la sección **Parámetros de entrada**, especifique los parámetros de entrada necesarios.

   Por ejemplo, si selecciona el manual de procedimientos `AWS-StartEC2InstanceWithApproval`, debe especificar o seleccionar los ID de instancias para el parámetro **InstanceId**. 

1. En la sección **Aprobadores**, especifique los nombres de usuario o los ARN de usuario de los aprobadores para la acción de automatización.

1. En la sección **SNSTopicARN**, especifique el ARN de tema de SNS que utilizará para enviar la notificación de aprobación. El nombre de tema de SNS debe empezar por **Automation**.

1. De forma opcional, puede elegir un rol de servicio de IAM de la lista **AutomationAssumeRole**. Si se indican más de 100 cuentas y regiones, debe especificar el `AWS-SystemsManager-AutomationAdministrationRole`.

1. Elija **Ejecutar automatización**. 

El aprobador especificado recibe una notificación de Amazon SNS con detalles para aprobar o rechazar la automatización. Esta acción de aprobación es válida durante 7 días a partir de la fecha de emisión y puede emitirse a través de la consola de Systems Manager o la AWS Command Line Interface (AWS CLI).

Si decide aprobar la automatización, esta sigue ejecutando los pasos incluidos en el manual de procedimientos especificado. La consola muestra el estado de la automatización. Si no se logra ejecutar la automatización, consulte [Solución de problemas de Automatización de Systems Manager](automation-troubleshooting.md).

**Para aprobar o denegar una automatización**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automation** y, a continuación, seleccione la automatización que se ejecutó en el procedimiento anterior.

1. Seleccione **Acciones** y, a continuación, **Aprobar/denegar**.

1. Seleccione **Aprobar** o **Denegar** y, si lo desea, proporcione un comentario.

1. Elija **Enviar**.

## Ejecución de una automatización con aprobadores (línea de comandos)
<a name="approval-cli"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows) o las Herramientas de AWS para PowerShell para ejecutar una automatización con aprobadores.

**Para ejecutar una automatización con aprobadores**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Utilice el siguiente comando para ejecutar una automatización con aprobadores. Reemplace cada *example resource placeholder* con su propia información. En la sección del nombre del documento, especifique un manual de procedimientos que incluya la acción de automatización ., `aws:approve`.

   En `Approvers`, especifique los nombres de usuario o los ARN de usuario de los aprobadores para la acción. En `SNSTopic`, especifique el ARN de tema de SNS que desea utilizar para enviar la notificación de aprobación. El nombre del tema de Amazon SNS debe empezar con `Automation`.
**nota**  
Los nombres específicos de los valores de los parámetros para los aprobadores y el tema de SNS dependen de los valores especificados en el manual de procedimientos que elija. 

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-StartEC2InstanceWithApproval" \
       --parameters "InstanceId=i-02573cafcfEXAMPLE,Approvers=arn:aws:iam::123456789012:role/Administrator,SNSTopicArn=arn:aws:sns:region:123456789012:AutomationApproval"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "AWS-StartEC2InstanceWithApproval" ^
       --parameters "InstanceId=i-02573cafcfEXAMPLE,Approvers=arn:aws:iam::123456789012:role/Administrator,SNSTopicArn=arn:aws:sns:region:123456789012:AutomationApproval"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName AWS-StartEC2InstanceWithApproval `
       -Parameters @{
           "InstanceId"="i-02573cafcfEXAMPLE"
           "Approvers"="arn:aws:iam::123456789012:role/Administrator"
           "SNSTopicArn"="arn:aws:sns:region:123456789012:AutomationApproval"
       }
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "df325c6d-b1b1-4aa0-8003-6cb7338213c6"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "df325c6d-b1b1-4aa0-8003-6cb7338213c6"
   }
   ```

------
#### [ PowerShell ]

   ```
   df325c6d-b1b1-4aa0-8003-6cb7338213c6
   ```

------

**Para aprobar una automatización**
+ Ejecute el siguiente comando para aprobar una automatización. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

  ```
  aws ssm send-automation-signal \
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" \
      --signal-type "Approve" \
      --payload "Comment=your comments"
  ```

------
#### [ Windows ]

  ```
  aws ssm send-automation-signal ^
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" ^
      --signal-type "Approve" ^
      --payload "Comment=your comments"
  ```

------
#### [ PowerShell ]

  ```
  Send-SSMAutomationSignal `
      -AutomationExecutionId df325c6d-b1b1-4aa0-8003-6cb7338213c6 `
      -SignalType Approve `
      -Payload @{"Comment"="your comments"}
  ```

------

  No se obtienen resultados si el comando se ejecuta satisfactoriamente.

**Para denegar una automatización**
+ Ejecute el siguiente comando para denegar una automatización. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

  ```
  aws ssm send-automation-signal \
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" \
      --signal-type "Deny" \
      --payload "Comment=your comments"
  ```

------
#### [ Windows ]

  ```
  aws ssm send-automation-signal ^
      --automation-execution-id "df325c6d-b1b1-4aa0-8003-6cb7338213c6" ^
      --signal-type "Deny" ^
      --payload "Comment=your comments"
  ```

------
#### [ PowerShell ]

  ```
  Send-SSMAutomationSignal `
      -AutomationExecutionId df325c6d-b1b1-4aa0-8003-6cb7338213c6 `
      -SignalType Deny `
      -Payload @{"Comment"="your comments"}
  ```

------

  No se obtienen resultados si el comando se ejecuta satisfactoriamente.

# Ejecución de operaciones automatizadas a escala
<a name="running-automations-scale"></a>

Con Automatización de AWS Systems Manager, puede ejecutar automatizaciones en una flota de recursos de AWS mediante el uso de *destinos*. Además, puede controlar la implementación de la automatización en su flota al especificar un valor de simultaneidad y un umbral de error. Las características de umbral de simultaneidad y error se denominan colectivamente *controles de frecuencia*. El valor de simultaneidad determina la cantidad de recursos que pueden ejecutar la automatización de forma simultánea. Automation también proporciona un modo de simultaneidad adaptativa que puede elegir. La simultaneidad adaptativa escala automáticamente su cuota de automatización desde 100 automatizaciones que se ejecutan simultáneamente hasta 500. El umbral de error determina la cantidad de automatizaciones que pueden fallar antes de que Systems Manager deje de enviar la automatización a otros recursos.

Para obtener más información acerca de la simultaneidad y los umbrales de error, consulte [Control de las automatizaciones a escala](running-automations-scale-controls.md). Para obtener más información sobre los destinos, consulte [Asignación de objetivos de una automatización](running-automations-map-targets.md).

Los siguientes procedimientos muestran cómo activar una simultaneidad adaptativa y cómo ejecutar una automatización con controles de frecuencia y destinos a través de la consola de Systems Manager y la AWS Command Line Interface (AWS CLI).

## Ejecución de una automatización con controles de frecuencia y destinos (consola)
<a name="scale-console"></a>

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para ejecutar una automatización con controles de frecuencia y destinos.

**Para ejecutar una automatización con controles de frecuencia y destinos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la lista **Documento de automatización**, elija un manual de procedimientos. Elija una o más opciones en el panel **Categorías de documentos** para filtrar documentos SSM según su propósito. Para ver un manual de procedimientos que le pertenezca, seleccione la pestaña **De mi propiedad**. Para ver un manual de procedimientos que se haya compartido con su cuenta, elija la pestaña **Compartido conmigo**. Para ver todos los manuales de procedimientos, seleccione la pestaña **Todos los documentos**.
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. En la sección **Detalles del documento**, verifique que **Versión del documento** esté establecido como la versión que desea ejecutar. El sistema incluye las siguientes opciones de versión: 
   + **Versión predeterminada en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y se asigna una nueva versión predeterminada.
   + **Última versión en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y desea ejecutar la versión que se ha actualizado más recientemente.
   + **1 (Predeterminado)**: seleccione esta opción para ejecutar la primera versión del documento, que es la predeterminada.

1. Elija **Siguiente**.

1. En la sección **Modo de ejecución**, seleccione **Control de velocidad**. Debe utilizar este modo o **Varias cuentas y regiones** si desea utilizar controles de frecuencia y destinos.

1. En la sección **Destinos**, seleccione cómo quiere que se indiquen los recursos de AWS donde desea ejecutar la automatización como destino. Estas opciones son obligatorias.

   1. Use la lista **Parámetro** para elegir un parámetro. Los elementos de la lista **Parámetro** se determinan a partir de los parámetros en el manual de procedimientos de automatización que seleccionó al inicio de este procedimiento. Al elegir un parámetro, se define el tipo de recurso en el que se ejecuta el flujo de trabajo de automatización. 

   1. Utilice la lista **Destinos** para elegir cómo indicar los recursos de destino.

      1. Si eligió indicar recursos como destino mediante el uso de valores de parámetro, ingrese el valor del parámetro que eligió en la sección **Parámetros de entrada**.

      1. Si eligió los recursos de destino con Grupos de recursos de AWS, entonces elija el nombre del grupo de la lista **Grupo de recursos**.

      1. Si eligió indicar recursos de destino mediante el uso de etiquetas, introduzca la clave de etiqueta y, opcionalmente, un valor de etiqueta en los campos correspondientes. Elija **Agregar**.

      1. Si desea ejecutar un manual de procedimientos de automatización en todas las instancias de la Cuenta de AWS y la Región de AWS actuales, seleccione **Todas las instancias**.

1. En la sección **Parámetros de entrada**, especifique las entradas necesarias: De forma opcional, puede elegir un rol de servicio de IAM de la lista **AutomationAssumeRole**.
**nota**  
Es posible que no tenga que elegir algunas de las opciones de la sección **Input parameters** (Parámetros de entrada). Esto se debe a que ha indicado recursos como destino a través de etiquetas o un grupo de recursos. Por ejemplo, si eligió el manual de procedimientos `AWS-RestartEC2Instance`, no necesita especificar ni elegir los ID de instancia en la sección **Parámetros de entrada**. La ejecución de Automation localiza las instancias que se deben reiniciar a través de las etiquetas o los grupos de recursos que haya especificado.

1. Utilice las opciones de la sección **Control de velocidad** para restringir el número de recursos de AWS que pueden ejecutar la automatización dentro de cada par de cuenta-región. 

   En la sección **Simultaneidad**, elija una opción: 
   + Seleccione **destinos** para introducir un número absoluto de destinos que pueden ejecutar el flujo de trabajo de Automation simultáneamente.
   + Seleccione **porcentaje** para introducir un porcentaje del destino definido que puede ejecutar el flujo de trabajo de Automation simultáneamente.

1. En la sección **Umbral de error**, elija una opción:
   + Elija **errores** para introducir un número absoluto de errores permitidos antes de que Automation deje de enviar el flujo de trabajo a otros recursos.
   + Elija **porcentaje** para introducir un porcentaje de errores permitidos antes de que Automation deje de enviar el flujo de trabajo a otros recursos.

1. (Opcional) Elija una alarma de CloudWatch que desee aplicar a la automatización para fines de monitoreo. Para adjuntar una alarma de CloudWatch a su automatización, la entidad principal de IAM que ejecuta esta última debe tener permiso para la acción `iam:createServiceLinkedRole`. Para obtener más información sobre las alarmas de CloudWatch, consulte [Uso de alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html). Tenga en cuenta que si la alarma se activa, la automatización se detiene. Si usa AWS CloudTrail, verá la llamada a la API en el registro de seguimiento.

1. Elija **Ejecutar**. 

Para ver las automatizaciones que inició la automatización de control de frecuencia, en el panel de navegación, seleccione Automation y, a continuación, elija **Mostrar automatizaciones secundarias**.

Una vez completada la ejecución de una automatización, puede volver a ejecutarla con los mismos parámetros o con parámetros modificados. Para obtener más información, consulte [Volver a ejecutar las ejecuciones de automatización](automation-rerun-executions.md).

## Ejecución de una automatización con controles de frecuencia y destinos (línea de comandos)
<a name="scale-cli"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows) o las Herramientas de AWS para PowerShell para ejecutar una automatización con controles de frecuencia y destinos.

**Para ejecutar una automatización con controles de frecuencia y destinos**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Ejecute el siguiente comando para ver una lista de documentos.

------
#### [ Linux & macOS ]

   ```
   aws ssm list-documents
   ```

------
#### [ Windows ]

   ```
   aws ssm list-documents
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentList
   ```

------

   Anote el nombre del manual de procedimientos que desea usar.

1. Ejecute el siguiente comando para ver detalles acerca del manual de procedimientos. Reemplace *nombre del runbook* con el nombre del manual de procedimientos cuyos detalles desee ver. Además, indique el nombre de parámetro (por ejemplo, `InstanceId`) que desee utilizar para la opción `--target-parameter-name`. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document \
       --name runbook name
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-document ^
       --name runbook name
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentDescription `
       -Name runbook name
   ```

------

1. Cree un comando que utilice las opciones de control de frecuencia y destinos que desee ejecutar. Reemplace cada *example resource placeholder* con su propia información.

   *Indicar destino mediante etiquetas*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets Key=tag:key name,Values=value \
       --target-parameter-name parameter name \
       --parameters "input parameter name=input parameter value,input parameter 2 name=input parameter 2 value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=tag:key name,Values=value ^
       --target-parameter-name parameter name ^
       --parameters "input parameter name=input parameter value,input parameter 2 name=input parameter 2 value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "tag:key name"
   $Targets.Values = "value"
   
   Start-SSMAutomationExecution `
       DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "parameter name" `
       -Parameter @{"input parameter name"="input parameter value";"input parameter 2 name"="input parameter 2 value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   *Indicar destino mediante valores de parámetros*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets Key=ParameterValues,Values=value,value 2,value 3 \
       --target-parameter-name parameter name \
       --parameters "input parameter name=input parameter value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=ParameterValues,Values=value,value 2,value 3 ^
       --target-parameter-name parameter name ^
       --parameters "input parameter name=input parameter value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ParameterValues"
   $Targets.Values = "value","value 2","value 3"
   
   Start-SSMAutomationExecution `
       -DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "parameter name" `
       -Parameter @{"input parameter name"="input parameter value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   *Indicar destino mediante Grupos de recursos de AWS*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets Key=ResourceGroup,Values=Resource group nname \
       --target-parameter-name parameter name \
       --parameters "input parameter name=input parameter value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=ResourceGroup,Values=Resource group name ^
       --target-parameter-name parameter name ^
       --parameters "input parameter name=input parameter value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ResourceGroup"
   $Targets.Values = "Resource group name"
   
   Start-SSMAutomationExecution `
       -DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "parameter name" `
       -Parameter @{"input parameter name"="input parameter value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   *Indicar todas las instancias de Amazon EC2 en la Cuenta de AWS y la Región de AWS actuales*

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --targets "Key=AWS::EC2::Instance,Values=*"  \
       --target-parameter-name instanceId \
       --parameters "input parameter name=input parameter value" \
       --max-concurrency 10 \
       --max-errors 25%
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --targets Key=AWS::EC2::Instance,Values=* ^
       --target-parameter-name instanceId ^
       --parameters "input parameter name=input parameter value" ^
       --max-concurrency 10 ^
       --max-errors 25%
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "AWS::EC2::Instance"
   $Targets.Values = "*"
   
   Start-SSMAutomationExecution `
       -DocumentName "runbook name" `
       -Targets $Targets `
       -TargetParameterName "instanceId" `
       -Parameter @{"input parameter name"="input parameter value"} `
       -MaxConcurrency "10" `
       -MaxError "25%"
   ```

------

   El comando devuelve un ID de ejecución. Copie este ID en el portapapeles. Puede utilizar este ID para ver el estado de la automatización.

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE"
   }
   ```

------
#### [ PowerShell ]

   ```
   a4a3c0e9-7efd-462a-8594-01234EXAMPLE
   ```

------

1. Ejecute el siguiente comando para ver la automatización. Reemplace cada *automation execution ID* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-executions \
       --filter Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-executions ^
       --filter Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecutionList | `
       Where {$_.AutomationExecutionId -eq "automation execution ID"}
   ```

------

1. Ejecute el siguiente comando para ver detalles acerca del progreso de la automatización. Reemplace cada *automation execution ID* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-automation-execution \
       --automation-execution-id automation execution ID
   ```

------
#### [ Windows ]

   ```
   aws ssm get-automation-execution ^
       --automation-execution-id automation execution ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecution `
       -AutomationExecutionId automation execution ID
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecution": {
           "StepExecutionsTruncated": false,
           "AutomationExecutionStatus": "Success",
           "MaxConcurrency": "1",
           "Parameters": {},
           "MaxErrors": "1",
           "Outputs": {},
           "DocumentName": "AWS-StopEC2Instance",
           "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE",
           "ResolvedTargets": {
               "ParameterValues": [
                   "i-02573cafcfEXAMPLE"
               ],
               "Truncated": false
           },
           "ExecutionEndTime": 1564681619.915,
           "Targets": [
               {
                   "Values": [
                       "DEV"
                   ],
                   "Key": "tag:ENV"
               }
           ],
           "DocumentVersion": "1",
           "ExecutionStartTime": 1564681576.09,
           "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
           "StepExecutions": [
               {
                   "Inputs": {
                       "InstanceId": "i-02573cafcfEXAMPLE"
                   },
                   "Outputs": {},
                   "StepName": "i-02573cafcfEXAMPLE",
                   "ExecutionEndTime": 1564681619.093,
                   "StepExecutionId": "86c7b811-3896-4b78-b897-01234EXAMPLE",
                   "ExecutionStartTime": 1564681576.836,
                   "Action": "aws:executeAutomation",
                   "StepStatus": "Success"
               }
           ],
           "TargetParameterName": "InstanceId",
           "Mode": "Auto"
       }
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecution": {
           "StepExecutionsTruncated": false,
           "AutomationExecutionStatus": "Success",
           "MaxConcurrency": "1",
           "Parameters": {},
           "MaxErrors": "1",
           "Outputs": {},
           "DocumentName": "AWS-StopEC2Instance",
           "AutomationExecutionId": "a4a3c0e9-7efd-462a-8594-01234EXAMPLE",
           "ResolvedTargets": {
               "ParameterValues": [
                   "i-02573cafcfEXAMPLE"
               ],
               "Truncated": false
           },
           "ExecutionEndTime": 1564681619.915,
           "Targets": [
               {
                   "Values": [
                       "DEV"
                   ],
                   "Key": "tag:ENV"
               }
           ],
           "DocumentVersion": "1",
           "ExecutionStartTime": 1564681576.09,
           "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
           "StepExecutions": [
               {
                   "Inputs": {
                       "InstanceId": "i-02573cafcfEXAMPLE"
                   },
                   "Outputs": {},
                   "StepName": "i-02573cafcfEXAMPLE",
                   "ExecutionEndTime": 1564681619.093,
                   "StepExecutionId": "86c7b811-3896-4b78-b897-01234EXAMPLE",
                   "ExecutionStartTime": 1564681576.836,
                   "Action": "aws:executeAutomation",
                   "StepStatus": "Success"
               }
           ],
           "TargetParameterName": "InstanceId",
           "Mode": "Auto"
       }
   }
   ```

------
#### [ PowerShell ]

   ```
   AutomationExecutionId       : a4a3c0e9-7efd-462a-8594-01234EXAMPLE
   AutomationExecutionStatus   : Success
   CurrentAction               : 
   CurrentStepName             : 
   DocumentName                : AWS-StopEC2Instance
   DocumentVersion             : 1
   ExecutedBy                  : arn:aws:sts::123456789012:assumed-role/Administrator/Admin
   ExecutionEndTime            : 8/1/2019 5:46:59 PM
   ExecutionStartTime          : 8/1/2019 5:46:16 PM
   FailureMessage              : 
   MaxConcurrency              : 1
   MaxErrors                   : 1
   Mode                        : Auto
   Outputs                     : {}
   Parameters                  : {}
   ParentAutomationExecutionId : 
   ProgressCounters            : 
   ResolvedTargets             : Amazon.SimpleSystemsManagement.Model.ResolvedTargets
   StepExecutions              : {i-02573cafcfEXAMPLE}
   StepExecutionsTruncated     : False
   Target                      : 
   TargetLocations             : {}
   TargetMaps                  : {}
   TargetParameterName         : InstanceId
   Targets                     : {tag:Name}
   ```

------
**nota**  
También puede monitorear el estado de la automatización en la consola. En la lista **Ejecuciones de automatización**, elija la automatización que acaba de ejecutar y, a continuación, seleccione la pestaña **Execution steps**. Esta pestaña muestra el estado de las acciones de la automatización.

# Asignación de objetivos de una automatización
<a name="running-automations-map-targets"></a>

Utilice el parámetro `Targets` para establecer rápidamente cuáles son los recursos a los que se dirige una automatización. Por ejemplo, si desea ejecutar una automatización que reinicie las instancias administradas, en lugar de seleccionar manualmente decenas de ID de instancias en la consola o escribirlos en un comando, puede indicar las instancias como destino mediante la especificación de etiquetas de Amazon Elastic Compute Cloud (Amazon EC2) con el parámetro `Targets`.

Al ejecutar una automatización que utiliza un destino, AWS Systems Manager crea una automatización secundaria para cada destino. Por ejemplo, si indica volúmenes de Amazon Elastic Block Store (Amazon EBS) como destino mediante la especificación de etiquetas, y dichas etiquetas llevan a 100 volúmenes de Amazon EBS, Systems Manager crea 100 automatizaciones secundarias. La automatización principal se completa cuando todas las automatizaciones secundarias alcanzan un estado final.

**nota**  
Todas las automatizaciones secundarias procesan de manera automática cada uno de los `input parameters` que especifique en el tiempo de ejecución (ya sea en la sección **Input parameters** [Parámetros de entrada] de la consola o a través de la opción `parameters` de la línea de comandos).

Puede indicar recursos como destino para una automatización a través de etiquetas, grupos de recursos y valores de parámetros. Además, puede utilizar la opción `TargetMaps` para indicar varios valores de parámetros de destino desde la línea de comandos o un archivo. En la siguiente sección se describe cada una de estas opciones de destino de forma más detallada.

## Especificación de una etiqueta como destino
<a name="target-tags"></a>

Puede especificar una sola etiqueta como destino de una automatización. Muchos recursos de AWS admiten etiquetas, incluidos las instancias de Amazon Elastic Compute Cloud (Amazon EC2) y Amazon Relational Database Service (Amazon RDS), los volúmenes y las instantáneas de Amazon Elastic Block Store (Amazon EBS), los grupos de recursos y los buckets de Amazon Simple Storage Service (Amazon S3), por nombrar algunos. Puede ejecutar rápidamente una automatización en los recursos de AWS especificando una etiqueta como destino. Una etiqueta es un par clave-valor, como Sistema\$1operativo:Linux o Departamento:Finanzas. Si asigna un nombre específico a un recurso, entonces también puede utilizar la palabra "Name" como una clave y el nombre del recurso como el valor.

Cuando se especifica una etiqueta como destino de una automatización, también especifica un parámetro de destino. El parámetro de destino utiliza la opción `TargetParameterName`. Al elegir un parámetro de destino, define el tipo de recurso en el que se ejecuta la automatización. El parámetro de destino que especifique con la etiqueta tiene que ser un parámetro válido definido en el manual de procedimientos. Por ejemplo, si desea indicar docenas de instancias EC2 de destino mediante el uso de etiquetas, elija el parámetro de destino `InstanceId`. Al elegir este parámetro, define las *instancias* como el tipo de recurso para la automatización. Al crear un manual de procedimientos personalizado, debe especificar **Tipo de destino** como `/AWS::EC2::Instance` para asegurarse de que solo se utilicen instancias. De lo contrario, se seleccionarán todos los recursos con la misma etiqueta. Al especificar instancias como destino con una etiqueta, es posible que se incluyan instancias finalizadas.

En la siguiente captura de pantalla, se utiliza el manual de procedimientos `AWS-DetachEBSVolume`. El parámetro de destino lógico es `VolumeId`.

![\[Uso de una etiqueta como destino de Automatización de Systems Manager\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/automation-rate-control-tags-1-new.png)


El manual de procedimientos `AWS-DetachEBSVolume` también incluye una propiedad especial denominada **Target type** (Tipo de destino), que se establece en `/AWS::EC2::Volume`. Esto significa que, si el par de etiqueta-clave `Finance:TestEnv` devuelve diferentes tipos de recursos (por ejemplo, instancias EC2, volúmenes de Amazon EBS, instantáneas de Amazon EBS), solo se usarán los volúmenes de Amazon EBS.

**importante**  
Los nombres de los parámetros de destino distinguen entre mayúsculas y minúsculas. Si ejecuta automatizaciones a través de la AWS Command Line Interface (AWS CLI) o las AWS Tools for Windows PowerShell, debe ingresar el nombre de parámetro de destino tal y como está definido en el manual de procedimientos. Si no lo hace, el sistema devuelve un error `InvalidAutomationExecutionParametersException`. Puede utilizar la operación de la API [DescribeDocument](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeDocument.html) para ver información sobre los parámetros de destino disponibles en un manual de procedimientos específico. A continuación, se muestra un ejemplo de comando de la AWS CLI que proporciona información acerca del documento `AWS-DeleteSnapshot`.  

```
aws ssm describe-document \
    --name AWS-DeleteSnapshot
```

A continuación se muestran algunos ejemplos de comandos de AWS CLI que tienen como destino recursos mediante el uso de una etiqueta.

**Ejemplo 1: especificación de una etiqueta como destino utilizando un par clave-valor para reiniciar instancias de Amazon EC**

En este ejemplo, se reinician todas las instancias de Amazon EC2 que estén etiquetadas con una clave *Department* y un valor *HumanResources*. El parámetro de destino utiliza el parámetro *InstanceId* del manual de procedimientos. En el ejemplo, se utiliza un parámetro adicional para ejecutar Automation mediante el uso de un rol de servicio de Automation (también denominado *rol de asunción*).

```
aws ssm start-automation-execution \
    --document-name AWS-RestartEC2Instance \
    --targets Key=tag:Department,Values=HumanResources \
    --target-parameter-name InstanceId \
    --parameters "AutomationAssumeRole=arn:aws:iam::111122223333:role/AutomationServiceRole"
```

**Ejemplo 2: especificación de una etiqueta como destino utilizando un par clave-valor para eliminar instantáneas de Amazon EBS**

En el siguiente ejemplo, se utiliza el manual de procedimientos `AWS-DeleteSnapshot` para eliminar todas las instantáneas con una clave *Name* y un valor *January2018Backups*. El parámetro de destino usa el parámetro *VolumeId*.

```
aws ssm start-automation-execution \
    --document-name AWS-DeleteSnapshot \
    --targets Key=tag:Name,Values=January2018Backups \
    --target-parameter-name VolumeId
```

## Indicar de destino Grupos de recursos de AWS
<a name="target-resource-groups"></a>

Puede indicar un solo grupo de recursos de AWS como destino de una automatización. Systems Manager crea una automatización secundaria para todos los objetos del grupo de recursos de destino.

Por ejemplo, supongamos que uno de los grupos de recursos se llama PatchedAMIs. Este grupo de recursos incluye una lista de 25 Amazon Machine Images (AMIs) de Windows a las cuales se aplican revisiones de forma rutinaria. Si ejecuta una automatización que utiliza el manual de procedimientos `AWS-CreateManagedWindowsInstance` e indica este grupo de recursos como destino, Systems Manager crea una automatización secundaria para cada una de las 25 AMIs. Esto significa que, al indicar el grupo de recursos PatchedAMIs como destino, la automatización creará 25 instancias a partir de una lista de AMIs a las cuales se han aplicado revisiones. La automatización principal se completa cuando todas las automatizaciones secundarias finalizan el procesamiento o alcanzan un estado final.

El siguiente comando de AWS CLI se aplica al ejemplo del grupo de recursos PatchAMIs. El comando adopta el parámetro *AmiId* para la opción `--target-parameter-name`. El comando no incluye un parámetro adicional que defina el tipo de instancia que se debe crear a partir de cada AMI. El manual de procedimientos `AWS-CreateManagedWindowsInstance` recurre a la opción predeterminada de tipo de instancia t2.medium, por lo que este comando crearía 25 instancias de Amazon EC2 t2.medium para Windows Server.

```
aws ssm start-automation-execution \
    --document-name AWS-CreateManagedWindowsInstance \
    --targets Key=ResourceGroup,Values=PatchedAMIs  \
    --target-parameter-name AmiId
```

En el siguiente ejemplo de consola, se utiliza un grupo de recursos llamado t2-micro-instances.

![\[Indicar un grupo de recursos de AWS como destino mediante una automatización de Systems Manager\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/automation-rate-control-resource-groups-new.png)


## Indicar valores de parámetros de destino
<a name="target-parameter-values"></a>

También puede indicar el valor de un parámetro de destino. Ingresa `ParameterValues` como clave y, a continuación, el valor del recurso específico donde desee que se ejecute la automatización. Si especifica varios valores, Systems Manager ejecuta una automatización secundaria en cada valor especificado.

Por ejemplo, supongamos que su manual de procedimientos incluye un parámetro **InstanceID**. Si indica los valores del parámetro **InstanceID** como destino a la hora de ejecutar Automation, Systems Manager ejecuta una automatización secundaria para el valor de ID de cada instancia especificada. La automatización principal se habrá completado cuando la automatización termine de ejecutar cada instancia especificada o cuando se produzca un error en la automatización. Puede indicar un máximo de 50 valores de parámetros de destino.

El siguiente ejemplo utiliza el manual de procedimientos `AWS-CreateImage`. El nombre del parámetro de destino es *InstanceId*. La clave utiliza *ParameterValues*. Los valores son dos ID de instancias de Amazon EC2. Este comando crea una automatización para cada instancia, lo cual produce una AMI a partir de cada instancia. 

```
aws ssm start-automation-execution 
    --document-name AWS-CreateImage \
    --target-parameter-name InstanceId \
    --targets Key=ParameterValues,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE
```

**nota**  
`AutomationAssumeRole` no es un parámetro válido. No elija este elemento al ejecutar una automatización que tiene como destino el valor de un parámetro.

### Indicar mapas de valores de parámetros de destino
<a name="target-maps"></a>

La opción `TargetMaps` amplía su capacidad de indicar `ParameterValues` como destino. Puede introducir una matriz de valores de parámetros usando `TargetMaps` en la línea de comandos. Puede especificar un máximo de 50 valores de parámetros en la línea de comandos. Si desea ejecutar comandos que especifiquen más de 50 valores de parámetros, puede introducir los valores en un archivo JSON. A continuación, puede llamar al archivo desde la línea de comandos.

**nota**  
La consola no admite la opción `TargetMaps`.

Utilice el siguiente formato para especificar varios valores de parámetros con la opción `TargetMaps` en un comando. Reemplace cada *example resource placeholder* con su propia información.

```
aws ssm start-automation-execution \
    --document-name runbook name \
    --target-maps “parameter=value, parameter 2=value, parameter 3=value”  “parameter 4=value, parameter 5=value, parameter 6=value”
```

Si desea especificar más de 50 valores de parámetros para la opción `TargetMaps`, especifique los valores en un archivo mediante el siguiente formato JSON. El uso de un archivo JSON también mejora la legibilidad al proporcionar varios valores de parámetros.

```
[

    {“parameter”: "value", “parameter 2”: "value", “parameter 3”: "value"},

    {“parameter 4”: "value", “parameter 5”: "value", "parameter 6": "value"}

]
```

Guarde el archivo con la extensión de archivo .json. Puede llamar al archivo con el siguiente comando. Reemplace cada *example resource placeholder* con su propia información.

```
aws ssm start-automation-execution \
    --document-name runbook name \
    –-parameters input parameters \
    --target-maps path to file/file name.json
```

También puede descargar el archivo de un bucket de Amazon Simple Storage Service (Amazon S3), siempre y cuando tenga permiso para leer datos del bucket. Utilice el siguiente formato de comando. Reemplace cada *example resource placeholder* con su propia información.

```
aws ssm start-automation-execution \
    --document-name runbook name \
    --target-maps http://amzn-s3-demo-bucket.s3.amazonaws.com/file_name.json
```

A continuación se muestra un ejemplo de escenario para ayudarle a comprender la opción `TargetMaps`. En este escenario, un usuario quiere crear instancias de Amazon EC2 de diferentes tipos a partir de diferentes AMIs. Para realizar esta tarea, el usuario crea un manual de procedimientos denominado AMI\$1Testing. Este manual de procedimientos define dos parámetros de entrada: `instanceType` e `imageId`. 

```
{
  "description": "AMI Testing",
  "schemaVersion": "0.3",
  "assumeRole": "{{assumeRole}}",
  "parameters": {
    "assumeRole": {
      "type": "String",
      "description": "Role under which to run the automation",
      "default": ""
    },
    "instanceType": {
      "type": "String",
      "description": "Type of EC2 Instance to launch for this test"
    },
    "imageId": {
      "type": "String",
      "description": "Source AMI id from which to run instance"
    }
  },
  "mainSteps": [
    {
      "name": "runInstances",
      "action": "aws:runInstances",
      "maxAttempts": 1,
      "onFailure": "Abort",
      "inputs": {
        "ImageId": "{{imageId}}",
        "InstanceType": "{{instanceType}}",
        "MinInstanceCount": 1,
        "MaxInstanceCount": 1
      }
    }
  ],
  "outputs": [
    "runInstances.InstanceIds"
  ]
}
```

A continuación, el usuario especifica los siguientes valores de parámetros de destino en un archivo denominado `AMI_instance_types.json`.

```
[
  {
    "instanceType" : ["t2.micro"],     
    "imageId" : ["ami-b70554c8"]     
  },
  {
    "instanceType" : ["t2.small"],     
    "imageId" : ["ami-b70554c8"]     
  },
  {
    "instanceType" : ["t2.medium"],     
    "imageId" : ["ami-cfe4b2b0"]     
  },
  {
    "instanceType" : ["t2.medium"],     
    "imageId" : ["ami-cfe4b2b0"]     
  },
  {
    "instanceType" : ["t2.medium"],     
    "imageId" : ["ami-cfe4b2b0"]     
  }
]
```

El usuario puede ejecutar la automatización y crear las cinco instancias EC2 definidas en `AMI_instance_types.json` mediante la ejecución del siguiente comando.

```
aws ssm start-automation-execution \
    --document-name AMI_Testing \
    --target-parameter-name imageId \
    --target-maps file:///home/TestUser/workspace/runinstances/AMI_instance_types.json
```

## Indicar todas las instancias de Amazon EC2
<a name="target-all-instances"></a>

Puede ejecutar una automatización en todas las instancias de Amazon EC2 en la Cuenta de AWS y Región de AWS actuales si elige **Todas las instancias** en la lista **Destinos**. Por ejemplo, si desea reiniciar todas las instancias administradas de Amazon EC2, su Cuenta de AWS y la Región de AWS actual, puede elegir el manual de procedimientos `AWS-RestartEC2Instance` y, luego, **Todas las instancias** en la lista **Destinos**.

![\[Indicar todas las instancias de Amazon EC2 para un manual de procedimientos\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/automation-rate-control-target-all-instances.png)


Después de seleccionar **All instances** (Todas las instancias), Systems Manager completa el campo **Instance** (Instancia) con un asterisco (\$1) y lo marca como no disponible para los cambios (el campo aparece atenuado). Systems Manager también hace que el campo **InstanceId** del campo **Input parameters** (Parámetros de entrada) deje de estar disponible para los cambios. Hacer que estos campos no estén disponibles para los cambios es un comportamiento esperado si elige indicar como destino todas las instancias.

# Control de las automatizaciones a escala
<a name="running-automations-scale-controls"></a>

Puede controlar la implementación de una automatización en una flota de recursos de AWS mediante la especificación de un valor de simultaneidad y un umbral de error. La simultaneidad y el umbral de error se denominan colectivamente *controles de frecuencia*.

**Simultaneidad**  
Utilice la simultaneidad para especificar la cantidad de recursos que pueden ejecutar una automatización de forma simultánea. La simultaneidad ayuda a limitar el impacto o el tiempo de inactividad en sus recursos cuando se procesa una automatización. Puede especificar un número absoluto de recursos, por ejemplo, 20 o un porcentaje del destino definido, por ejemplo, el 10 %.

El sistema de colas entrega la automatización a un solo recurso y espera hasta que se complete la invocación inicial antes de enviar la automatización a dos o más recursos. El sistema envía la automatización a más recursos de manera exponencial hasta que se alcanza el valor de simultaneidad.

**Umbrales de error**  
Utilice un umbral de error para especificar la cantidad de automatizaciones que pueden presentar error antes de que AWS Systems Manager deje de enviar la automatización a otros recursos. Puede especificar un número absoluto de errores, por ejemplo, 10 o un porcentaje del destino definido, por ejemplo, el 10 %.

Si especifica un número absoluto de 3 errores, por ejemplo, el sistema dejará de ejecutar la automatización cuando se reciba el cuarto error. Si especifica 0, el sistema dejará de ejecutar la automatización en otros destinos una vez que se reciba el primer resultado de error.

Por ejemplo, si envía una automatización a 50 instancias y establece el umbral de error en 10 %, el sistema dejará de enviar el comando a otras instancias cuando se reciba el quinto error. Las invocaciones que ya están ejecutando una automatización cuando se alcanza un umbral de error tienen permiso para completar el procesamiento, pero algunas de estas automatizaciones también podrían presentar un error. Si debe asegurarse de que no se produzcan más errores que el número especificado para el umbral de error, establezca el valor **Concurrency** (Simultaneidad) en 1 de modo que las automatizaciones se procesen de una en una. 

# Ejecución de automatizaciones en varias cuentas y Regiones de AWS
<a name="running-automations-multiple-accounts-regions"></a>

Puede ejecutar automatizaciones de AWS Systems Manager en varias Regiones de AWS y Cuentas de AWS, o unidades organizativas de AWS Organizations desde una cuenta central. Automatización es una herramienta de AWS Systems Manager. La ejecución de automatizaciones en varias regiones, cuentas u OU reduce la cantidad de tiempo necesario para administrar los recursos de AWS, a la vez que mejora la seguridad de su entorno informático.

Por ejemplo, puede hacer lo siguiente con manuales de procedimientos de automatización:
+ Implementar revisiones y actualizaciones de seguridad de forma centralizada.
+ Corregir la desviación del cumplimiento en las configuraciones de VPC o en políticas del bucket de Amazon S3.
+ Administrar recursos a escala, como instancias de Amazon Elastic Compute Cloud (Amazon EC2).

En el siguiente diagrama, se muestra un ejemplo de un usuario que ejecuta el manual de procedimientos `AWS-RestartEC2Instances` en varias regiones y cuentas desde una cuenta central. La automatización localiza las instancias a través de las etiquetas especificadas en las regiones y las cuentas determinadas.

![\[Ilustración que muestra la ejecución de Automatización de Systems Manager en varias regiones y cuentas.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/automation-multi-region-and-multi-account.png)


**Elija una cuenta central para Automatización**  
Si desea ejecutar automatizaciones en todas las unidades organizativas, la cuenta central debe tener permisos para enumerar todas las cuentas de las mismas. Esto solo es posible desde una cuenta de administrador delegado o desde la cuenta de administración de la organización. Le recomendamos que siga las prácticas recomendadas de AWS Organizations y use una cuenta de administrador delegado. Para obtener más información acerca de las prácticas recomendadas de AWS Organizations, consulte [Prácticas recomendadas para la cuenta de administración](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html) en la *Guía del usuario de AWS Organizations*. Para crear una cuenta de administrador delegado de Systems Manager, puede utilizar el comando `register-delegated-administrator` con la AWS CLI, tal y como se muestra en el siguiente ejemplo.

```
aws organizations register-delegated-administrator \
    --account-id delegated admin account ID \
    --service-principal ssm.amazonaws.com
```

Si quiere ejecutar automatizaciones en varias cuentas que no estén administradas por AWS Organizations, recomendamos crear una cuenta dedicada a la administración de automatizaciones. Ejecutar todas las automatizaciones entre cuentas desde una cuenta dedicada simplifica la administración de permisos de IAM, la solución de problemas y crea una capa de separación entre las operaciones y la administración. Este enfoque también se recomienda si usa AWS Organizations, pero solo se quiere dirigirse a cuentas individuales y no a unidades organizativas.

**Cómo funciona la ejecución de automatizaciones**  
La ejecución de automatizaciones en varias regiones, cuentas u OU funciona de la siguiente manera:

1. Inicie sesión en la cuenta que desee configurar como cuenta central de Automatización.

1. Utilice el procedimiento [Configuración de permisos de administración de la cuenta para la automatización de varias regiones y cuentas](#setup-management-account-iam-roles) en este tema para crear los siguientes roles de IAM:
   + `AWS-SystemsManager-AutomationAdministrationRole`: este rol concede a los usuarios permiso para ejecutar automatizaciones en varias cuentas y unidades organizativas.
   + `AWS-SystemsManager-AutomationExecutionRole`: este rol concede a los usuarios permiso para ejecutar automatizaciones en cuentas determinadas.

1. Elija el manual de procedimientos, las regiones, las cuentas o las OU donde desea ejecutar la automatización.
**nota**  
Asegúrese de que la unidad organizativa de destino contenga las cuentas deseadas. Si elige un manual de procedimientos personalizado, este debe compartirse con todas las cuentas de destino. Para obtener información acerca de cómo compartir manuales de procedimiento, consulte [Uso compartido de documentos de SSM](documents-ssm-sharing.md). Para obtener información acerca del uso de manuales de procedimientos compartidos, consulte [Uso de documentos de SSM compartidos](documents-ssm-sharing.md#using-shared-documents).

1. Ejecute la automatización.

1. Utilice las operaciones de la API [GetAutomationExecution](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetAutomationExecution.html), [DescribeAutomationStepExecutions](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeAutomationStepExecutions.html) y [DescribeAutomationExecutions](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeAutomationExecutions.html) desde la consola de AWS Systems Manager o la AWS CLI para supervisar el progreso de la automatización. La salida de los pasos para la automatización en su cuenta principal será el `AutomationExecutionId` de las automatizaciones secundarias. Para ver la salida de las automatizaciones secundarias creadas en las cuentas de destino, asegúrese de especificar la cuenta, la región y el `AutomationExecutionId` adecuados en su solicitud.

## Configuración de permisos de administración de la cuenta para la automatización de varias regiones y cuentas
<a name="setup-management-account-iam-roles"></a>

Utilice el siguiente procedimiento para crear los roles de IAM necesarios para la automatización de Systems Manager de varias regiones y cuentas mediante AWS CloudFormation. Este procedimiento describe cómo crear el rol `AWS-SystemsManager-AutomationAdministrationRole`. Solo tiene que crear este rol en la cuenta central de Automatización. Este procedimiento también describe cómo crear el rol `AWS-SystemsManager-AutomationExecutionRole`. Debe crear este rol en *todas* las cuentas que desea indicar como destino para ejecutar automatizaciones de varias regiones y cuentas. Se recomienda utilizar CloudFormation StackSets para crear el rol `AWS-SystemsManager-AutomationExecutionRole` en las cuentas que desee indicar como destino para ejecutar automatizaciones de varias regiones y cuentas.

**Para crear el rol de automatización de IAM requerido en las automatizaciones de varias regiones y cuentas mediante el uso de CloudFormation**

1. Descargue y descomprima [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole.zip).

   -o bien-

   Si sus cuentas están administradas por AWS Organizations [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole (org).zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationAdministrationRole (org).zip).

   Estos archivos contienen los archivos `AWS-SystemsManager-AutomationAdministrationRole.yaml` y los archivos de plantilla `AWS-SystemsManager-AutomationAdministrationRole (org).yaml` de CloudFormation, respectivamente.

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Elija **Crear pila**.

1. En la sección **Especificar plantilla** elija **Cargar un archivo de plantilla**.

1. Seleccione **Elegir archivo** y, a continuación, elija el archivo `AWS-SystemsManager-AutomationAdministrationRole.yaml` o el archivo de plantilla `AWS-SystemsManager-AutomationAdministrationRole (org).yaml` de CloudFormation, según lo que haya seleccionado en el paso 1.

1. Elija **Siguiente**.

1. En la página **Especificar los detalles de la pila**, escriba un nombre en el campo **Nombre de la pila**. 

1. Elija **Siguiente**.

1. En la página **Configurar opciones de la pila**, ingrese los valores de las opciones que desea utilizar. Elija **Siguiente**.

1. En la página **Revisar**, desplácese hacia abajo y elija la opción **I acknowledge that CloudFormation might create IAM resources with custom names**.

1. Elija **Crear pila**.

CloudFormation muestra el estado **CREATE\$1IN\$1PROGRESS** durante tres minutos aproximadamente. El estado cambia a **CREATE\$1COMPLETE**.

Tiene que repetir el siguiente procedimiento en *todas* las cuentas que desee indicar como destino para ejecutar automatizaciones de varias regiones y cuentas.

**Para crear el rol de automatización de IAM requerido en las automatizaciones de varias regiones y cuentas mediante el uso de CloudFormation**

1. Descargue [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole.zip).

   o

   Si sus cuentas están administradas por AWS Organizations [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole (org).zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWS-SystemsManager-AutomationExecutionRole (org).zip).

   Estos archivos contienen los archivos `AWS-SystemsManager-AutomationExecutionRole.yaml` y los archivos de plantilla `AWS-SystemsManager-AutomationExecutionRole (org).yaml` de CloudFormation, respectivamente.

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Elija **Crear pila**.

1. En la sección **Especificar plantilla** elija **Cargar un archivo de plantilla**.

1. Seleccione **Elegir archivo** y, a continuación, elija el archivo `AWS-SystemsManager-AutomationExecutionRole.yaml` o el archivo de plantilla `AWS-SystemsManager-AutomationExecutionRole (org).yaml` de CloudFormation, según lo que haya seleccionado en el paso 1.

1. Elija **Siguiente**.

1. En la página **Especificar los detalles de la pila**, escriba un nombre en el campo **Nombre de la pila**. 

1. En la sección **Parámetros**, en el campo **AdminAccountId**, escriba el ID de la cuenta central de Automatización.

1. Si configura este rol para un entorno de AWS Organizations, hay otro campo en la sección denominado **OrganizationID**. Ingrese el ID de su organización de AWS.

1. Elija **Siguiente**.

1. En la página **Configurar opciones de la pila**, ingrese los valores de las opciones que desea utilizar. Elija **Siguiente**.

1. En la página **Revisar**, desplácese hacia abajo y elija la opción **I acknowledge that CloudFormation might create IAM resources with custom names**.

1. Elija **Crear pila**.

CloudFormation muestra el estado **CREATE\$1IN\$1PROGRESS** durante tres minutos aproximadamente. El estado cambia a **CREATE\$1COMPLETE**.

## Ejecución de una automatización en varias regiones y cuentas (consola)
<a name="multiple-console"></a>

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para ejecutar una automatización de varias regiones y cuentas desde la cuenta de administración de Automation.

**Antes de empezar**  
Antes de completar el siguiente procedimiento, tenga en cuenta la siguiente información:
+ El usuario o el rol que utilice para ejecutar una automatización de varias regiones o cuentas debe tener el permiso `iam:PassRole` para el rol `AWS-SystemsManager-AutomationAdministrationRole`.
+ Cuenta de AWSlas OU o los ID de la donde desee ejecutar la automatización
+ [las regiones admitidas por Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) en las que desea ejecutar la automatización
+ la clave y el valor de la etiqueta, o el nombre del grupo de recursos donde desea ejecutar la automatización

**Para ejecutar una automatización en varias regiones y cuentas**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la lista **Documento de automatización**, elija un manual de procedimientos. Elija una o más opciones en el panel **Categorías de documentos** para filtrar documentos SSM según su propósito. Para ver un manual de procedimientos que le pertenezca, seleccione la pestaña **De mi propiedad**. Para ver un manual de procedimientos que se haya compartido con su cuenta, elija la pestaña **Compartido conmigo**. Para ver todos los manuales de procedimientos, seleccione la pestaña **Todos los documentos**.
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. En la sección **Detalles del documento**, verifique que **Versión del documento** esté establecido como la versión que desea ejecutar. El sistema incluye las siguientes opciones de versión: 
   + **Versión predeterminada en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y se asigna una nueva versión predeterminada.
   + **Última versión en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y desea ejecutar la versión que se ha actualizado más recientemente.
   + **1 (Predeterminado)**: seleccione esta opción para ejecutar la primera versión del documento, que es la predeterminada.

1. Elija **Siguiente**.

1. En la página **Ejecutar documento de automatización**, elija **Varias cuentas y regiones**.

1. En la sección **Cuentas y regiones de destino**, utilice el campo **Cuentas, unidades organizativas (UO) y raíces** para especificar las diferentes Cuentas de AWS o unidades organizativas de (UO) AWS donde desea ejecutar la automatización. Si indica varias cuentas u OU, sepárelas con comas. 

   1. (Opcional) Seleccione la casilla de verificación **Incluir UO secundarias** para incluir todas las unidades organizativas secundarias dentro de las UO especificadas.

   1. (Opcional) En el campo **Excluir cuentas y unidades organizativas (OU)**, introduzca una lista separada por comas de los identificadores de cuentas e identificadores de unidades organizativas que quiera excluir de las entidades ampliadas indicadas anteriormente.

1. Utilice la lista **Regiones** para elegir una o varias regiones donde desea ejecutar la automatización.

1. Utilice las opciones **Multi-Region and account rate control** para restringir la automatización a un número limitado de cuentas que se ejecutan en un número limitado de regiones. Estas opciones no restringen el número de recursos de AWS que pueden ejecutar las automatizaciones. 

   1. En la sección **Simultaneidad de ubicación (par de cuenta y región**, seleccione una opción para restringir el número de automatizaciones que se pueden ejecutar en varias cuentas y regiones al mismo tiempo. Por ejemplo, si decide ejecutar una automatización en cinco (5) Cuentas de AWS, que se encuentran en cuatro (4) Regiones de AWS, Systems Manager ejecuta las automatizaciones en un total de 20 pares de cuenta-región. Puede utilizar esta opción para especificar un número absoluto, como **2**, para que la automatización solo se ejecute en dos pares de cuenta-región a la vez. También puede especificar un porcentaje de pares cuenta-región que se pueden ejecutar al mismo tiempo. Por ejemplo, con 20 pares de cuenta-región, si especifica un 20 %, la automatización se ejecuta de manera simultánea en un máximo de cinco (5) pares de cuenta-región. 
      + Elija **destinos** para ingresar un número absoluto de pares de cuenta-región que pueden ejecutar la automatización simultáneamente.
      + Elija **porcentaje** para ingresar un porcentaje del número total de pares de cuenta-región que pueden ejecutar la automatización simultáneamente.

   1. En la sección **Umbral de error**, elija una opción:
      + Elija **errores** para ingresar un número absoluto de errores permitidos antes de que Automation deje de enviar la automatización a otros recursos.
      + Elija **porcentaje** para ingresar un porcentaje de errores permitidos antes de que Automation deje de enviar la automatización a otros recursos.

1. En la sección **Destinos**, seleccione cómo quiere que se indiquen los recursos de AWS donde desea ejecutar la automatización como destino. Estas opciones son obligatorias.

   1. Use la lista **Parámetro** para elegir un parámetro. Los elementos de la lista **Parámetro** se determinan a partir de los parámetros en el manual de procedimientos de automatización que seleccionó al inicio de este procedimiento. Al elegir un parámetro, se define el tipo de recurso en el que se ejecuta el flujo de trabajo de automatización. 

   1. Utilice la lista **Destinos** para elegir cómo indicar los recursos de destino.

      1. Si eligió indicar recursos como destino mediante el uso de valores de parámetro, ingrese el valor del parámetro que eligió en la sección **Parámetros de entrada**.

      1. Si eligió los recursos de destino con Grupos de recursos de AWS, entonces elija el nombre del grupo de la lista **Grupo de recursos**.

      1. Si eligió indicar recursos de destino mediante el uso de etiquetas, introduzca la clave de etiqueta y, opcionalmente, un valor de etiqueta en los campos correspondientes. Elija **Agregar**.

      1. Si desea ejecutar un manual de procedimientos de automatización en todas las instancias de la Cuenta de AWS y la Región de AWS actuales, seleccione **Todas las instancias**.

1. En la sección **Parámetros de entrada**, especifique las entradas necesarias: De forma opcional, puede elegir un rol de servicio `AWS-SystemsManager-AutomationAdministrationRole` de IAM de la lista **AutomationAssumeRole**.
**nota**  
Es posible que no tenga que elegir algunas de las opciones de la sección **Parámetros de entrada**. Esto se debe a que ha indicado recursos de destino en varias regiones y cuentas mediante etiquetas o un grupo de recursos. Por ejemplo, si eligió el manual de procedimientos `AWS-RestartEC2Instance`, no necesita especificar ni elegir los ID de instancia en la sección **Parámetros de entrada**. La automatización localiza las instancias que desea reiniciar a través de las etiquetas que ha especificado. 

1. (Opcional) Elija una alarma de CloudWatch que desee aplicar a la automatización para fines de monitoreo. Para adjuntar una alarma de CloudWatch a su automatización, la entidad principal de IAM que ejecuta esta última debe tener permiso para la acción `iam:createServiceLinkedRole`. Para obtener más información sobre las alarmas de CloudWatch, consulte [Uso de alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html). Tenga en cuenta que si la alarma se activa, la automatización se cancela y se ejecutará cualquier paso `OnCancel` que haya definido. Si usa AWS CloudTrail, verá la llamada a la API en el registro de seguimiento.

1. Utilice las opciones de la sección **Control de velocidad** para restringir el número de recursos de AWS que pueden ejecutar la automatización dentro de cada par de cuenta-región. 

   En la sección **Simultaneidad**, elija una opción: 
   + Seleccione **destinos** para introducir un número absoluto de destinos que pueden ejecutar el flujo de trabajo de Automation simultáneamente.
   + Seleccione **porcentaje** para introducir un porcentaje del destino definido que puede ejecutar el flujo de trabajo de Automation simultáneamente.

1. En la sección **Umbral de error**, elija una opción:
   + Elija **errores** para introducir un número absoluto de errores permitidos antes de que Automation deje de enviar el flujo de trabajo a otros recursos.
   + Elija **porcentaje** para introducir un porcentaje de errores permitidos antes de que Automation deje de enviar el flujo de trabajo a otros recursos.

1. Elija **Ejecutar**.

Una vez completada la ejecución de una automatización, puede volver a ejecutarla con los mismos parámetros o con parámetros modificados. Para obtener más información, consulte [Volver a ejecutar las ejecuciones de automatización](automation-rerun-executions.md).

## Ejecución de una automatización en varias regiones y cuentas (línea de comandos)
<a name="multiple-cli"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows) o las Herramientas de AWS para PowerShell para ejecutar la automatización en varias regiones y cuentas desde la cuenta de administración de Automation.

**Antes de empezar**  
Antes de completar el siguiente procedimiento, tenga en cuenta la siguiente información:
+ Cuenta de AWSlas OU o los ID de la donde desee ejecutar la automatización
+ [las regiones admitidas por Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) en las que desea ejecutar la automatización
+ la clave y el valor de la etiqueta, o el nombre del grupo de recursos donde desea ejecutar la automatización

**Para ejecutar una automatización en varias regiones y cuentas**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Utilice el siguiente formato a fin de crear un comando para ejecutar una automatización en varias regiones y cuentas. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name runbook name \
           --parameters AutomationAssumeRole=arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name parameter name \
           --targets Key=tag key,Values=value \
           --target-locations Accounts=account ID,account ID 2,Regions=Region,Region 2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name runbook name ^
           --parameters AutomationAssumeRole=arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name parameter name ^
           --targets Key=tag key,Values=value ^
           --target-locations Accounts=account ID,account ID 2,Regions=Region,Region 2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "tag key"
       $Targets.Values = "value"
       
       Start-SSMAutomationExecution `
           -DocumentName "runbook name" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "parameter name" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="account ID","account ID 2";
           "Regions"="Region","Region 2";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

**Ejemplos: ejecución de una automatización en varias regiones y cuentas**  
Los siguientes son ejemplos que muestran cómo usar AWS CLI y PowerShell para ejecutar automatizaciones en varias cuentas y regiones con un solo comando.

   **Ejemplo 1**: en este ejemplo se reinician las instancias de EC2 en tres regiones de toda la organización de AWS Organizations. Para ello, céntrese en el ID raíz de la organización e incluya las unidades organizativas secundarias.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name "AWS-RestartEC2Instance" \
           --target-parameter-name InstanceId \
           --targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]' \
           --target-locations '[{
               "Accounts": ["r-example"],
               "IncludeChildOrganizationUnits": true,
               "Regions": ["us-east-1", "us-east-2", "us-west-2"]
           }]'
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution \
           --document-name "AWS-RestartEC2Instance" ^
           --target-parameter-name InstanceId ^
           --targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]' ^
           --target-locations '[{
               "Accounts": ["r-example"],
               "IncludeChildOrganizationUnits": true,
               "Regions": ["us-east-1", "us-east-2", "us-west-2"]
           }]'
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -TargetParameterName "InstanceId" `
           -Targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]'
           -TargetLocation @{
               "Accounts"="r-example";
               "Regions"="us-east-1", "us-east-2", "us-west-2";
               "IncludeChildOrganizationUnits"=true}
   ```

------

   **Ejemplo 2**: en este ejemplo se reinician las instancias de EC2 específicas en distintas cuentas y regiones.
**nota**  
La opción `TargetLocationMaxConcurrency` está disponible con los SDK de AWS CLI y AWS.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name "AWS-RestartEC2Instance" \
           --target-parameter-name InstanceId \
           --target-locations '[{
               "Accounts": ["123456789012"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-1"]
           }, {
               "Accounts": ["987654321098"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-07782c72faEXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-2"]
           }]'
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name "AWS-RestartEC2Instance" ^
           --target-parameter-name InstanceId ^
           --target-locations '[{
               "Accounts": ["123456789012"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-1"]
           }, {
               "Accounts": ["987654321098"],
               "Targets": [{
                   "Key":"ParameterValues",
                   "Values":["i-07782c72faEXAMPLE"]
               }],
               "TargetLocationMaxConcurrency": "100%",
               "Regions": ["us-east-2"]
           }]'
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -TargetParameterName "InstanceId" `
           -Targets '[{"Key":"AWS::EC2::Instance","Values":["*"]}]'
           -TargetLocation @({
               "Accounts"="123456789012",
               "Targets"= @{
                   "Key":"ParameterValues",
                   "Values":["i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE"]
               },
               "TargetLocationMaxConcurrency"="100%",
               "Regions"=["us-east-1"]
           }, {
               "Accounts"="987654321098",
               "Targets": @{
                   "Key":"ParameterValues",
                   "Values":["i-07782c72faEXAMPLE"]
               },
               "TargetLocationMaxConcurrency": "100%",
               "Regions"=["us-east-2"]
           })
   ```

------

   **Ejemplo 3**: en este ejemplo, se muestra cómo especificar varias Cuentas de AWS y regiones en las que debe ejecutarse la automatización mediante la opción `--target-locations-url`. El valor de esta opción debe ser un archivo JSON en una [URL de Amazon S3 prefirmada](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html) y de acceso público.
**nota**  
`--target-locations-url` está disponible cuando se utilizan los SDK de AWS CLI y AWS.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "MyCustomAutomationRunbook" \
       --target-locations-url "https://amzn-s3-demo-bucket.s3.amazonaws.com/target-locations.json"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "MyCustomAutomationRunbook" ^
       --target-locations-url "https://amzn-s3-demo-bucket.s3.amazonaws.com/target-locations.json"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName "MyCustomAutomationRunbook" `
       -TargetLocationsUrl "https://amzn-s3-demo-bucket.s3.amazonaws.com/target-locations.json"
   ```

------

   Contenido de muestra del archivo JSON:

   ```
   [
   { 
            "Accounts": [ "123456789012", "987654321098", "456789123012" ],
            "ExcludeAccounts": [ "111222333444", "999888444666" ],
            "ExecutionRoleName": "MyAutomationExecutionRole",
            "IncludeChildOrganizationUnits": true,
            "Regions": [ "us-east-1", "us-west-2", "ap-south-1", "ap-northeast-1" ],
            "Targets": ["Key": "AWS::EC2::Instance", "Values": ["i-2"]],
            "TargetLocationMaxConcurrency": "50%",
            "TargetLocationMaxErrors": "10",
            "TargetsMaxConcurrency": "20",
            "TargetsMaxErrors": "12"
    }
   ]
   ```

   **Ejemplo 4**: en este ejemplo se reinician las instancias de EC2 en las cuentas `123456789012` y `987654321098`, que se encuentran en las regiones `us-east-2` y `us-west-1`. Las instancias deben estar etiquetadas con el valor de par de claves de etiqueta `Env-PROD`.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name AWS-RestartEC2Instance \
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name InstanceId \
           --targets Key=tag:Env,Values=PROD \
           --target-locations Accounts=123456789012,987654321098,Regions=us-east-2,us-west-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name AWS-RestartEC2Instance ^
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name InstanceId ^
           --targets Key=tag:Env,Values=PROD ^
           --target-locations Accounts=123456789012,987654321098,Regions=us-east-2,us-west-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "tag:Env"
       $Targets.Values = "PROD"
       
       Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "InstanceId" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="123456789012","987654321098";
           "Regions"="us-east-2","us-west-1";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

   **Ejemplo 5**: en este ejemplo se reinician las instancias de EC2 en las cuentas `123456789012` y `987654321098`, que se encuentran en la región `eu-central-1`. Las instancias deben pertenecer al grupo de recursos `prod-instances` de AWS.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name AWS-RestartEC2Instance \
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name InstanceId \
           --targets Key=ResourceGroup,Values=prod-instances \
           --target-locations Accounts=123456789012,987654321098,Regions=eu-central-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name AWS-RestartEC2Instance ^
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name InstanceId ^
           --targets Key=ResourceGroup,Values=prod-instances ^
           --target-locations Accounts=123456789012,987654321098,Regions=eu-central-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "ResourceGroup"
       $Targets.Values = "prod-instances"
       
       Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "InstanceId" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="123456789012","987654321098";
           "Regions"="eu-central-1";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

   **Ejemplo 6**: en este ejemplo se reinician las instancias de EC2 de la unidad organizativa (UO) `ou-1a2b3c-4d5e6c` de AWS. Las instancias se encuentran en las regiones `us-west-1` y `us-west-2`. Las instancias deben pertenecer al grupo de recursos `WebServices` de AWS.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
           --document-name AWS-RestartEC2Instance \
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \
           --target-parameter-name InstanceId \
           --targets Key=ResourceGroup,Values=WebServices \
           --target-locations Accounts=ou-1a2b3c-4d5e6c,Regions=us-west-1,us-west-2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
           --document-name AWS-RestartEC2Instance ^
           --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^
           --target-parameter-name InstanceId ^
           --targets Key=ResourceGroup,Values=WebServices ^
           --target-locations Accounts=ou-1a2b3c-4d5e6c,Regions=us-west-1,us-west-2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
       $Targets.Key = "ResourceGroup"
       $Targets.Values = "WebServices"
       
       Start-SSMAutomationExecution `
           -DocumentName "AWS-RestartEC2Instance" `
           -Parameter @{
           "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } `
           -TargetParameterName "InstanceId" `
           -Target $Targets `
           -TargetLocation @{
           "Accounts"="ou-1a2b3c-4d5e6c";
           "Regions"="us-west-1";
           "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
           "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
       }
   ```

------
#### [ Windows ]

   ```
   {
           "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
       }
   ```

------
#### [ PowerShell ]

   ```
   4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------

1. Ejecute el siguiente comando para ver detalles de la automatización. Reemplace *automation execution ID* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-executions \
           --filters Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-executions ^
           --filters Key=ExecutionId,Values=automation execution ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecutionList | `
           Where {$_.AutomationExecutionId -eq "automation execution ID"}
   ```

------

1. Ejecute el siguiente comando para ver detalles sobre el progreso de la automatización.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-automation-execution \
           --automation-execution-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm get-automation-execution ^
           --automation-execution-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationExecution `
           -AutomationExecutionId a4a3c0e9-7efd-462a-8594-01234EXAMPLE
   ```

------
**nota**  
También puede monitorear el estado de la automatización en la consola. En la lista **Ejecuciones de automatización**, elija la automatización que acaba de ejecutar y, a continuación, seleccione la pestaña **Execution steps**. Esta pestaña muestra el estado de las acciones de la automatización.

**Más información**  
[Aplicación de revisiones centralizada en varias cuentas y regiones con AWS Systems Manager Automation](https://aws.amazon.com/blogs/mt/centralized-multi-account-and-multi-region-patching-with-aws-systems-manager-automation/)

# Ejecución de automatizaciones a partir de eventos EventBridge
<a name="running-automations-event-bridge"></a>

Puede iniciar una automatización al indicar un manual de procedimientos como destino de un evento de Amazon EventBridge. Puede iniciar las automatizaciones según una programación o cuando se produzca un evento específico del sistema de AWS. Por ejemplo, supongamos que crea un manual de procedimientos denominado *BootStrapInstances*, el cual instala software en una instancia cuando esta se inicia. Para especificar el manual de procedimientos *BootStrapInstances* (y la automatización correspondiente) como destino de un evento de EventBridge, primero debe crear una nueva regla de EventBridge. (A continuación se muestra un ejemplo de regla: **Service name**: EC2, **Event Type**: EC2 Instance State-change Notification, **Specific state(s)**: running, **Any instance**). A continuación, utiliza los siguientes procedimientos para indicar el manual de procedimientos *BootStrapInstances* como destino del evento a través de la consola de EventBridge y la AWS Command Line Interface (AWS CLI). Cuando se inicia una instancia nueva, el sistema ejecuta la automatización e instala el software.

Para obtener más información acerca de la creación de manuales de procedimientos, consulte [Creación de sus propios manuales de procedimientos](automation-documents.md).

## Creación de un evento de EventBridge que utiliza un manual de procedimientos (consola)
<a name="automation-cwe-target-console"></a>

Utilice el siguiente procedimiento para configurar un manual de procedimientos como destino de un evento de EventBridge.

**Para configurar un manual de procedimientos como destino de una regla de eventos de EventBridge**

1. Abra la consola de Amazon EventBridge en [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. En el panel de navegación, seleccione **Reglas**.

1. Elija **Creación de regla**.

1. Escriba un nombre y una descripción para la regla.

   Una regla no puede tener el mismo nombre que otra regla de la misma región y del mismo bus de eventos.

1. En **Bus de eventos**, seleccione el bus de eventos que desea asociar a esta regla. Si desea que esta regla responda a eventos coincidentes procedentes de su propia Cuenta de AWS, seleccione **default** (predeterminado). Cuando un Servicio de AWS en su cuenta emite un evento, siempre va al bus de eventos predeterminado de su cuenta.

1. Elija cómo se activa la regla.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/running-automations-event-bridge.html)

1. Elija **Siguiente**.

1. En **Target types** (Tipos de destino), elija **AWS service**.

1. Para **Select a target** (Seleccione un destino), elija **Systems Manager Automation** (Automatización de Systems Manager). 

1. En **Document** (Documento), elija un manual de procedimientos para utilizarlo cuando se invoque el destino.

1. En la sección **Configure automation parameter(s)** (Configurar parámetros de automatización), mantenga los valores de parámetro predeterminados (si están disponibles) o escriba sus propios valores. 
**nota**  
Para crear un objetivo, debe especificar un valor para cada uno de los parámetros obligatorios. Si no lo hace, el sistema crea la regla, pero esta no se ejecutará.

1. Si hay muchos tipos de destino, EventBridge necesita permisos para enviar eventos al destino. En estos casos, EventBridge puede crear el rol de IAM necesario para que se ejecute la regla. Realice una de las siguientes acciones:
   + Para crear un rol de IAM automáticamente, elija **Creación de un nuevo rol para este recurso específico**.
   + Para utilizar un rol de IAM que haya creado antes, elija **Use existing role** (Usar rol existente) y seleccione el rol existente del menú desplegable. Tenga en cuenta que es posible que deba actualizar la política de confianza del rol de IAM para incluir EventBridge. A continuación, se muestra un ejemplo:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "events.amazonaws.com",
                       "ssm.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. Elija **Siguiente**.

1. (Opcional) Introduzca una o varias etiquetas para la regla. Para obtener más información, consulte [Etiquetado de los recursos de Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-tagging.html) en la *Guía del usuario de Amazon EventBridge*.

1. Elija **Siguiente**.

1. Revise los detalles de la regla y seleccione **Creación de regla**.

## Creación de un evento de EventBridge que utiliza un manual de procedimientos (línea de comandos)
<a name="automation-cwe-target-commandline"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows) o las Herramientas de AWS para PowerShell para crear una regla de eventos de EventBridge y configurar un manual de procedimientos como destino.

**Para configurar un manual de procedimientos como destino de una regla de eventos de EventBridge**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Cree un comando para especificar una regla nueva de eventos de EventBridge. Reemplace cada *example resource placeholder* con su propia información.

   *Se activa en función de una programación*

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "rule name" \
   --schedule-expression "cron or rate expression"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "rule name" ^
   --schedule-expression "cron or rate expression"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "rule name" `
   -ScheduleExpression "cron or rate expression"
   ```

------

   En el siguiente ejemplo, se crea una regla de eventos de EventBridge que se activa cada día a las 9:00 h (UTC).

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "DailyAutomationRule" \
   --schedule-expression "cron(0 9 * * ? *)"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "DailyAutomationRule" ^
   --schedule-expression "cron(0 9 * * ? *)"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "DailyAutomationRule" `
   -ScheduleExpression "cron(0 9 * * ? *)"
   ```

------

   *Se activa en función de un evento*

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "rule name" \
   --event-pattern "{\"source\":[\"aws.service\"],\"detail-type\":[\"service event detail type\"]}"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "rule name" ^
   --event-pattern "{\"source\":[\"aws.service\"],\"detail-type\":[\"service event detail type\"]}"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "rule name" `
   -EventPattern '{"source":["aws.service"],"detail-type":["service event detail type"]}'
   ```

------

   En el siguiente ejemplo, se crea una regla de eventos de EventBridge que se activa cuando se cambia el estado de una instancia de EC2 en la región.

------
#### [ Linux & macOS ]

   ```
   aws events put-rule \
   --name "EC2InstanceStateChanges" \
   --event-pattern "{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}"
   ```

------
#### [ Windows ]

   ```
   aws events put-rule ^
   --name "EC2InstanceStateChanges" ^
   --event-pattern "{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}"
   ```

------
#### [ PowerShell ]

   ```
   Write-CWERule `
   -Name "EC2InstanceStateChanges" `
   -EventPattern '{"source":["aws.ec2"],"detail-type":["EC2 Instance State-change Notification"]}'
   ```

------

   El comando devuelve detalles de la nueva regla de EventBridge similares a los siguientes.

------
#### [ Linux & macOS ]

   ```
   {
   "RuleArn": "arn:aws:events:us-east-1:123456789012:rule/automationrule"
   }
   ```

------
#### [ Windows ]

   ```
   {
   "RuleArn": "arn:aws:events:us-east-1:123456789012:rule/automationrule"
   }
   ```

------
#### [ PowerShell ]

   ```
   arn:aws:events:us-east-1:123456789012:rule/EC2InstanceStateChanges
   ```

------

1. Cree un comando para especificar un manual de procedimientos como destino de la regla de eventos de EventBridge que creó en el paso 2. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws events put-targets \
   --rule rule name \
   --targets '{"Arn": " arn:aws:ssm:region:account ID:automation-definition/runbook name","Input":"{\"Message\":[\"{\\\"Key\\\":\\\"key name\\\",\\\"Values\\\":[\\\"value\\\"]}\"]}","Id": "target ID","RoleArn": "arn:aws:iam::123456789012:role/service-role/EventBridge service role"}'
   ```

------
#### [ Windows ]

   ```
   aws events put-targets ^
   --rule rule name ^
   --targets '{"Arn": "arn:aws:ssm:region:account ID:automation-definition/runbook name","Input":"{\"Message\":[\"{\\\"Key\\\":\\\"key name\\\",\\\"Values\\\":[\\\"value\\\"]}\"]}","Id": "target ID","RoleArn": "arn:aws:iam::123456789012:role/service-role/EventBridge service role"}'
   ```

------
#### [ PowerShell ]

   ```
   $Target = New-Object Amazon.CloudWatchEvents.Model.Target
   $Target.Id = "target ID"
   $Target.Arn = "arn:aws:ssm:region:account ID:automation-definition/runbook name"
   $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/EventBridge service role"
   $Target.Input = '{"input parameter":["value"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}'
   
   Write-CWETarget `
   -Rule "rule name" `
   -Target $Target
   ```

------

   En el siguiente ejemplo, se crea un destino de evento de EventBridge que activa el ID de instancia especificado mediante el manual de procedimientos `AWS-StartEC2Instance`.

------
#### [ Linux & macOS ]

   ```
   aws events put-targets \
   --rule DailyAutomationRule \
   --targets '{"Arn": "arn:aws:ssm:region:*:automation-definition/AWS-StartEC2Instance","Input":"{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target1","RoleArn": "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"}'
   ```

------
#### [ Windows ]

   ```
   aws events put-targets ^
   --rule DailyAutomationRule ^
   --targets '{"Arn": "arn:aws:ssm:region:*:automation-definition/AWS-StartEC2Instance","Input":"{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationServiceRole\"]}","Id": "Target1","RoleArn": "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"}'
   ```

------
#### [ PowerShell ]

   ```
   $Target = New-Object Amazon.CloudWatchEvents.Model.Target
   $Target.Id = "Target1"
   $Target.Arn = "arn:aws:ssm:region:*:automation-definition/AWS-StartEC2Instance"
   $Target.RoleArn = "arn:aws:iam::123456789012:role/service-role/AWS_Events_Invoke_Start_Automation_Execution_1213609520"
   $Target.Input = '{"InstanceId":["i-02573cafcfEXAMPLE"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/AutomationServiceRole"]}'
   
   Write-CWETarget `
   -Rule "DailyAutomationRule" `
   -Target $Target
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
   "FailedEntries": [],
   "FailedEntryCount": 0
   }
   ```

------
#### [ Windows ]

   ```
   {
   "FailedEntries": [],
   "FailedEntryCount": 0
   }
   ```

------
#### [ PowerShell ]

   No se obtienen resultados si el comando se ejecuta satisfactoriamente para PowerShell.

------

# Ejecutar una automatización paso a paso
<a name="automation-working-executing-manually"></a>

Los siguientes procedimientos describen cómo utilizar la consola de AWS Systems Manager y la AWS Command Line Interface (AWS CLI) para ejecutar una automatización mediante el modo de ejecución manual. Al utilizar el modo de ejecución manual, la automatización se inicia en el estado *En espera* y se detiene en el estado *En espera* entre los diferentes pasos. Esto le permite controlar cuándo debe continuar con la automatización, lo que resulta útil si necesita revisar el resultado de un paso antes de continuar.

La automatización se ejecuta en el contexto del usuario actual. Esto significa que no tiene que configurar más permisos de IAM siempre y cuando cuente con el permiso necesario para usar el manual de procedimientos y cualquier acción que este solicite. Si tiene permisos de administrador en IAM, ya cuenta con el permiso necesario para ejecutar esta automatización.

## Ejecución de una automatización paso a paso (consola)
<a name="automation-working-executing-manually-console"></a>

El siguiente procedimiento muestra cómo utilizar la consola de Systems Manager para ejecutar manualmente una automatización paso a paso.

**Para ejecutar una automatización paso a paso**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la lista **Documento de automatización**, elija un manual de procedimientos. Elija una o más opciones en el panel **Categorías de documentos** para filtrar documentos SSM según su propósito. Para ver un manual de procedimientos que le pertenezca, seleccione la pestaña **De mi propiedad**. Para ver un manual de procedimientos que se haya compartido con su cuenta, elija la pestaña **Compartido conmigo**. Para ver todos los manuales de procedimientos, seleccione la pestaña **Todos los documentos**.
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. En la sección **Detalles del documento**, verifique que **Versión del documento** esté establecido como la versión que desea ejecutar. El sistema incluye las siguientes opciones de versión: 
   + **Versión predeterminada en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y se asigna una nueva versión predeterminada.
   + **Última versión en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y desea ejecutar la versión que se ha actualizado más recientemente.
   + **1 (Predeterminado)**: seleccione esta opción para ejecutar la primera versión del documento, que es la predeterminada.

1. Elija **Siguiente**.

1. En la sección **Modo de ejecución**, seleccione **Ejecución manual**.

1. En la sección **Parámetros de entrada**, especifique las entradas necesarias: De forma opcional, puede elegir un rol de servicio de IAM de la lista **AutomationAssumeRole**.

1. Elija **Ejecutar**. 

1. Seleccione **Ejecutar este paso** cuando esté preparado para iniciar el primer paso de la automatización. La automatización realiza el paso uno y se detiene antes de ejecutar los siguientes pasos especificados en el manual de procedimientos que eligió en el paso 3 de este procedimiento. Si el manual de procedimientos tiene varios pasos, debe seleccionar **Ejecutar este paso** para que se continúe con cada paso de la automatización. Cada vez que se seleccione **Ejecutar este paso** se ejecuta la acción.
**nota**  
La consola muestra el estado de la automatización. Si no se logra ejecutar un paso de la automatización, consulte [Solución de problemas de Automatización de Systems Manager](automation-troubleshooting.md).

1. Tras realizar todos los pasos especificados en el manual de procedimientos, seleccione **Completar y ver resultados** para finalizar la automatización y ver los resultados.

Una vez completada la ejecución de una automatización, puede volver a ejecutarla con los mismos parámetros o con parámetros modificados. Para obtener más información, consulte [Volver a ejecutar las ejecuciones de automatización](automation-rerun-executions.md).

## Ejecución de una automatización paso a paso (línea de comandos)
<a name="automation-working-executing-manually-commandline"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux, macOS o Windows) o Herramientas de AWS para PowerShell para ejecutar manualmente una automatización paso a paso.

**Para ejecutar una automatización paso a paso**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Ejecute el siguiente comando para iniciar una automatización manual. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name runbook name \
       --mode Interactive \
       --parameters runbook parameters
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name runbook name ^
       --mode Interactive ^
       --parameters runbook parameters
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName runbook name `
       -Mode Interactive `
       -Parameter runbook parameters
   ```

------

   A continuación, se muestra un ejemplo en el que se utiliza el manual de procedimientos `AWS-RestartEC2Instance` para reiniciar la instancia de EC2 especificada.

------
#### [ Linux & macOS ]

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-RestartEC2Instance" \
       --mode Interactive \
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm start-automation-execution ^
       --document-name "AWS-RestartEC2Instance" ^
       --mode Interactive ^
       --parameters "InstanceId=i-02573cafcfEXAMPLE"
   ```

------
#### [ PowerShell ]

   ```
   Start-SSMAutomationExecution `
       -DocumentName AWS-RestartEC2Instance `
       -Mode Interactive 
       -Parameter @{"InstanceId"="i-02573cafcfEXAMPLE"}
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
       "AutomationExecutionId": "ba9cd881-1b36-4d31-a698-0123456789ab"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "AutomationExecutionId": "ba9cd881-1b36-4d31-a698-0123456789ab"
   }
   ```

------
#### [ PowerShell ]

   ```
   ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------

1. Ejecute el siguiente comando cuando esté listo para iniciar el primer paso de la automatización. Reemplace cada *example resource placeholder* con su propia información. La automatización realiza el paso uno y se detiene antes de ejecutar los siguientes pasos especificados en el manual de procedimientos que eligió en el paso 1 de este procedimiento. Si el manual de procedimientos tiene varios pasos, debe ejecutar el siguiente comando para que se continúe con cada paso de la automatización.

------
#### [ Linux & macOS ]

   ```
   aws ssm send-automation-signal \
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab \
       --signal-type StartStep \
       --payload StepName="stopInstances"
   ```

------
#### [ Windows ]

   ```
   aws ssm send-automation-signal ^
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab ^
       --signal-type StartStep ^
       --payload StepName="stopInstances"
   ```

------
#### [ PowerShell ]

   ```
   Send-SSMAutomationSignal `
       -AutomationExecutionId ba9cd881-1b36-4d31-a698-0123456789ab `
       -SignalType StartStep 
       -Payload @{"StepName"="stopInstances"}
   ```

------

   No se obtienen resultados si el comando se ejecuta satisfactoriamente.

1. Ejecute el siguiente comando para recuperar el estado de cada ejecución de un paso en la automatización.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-automation-step-executions \
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-automation-step-executions ^
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMAutomationStepExecution `
       -AutomationExecutionId ba9cd881-1b36-4d31-a698-0123456789ab
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
       "StepExecutions": [
           {
               "StepName": "stopInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167178.42,
               "ExecutionEndTime": 1557167220.617,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"stopped\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "stopped"
                   ]
               },
               "StepExecutionId": "654243ba-71e3-4771-b04f-0123456789ab",
               "OverriddenParameters": {},
               "ValidNextSteps": [
                   "startInstances"
               ]
           },
           {
               "StepName": "startInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167273.754,
               "ExecutionEndTime": 1557167480.73,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"running\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "running"
                   ]
               },
               "StepExecutionId": "8a4a1e0d-dc3e-4039-a599-0123456789ab",
               "OverriddenParameters": {}
           }
       ]
   }
   ```

------
#### [ Windows ]

   ```
   {
       "StepExecutions": [
           {
               "StepName": "stopInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167178.42,
               "ExecutionEndTime": 1557167220.617,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"stopped\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "stopped"
                   ]
               },
               "StepExecutionId": "654243ba-71e3-4771-b04f-0123456789ab",
               "OverriddenParameters": {},
               "ValidNextSteps": [
                   "startInstances"
               ]
           },
           {
               "StepName": "startInstances",
               "Action": "aws:changeInstanceState",
               "ExecutionStartTime": 1557167273.754,
               "ExecutionEndTime": 1557167480.73,
               "StepStatus": "Success",
               "Inputs": {
                   "DesiredState": "\"running\"",
                   "InstanceIds": "[\"i-02573cafcfEXAMPLE\"]"
               },
               "Outputs": {
                   "InstanceStates": [
                       "running"
                   ]
               },
               "StepExecutionId": "8a4a1e0d-dc3e-4039-a599-0123456789ab",
               "OverriddenParameters": {}
           }
       ]
   }
   ```

------
#### [ PowerShell ]

   ```
   Action: aws:changeInstanceState
   ExecutionEndTime     : 5/6/2019 19:45:46
   ExecutionStartTime   : 5/6/2019 19:45:03
   FailureDetails       : 
   FailureMessage       : 
   Inputs               : {[DesiredState, "stopped"], [InstanceIds, ["i-02573cafcfEXAMPLE"]]}
   IsCritical           : False
   IsEnd                : False
   MaxAttempts          : 0
   NextStep             : 
   OnFailure            : 
   Outputs              : {[InstanceStates, Amazon.Runtime.Internal.Util.AlwaysSendList`1[System.String]]}
   OverriddenParameters : {}
   Response             : 
   ResponseCode         : 
   StepExecutionId      : 8fcc9641-24b7-40b3-a9be-0123456789ab
   StepName             : stopInstances
   StepStatus           : Success
   TimeoutSeconds       : 0
   ValidNextSteps       : {startInstances}
   ```

------

1. Ejecute el siguiente comando para completar la automatización una vez que se hayan completado todos los pasos especificados en el manual de procedimientos elegido. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm stop-automation-execution \
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab \
       --type Complete
   ```

------
#### [ Windows ]

   ```
   aws ssm stop-automation-execution ^
       --automation-execution-id ba9cd881-1b36-4d31-a698-0123456789ab ^
       --type Complete
   ```

------
#### [ PowerShell ]

   ```
   Stop-SSMAutomationExecution `
       -AutomationExecutionId ba9cd881-1b36-4d31-a698-0123456789ab `
       -Type Complete
   ```

------

   No se obtienen resultados si el comando se ejecuta satisfactoriamente.

# Programación de automatizaciones con asociaciones de State Manager
<a name="scheduling-automations-state-manager-associations"></a>

Para iniciar una automatización, puede crear una asociación de State Manager a un manual de procedimientos. State Manager es una herramienta de AWS Systems Manager. Mediante la creación de una asociación de State Manager a un manual de procedimientos, puede indicar diferentes tipos de recursos de AWS como destino. Por ejemplo, puede crear asociaciones que implementen un estado deseado en un recurso de AWS, incluidas las siguientes:
+ adjuntar un rol de Systems Manager a las instancias de Amazon Elastic Compute Cloud (Amazon EC2) para transformarlas en *instancias administradas*
+ aplicar las reglas de entrada y salida que desee para un grupo de seguridad
+ crear o eliminar copias de seguridad de Amazon DynamoDB
+ crear o eliminar instantáneas de Amazon Elastic Block Store (Amazon EBS)
+ desactivar los permisos de lectura y escritura en los buckets de Amazon Simple Storage Service (Amazon S3)
+ activar, reiniciar o detener las instancias administradas y las instancias de Amazon Relational Database Service (Amazon RDS)
+ aplicar revisiones a las AMIs de Linux, macOS y Windows

Utilice los siguientes procedimientos para crear una asociación de State Manager que ejecute una automatización a través de la consola de AWS Systems Manager y la AWS Command Line Interface (AWS CLI). Para obtener información general sobre las asociaciones e información sobre la creación de una asociación que utilice un documento de `Command` o un documento de `Policy` de SSM, consulte [Cómo crear asociaciones](state-manager-associations-creating.md).

**Antes de empezar**  
Tenga en cuenta los siguientes detalles importantes antes de ejecutar una automatización con State Manager:
+ Antes de crear una asociación que use un manual de procedimientos, verifique que haya configurado los permisos para Automatización, una herramienta de AWS Systems Manager. Para obtener más información, consulte [Configuración de Automation](automation-setup.md).
+ State Manager Las asociaciones de que usan manuales de procedimientos contribuyen al número máximo de automatizaciones que se ejecutan a la vez en su Cuenta de AWS. Puede tener como máximo 100 automatizaciones en ejecución simultánea. Para obtener más información, consulte [Service Quotas de Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm) en *Referencia general de Amazon Web Services*.
+ Al ejecutar una automatización, State Manager no registra las operaciones de la API iniciadas por la automatización en AWS CloudTrail.
+ Systems Manager crea de forma automática un rol vinculado a servicios de modo que State Manager tenga permiso para llamar las operaciones de la API de Automatización de Systems Manager. Si lo desea, puede crear el rol vinculado al servicio usted mismo. Para ello, ejecute el siguiente comando en la AWS CLI o Herramientas de AWS para PowerShell.

------
#### [ Linux & macOS ]

  ```
  aws iam create-service-linked-role \
  --aws-service-name ssm.amazonaws.com
  ```

------
#### [ Windows ]

  ```
  aws iam create-service-linked-role ^
  --aws-service-name ssm.amazonaws.com
  ```

------
#### [ PowerShell ]

  ```
  New-IAMServiceLinkedRole `
  -AWSServiceName ssm.amazonaws.com
  ```

------

  Para obtener más información acerca de los roles vinculados a servicios, consulte [Cómo utilizar roles vinculados a servicios de Systems Manager](using-service-linked-roles.md).

## Creación de una asociación que ejecuta una automatización (consola)
<a name="create-automation-association-console"></a>

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para crear una asociación de State Manager que ejecuta una automatización.

**Para crear una asociación de State Manager que ejecute una automatización**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **State Manager** y, a continuación, elija **Create association (Crear asociación)**.

1. Escriba un nombre en el campo **Nombre**. Esto es opcional, pero recomendable.

1. En la lista **Document** (Documento), elija un manual de procedimientos. Utilice la barra de búsqueda para filtrar por manuales de procedimientos **Document type : Equal : Automation** (Tipo de documento : Igual : Automation). Para ver más manuales de procedimientos, utilice los números que se encuentran a la derecha de la barra de búsqueda. 
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. Seleccione **Simple execution (Ejecución sencilla)** para ejecutar la instancia de Automation en uno o varios destinos mediante la especificación del ID de recurso de dichos destinos. Seleccione **Rate control (Control de frecuencia)** para ejecutar la instancia de Automation en una flota de recursos de AWS mediante la especificación de una opción de indicación de destino, como etiquetas o Grupos de recursos de AWS. También puede controlar la operación de la automatización en sus recursos mediante la especificación de la simultaneidad y los umbrales de error.

   Si ha seleccionado **Rate control** (Control de frecuencia), se muestra la sección **Targets** (Destinos).

1. En la sección **Targets (Destinos)**, seleccione un método para los recursos de indicación de destino.

   1. (Obligatorio) En la lista **Parameter (Parámetro)**, seleccione un parámetro. Los elementos de la lista **Parameter** (Parámetro) se determinan a partir de los parámetros en el manual de procedimientos que seleccionó al inicio de este procedimiento. Al elegir un parámetro, define el tipo de recurso en el que se ejecuta la automatización. 

   1. (Obligatorio) En la lista **Targets (Destinos)**, seleccione un método para indicar los recursos de destino.
      + **Resource Group (Grupo de recursos)**: seleccione el nombre del grupo en la lista **Resource Group (Grupo de recursos)**. Para obtener más información acerca de la indicación de Grupos de recursos de AWS como destino en los manuales de procedimientos, consulte [Indicar de destino Grupos de recursos de AWS](running-automations-map-targets.md#target-resource-groups).
      + **Tags (Etiquetas)**: introduzca la clave de etiqueta y, si lo desea, el valor de etiqueta en los campos proporcionados. Elija **Agregar**. Para obtener más información acerca de cómo indicar las etiquetas como destino en los manuales de procedimientos, consulte [Especificación de una etiqueta como destino](running-automations-map-targets.md#target-tags).
      + **Parameter Values (Valores de parámetros)**: introduzca valores en la sección **Input parameters (Parámetros de entrada)** . Si especifica varios valores, Systems Manager ejecuta una automatización secundaria en cada valor especificado.

        Por ejemplo, supongamos que su manual de procedimientos incluye un parámetro **InstanceID**. Si indica los valores del parámetro **InstanceID** como destino a la hora de ejecutar la automatización, Systems Manager ejecuta una automatización secundaria para el valor de ID de cada instancia especificada. La automatización principal se habrá completado cuando la automatización termine de ejecutar cada instancia especificada o cuando se produzca un error en la automatización. Puede indicar un máximo de 50 valores de parámetros de destino. Para obtener más información acerca de cómo indicar los valores de parámetros como destino en los manuales de procedimientos, consulte [Indicar valores de parámetros de destino](running-automations-map-targets.md#target-parameter-values).

1. En la sección **Parámetros de entrada**, especifique los parámetros de entrada necesarios.

   Si decidió indicar recursos como destino a través de etiquetas o un grupo de recursos, es posible que no se vea obligado a elegir algunas de las opciones de la sección **Input parameters** (Parámetros de entrada). Por ejemplo, si eligió el manual de procedimientos `AWS-RestartEC2Instance` y decidió indicar las instancias como destino a través de etiquetas, entonces no necesita especificar ni elegir los ID de instancias en la sección **Input parameters** (Parámetros de entrada). La automatización localiza las instancias que desea reiniciar a través de las etiquetas que ha especificado. 
**importante**  
Debe especificar un ARN de rol en el campo **AutomationAssumeRole**. State Manager utiliza el rol de asunción para llamar los Servicios de AWS especificados en el manual de procedimientos y ejecutar las asociaciones de Automation en su nombre.

1. En la sección **Specify schedule (Especificar programación)**, seleccione **On Schedule (De forma programada)** si desea ejecutar la asociación periódicamente. Si selecciona esta opción, utilice las opciones proporcionadas para crear la programación mediante expresiones cron o rate. Para obtener más información acerca de las expresiones cron y rate para State Manager, consulte [Expresiones cron y rate para asociaciones](reference-cron-and-rate-expressions.md#reference-cron-and-rate-expressions-association). 
**nota**  
Las expresiones rate son el mecanismo de programación preferido para las asociaciones de State Manager que utilizan manuales de procedimientos. Las expresiones rate ofrecen una mayor flexibilidad para la ejecución de asociaciones en caso de que se alcance el número máximo de automatizaciones en ejecución simultánea. Con una programación de frecuencia, Systems Manager puede volver a intentar completar la automatización poco después de recibir una notificación que indique que las automatizaciones simultáneas han alcanzado el número máximo y se han limitado.

   Seleccione **No schedule (Sin programación)** si desea ejecutar la asociación una sola vez. 

1. (Opcional) En la sección **Control de frecuencia**, elija las opciones **Simultaneidad** y **Umbral de error** para controlar la implementación de la automatización en todos los recursos de AWS.

   1. En la sección **Simultaneidad**, elija una opción: 
      + Elija **targets** (destinos) para ingresar un número absoluto de destinos que pueden ejecutar la automatización simultáneamente.
      + Elija **percentage** (porcentaje) para ingresar un porcentaje del conjunto de destinos que puede ejecutar la automatización simultáneamente.

   1. En la sección **Umbral de error**, elija una opción:
      + Elija **errors** (errores) para ingresar un número absoluto de errores permitidos antes de que Automation deje de enviar la automatización a otros recursos.
      + Elija **percentage** (porcentaje) para ingresar un porcentaje de errores permitidos antes de que Automation deje de enviar la automatización a otros recursos.

   Para obtener más información sobre el uso de controles de frecuencia y destinos con Automation, consulte [Ejecución de operaciones automatizadas a escala](running-automations-scale.md).

1. Elija **Crear asociación**. 
**importante**  
Al crear una asociación, esta se ejecuta de inmediato en los destinos especificados. A continuación, la asociación se ejecuta en función de la expresión cron o rate que haya seleccionado. Si seleccionó **No schedule** (Sin programación), la asociación no volverá a ejecutarse.

## Creación de una asociación que ejecuta una automatización (línea de comandos)
<a name="create-automation-association-cli"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows Server) o las Herramientas de AWS para PowerShell para crear una asociación de State Manager que ejecute una automatización.

**Antes de empezar**  
Antes de completar el siguiente procedimiento, asegúrese de haber creado un rol de servicio de IAM que contenga los permisos necesarios para ejecutar el manual de procedimientos y haya configurado una relación de confianza para Automatización, una herramienta de AWS Systems Manager. Para obtener más información, consulte [Tarea 1: crear un rol de servicio para Automation](automation-setup-iam.md#create-service-role).

**Para crear una asociación que ejecute una automatización**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Ejecute el siguiente comando para ver una lista de documentos.

------
#### [ Linux & macOS ]

   ```
   aws ssm list-documents
   ```

------
#### [ Windows ]

   ```
   aws ssm list-documents
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentList
   ```

------

   Anote el nombre del manual de procedimientos que desea utilizar para la asociación.

1. Ejecute el siguiente comando para ver detalles acerca del manual de procedimientos. En el siguiente comando, reemplace *runbook name* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document \
   --name runbook name
   ```

   Especifique el nombre de parámetro (por ejemplo, `InstanceId`) que desea utilizar para la opción `--automation-target-parameter-name`. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

------
#### [ Windows ]

   ```
   aws ssm describe-document ^
   --name runbook name
   ```

   Especifique el nombre de parámetro (por ejemplo, `InstanceId`) que desea utilizar para la opción `--automation-target-parameter-name`. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentDescription `
   -Name runbook name
   ```

   Especifique el nombre de parámetro (por ejemplo, `InstanceId`) que desea utilizar para la opción `AutomationTargetParameterName`. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

------

1. Cree un comando que ejecute una automatización mediante una asociación de State Manager. Reemplace cada *example resource placeholder* con su propia información.

   *Indicar destino mediante etiquetas*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=tag:key name,Values=value \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression"
   ```

**nota**  
Si crea una asociación mediante la AWS CLI, utilice el parámetro `--targets` en las instancias de destino para la asociación. No utilice el parámetro `--instance-id`. El parámetro `--instance-id` es un parámetro heredado. 

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=tag:key name,Values=value ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression"
   ```

**nota**  
Si crea una asociación mediante la AWS CLI, utilice el parámetro `--targets` en las instancias de destino para la asociación. No utilice el parámetro `--instance-id`. El parámetro `--instance-id` es un parámetro heredado. 

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "tag:key name"
   $Targets.Values = "value"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole" } `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression"
   ```

**nota**  
Si crea una asociación mediante la Herramientas de AWS para PowerShell, utilice el parámetro `Target` en las instancias de destino para la asociación. No utilice el parámetro `InstanceId`. El parámetro `InstanceId` es un parámetro heredado. 

------

   *Indicar destino mediante valores de parámetros*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=ParameterValues,Values=value,value 2,value 3 \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=ParameterValues,Values=value,value 2,value 3 ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression"
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ParameterValues"
   $Targets.Values = "value","value 2","value 3"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression"
   ```

------

   *Indicar destino mediante Grupos de recursos de AWS*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=ResourceGroup,Values=resource group name \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=ResourceGroup,Values=resource group name ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression"
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ResourceGroup"
   $Targets.Values = "resource group name"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression"
   ```

------

   *Indicar varias cuentas y regiones como destino*

------
#### [ Linux & macOS ]

   ```
   aws ssm create-association \
   --association-name association name \
   --targets Key=ResourceGroup,Values=resource group name \
   --name runbook name \
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \
   --automation-target-parameter-name target parameter \
   --schedule "cron or rate expression" \ 
   --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
   ```

------
#### [ Windows ]

   ```
   aws ssm create-association ^
   --association-name association name ^
   --targets Key=ResourceGroup,Values=resource group name ^
   --name runbook name ^
   --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^
   --automation-target-parameter-name target parameter ^
   --schedule "cron or rate expression" ^ 
   --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
   ```

------
#### [ PowerShell ]

   ```
   $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target
   $Targets.Key = "ResourceGroup"
   $Targets.Values = "resource group name"
   
   New-SSMAssociation `
   -AssociationName "association name" `
   -Target $Targets `
   -Name "runbook name" `
   -Parameters @{
   "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} `
   -AutomationTargetParameterName "target parameter" `
   -ScheduleExpression "cron or rate expression" `
   -TargetLocations @{
       "Accounts"=["111122223333,444455556666,444455556666"],
       "Regions"=["region,region"]
   ```

------

   El comando devuelve detalles de la nueva asociación similares a los siguientes.

------
#### [ Linux & macOS ]

   ```
   {
   "AssociationDescription": {
       "ScheduleExpression": "cron(0 7 ? * MON *)",
       "Name": "AWS-StartEC2Instance",
       "Parameters": {
           "AutomationAssumeRole": [
               "arn:aws:iam::123456789012:role/RunbookAssumeRole"
           ]
       },
       "Overview": {
           "Status": "Pending",
           "DetailedStatus": "Creating"
       },
       "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
       "DocumentVersion": "$DEFAULT",
       "AutomationTargetParameterName": "InstanceId",
       "LastUpdateAssociationDate": 1564686638.498,
       "Date": 1564686638.498,
       "AssociationVersion": "1",
       "AssociationName": "CLI",
       "Targets": [
           {
               "Values": [
                   "DEV"
               ],
               "Key": "tag:ENV"
           }
       ]
   }
   }
   ```

------
#### [ Windows ]

   ```
   {
   "AssociationDescription": {
       "ScheduleExpression": "cron(0 7 ? * MON *)",
       "Name": "AWS-StartEC2Instance",
       "Parameters": {
           "AutomationAssumeRole": [
               "arn:aws:iam::123456789012:role/RunbookAssumeRole"
           ]
       },
       "Overview": {
           "Status": "Pending",
           "DetailedStatus": "Creating"
       },
       "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
       "DocumentVersion": "$DEFAULT",
       "AutomationTargetParameterName": "InstanceId",
       "LastUpdateAssociationDate": 1564686638.498,
       "Date": 1564686638.498,
       "AssociationVersion": "1",
       "AssociationName": "CLI",
       "Targets": [
           {
               "Values": [
                   "DEV"
               ],
               "Key": "tag:ENV"
           }
       ]
   }
   }
   ```

------
#### [ PowerShell ]

   ```
   Name                  : AWS-StartEC2Instance
   InstanceId            : 
   Date                  : 8/1/2019 7:31:38 PM
   Status.Name           : 
   Status.Date           : 
   Status.Message        : 
   Status.AdditionalInfo :
   ```

------

**nota**  
Si utiliza las etiquetas para crear una asociación en una o varias instancias de destino, elimine las etiquetas de una instancia (dicha instancia ya no ejecutará la asociación). La instancia se desvincula del documento de State Manager. 

## Automatizaciones de solución de problemas ejecutadas por asociaciones de State Manager
<a name="troubleshooting-automation-associations"></a>

La Automatización de Systems Manager implementa un límite de 100 automatizaciones simultáneas y 1000 automatizaciones en cola por cuenta, por región. Si una asociación de State Manager que usa un manual de procedimientos tiene el estado **Failed** (Error) y el estado detallado **AutomationExecutionLimitExceeded**, es posible que su automatización haya alcanzado el límite. Como resultado, Systems Manager limita las automatizaciones. Para resolver este problema, siga estos pasos:
+ Utilice una expresión rate o cron diferente para la asociación. Por ejemplo, si la asociación está programada para ejecutarse cada 30 minutos, cambie la expresión para que se ejecute cada hora o cada dos horas.
+ Elimine las automatizaciones existentes con el estado **Pending** (Pendiente). Si elimina estas automatizaciones, se vaciará la cola actual.

# Programación de automatizaciones con periodos de mantenimiento
<a name="scheduling-automations-maintenance-windows"></a>

Puede iniciar una automatización mediante la configuración de un manual de procedimientos como una tarea registrada para un periodo de mantenimiento. Al registrar el manual de procedimientos como una tarea registrada, el periodo de mantenimiento ejecuta la automatización durante el periodo de mantenimiento programado. 

Por ejemplo, supongamos que crea un manual de procedimientos denominado `CreateAMI` que genera una Amazon Machine Image (AMI) de las instancias registradas como destinos en el periodo de mantenimiento. Para especificar el manual de procedimientos `CreateAMI` (y la automatización correspondiente) como una tarea registrada de un periodo de mantenimiento, primero debe crear un periodo de mantenimiento y registrar los destinos. A continuación, utilice el siguiente procedimiento para especificar el documento `CreateAMI` como una tarea registrada en el periodo de mantenimiento. Cuando se inicia el periodo de mantenimiento durante el periodo programado, el sistema ejecuta la automatización y crea una AMI de los destinos registrados.

Para obtener información acerca de la creación de manuales de procedimientos de Automation, consulte [Creación de sus propios manuales de procedimientos](automation-documents.md). Automatización es una herramienta de AWS Systems Manager.

Utilice los siguientes procedimientos para configurar una automatización como una tarea registrada para un periodo de mantenimiento a través de la consola de AWS Systems Manager, la AWS Command Line Interface (AWS CLI) o las AWS Tools for Windows PowerShell.

## Registro de una tarea de automatización en un periodo de mantenimiento (consola)
<a name="register-automation-task-maintenance-window-console"></a>

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para configurar una automatización como una tarea registrada para un periodo de mantenimiento.

**Antes de empezar**  
Antes de realizar el siguiente procedimiento, debe crear un período de mantenimiento y registrar al menos un destino. Para obtener más información, consulte los siguientes procedimientos: 
+ [Crear y configurar un periodo de mantenimiento mediante la consola](sysman-maintenance-create-mw.md).
+ [Asignar destinos a un periodo de mantenimiento mediante la consola](sysman-maintenance-assign-targets.md)

**Para configurar una automatización como una tarea registrada para un periodo de mantenimiento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación de la izquierda, seleccione **Maintenance Windows** y, a continuación, el período de mantenimiento con el que desee registrar una tarea de Automation.

1. Elija **Actions**. A continuación, seleccione **Register Automation task** (Registrar tarea de Automation) para ejecutar la automatización que desee en los destinos mediante el uso de un manual de procedimientos.

1. En **Name (Nombre)**, escriba un nombre para la tarea.

1. En **Descripción**, escriba una descripción.

1. En **Document** (Documento), elija el manual de procedimientos que defina las tareas que se ejecutarán.

1. En **Document version** (Versión de documento), elija la versión del manual de procedimientos que se utilizará.

1. En **Task priority** (Prioridad de tarea), especifique una prioridad para esta tarea. `1` es la prioridad más alta. Las tareas de un período de mantenimiento se programan por orden de prioridad; las tareas que tengan la misma prioridad se programan en paralelo.

1. En la sección **Targets** (Destinos), si el manual de procedimientos que eligió ejecuta tareas sobre recursos, identifique los destinos en los que desea ejecutar esta automatización. Para ello, especifique las etiquetas o seleccione las instancias de forma manual.
**nota**  
Si desea pasar los recursos a través de parámetros de entrada en lugar de destinos, no necesita especificar un destino de periodo de mantenimiento.  
En muchos casos, no es necesario especificar de forma explícita un destino para una tarea de automatización. Por ejemplo, suponga que crea una tarea de tipo Automation para actualizar una Amazon Machine Image (AMI) para Linux mediante el manual de procedimientos `AWS-UpdateLinuxAmi`. Cuando se ejecuta la tarea, la AMI se actualiza con los paquetes de distribución de Linux y el software de Amazon disponibles más recientes. Las instancias nuevas que se crearon a partir de la AMI ya tienen estas actualizaciones instaladas. Como el ID de la AMI que se actualizará se especifica en los parámetros de entrada del manual de procedimientos, no es necesario volver a especificar un destino en la tarea del periodo de mantenimiento.

   Para obtener información acerca de las tareas del periodo de mantenimiento que no requieren destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).

1. (Opcional) En **Control de velocidad**:
**nota**  
Si la tarea que ejecuta no especifica destinos, no es necesario que especifique controles de frecuencia.
   + En **Concurrency** (Simultaneidad), especifique un número o un porcentaje de destinos en los que desee ejecutar la automatización de forma simultánea.

     Si ha seleccionado destinos mediante la elección de pares de clave-valor para la etiqueta y no está seguro de la cantidad de destinos que utilizarán las etiquetas seleccionadas, limite el número de automatizaciones que se pueden ejecutar a la vez mediante la especificación de un porcentaje.

     Mientras transcurre el periodo de mantenimiento, se inicia una nueva automatización por cada destino. Hay un límite de 100 automatizaciones simultáneas por Cuenta de AWS. Si especifica una tasa de simultaneidad mayor que 100, las automatizaciones simultáneas que superen el valor 100 se agregarán automáticamente a la cola de automatizaciones. Para obtener más información, consulte [Service Quotas de Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm) en la *Referencia general de Amazon Web Services*. 
   + En **Error threshold** (Umbral de error), especifique cuándo desea que se detenga la ejecución de la automatización en otros destinos después de que se presentan errores en un número o un porcentaje de destinos. Por ejemplo, si especifica tres errores, Systems Manager deja de ejecutar las automatizaciones cuando se recibe el cuarto error. Los destinos que sigan procesando la automatización también pueden enviar errores.

1. En la sección **Input Parameters** (Parámetros de entrada), especifique los parámetros para el manual de procedimientos. En el caso de los manuales de procedimientos, el sistema completará automáticamente algunos de los valores. Puede conservar o reemplazar estos valores.
**importante**  
Si así lo desea, puede especificar un rol de asunción de Automation para los manuales de procedimientos. Si no especifica ningún rol para este parámetro, la automatización asume el rol de servicio del periodo de mantenimiento que elija en el paso 11. Por tanto, debe asegurarse de que el rol de servicio del periodo de mantenimiento que elija tenga los permisos de AWS Identity and Access Management (IAM) adecuados para realizar las acciones definidas en el manual de procedimientos.   
Por ejemplo, el rol vinculado al servicio para Systems Manager no tiene el permiso de IAM `ec2:CreateSnapshot`, que es necesario para usar el manual de procedimientos `AWS-CopySnapshot`. En este caso, debe utilizar un rol de servicio del período de mantenimiento personalizado o especificar un rol de asunción de Automation con los permisos `ec2:CreateSnapshot`. Para obtener más información, consulte [Configuración de Automation](automation-setup.md).

1. En el área **IAM service role** (Rol de servicio de IAM), elija un rol con el fin de proporcionar permisos a Systems Manager para inicie la automatización.

   Para crear un rol de servicio personalizado para tareas de periodo de mantenimiento, consulte [Configuración de Maintenance Windows](setting-up-maintenance-windows.md).

1. Seleccione **Register Automation task (Registrar tarea de Automation)**.

## Registro de una tarea de Automation en un periodo de mantenimiento (línea de comandos)
<a name="register-automation-task-maintenance-window-cli"></a>

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows Server) o las Herramientas de AWS para PowerShell para configurar una automatización como una tarea registrada para un periodo de mantenimiento.

**Antes de empezar**  
Antes de realizar el siguiente procedimiento, debe crear un período de mantenimiento y registrar al menos un destino. Para obtener más información, consulte los siguientes procedimientos:
+ [Paso 1: cree el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-create-mw.md).
+ [Paso 2: registre un nodo de destino con el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-targets.md)

**Para configurar una automatización como una tarea registrada para un periodo de mantenimiento**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Cree un comando para configurar una automatización como una tarea registrada para un periodo de mantenimiento. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
   --window-id window ID \
   --name task name \
   --task-arn runbook name \
   --targets Key=targets,Values=value \
   --service-role-arn IAM role arn \
   --task-type AUTOMATION \
   --task-invocation-parameters task parameters \
   --priority task priority \
   --max-concurrency 10% \
   --max-errors 5
   ```

**nota**  
Si configura una automatización como una tarea registrada a través de la AWS CLI, utilice el parámetro `--Task-Invocation-Parameters` para especificar los parámetros que se pasarán a una tarea cuando se ejecute. No utilice el parámetro `--Task-Parameters`. El parámetro `--Task-Parameters` es un parámetro heredado.  
En el caso de las tareas del periodo de mantenimiento sin un destino especificado, no puede proporcionar valores para `--max-errors` ni `--max-concurrency`. En su lugar, el sistema inserta un valor de marcador `1`, el cual podría notificarse en la respuesta a los comandos, como [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html) y [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html). Estos valores no afectan la ejecución de la tarea y se pueden ignorar.  
Para obtener información acerca de las tareas del periodo de mantenimiento que no requieren destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
   --window-id window ID ^
   --name task name ^
   --task-arn runbook name ^
   --targets Key=targets,Values=value ^
   --service-role-arn IAM role arn ^
   --task-type AUTOMATION ^
   --task-invocation-parameters task parameters ^
   --priority task priority ^
   --max-concurrency 10% ^
   --max-errors 5
   ```

**nota**  
Si configura una automatización como una tarea registrada a través de la AWS CLI, utilice el parámetro `--task-invocation-parameters` para especificar los parámetros que se pasarán a una tarea cuando se ejecute. No utilice el parámetro `--task-parameters`. El parámetro `--task-parameters` es un parámetro heredado.  
En el caso de las tareas del periodo de mantenimiento sin un destino especificado, no puede proporcionar valores para `--max-errors` ni `--max-concurrency`. En su lugar, el sistema inserta un valor de marcador `1`, el cual podría notificarse en la respuesta a los comandos, como [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html) y [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html). Estos valores no afectan la ejecución de la tarea y se pueden ignorar.  
Para obtener información acerca de las tareas del periodo de mantenimiento que no requieren destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).

------
#### [ PowerShell ]

   ```
   Register-SSMTaskWithMaintenanceWindow `
   -WindowId window ID `
   -Name "task name" `
   -TaskArn "runbook name" `
   -Target @{ Key="targets";Values="value" } `
   -ServiceRoleArn "IAM role arn" `
   -TaskType "AUTOMATION" `
   -Automation_Parameter @{ "task parameter"="task parameter value"} `
   -Priority task priority `
   -MaxConcurrency 10% `
   -MaxError 5
   ```

**nota**  
Si configura una automatización como una tarea registrada a través de las Herramientas de AWS para PowerShell, utilice el parámetro `-Automation_Parameter` para especificar los parámetros que se pasarán a una tarea cuando se ejecute. No utilice el parámetro `-TaskParameters`. El parámetro `-TaskParameters` es un parámetro heredado.  
En el caso de las tareas del periodo de mantenimiento sin un destino especificado, no puede proporcionar valores para `-MaxError` ni `-MaxConcurrency`. En su lugar, el sistema inserta un valor de marcador de posición 1, el cual podría notificarse en la respuesta a los comandos, como `Get-SSMMaintenanceWindowTaskList` y `Get-SSMMaintenanceWindowTask`. Estos valores no afectan la ejecución de la tarea y se pueden ignorar.  
Para obtener información acerca de las tareas del periodo de mantenimiento que no requieren destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).

------

   En el siguiente ejemplo, se configura una automatización como una tarea registrada en un periodo de mantenimiento con prioridad 1. También demuestra la omisión de las opciones `--targets`, `--max-errors` y `--max-concurrency` para la tarea de un periodo de mantenimiento sin destino. La automatización utiliza el manual de procedimientos `AWS-StartEC2Instance` y el rol de asunción de Automation especificado para activar instancias EC2 registradas como destinos en el periodo de mantenimiento. El periodo de mantenimiento ejecuta la automatización de manera simultánea en 5 instancias como máximo en cualquier momento. Además, la tarea registrada deja de ejecutarse en más instancias durante un intervalo determinado si el recuento de errores es superior a 1.

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
   --window-id mw-0c50858d01EXAMPLE \
   --name StartEC2Instances \
   --task-arn AWS-StartEC2Instance \
   --service-role-arn arn:aws:iam::123456789012:role/MaintenanceWindowRole \
   --task-type AUTOMATION \
   --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"{{TARGET_ID}}\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationAssumeRole\"]}}}" \
   --priority 1
   ```

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
   --window-id mw-0c50858d01EXAMPLE ^
   --name StartEC2Instances ^
   --task-arn AWS-StartEC2Instance ^
   --service-role-arn arn:aws:iam::123456789012:role/MaintenanceWindowRole ^
   --task-type AUTOMATION ^
   --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"{{TARGET_ID}}\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationAssumeRole\"]}}}" ^
   --priority 1
   ```

------
#### [ PowerShell ]

   ```
   Register-SSMTaskWithMaintenanceWindow `
   -WindowId mw-0c50858d01EXAMPLE `
   -Name "StartEC2" `
   -TaskArn "AWS-StartEC2Instance" `
   -ServiceRoleArn "arn:aws:iam::123456789012:role/MaintenanceWindowRole" `
   -TaskType "AUTOMATION" `
   -Automation_Parameter @{ "InstanceId"="{{TARGET_ID}}";"AutomationAssumeRole"="arn:aws:iam::123456789012:role/AutomationAssumeRole" } `
   -Priority 1
   ```

------

   El comando devuelve detalles de la nueva tarea registrada similares a los siguientes.

------
#### [ Linux & macOS ]

   ```
   {
   "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
   }
   ```

------
#### [ Windows ]

   ```
   {
   "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
   }
   ```

------
#### [ PowerShell ]

   ```
   4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------

1. Para ver la tarea registrada, ejecute el siguiente comando. Reemplace *maintenance windows ID* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-tasks \
   --window-id maintenance window ID
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-tasks ^
   --window-id maintenance window ID
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMMaintenanceWindowTaskList `
   -WindowId maintenance window ID
   ```

------

   El sistema devuelve información similar a la siguiente.

------
#### [ Linux & macOS ]

   ```
   {
   "Tasks": [
       {
           "ServiceRoleArn": "arn:aws:iam::123456789012:role/MaintenanceWindowRole",
           "MaxErrors": "1",
           "TaskArn": "AWS-StartEC2Instance",
           "MaxConcurrency": "1",
           "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
           "TaskParameters": {},
           "Priority": 1,
           "WindowId": "mw-0c50858d01EXAMPLE",
           "Type": "AUTOMATION",
           "Targets": [
           ],
           "Name": "StartEC2"
       }
   ]
   }
   ```

------
#### [ Windows ]

   ```
   {
   "Tasks": [
       {
           "ServiceRoleArn": "arn:aws:iam::123456789012:role/MaintenanceWindowRole",
           "MaxErrors": "1",
           "TaskArn": "AWS-StartEC2Instance",
           "MaxConcurrency": "1",
           "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
           "TaskParameters": {},
           "Priority": 1,
           "WindowId": "mw-0c50858d01EXAMPLE",
           "Type": "AUTOMATION",
           "Targets": [
           ],
           "Name": "StartEC2"
       }
   ]
   }
   ```

------
#### [ PowerShell ]

   ```
   Description    : 
   LoggingInfo    : 
   MaxConcurrency : 5
   MaxErrors      : 1
   Name           : StartEC2
   Priority       : 1
   ServiceRoleArn : arn:aws:iam::123456789012:role/MaintenanceWindowRole
   Targets        : {}
   TaskArn        : AWS-StartEC2Instance
   TaskParameters : {}
   Type           : AUTOMATION
   WindowId       : mw-0c50858d01EXAMPLE
   WindowTaskId   : 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

------

# Referencia de acciones de Automatización de Systems Manager
<a name="automation-actions"></a>

Esta referencia describe las acciones de Automation que puede especificar en un manual de procedimientos de automatización. Automatización es una herramienta de AWS Systems Manager. Estas acciones no se pueden utilizar en otros tipos de documentos de Systems Manager (SSM). Para obtener información acerca de los complementos para otros tipos de documentos de SSM, consulte [Referencia de complementos del documento de comandos](documents-command-ssm-plugin-reference.md).

Automatización de Systems Manager ejecuta los pasos definidos en los manuales de procedimientos de Automation. Cada paso está asociado a una acción concreta. La acción determina las entradas, el comportamiento y las salidas del paso. Los pasos se definen en la sección `mainSteps` de su manual de procedimientos.

No necesita especificar las salidas de una acción o paso. Las salidas están predeterminadas por la acción asociada al paso. Al especificar entradas de paso en los manuales de procedimientos, puede referenciar una o más salidas de un paso anterior. Por ejemplo, puede hacer que la salida de `aws:runInstances` esté disponible para una acción `aws:runCommand` posterior. También puede referenciar las salidas de pasos anteriores en la sección `Output` del manual de procedimientos. 

**importante**  
Si ejecuta un flujo de trabajo de automatización que invoca otros servicios mediante un rol de servicio de AWS Identity and Access Management (IAM), tenga en cuenta que el rol de servicio debe configurarse con el permiso necesario para invocar dichos servicios. Este requisito se aplica a todos los manuales de procedimientos de automatización de AWS (manuales de `AWS-*`), como los manuales de procedimientos `AWS-ConfigureS3BucketLogging`, `AWS-CreateDynamoDBBackup` y `AWS-RestartEC2Instance`, por nombrar algunos. Este requisito también se aplica a cualquier manual de procedimientos de automatización personalizado que cree para llamar otros Servicios de AWS mediante acciones que llaman a otros servicios. Por ejemplo, si utiliza las acciones `aws:executeAwsApi`, `aws:createStack` o `aws:copyImage`, configure el rol de servicio con el permiso necesario para invocar dichos servicios. Puede conceder permisos a otros Servicios de AWS mediante la incorporación de una política insertada de IAM al rol. Para obtener más información, consulte [(Opcional) Agregar una política insertada de Automatización o una política administrada por el cliente para invocar otros Servicios de AWS](automation-setup-iam.md#add-inline-policy).

**Topics**
+ [Propiedades compartidas por todas las acciones](#automation-common)
+ [`aws:approve`: detener una automatización para la aprobación manual](automation-action-approve.md)
+ [`aws:assertAwsResourceProperty`: confirmar el estado de un recurso o un evento de AWS](automation-action-assertAwsResourceProperty.md)
+ [`aws:branch`: ejecutar pasos de automatización condicionales](automation-action-branch.md)
+ [`aws:changeInstanceState`: cambiar o confirmar el estado de la instancia](automation-action-changestate.md)
+ [`aws:copyImage` – copiar o cifrar una Amazon Machine Image](automation-action-copyimage.md)
+ [`aws:createImage`: crear una Amazon Machine Image](automation-action-create.md)
+ [`aws:createStack`: crear una pila de CloudFormation](automation-action-createstack.md)
+ [`aws:createTags`: crear etiquetas para recursos de AWS](automation-action-createtag.md)
+ [`aws:deleteImage`: eliminar una Amazon Machine Image](automation-action-delete.md)
+ [`aws:deleteStack`: eliminar una pila de CloudFormation](automation-action-deletestack.md)
+ [`aws:executeAutomation`: ejecutar otra automatización](automation-action-executeAutomation.md)
+ [`aws:executeAwsApi`: llamar y ejecutar operaciones de la API de AWS](automation-action-executeAwsApi.md)
+ [`aws:executeScript`: ejecutar un script](automation-action-executeScript.md)
+ [`aws:executeStateMachine`: ejecutar una máquina de estado de AWS Step Functions](automation-action-executeStateMachine.md)
+ [`aws:invokeWebhook`: invocar una integración de webhook de Automation](invoke-webhook.md)
+ [`aws:invokeLambdaFunction`: invocar una función de AWS Lambda](automation-action-lamb.md)
+ [`aws:loop` — Repita los pasos en una automatización](automation-action-loop.md)
+ [`aws:pause`: detener una automatización](automation-action-pause.md)
+ [`aws:runCommand`: ejecutar un comando en una instancia administrada](automation-action-runcommand.md)
+ [`aws:runInstances`: lanzar una instancia de Amazon EC2](automation-action-runinstance.md)
+ [`aws:sleep`: retrasar una automatización](automation-action-sleep.md)
+ [`aws:updateVariable` — Actualiza el valor de una variable del manual de procedimientos](automation-action-update-variable.md)
+ [`aws:waitForAwsResourceProperty`: esperar una propiedad de recurso de AWS](automation-action-waitForAwsResourceProperty.md)
+ [Variables del sistema de Automation](automation-variables.md)

## Propiedades compartidas por todas las acciones
<a name="automation-common"></a>

Las propiedades comunes son parámetros u opciones que se encuentran en todas las acciones. Algunas opciones definen el comportamiento de un paso, como cuánto tiempo debe esperar para que se complete un paso y qué hacer si el paso produce un error. Las siguientes propiedades son comunes a todas las acciones.

[description](#descriptProp)  
Información que proporciona para describir el propósito de un manual de procedimientos o un paso.  
Tipo: cadena  
Requerido: no

[name](#nameProp)  
Un identificador que debe ser único en todos los nombres de paso del manual de procedimientos.  
Tipo: cadena  
Patrón permitido: [a-zA-Z0-9\$1]\$1\$1  
Obligatorio: sí

[action](#actProp)  
El nombre de la acción que ejecutará el paso. [`aws:runCommand`: ejecutar un comando en una instancia administrada](automation-action-runcommand.md) es un ejemplo de una acción que puede especificar aquí. En este documento, se proporciona información detallada sobre todas las acciones disponibles.  
Tipo: cadena  
Obligatorio: sí

[maxAttempts](#maxProp)  
El número de veces que se debe reintentar el paso en caso de error. Si el valor es mayor que 1, no se considerará que hay un error en el paso hasta que todos los reintentos produzcan errores. El valor predeterminado es 1.  
Tipo: entero  
Obligatorio: no

[timeoutSeconds](#timeProp)  
El valor de tiempo de espera del paso. Si se alcanza el tiempo de espera y el valor de `maxAttempts` es mayor que 1, no se considera que se ha agotado el tiempo de espera del paso hasta que se hayan realizado todos los reintentos.  
Tipo: entero  
Obligatorio: no

[onFailure](#failProp)  
Indica si la automatización se debe detener, continuar o ir a otro paso en caso de error. El valor predeterminado para esta opción es abort (anular).  
Tipo: cadena  
Valores válidos: Abort \$1 Continue \$1 step:*nombre\$1del\$1paso*  
Obligatorio: no

[onCancel](#canProp)  
Indica a qué paso debe ir la automatización en caso de que un usuario la cancele. Automation ejecuta el flujo de trabajo de cancelación durante un máximo de dos minutos.  
Tipo: cadena  
Valores válidos: Abort \$1 step:*step\$1name*  
Obligatorio: no  
La propiedad `onCancel` no admite pasar a las siguientes acciones:  
+ `aws:approve`
+ `aws:copyImage`
+ `aws:createImage`
+ `aws:createStack`
+ `aws:createTags`
+ `aws:loop`
+ `aws:pause`
+ `aws:runInstances`
+ `aws:sleep`

[isEnd](#endProp)  
Esta opción detiene una automatización al final de un paso determinado. La automatización se detiene tanto si el paso genera un error como si se realiza correctamente. El valor predeterminado es false.  
Tipo: Booleano  
Valores válidos: true \$1 false  
Obligatorio: no

[nextStep](#nextProp)  
Especifica qué paso de una automatización se debe procesar después de finalizar correctamente un paso.  
Tipo: cadena  
Requerido: no

[isCritical](#critProp)  
Designa un paso como crítico para la finalización correcta de Automation. Si un paso con esta designación genera un error, Automation considera que el estado final de la Automation ha generado un error. Esta propiedad solo se evalúa si la define de forma explícita en el paso. Si la propiedad `onFailure` está establecida en `Continue` en un paso, el valor adopta la opción predeterminada false. De lo contrario, el valor predeterminado para esta opción es true.  
Tipo: Booleano  
Valores válidos: true \$1 false  
Obligatorio: no

[inputs](#inProp)  
Las propiedades específicas de la acción.  
Tipo: mapa  
Obligatorio: sí

### Ejemplo
<a name="automation-demo"></a>

```
---
description: "Custom Automation Example"
schemaVersion: '0.3'
assumeRole: "{{ AutomationAssumeRole }}"
parameters:
  AutomationAssumeRole:
    type: String
    description: "(Required) The ARN of the role that allows Automation to perform
      the actions on your behalf. If no role is specified, Systems Manager Automation
      uses your IAM permissions to run this runbook."
    default: ''
  InstanceId:
      type: String
      description: "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot."
      default: ''
mainSteps:
- name: getInstanceDetails
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
  outputs:
    - Name: availabilityZone
      Selector: "$.Reservations[0].Instances[0].Placement.AvailabilityZone"
      Type: String
    - Name: rootDeviceName
      Selector: "$.Reservations[0].Instances[0].RootDeviceName"
      Type: String
  nextStep: getRootVolumeId
- name: getRootVolumeId
  action: aws:executeAwsApi
  maxAttempts: 3
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeVolumes
    Filters:
    -  Name: attachment.device
       Values: ["{{ getInstanceDetails.rootDeviceName }}"]
    -  Name: attachment.instance-id
       Values: ["{{ InstanceId }}"]
  outputs:
    - Name: rootVolumeId
      Selector: "$.Volumes[0].VolumeId"
      Type: String
  nextStep: getSnapshotsByStartTime
- name: getSnapshotsByStartTime
  action: aws:executeScript
  timeoutSeconds: 45
  onFailure: Abort
  inputs:
    Runtime: python3.8
    Handler: getSnapshotsByStartTime
    InputPayload:
      rootVolumeId : "{{ getRootVolumeId.rootVolumeId }}"
    Script: |-
      def getSnapshotsByStartTime(events,context):
        import boto3

        #Initialize client
        ec2 = boto3.client('ec2')
        rootVolumeId = events['rootVolumeId']
        snapshotsQuery = ec2.describe_snapshots(
          Filters=[
            {
              "Name": "volume-id",
              "Values": [rootVolumeId]
            }
          ]
        )
        if not snapshotsQuery['Snapshots']:
          noSnapshotFoundString = "NoSnapshotFound"
          return { 'noSnapshotFound' : noSnapshotFoundString }
        else:
          jsonSnapshots = snapshotsQuery['Snapshots']
          sortedSnapshots = sorted(jsonSnapshots, key=lambda k: k['StartTime'], reverse=True)
          latestSortedSnapshotId = sortedSnapshots[0]['SnapshotId']
          return { 'latestSnapshotId' : latestSortedSnapshotId }
  outputs:
  - Name: Payload
    Selector: $.Payload
    Type: StringMap
  - Name: latestSnapshotId
    Selector: $.Payload.latestSnapshotId
    Type: String
  - Name: noSnapshotFound
    Selector: $.Payload.noSnapshotFound
    Type: String 
  nextStep: branchFromResults
- name: branchFromResults
  action: aws:branch
  onFailure: Abort
  onCancel: step:startInstance
  inputs:
    Choices:
    - NextStep: createNewRootVolumeFromSnapshot
      Not:
        Variable: "{{ getSnapshotsByStartTime.noSnapshotFound }}"
        StringEquals: "NoSnapshotFound"
  isEnd: true
- name: createNewRootVolumeFromSnapshot
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: CreateVolume
    AvailabilityZone: "{{ getInstanceDetails.availabilityZone }}"
    SnapshotId: "{{ getSnapshotsByStartTime.latestSnapshotId }}"
  outputs:
    - Name: newRootVolumeId
      Selector: "$.VolumeId"
      Type: String
  nextStep: stopInstance
- name: stopInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: StopInstances
    InstanceIds:
    - "{{ InstanceId }}"
  nextStep: verifyVolumeAvailability
- name: verifyVolumeAvailability
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 120
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
    PropertySelector: "$.Volumes[0].State"
    DesiredValues:
    - "available"
  nextStep: verifyInstanceStopped
- name: verifyInstanceStopped
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 120
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
    PropertySelector: "$.Reservations[0].Instances[0].State.Name"
    DesiredValues:
    - "stopped"
  nextStep: detachRootVolume
- name: detachRootVolume
  action: aws:executeAwsApi
  onFailure: Abort
  isCritical: true
  inputs:
    Service: ec2
    Api: DetachVolume
    VolumeId: "{{ getRootVolumeId.rootVolumeId }}"
  nextStep: verifyRootVolumeDetached
- name: verifyRootVolumeDetached
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 30
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ getRootVolumeId.rootVolumeId }}"
    PropertySelector: "$.Volumes[0].State"
    DesiredValues:
    - "available"
  nextStep: attachNewRootVolume
- name: attachNewRootVolume
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: AttachVolume
    Device: "{{ getInstanceDetails.rootDeviceName }}"
    InstanceId: "{{ InstanceId }}"
    VolumeId: "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
  nextStep: verifyNewRootVolumeAttached
- name: verifyNewRootVolumeAttached
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 30
  inputs:
    Service: ec2
    Api: DescribeVolumes
    VolumeIds:
    - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
    PropertySelector: "$.Volumes[0].Attachments[0].State"
    DesiredValues:
    - "attached"
  nextStep: startInstance
- name: startInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: StartInstances
    InstanceIds:
    - "{{ InstanceId }}"
```

# `aws:approve`: detener una automatización para la aprobación manual
<a name="automation-action-approve"></a>

Detiene temporalmente una automatización hasta que las entidades principales designadas aprueben o rechacen la acción. Después de que se alcanza el número necesario de aprobaciones, se reanuda la automatización. Puede insertar el paso de aprobación en cualquier lugar de la sección `mainSteps` de su manual de procedimientos. 

**nota**  
Esta acción no admite automatizaciones de varias cuentas ni de regiones. El tiempo de espera predeterminado para esta acción es de 7 días (604 800 segundos) y el valor máximo es de 30 días (2 592 000 segundos). Puede limitar o ampliar el tiempo de espera mediante la especificación del parámetro `timeoutSeconds` para un paso `aws:approve`.

En el siguiente ejemplo, la acción `aws:approve` detiene temporalmente la automatización hasta que un aprobador la acepte o la rechace. Tras la aprobación, la automatización ejecuta un comando PowerShell sencillo. 

------
#### [ YAML ]

```
---
description: RunInstancesDemo1
schemaVersion: '0.3'
assumeRole: "{{ assumeRole }}"
parameters:
  assumeRole:
    type: String
  message:
    type: String
mainSteps:
- name: approve
  action: aws:approve
  timeoutSeconds: 1000
  onFailure: Abort
  inputs:
    NotificationArn: arn:aws:sns:us-east-2:12345678901:AutomationApproval
    Message: "{{ message }}"
    MinRequiredApprovals: 1
    Approvers:
    - arn:aws:iam::12345678901:user/AWS-User-1
- name: run
  action: aws:runCommand
  inputs:
    InstanceIds:
    - i-1a2b3c4d5e6f7g
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - date
```

------
#### [ JSON ]

```
{
   "description":"RunInstancesDemo1",
   "schemaVersion":"0.3",
   "assumeRole":"{{ assumeRole }}",
   "parameters":{
      "assumeRole":{
         "type":"String"
      },
      "message":{
         "type":"String"
      }
   },
   "mainSteps":[
      {
         "name":"approve",
         "action":"aws:approve",
         "timeoutSeconds":1000,
         "onFailure":"Abort",
         "inputs":{
            "NotificationArn":"arn:aws:sns:us-east-2:12345678901:AutomationApproval",
            "Message":"{{ message }}",
            "MinRequiredApprovals":1,
            "Approvers":[
               "arn:aws:iam::12345678901:user/AWS-User-1"
            ]
         }
      },
      {
         "name":"run",
         "action":"aws:runCommand",
         "inputs":{
            "InstanceIds":[
               "i-1a2b3c4d5e6f7g"
            ],
            "DocumentName":"AWS-RunPowerShellScript",
            "Parameters":{
               "commands":[
                  "date"
               ]
            }
         }
      }
   ]
}
```

------

Puede aprobar o denegar las instancias de Automation pendientes de aprobación en la consola.

**Para aprobar o denegar las automatizaciones en espera**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Elija la opción junto a una automatización cuyo estado sea **En espera**.  
![\[Acceso a la página Approve/Deny Automation (Aprobar/Denegar Automation)\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/automation-approve-action-aws.png)

1. Elija **Aprobar/Denegar**.

1. Revise los detalles de Automation.

1. Elija **Aprobar** o **Denegar**, escriba un comentario opcional y, a continuación, elija **Enviar**.

**Ejemplo de entrada**

------
#### [ YAML ]

```
NotificationArn: arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest
Message: Please approve this step of the Automation.
MinRequiredApprovals: 3
Approvers:
- IamUser1
- IamUser2
- arn:aws:iam::12345678901:user/IamUser3
- arn:aws:iam::12345678901:role/IamRole
```

------
#### [ JSON ]

```
{
   "NotificationArn":"arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest",
   "Message":"Please approve this step of the Automation.",
   "MinRequiredApprovals":3,
   "Approvers":[
      "IamUser1",
      "IamUser2",
      "arn:aws:iam::12345678901:user/IamUser3",
      "arn:aws:iam::12345678901:role/IamRole"
   ]
}
```

------

NotificationArn  
El nombre de recurso de Amazon (ARN) de un tema de Amazon Simple Notification Service (Amazon SNS) para aprobaciones de Automation. Al especificar un paso `aws:approve` en un manual de procedimientos, Automation envía un mensaje a este tema con el cual se informa a las entidades principales que deben aprobar o rechazar un paso de Automation. El título del tema de Amazon SNS debe tener el prefijo “Automation”.  
Tipo: cadena  
Requerido: no

Mensaje  
La información que desea incluir en el tema de Amazon SNS cuando se envía la solicitud de aprobación. La longitud máxima del mensaje es de 4096 caracteres.   
Tipo: cadena  
Requerido: no

MinRequiredApprovals  
El número mínimo de aprobaciones requeridas para reanudar la automatización. Si no especifica un valor, el sistema utiliza el valor predeterminado de uno. El valor de este parámetro debe ser un número positivo. El valor de este parámetro no puede superar el número de aprobadores definidos por el parámetro `Approvers`.   
Tipo: entero  
Obligatorio: no

Approvers  
Una lista de entidades principales autenticadas de AWS que pueden aprobar o rechazar la acción. El número máximo de aprobadores es 10. Puede especificar entidades principales mediante cualquiera de los formatos siguientes:  
+ Un nombre de usuario
+ Un ARN de usuario
+ un ARN de rol de IAM
+ Un ARN de rol de asunción de IAM
Tipo: StringList  
Obligatorio: sí

EnhancedApprovals  
Esta entrada solo se utiliza para las plantillas de Change Manager. Una lista de las entidades principales autenticadas de AWS que pueden aprobar o rechazar la acción, el tipo de entidad principal de IAM y el número mínimo de aprobadores. A continuación, se muestra un ejemplo:  

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
    - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
        Message: Please approve this change request
        MinRequiredApprovals: 3
        EnhancedApprovals:
        Approvers:
            - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 0
            - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 0
            - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 0
            - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 0
```
Tipo: StringList  
Obligatorio: sí

**Output**

ApprovalStatus  
El estado de aprobación del paso. El estado puede ser uno de los siguientes: Approved, Rejected o Waiting. "Waiting" significa que Automation está esperando la entrada de los aprobadores.  
Tipo: cadena

ApproverDecisions  
Un mapa JSON que incluye la decisión de aprobación de cada aprobador.  
Tipo: MapList

# `aws:assertAwsResourceProperty`: confirmar el estado de un recurso o un evento de AWS
<a name="automation-action-assertAwsResourceProperty"></a>

La acción `aws:assertAwsResourceProperty` le permite confirmar el estado de un recurso o de un evento específico para determinado paso de Automation.

**nota**  
La acción `aws:assertAwsResourceProperty` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

Para más ejemplos sobre cómo usar esta acción, consulte [Ejemplos adicionales de manuales de procedimientos](automation-document-examples.md).

**Input**  
Las entradas se definen con la operación de la API que elija. 

------
#### [ YAML ]

```
action: aws:assertAwsResourceProperty
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
  PropertySelector: Response object
  DesiredValues:
  - Desired property values
```

------
#### [ JSON ]

```
{
  "action": "aws:assertAwsResourceProperty",
  "inputs": {
    "Service":"The official namespace of the service",
    "Api":"The API operation or method name",
    "API operation inputs or parameters":"A value",
    "PropertySelector": "Response object",
    "DesiredValues": [
      "Desired property values"
    ]
  }
}
```

------

Servicio  
El espacio de nombres del Servicio de AWS que contiene la operación de la API que desea ejecutar. Por ejemplo, el espacio de nombres para Systems Manager es `ssm`. El espacio de nombres para Amazon EC2 es `ec2`. Puede ver una lista de espacios de nombres de Servicio de AWS admitidos en la sección [Available Services](https://docs.aws.amazon.com/cli/latest/reference/#available-services) (Servicios disponibles) de la *Referencia de los comandos de la AWS CLI*.  
Tipo: cadena  
Obligatorio: sí

API  
El nombre de la operación de la API que desea ejecutar. Puede ver las operaciones de la API (también llamadas métodos) si elige un servicio en el panel de navegación ubicado a la izquierda, en la siguiente página: [Services Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todas las operaciones de la API (los métodos) para Amazon Relational Database Service (Amazon RDS) se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html).  
Tipo: cadena  
Obligatorio: sí

Entradas de la operación de la API  
Una o más entradas de la operación de la API. Puede ver las entradas disponibles (también llamadas parámetros) eligiendo un servicio en el panel de navegación izquierdo en la siguiente página de [referencia de servicios](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todos los métodos para Amazon RDS se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html). Elija el método [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) y desplácese hacia abajo para ver los parámetros disponibles, como, por ejemplo, **DBInstanceIdentifier**, **Name** y **Values**. Utilice el formato siguiente para especificar más de una entrada.  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
Tipo: se determina a partir de la operación de la API elegida  
Obligatorio: sí

PropertySelector  
El elemento JSONPath a un atributo específico en el objeto de respuesta. Puede ver los objetos de respuesta eligiendo un servicio en el panel de navegación izquierdo en la siguiente página de [referencia de servicios](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todos los métodos para Amazon RDS se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html). Elija el método [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) y desplácese hasta la sección **Response Structure (Estructura de respuesta)**. **DBInstances** aparece como un objeto de respuesta.  
Tipo: cadena  
Obligatorio: sí

DesiredValues  
El estado previsto o el estado en el que continuará la automatización. Si especifica un valor booleano, debe utilizar una letra mayúscula como Verdadero o Falso.  
Tipo: StringList  
Obligatorio: sí

# `aws:branch`: ejecutar pasos de automatización condicionales
<a name="automation-action-branch"></a>

La acción `aws:branch` le permite crear una automatización dinámica que evalúa diferentes elecciones en un solo paso y, a continuación, salta a otro paso en el manual de procedimientos en función de los resultados de dicha evaluación. 

Cuando se especifica la acción `aws:branch` para un paso, se especifican `Choices` que la automatización debe evaluar. Las `Choices` pueden basarse en un valor que especificó en la sección `Parameters` del manual de procedimientos o en un valor dinámico generado como la salida del paso anterior. La automatización evalúa cada elección mediante una expresión booleana. Si la primera elección es true, la automatización saltará al paso designado para esa elección. Si la primera elección es false, la automatización evaluará la siguiente elección. La automatización sigue evaluando cada elección hasta que procese una elección true. A continuación, la automatización saltará al paso designado para la elección true.

Si ninguna de las elecciones es true, la automatización comprueba si el paso contiene un valor `default`. Un valor predeterminado define un paso al cual la automatización debe saltar si ninguna de las elecciones es true. Si no se especifica un valor `default` para el paso, la automatización procesará el siguiente paso en el manual de procedimientos.

La acción `aws:branch` admite evaluaciones de elecciones complejas mediante una combinación de operadores `And`, `Not` y `Or`. Para obtener más información acerca de cómo utilizar `aws:branch`, así como ejemplos de manuales de procedimientos y ejemplos que utilizan diferentes operadores, consulte [Uso de instrucciones condicionales en manuales de procedimientos](automation-branch-condition.md).

**Input**  
Especifique una o más `Choices` en un paso. Las `Choices` pueden basarse en un valor que especificó en la sección `Parameters` del manual de procedimientos o en un valor dinámico generado como la salida del paso anterior. A continuación se muestra un ejemplo de YAML que evalúa un parámetro.

```
mainSteps:
- name: chooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{Name of a parameter defined in the Parameters section. For example: OS_name}}"
      StringEquals: windows
    - NextStep: runLinuxCommand
      Variable: "{{Name of a parameter defined in the Parameters section. For example: OS_name}}"
      StringEquals: linux
    Default:
      sleep3
```

A continuación se muestra un ejemplo de YAML que evalúa la salida de un paso anterior.

```
mainSteps:
- name: chooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{Name of a response object. For example: GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{Name of a response object. For example: GetInstance.platform}}"
      StringEquals: Linux
    Default:
      sleep3
```

Choices  
Una o más expresiones que la Automation debe evaluar a la hora de determinar el siguiente paso que procesar. Las elecciones se evalúan mediante una expresión booleana. Cada elección debe definir las siguientes opciones:  
+ **NextStep**: el siguiente paso en el manual de procedimientos que se debe procesar si la elección designada es true.
+ **Variable**: especifique el nombre de un parámetro que se define en la sección `Parameters` del manual de procedimientos. O bien, especifique un objeto de salida de un paso anterior del manual de procedimientos. Para obtener más información sobre cómo crear variables para `aws:branch`, consulte [Acerca de la creación de la variable de salida](automation-branch-condition.md#branch-action-output).
+ **Operation**: los criterios utilizados para evaluar la elección. La acción `aws:branch` admite las siguientes operaciones:

**Operaciones de cadena**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + Contiene

**Numeric operations**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**Operación booleana**
  + BooleanEquals
**importante**  
Al crear un manual de procedimientos, el sistema valida cada operación del manual. Si no se admite una operación, el sistema devuelve un error cuando intenta crear el manual de procedimientos.

Predeterminado  
El nombre de un paso al que debe saltar la automatización si ninguna de las `Choices` es true.  
Tipo: cadena  
Requerido: no

**nota**  
La acción `aws:branch` admite los operadores `And`, `Or` y `Not`. Para ver ejemplos de `aws:branch` que utilizan operadores, consulte [Uso de instrucciones condicionales en manuales de procedimientos](automation-branch-condition.md).

# `aws:changeInstanceState`: cambiar o confirmar el estado de la instancia
<a name="automation-action-changestate"></a>

Cambia o confirma el estado de la instancia.

Esta acción se puede utilizar en el modo de confirmación (no ejecuta la API para cambiar el estado, sino para comprobar que la instancia se encuentre en el estado deseado). Para utilizar el modo de aserción, establezca el parámetro `CheckStateOnly` en true. Este modo es útil al ejecutar el comando Sysprep en Windows Server, que es un comando asíncrono que puede ejecutar en segundo plano durante mucho tiempo. Puede asegurarse de que la instancia esté detenida antes de crear una Amazon Machine Image (AMI).

**nota**  
El valor del tiempo de espera predeterminado para esta acción es de 3600 segundos (una hora). Puede limitar o ampliar el tiempo de espera mediante la especificación del parámetro `timeoutSeconds` para un paso `aws:changeInstanceState`.

**nota**  
La acción `aws:changeInstanceState` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**

------
#### [ YAML ]

```
name: stopMyInstance
action: aws:changeInstanceState
maxAttempts: 3
timeoutSeconds: 3600
onFailure: Abort
inputs:
  InstanceIds:
  - i-1234567890abcdef0
  CheckStateOnly: true
  DesiredState: stopped
```

------
#### [ JSON ]

```
{
    "name":"stopMyInstance",
    "action": "aws:changeInstanceState",
    "maxAttempts": 3,
    "timeoutSeconds": 3600,
    "onFailure": "Abort",
    "inputs": {
        "InstanceIds": ["i-1234567890abcdef0"],
        "CheckStateOnly": true,
        "DesiredState": "stopped"
    }
}
```

------

InstanceIds  
Los ID de las instancias.  
Tipo: StringList  
Obligatorio: sí

CheckStateOnly  
Si es false, establece el estado de la instancia en el valor deseado. Si es true, confirma el estado deseado mediante sondeo.  
Predeterminado: `false`  
Tipo: Booleano  
Obligatorio: no

DesiredState  
El estado deseado. Cuando se establece en `running`, esta acción espera hasta que el estado de Amazon EC2 sea `Running`, el estado de la instancia sea `OK` y el estado del sistema sea `OK` antes de completarse.  
Tipo: cadena  
Valores válidos: `running` \$1 `stopped` \$1 `terminated`  
Obligatorio: sí

Force  
Si se establece, obliga a las instancias a detenerse. Las instancias no tienen la oportunidad de vaciar las memorias cachés o los metadatos de los sistemas de archivos. Si utiliza esta opción, debe realizar los procedimientos de comprobación y reparación del sistema de archivos. Esta opción no se recomienda para las instancias EC2 de Windows Server.  
Tipo: Booleano  
Obligatorio: no

AdditionalInfo  
Reservado.  
Tipo: cadena  
Requerido: no

**Output**  
Ninguno

# `aws:copyImage` – copiar o cifrar una Amazon Machine Image
<a name="automation-action-copyimage"></a>

Copia una Amazon Machine Image (AMI) de cualquier Región de AWS en la región actual. Esta acción también puede cifrar la nueva AMI.

**nota**  
La acción `aws:copyImage` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
Esta acción admite la mayoría de los parámetros `CopyImage`. Para obtener más información, consulte [CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CopyImage.html).

En el siguiente ejemplo, se crea una copia de una AMI en la región de Seúl (`SourceImageID`: ami-0fe10819. `SourceRegion`: ap-northeast-2). La nueva AMI se copia en la región en la que inició la acción de Automation. La AMI copiada se cifrará porque la marca `Encrypted` opcional se ha configurado en `true`.

------
#### [ YAML ]

```
name: createEncryptedCopy
action: aws:copyImage
maxAttempts: 3
onFailure: Abort
inputs:
  SourceImageId: ami-0fe10819
  SourceRegion: ap-northeast-2
  ImageName: Encrypted Copy of LAMP base AMI in ap-northeast-2
  Encrypted: true
```

------
#### [ JSON ]

```
{   
    "name": "createEncryptedCopy",
    "action": "aws:copyImage",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "SourceImageId": "ami-0fe10819",
        "SourceRegion": "ap-northeast-2",
        "ImageName": "Encrypted Copy of LAMP base AMI in ap-northeast-2",
        "Encrypted": true
    }   
}
```

------

SourceRegion  
La región en la que se encuentra la AMI de origen.  
Tipo: cadena  
Obligatorio: sí

SourceImageId  
El ID de la AMI que se copiará de la región de origen.  
Tipo: cadena  
Obligatorio: sí

ImageName  
El nombre de la nueva imagen.  
Tipo: cadena  
Obligatorio: sí

ImageDescription  
Una descripción de la imagen de destino.  
Tipo: cadena  
Requerido: no

Encriptado  
Cifre la de destino AMI.  
Tipo: Booleano  
Obligatorio: no

KmsKeyId  
El nombre de recurso de Amazon (ARN) completo de la AWS KMS key que se utilizará al cifrar las instantáneas de una imagen durante una operación de copia. Para obtener más información, consulte [CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_copyimage.html).  
Tipo: cadena  
Requerido: no

ClientToken  
Un identificador con distinción entre mayúsculas y minúsculas único que proporciona para garantizar la idempotencia de la solicitud. Para obtener más información, consulte [CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_copyimage.html).  
Tipo: cadena  
Requerido: noOutput

ImageId  
El ID de la imagen copiada.

ImageState  
El estado de la imagen copiada.  
Valores válidos: `available` \$1 `pending` \$1 `failed`

# `aws:createImage`: crear una Amazon Machine Image
<a name="automation-action-create"></a>

Crea una Amazon Machine Image (AMI) a partir de una instancia que está en ejecución, deteniéndose o detenida, y sondea para que `ImageState` esté `available`.

**nota**  
La acción `aws:createImage` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
Esta acción es compatible con los siguientes parámetros de `CreateImage`. Para obtener más información, consulte [CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html).

------
#### [ YAML ]

```
name: createMyImage
action: aws:createImage
maxAttempts: 3
onFailure: Abort
inputs:
  InstanceId: i-1234567890abcdef0
  ImageName: AMI Created on{{global:DATE_TIME}}
  NoReboot: true
  ImageDescription: My newly created AMI
```

------
#### [ JSON ]

```
{
    "name": "createMyImage",
    "action": "aws:createImage",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "InstanceId": "i-1234567890abcdef0",
        "ImageName": "AMI Created on{{global:DATE_TIME}}",
        "NoReboot": true,
        "ImageDescription": "My newly created AMI"
    }
}
```

------

InstanceId  
El ID de la instancia.  
Tipo: cadena  
Obligatorio: sí

ImageName  
El nombre de la imagen.  
Tipo: cadena  
Obligatorio: sí

ImageDescription  
Una descripción de la imagen.  
Tipo: cadena  
Requerido: no

NoReboot  
Un literal booleano.  
De forma predeterminada, Amazon Elastic Compute Cloud (Amazon EC2) intenta apagar y reiniciar la instancia antes de crear la imagen. Si la opción **No reboot** (Sin reiniciar) se establece en `true`, Amazon EC2 no apaga la instancia antes de crear la imagen. Cuando se utiliza esta opción, no se puede garantizar la integridad del sistema de archivos en la imagen creada.   
Si no desea que la instancia se ejecute después de crear una AMI a partir de ella, primero debe usar la acción [`aws:changeInstanceState`: cambiar o confirmar el estado de la instancia](automation-action-changestate.md) para detener la instancia y, a continuación, usar la acción `aws:createImage` con la opción **NoReboot** establecida en `true`.  
Tipo: Booleano  
Obligatorio: no

BlockDeviceMappings  
Los dispositivos de bloques para la instancia.  
Tipo: mapa  
Obligatorio: noOutput

ImageId  
El ID de la imagen recién creada.  
Tipo: cadena

ImageState  
El estado actual de la imagen. Si el estado está disponible, la imagen se registra correctamente y se puede utilizar para iniciar una instancia.  
Tipo: cadena

# `aws:createStack`: crear una pila de CloudFormation
<a name="automation-action-createstack"></a>

Crea una pila de AWS CloudFormation a partir de una plantilla.

**nota**  
La acción `aws:createStack` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

Para obtener información adicional acerca de la creación de pilas de CloudFormation, consulte [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html) en la *Referencia de la API de AWS CloudFormation*. 

**Input**

------
#### [ YAML ]

```
name: makeStack
action: aws:createStack
maxAttempts: 1
onFailure: Abort
inputs:
  Capabilities:
  - CAPABILITY_IAM
  StackName: myStack
  TemplateURL: http://s3.amazonaws.com/amzn-s3-demo-bucket/myStackTemplate
  TimeoutInMinutes: 5
  Parameters:
    - ParameterKey: LambdaRoleArn
      ParameterValue: "{{LambdaAssumeRole}}"
    - ParameterKey: createdResource
      ParameterValue: createdResource-{{automation:EXECUTION_ID}}
```

------
#### [ JSON ]

```
{
    "name": "makeStack",
    "action": "aws:createStack",
    "maxAttempts": 1,
    "onFailure": "Abort",
    "inputs": {
        "Capabilities": [
            "CAPABILITY_IAM"
        ],
        "StackName": "myStack",
        "TemplateURL": "http://s3.amazonaws.com/amzn-s3-demo-bucket/myStackTemplate",
        "TimeoutInMinutes": 5,
        "Parameters": [
          {
            "ParameterKey": "LambdaRoleArn",
            "ParameterValue": "{{LambdaAssumeRole}}"
          },
          {
            "ParameterKey": "createdResource",
            "ParameterValue": "createdResource-{{automation:EXECUTION_ID}}"
          }
    }
}
```

------

Capacidades  
Una lista de valores que especifica para que CloudFormation pueda crear determinadas pilas. Algunas plantillas de pila incluyen recursos que pueden afectar los permisos de Cuenta de AWS. Para estas pilas, debe reconocer explícitamente sus capacidades especificando este parámetro.   
Los valores válidos son `CAPABILITY_IAM`, `CAPABILITY_NAMED_IAM` y `CAPABILITY_AUTO_EXPAND`.   
**CAPABILITY\$1IAM y CAPABILITY\$1NAMED\$1IAM**  
Si tiene recursos de IAM, puede especificar cualquiera de las dos capacidades. Si tiene recursos de IAM con nombres personalizados, debe especificar `CAPABILITY_NAMED_IAM`. Si no especifica este parámetro, esta acción devuelve un error `InsufficientCapabilities`. Los siguientes recursos requieren que especifique `CAPABILITY_IAM` o `CAPABILITY_NAMED_IAM`.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html)
Si su plantilla de pila contiene estos recursos, le recomendamos que revise todos los permisos asociados con ellos y edite sus permisos, si es necesario.   
Para obtener más información, consulte [Reconocimiento de recursos de IAM en plantillas de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities).   
**CAPABILITY\$1AUTO\$1EXPAND**  
Algunas plantillas contienen macros. Las macros realizan procesamiento personalizado en las plantillas; esto puede incluir desde acciones sencillas como operaciones de búsqueda y reemplazo hasta amplias transformaciones de plantillas completas. Debido a esto, los usuarios suelen crear un conjunto de cambios a partir de la plantilla procesada, de modo que puedan revisar los cambios resultantes de las macros antes de proceder a crear la pila. Si la plantilla de pila contiene una o más macros y decide crear una pila directamente a partir de la plantilla procesada, sin revisar primero los cambios resultantes en un conjunto de cambios, deberá confirmar esta prestación. 
Para obtener más información, consulte [Uso de macros de AWS CloudFormation para realizar un procesamiento personalizado en plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) en la *Guía del usuario de AWS CloudFormation*.  
Tipo: matriz de cadenas  
Valores válidos: `CAPABILITY_IAM | CAPABILITY_NAMED_IAM | CAPABILITY_AUTO_EXPAND`  
Obligatorio: no

ClientRequestToken  
Identificador exclusivo de esta solicitud CreateStack. Especifique este token si establece maxAttempts en este paso en un valor mayor que 1. Al especificar este token, CloudFormation sabe que no está intentando crear una pila nueva con el mismo nombre.  
Tipo: cadena  
Requerido: no  
Limitaciones de longitud: longitud mínima de 1. Longitud máxima de 128.  
Patrón: [a-zA-Z0-9][-a-zA-Z0-9]\$1

DisableRollback  
Se configura en `true` para desactivar la restauración de la pila si se produce un error al crearla.  
Condicional: puede especificar el parámetro `DisableRollback` o `OnFailure`, pero no ambos.   
Predeterminado: `false`  
Tipo: Booleano  
Obligatorio: no

NotificationARNs  
Los ARN de temas de Amazon Simple Notification Service (Amazon SNS) utilizados para publicar eventos relacionados con la pila. Puede encontrar ARN de temas de SNS con la consola de Amazon SNS, [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home).   
Tipo: matriz de cadenas  
Miembros de la matriz: número máximo de 5 elementos.  
Obligatorio: no

OnFailure  
Determina la acción que se realizará si se produce un error en la creación de la pila. Debe especificar `DO_NOTHING`, `ROLLBACK` o `DELETE`.  
Condicional: puede especificar el parámetro `OnFailure` o `DisableRollback`, pero no ambos.   
Valor predeterminado: `ROLLBACK`  
Tipo: cadena  
Valores válidos:` DO_NOTHING | ROLLBACK | DELETE`  
Obligatorio: no

Parameters  
Una lista de estructuras `Parameter` que especifican los parámetros de entrada de la pila. Para obtener más información, consulte el tipo de datos [Parameter](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html).   
Tipo: matriz de objetos [Parameter](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html)   
Obligatorio: no

ResourceTypes  
Los tipos de recurso de plantilla para los que tiene permiso para trabajar con ellos para esta acción de creación de la pila. Por ejemplo: `AWS::EC2::Instance`, `AWS::EC2::*` o `Custom::MyCustomInstance`. Utilice la siguiente sintaxis para describir los tipos de recurso de plantilla.  
+ Para todos los recursos de AWS:

  ```
  AWS::*
  ```
+ Para todos los recursos personalizados:

  ```
  Custom::*
  ```
+ Para un recurso personalizado específico:

  ```
  Custom::logical_ID
  ```
+ Para todos los recursos de un Servicio de AWS concreto:

  ```
  AWS::service_name::*
  ```
+ Para un recurso de AWS específico:

  ```
  AWS::service_name::resource_logical_ID
  ```
Si la lista de tipos de recursos no incluye un recurso que está va a crear, se produce un error en la creación de la pila. De forma predeterminada, CloudFormation concede permisos a todos los tipos de recursos. IAM utiliza este parámetro para las claves de condición específicas de CloudFormation en las políticas de IAM. Para obtener más información, consulte [Control del acceso con AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html).   
Tipo: matriz de cadenas  
Limitaciones de longitud: longitud mínima de 1. La longitud máxima es de 256 caracteres.  
Obligatorio: no

RoleARN  
El nombre de recurso de Amazon (ARN) de un rol de (IAM) que CloudFormation asume al crear la pila. CloudFormation utiliza las credenciales del rol para realizar llamadas en su nombre. CloudFormation siempre utiliza este rol para todas las operaciones futuras en la pila. Siempre que los usuarios tengan permiso para operar en la pila, CloudFormation utiliza este rol, aunque los usuarios no tengan permiso para transmitirlo. Asegúrese de que el rol concede la menor cantidad de privilegios.   
Si no especifica un valor, CloudFormation utiliza el rol que se había asociado anteriormente a la pila. Si no hay ningún rol disponible, CloudFormation utiliza una sesión temporal que se genera a partir de sus credenciales de usuario.   
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 20. La longitud máxima es de 2048 caracteres.  
Obligatorio: no

StackName  
El nombre que está asociado a la pila. El nombre debe ser único en la región en la que se crea la pila.  
El nombre de una pila solo puede contener caracteres alfanuméricos (con distinción de mayúsculas y minúsculas) y guiones. Debe comenzar con un carácter alfabético y no puede tener más de 128 caracteres. 
Tipo: cadena  
Obligatorio: sí

StackPolicyBody  
Estructura que contiene el cuerpo de políticas de la pila. Para obtener más información, consulte [Evitar actualizaciones en los recursos de la pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html).  
Condicional: puede especificar el parámetro `StackPolicyBody` o `StackPolicyURL`, pero no ambos.   
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 1. La longitud máxima es de 16384 caracteres.  
Obligatorio: no

StackPolicyURL  
Ubicación de un archivo que contiene la política de la pila. La URL debe apuntar a una política ubicada en un bucket de &S3; en la misma región que el stack. El tamaño de archivo máximo permitido para la política de la pila es de 16 KB.  
Condicional: puede especificar el parámetro `StackPolicyBody` o `StackPolicyURL`, pero no ambos.   
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 1. La longitud máxima es de 1350 caracteres.  
Obligatorio: no

Etiquetas  
Pares clave-valor para asociar con este stack. CloudFormation también propaga estas etiquetas a los recursos que se crean en la pila. Puede especificar un número máximo de 10 etiquetas.   
Tipo: matriz de objetos [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Tag.html)   
Obligatorio: no

TemplateBody  
Estructura que contiene el cuerpo de la plantilla con una longitud mínima de 1 byte y una longitud máxima de 51.200 bytes. Para obtener más información, consulte [Anatomía de la plantilla](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html).   
Condicional: puede especificar el parámetro `TemplateBody` o `TemplateURL`, pero no ambos.   
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 1.  
Obligatorio: no

TemplateURL  
Ubicación de un archivo que contiene el cuerpo de la plantilla. La URL debe apuntar a una plantilla que se encuentre en un bucket de S3. El tamaño máximo permitido para la plantilla es de 460.800 bytes. Para obtener más información, consulte [Anatomía de la plantilla](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html).   
Condicional: puede especificar el parámetro `TemplateBody` o `TemplateURL`, pero no ambos.   
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 1. La longitud máxima es de 1024 caracteres.  
Obligatorio: no

TimeoutInMinutes  
Periodo de tiempo que puede transcurrir antes de que el estado de la pila se convierta en `CREATE_FAILED`. Si no se ha establecido `DisableRollback` o se ha establecido en `false`, se restaurará la pila.   
Tipo: número entero  
Rango válido: valor mínimo de 1.  
Obligatorio: no

## Salidas
<a name="automation-action-createstack-output"></a>

StackId  
Identificador único de la pila.  
Tipo: cadena

StackStatus  
Estado actual de la pila.  
Tipo: cadena  
Valores válidos: `CREATE_IN_PROGRESS | CREATE_FAILED | CREATE_COMPLETE | ROLLBACK_IN_PROGRESS | ROLLBACK_FAILED | ROLLBACK_COMPLETE | DELETE_IN_PROGRESS | DELETE_FAILED | DELETE_COMPLETE | UPDATE_IN_PROGRESS | UPDATE_COMPLETE_CLEANUP_IN_PROGRESS | UPDATE_COMPLETE | UPDATE_ROLLBACK_IN_PROGRESS | UPDATE_ROLLBACK_FAILED | UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS | UPDATE_ROLLBACK_COMPLETE | REVIEW_IN_PROGRESS`  
Obligatorio: sí

StackStatusReason  
Mensaje de éxito o error asociado con el estado de la pila.  
Tipo: cadena  
Requerido: no  
Para obtener más información, consulte [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html).

## Consideraciones de seguridad
<a name="automation-action-createstack-security"></a>

Para poder usar la acción `aws:createStack`, debe asignar la siguiente política al rol de asunción de Automation de IAM. Para obtener más información sobre el rol de asunción, consulte [Tarea 1: crear un rol de servicio para Automation](automation-setup-iam.md#create-service-role). 

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "sqs:*",
            "cloudformation:CreateStack",
            "cloudformation:DescribeStacks"
         ],
         "Resource":"*"
      }
   ]
}
```

------

# `aws:createTags`: crear etiquetas para recursos de AWS
<a name="automation-action-createtag"></a>

Crea etiquetas nuevas para instancias de Amazon Elastic Compute Cloud (Amazon EC2) o instancias administradas de AWS Systems Manager.

**nota**  
La acción `aws:createTags` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
Esta acción admite la mayoría de los parámetros `CreateTags` de Amazon EC2 y `AddTagsToResource` de Systems Manager. Para obtener más información, consulte [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_createtags.html) y [AddTagsToResource](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/api_addtagstoresource.html).

En el siguiente ejemplo, se muestra cómo etiquetar una Amazon Machine Image (AMI) y una instancia como recursos de producción para un determinado departamento.

------
#### [ YAML ]

```
name: createTags
action: aws:createTags
maxAttempts: 3
onFailure: Abort
inputs:
  ResourceType: EC2
  ResourceIds:
  - ami-9a3768fa
  - i-02951acd5111a8169
  Tags:
  - Key: production
    Value: ''
  - Key: department
    Value: devops
```

------
#### [ JSON ]

```
{
    "name": "createTags",
    "action": "aws:createTags",
    "maxAttempts": 3,
    "onFailure": "Abort",
    "inputs": {
        "ResourceType": "EC2",
        "ResourceIds": [
            "ami-9a3768fa",
            "i-02951acd5111a8169"
        ],
        "Tags": [
            {
                "Key": "production",
                "Value": ""
            },
            {
                "Key": "department",
                "Value": "devops"
            }
        ]
    }
}
```

------

ResourceIds  
Los ID de los recursos que se van a etiquetar. Si el tipo de recurso no es “EC2”, este campo solo puede contener un único elemento.  
Tipo: lista de cadenas  
Obligatorio: sí

Etiquetas  
Las etiquetas para asociarlas con los recursos.  
Tipo: lista de mapas  
Obligatorio: sí

ResourceType  
El tipo de los recursos que se van a etiquetar. Si no se suministra, se usa el valor predeterminado "EC2".  
Tipo: cadena  
Requerido: no  
Valores válidos: `EC2` \$1 `ManagedInstance` \$1 `MaintenanceWindow` \$1 `Parameter`

**Output**  
Ninguno

# `aws:deleteImage`: eliminar una Amazon Machine Image
<a name="automation-action-delete"></a>

Elimina la Amazon Machine Image (AMI) especificada y todas las instantáneas relacionadas.

**nota**  
La acción `aws:deleteImage` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
Esta acción solo admite un parámetro. Para obtener más información, consulte la documentación de [DeregisterImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeregisterImage.html) y [DeleteSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteSnapshot.html).

------
#### [ YAML ]

```
name: deleteMyImage
action: aws:deleteImage
maxAttempts: 3
timeoutSeconds: 180
onFailure: Abort
inputs:
  ImageId: ami-12345678
```

------
#### [ JSON ]

```
{
    "name": "deleteMyImage",
    "action": "aws:deleteImage",
    "maxAttempts": 3,
    "timeoutSeconds": 180,
    "onFailure": "Abort",
    "inputs": {
        "ImageId": "ami-12345678"
    }
}
```

------

ImageId  
El ID de la imagen que se va a eliminar.  
Tipo: cadena  
Obligatorio: sí

**Output**  
Ninguno

# `aws:deleteStack`: eliminar una pila de CloudFormation
<a name="automation-action-deletestack"></a>

Elimina una pila de AWS CloudFormation.

**nota**  
La acción `aws:deleteStack` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**

------
#### [ YAML ]

```
name: deleteStack
action: aws:deleteStack
maxAttempts: 1
onFailure: Abort
inputs:
  StackName: "{{stackName}}"
```

------
#### [ JSON ]

```
{
   "name":"deleteStack",
   "action":"aws:deleteStack",
   "maxAttempts":1,
   "onFailure":"Abort",
   "inputs":{
      "StackName":"{{stackName}}"
   }
}
```

------

ClientRequestToken  
Un identificador único para esta solicitud `DeleteStack`. Especifique este token si tiene previsto intentar completar las solicitudes otra vez para que CloudFormation sepa que no está intentando eliminar una pila con el mismo nombre. Puede intentar completar las solicitudes `DeleteStack` otra vez para verificar que CloudFormation las ha recibido.  
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 1. Longitud máxima de 128.  
Patrón: [a-zA-Z][-a-zA-Z0-9]\$1  
Obligatorio: no

RetainResources.member.N  
Esta entrada solo se aplica a las pilas que se encuentran en un estado `DELETE_FAILED`. Una lista de los ID de recurso lógico en el caso de los recursos que desea conservar. Durante la eliminación, CloudFormation elimina la pila, pero no los recursos que se conservan.  
La retención de recursos resulta útil cuando no se puede eliminar un recurso, como un bucket de &S3; vacío, pero desea eliminar el stack.  
Tipo: matriz de cadenas  
Obligatorio: no

RoleARN  
El nombre de recurso de Amazon (ARN) de un rol de AWS Identity and Access Management (IAM) que CloudFormation asume para crear la pila. CloudFormation utiliza las credenciales del rol para realizar llamadas en su nombre. CloudFormation siempre utiliza este rol para todas las operaciones futuras en la pila. Siempre que los usuarios tengan permiso para operar en la pila, CloudFormation utiliza este rol, aunque los usuarios no tengan permiso para transmitirlo. Asegúrese de que el rol concede la menor cantidad de privilegios.   
Si no especifica un valor, CloudFormation utiliza el rol que se había asociado anteriormente a la pila. Si no hay ningún rol disponible, CloudFormation utiliza una sesión temporal que se genera a partir de sus credenciales de usuario.   
Tipo: cadena  
Limitaciones de longitud: longitud mínima de 20. La longitud máxima es de 2048 caracteres.  
Obligatorio: no

StackName  
El nombre o el ID de pila único que está asociado con la pila.  
Tipo: cadena  
Obligatorio: sí

## Consideraciones de seguridad
<a name="automation-action-deletestack-security"></a>

Para poder usar la acción `aws:deleteStack`, debe asignar la siguiente política al rol de asunción de Automation de IAM. Para obtener más información sobre el rol de asunción, consulte [Tarea 1: crear un rol de servicio para Automation](automation-setup-iam.md#create-service-role). 

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "sqs:*",
            "cloudformation:DeleteStack",
            "cloudformation:DescribeStacks"
         ],
         "Resource":"*"
      }
   ]
}
```

------

# `aws:executeAutomation`: ejecutar otra automatización
<a name="automation-action-executeAutomation"></a>

Ejecuta una automatización secundaria mediante la llamada a un manual de procedimientos secundario. Con esta acción, puede crear manuales de procedimientos para sus operaciones más comunes y puede referenciar esos manuales durante una automatización. Esta acción puede simplificar los manuales de procedimientos, ya que se elimina la necesidad de duplicar pasos en manuales similares.

La automatización secundaria se ejecuta en el contexto del usuario que ha iniciado la automatización principal. Esto significa que la automatización secundaria utiliza el mismo rol o usuario de AWS Identity and Access Management (IAM) que el usuario que inició la primera automatización.

**importante**  
Si especifica parámetros en una automatización secundaria que use un rol de asunción (un rol que usa la política iam:passRole), el usuario o el rol que hayan iniciado la automatización principal deben tener permiso para transmitir el rol de asunción especificado en la automatización secundaria. Para obtener más información sobre la configuración de un rol de asunción para Automation, consulte [Cree los roles de servicio para la automatización mediante la consola](automation-setup-iam.md).

**Input**

------
#### [ YAML ]

```
name: Secondary_Automation
action: aws:executeAutomation
maxAttempts: 3
timeoutSeconds: 3600
onFailure: Abort
inputs:
  DocumentName: secondaryAutomation
  RuntimeParameters:
    instanceIds:
    - i-1234567890abcdef0
```

------
#### [ JSON ]

```
{
   "name":"Secondary_Automation",
   "action":"aws:executeAutomation",
   "maxAttempts":3,
   "timeoutSeconds":3600,
   "onFailure":"Abort",
   "inputs":{
      "DocumentName":"secondaryAutomation",
      "RuntimeParameters":{
         "instanceIds":[
            "i-1234567890abcdef0"
         ]
      }
   }
}
```

------

DocumentName  
El nombre del manual de procedimientos secundario que se ejecutará durante el paso. Para ver manuales de procedimientos en la misma Cuenta de AWS, especifique el nombre del manual. Para ver manuales de procedimientos compartidos desde una Cuenta de AWS diferente, especifique el nombre de recurso de Amazon (ARN) del manual. Para obtener información acerca del uso de manuales de procedimientos compartidos, consulte [Uso de documentos de SSM compartidos](documents-ssm-sharing.md#using-shared-documents).  
Tipo: cadena  
Obligatorio: sí

DocumentVersion  
La versión del manual de procedimientos secundario que se ejecutará. Si no se especifica, Automation ejecuta la versión predeterminada del manual de procedimientos.  
Tipo: cadena  
Requerido: no

MaxConcurrency  
El número máximo de destinos que pueden ejecutar esta tarea en paralelo. Puede especificar un número, como 10, o un porcentaje, como 10 %.  
Tipo: cadena  
Requerido: no

MaxErrors  
Número de errores permitidos antes de que el sistema deje de ejecutar la automatización en destinos adicionales. Puede especificar un número absoluto de errores, por ejemplo, 10 o un porcentaje del destino definido, por ejemplo, el 10 %. Si especifica 3, por ejemplo, el sistema dejará de ejecutar la automatización una vez que se reciba el cuarto error. Si especifica 0, el sistema dejará de ejecutar la automatización en otros destinos una vez que se reciba el primer resultado de error. Si ejecuta una automatización en 50 recursos y establece `MaxErrors` al 10 %, el sistema dejará de ejecutar la automatización en destinos adicionales una vez que se reciba el sexto error.  
Las automatizaciones que ya se están ejecutando cuando se alcanza un umbral de `MaxErrors` tienen permiso para completarse, pero es posible que algunas de ellas también presenten un error. Si necesita asegurarse de que no se produzcan más errores en las automatizaciones más allá del valor de `MaxErrors` especificado, establezca `MaxConcurrency` en 1 de modo que las automatizaciones se procesen de una en una.  
Tipo: cadena  
Requerido: no

RuntimeParameters  
Parámetros obligatorios para el manual de procedimientos secundario. El mapeo usa el formato siguiente: \$1"parámetro1" : "valor1", "parámetro2" : "valor2" \$1  
Tipo: mapa  
Obligatorio: no

Etiquetas  
Metadatos opcionales que se asignan a un recurso. Puede especificar un máximo de cinco etiquetas para una automatización.  
Tipo: MapList  
Obligatorio: no

TargetLocations  
Una ubicación es una combinación de Regiones de AWS o Cuentas de AWS en las que desea ejecutar la automatización. Se debe especificar 1 elemento como mínimo y 100 como máximo. Al especificar un valor para este parámetro, las salidas no se devuelven a la automatización principal. Si es necesario, debe realizar llamadas posteriores a las operaciones de la API para recuperar la salida de las automatizaciones secundarias.  
Tipo: MapList  
Obligatorio: no

TargetMaps  
Lista de asignaciones de clave-valor de los parámetros del documento para indicar los recursos de destino. Tanto `Targets` como `TargetMaps` no se pueden especificar juntos.   
Tipo: MapList  
Obligatorio: no

TargetParameterName  
Nombre del parámetro utilizado como el recurso de destino para la automatización con frecuencia controlada. Es obligatorio si especifica `Targets`.  
Tipo: cadena  
Requerido: no

Targets  
Lista de asignaciones de clave-valor para indicar recursos como destino. Es obligatorio si especifica `TargetParameterName`.  
Tipo: MapList  
Obligatorio: noOutput

Output  
La salida generada por la automatización secundaria. Puede hacer referencia a la salida mediante el formato siguiente: *Secondary\$1Automation\$1Step\$1Name*.Output  
Tipo: StringList  
A continuación se muestra un ejemplo:  

```
- name: launchNewWindowsInstance
  action: 'aws:executeAutomation'
  onFailure: Abort
  inputs:
    DocumentName: launchWindowsInstance
  nextStep: getNewInstanceRootVolume
- name: getNewInstanceRootVolume
  action: 'aws:executeAwsApi'
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeVolumes
    Filters:
    - Name: attachment.device
      Values:
      - /dev/sda1
    - Name: attachment.instance-id
      Values:
      - '{{launchNewWindowsInstance.Output}}'
  outputs:
  - Name: rootVolumeId
    Selector: '$.Volumes[0].VolumeId'
    Type: String
  nextStep: snapshotRootVolume
- name: snapshotRootVolume
  action: 'aws:executeAutomation'
  onFailure: Abort
  inputs:
    DocumentName: AWS-CreateSnapshot
    RuntimeParameters:
    VolumeId:
    - '{{getNewInstanceRootVolume.rootVolumeId}}'
    Description:
    - 'Initial root snapshot for {{launchNewWindowsInstance.Output}}'
```

ExecutionId  
El ID de la automatización secundaria.  
Tipo: cadena

Status  
El estado de la automatización secundaria.  
Tipo: cadena

# `aws:executeAwsApi`: llamar y ejecutar operaciones de la API de AWS
<a name="automation-action-executeAwsApi"></a>

Llama y ejecuta operaciones de la API de AWS. Se admiten la mayoría de las operaciones de la API, aunque no todas se han puesto a prueba. No se admiten las operaciones de la API de streaming, como [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html). Si no estás seguro de si una operación de API que quiere usar es una operación de streaming, revise la documentación de [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) del servicio para determinar si una API requiere entradas o salidas de streaming. Actualizamos periódicamente la versión de Boto3 que utiliza esta acción. Sin embargo, tras el lanzamiento de una nueva versión de Boto3, los cambios pueden tardar varias semanas en reflejarse en esta acción. Cada acción `aws:executeAwsApi` puede ejecutarse hasta un máximo de 25 segundos. Para más ejemplos sobre cómo usar esta acción, consulte [Ejemplos adicionales de manuales de procedimientos](automation-document-examples.md).

**nota**  
La acción `aws:executeAwsApi` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Entradas**  
Las entradas se definen con la operación de la API que elija. 

------
#### [ YAML ]

```
action: aws:executeAwsApi
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
outputs: # These are user-specified outputs
- Name: The name for a user-specified output key
  Selector: A response object specified by using jsonpath format
  Type: The data type
```

------
#### [ JSON ]

```
{
   "action":"aws:executeAwsApi",
   "inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation or method name",
      "API operation inputs or parameters":"A value"
   },
   "outputs":[ These are user-specified outputs
      {
         "Name":"The name for a user-specified output key",
         "Selector":"A response object specified by using JSONPath format",
         "Type":"The data type"
      }
   ]
}
```

------

Servicio  
El espacio de nombres del Servicio de AWS que contiene la operación de la API que desea ejecutar. Puede ver una lista de espacios de nombres de espacios de Servicio de AWS admitidos en la sección [Available services](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html) (Servicios disponibles) de AWS SDK para Python (Boto3). El espacio de nombres se encuentra en la sección **Cliente**. Por ejemplo, el espacio de nombres para Systems Manager es `ssm`. El espacio de nombres para Amazon Elastic Compute Cloud (Amazon EC2) es `ec2`.  
Tipo: cadena  
Obligatorio: sí

API  
El nombre de la operación de la API que desea ejecutar. Puede ver las operaciones de la API (también llamadas métodos) si elige un servicio en el panel de navegación ubicado a la izquierda, en la siguiente página: [Services Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todas las operaciones de la API (los métodos) para Amazon Relational Database Service (Amazon RDS) se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html).  
Tipo: cadena  
Obligatorio: sí

Entradas de la operación de la API  
Una o más entradas de la operación de la API. Puede ver las entradas disponibles (también llamadas parámetros) eligiendo un servicio en el panel de navegación izquierdo en la siguiente página de [referencia de servicios](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todos los métodos para Amazon RDS se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html). Elija el método [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) y desplácese hacia abajo para ver los parámetros disponibles, como, por ejemplo, **DBInstanceIdentifier**, **Name** y **Values**.  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
Tipo: se determina a partir de la operación de la API elegida  
Obligatorio: sí

**Salidas**  
El usuario especifica las salidas en función de la respuesta de la operación de la API elegida.

Nombre  
Un nombre para la salida.  
Tipo: cadena  
Obligatorio: sí

Selector  
El elemento JSONPath a un atributo específico en el objeto de respuesta. Puede ver los objetos de respuesta eligiendo un servicio en el panel de navegación izquierdo en la siguiente página de [referencia de servicios](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todos los métodos para Amazon RDS se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html). Elija el método [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) y desplácese hasta la sección **Response Structure (Estructura de respuesta)**. **DBInstances** aparece como un objeto de respuesta.  
Tipo: Entero, Booleano, Cadena, StringList, StringMap o MapList  
Obligatorio: sí

Tipo  
El tipo de datos del elemento de respuesta.  
Tipo: varía  
Obligatorio: sí

# `aws:executeScript`: ejecutar un script
<a name="automation-action-executeScript"></a>

Ejecuta el script Python o PowerShell proporcionado mediante el uso del tiempo de ejecución y el controlador especificados. Cada acción `aws:executeScript` puede ejecutarse hasta un máximo de 600 segundos (10 minutos). Puede limitar el tiempo de espera mediante la especificación del parámetro `timeoutSeconds` para un paso `aws:executeScript`.

Utilice instrucciones de devolución en la función para agregar salidas a la carga útil de salida. Para ver ejemplos sobre cómo definir salidas para la acción `aws:executeScript`, consulte [Ejemplo 2: manual de procedimientos con scripts](automation-authoring-runbooks-scripted-example.md). También puede enviar la salida de acciones `aws:executeScript` de los manuales de procedimientos al grupo de registros de Amazon CloudWatch Logs que especifique. Para obtener más información, consulte [Registro de salida de acción de Automation con CloudWatch Logs](automation-action-logging.md).

Si desea enviar la salida desde acciones `aws:executeScript` a los Registros de CloudWatch o si los scripts que especifica para la llamada de acciones `aws:executeScript` las operaciones de la API de AWS, siempre se requiere un rol de servicio de AWS Identity and Access Management (IAM) (o asumir un rol) para ejecutar el manual de procedimientos.

**nota**  
La acción `aws:executeScript` no admite el reintento automático de limitación. Si el script realiza llamadas a la API de AWS que podrían estar limitadas, debe implementar su propia lógica de reintento en el código del script.

La acción `aws:executeScript` contiene los siguientes módulos de PowerShell Core preinstalados:
+ Microsoft.PowerShell.Host
+ Microsoft.PowerShell.Management
+ Microsoft.PowerShell.Security
+ Microsoft.PowerShell.Utility
+ PackageManagement
+ PowerShellGet

Para utilizar módulos de PowerShell Core que no estén preinstalados, el script debe instalar el módulo con la marca `-Force`, como se muestra en el siguiente comando. No se admite el módulo `AWSPowerShell.NetCore`. Reemplace *ModuleName* con el módulo que desee instalar.

```
Install-Module ModuleName -Force
```

Para utilizar cmdlets de PowerShell Core en el script, se recomienda utilizar los módulos de `AWS.Tools`, como se muestra en los siguientes comandos. Reemplace cada *example resource placeholder* con su propia información.
+ Cmdlets de Amazon S3

  ```
  Install-Module AWS.Tools.S3 -Force
  Get-S3Bucket -BucketName amzn-s3-demo-bucket
  ```
+ Cmdlets de Amazon EC2

  ```
  Install-Module AWS.Tools.EC2 -Force
  Get-EC2InstanceStatus -InstanceId instance-id
  ```
+ Cmdlets de AWS Tools for Windows PowerShell comunes o independientes del servicio

  ```
  Install-Module AWS.Tools.Common -Force
  Get-AWSRegion
  ```

Si el script inicializa nuevos objetos además de usar cmdlets de PowerShell Core, también debe importar el módulo como se muestra en el siguiente comando.

```
Install-Module AWS.Tools.EC2 -Force
Import-Module AWS.Tools.EC2

$tag = New-Object Amazon.EC2.Model.Tag
$tag.Key = "Tag"
$tag.Value = "TagValue"

New-EC2Tag -Resource i-02573cafcfEXAMPLE -Tag $tag
```

Para obtener ejemplos de instalación e importación de módulos de `AWS.Tools`, y de uso de cmdlets de PowerShell Core en los manuales de procedimientos, consulte [Experiencia de diseño visual para manuales de procedimientos de automatización](automation-visual-designer.md).

**Input**  
Proporcione la información necesaria para ejecutar el script. Reemplace cada *example resource placeholder* con su propia información.

**nota**  
El archivo adjunto de un script de Python puede ser un archivo .py o uno .zip que contenga el script. Los scripts de PowerShell deben almacenarse en archivos .zip.

------
#### [ YAML ]

```
action: "aws:executeScript"
inputs: 
 Runtime: runtime
 Handler: "functionName"
 InputPayload: 
  scriptInput: '{{parameterValue}}'
 Script: |-
   def functionName(events, context):
   ...
 Attachment: "scriptAttachment.zip"
```

------
#### [ JSON ]

```
{
    "action": "aws:executeScript",
    "inputs": {
        "Runtime": "runtime",
        "Handler": "functionName",
        "InputPayload": {
            "scriptInput": "{{parameterValue}}"
        },
        "Attachment": "scriptAttachment.zip"
    }
}
```

------

Tiempo de ejecución  
El tiempo de ejecución es el lenguaje que se debe usar para ejecutar el script proporcionado. `aws:executeScript` admite los tiempos de ejecución de la siguiente tabla.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/automation-action-executeScript.html)
Tipo: cadena  
Obligatorio: sí  
Para los tiempos de ejecución de Python, el entorno proporciona 512 MB de memoria y 512 MB de espacio en disco. Para los tiempos de ejecución de PowerShell, el entorno proporciona 1024 MB de memoria y 512 MB de espacio en disco.

Controlador  
Nombre de la función. Debe asegurarse de que la función definida en el controlador tenga dos parámetros, `events` y `context`. El tiempo de ejecución de PowerShell no admite este parámetro.  
Tipo: cadena  
Requerido: Sí (Python) \$1 No admitido (PowerShell)

InputPayload  
Un objeto JSON o YAML que se pasará al primer parámetro del controlador. Se puede usar para pasar los datos de entrada al script.  
Tipo: cadena  
Requerido: no  

```
description: Tag an instance
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
    AutomationAssumeRole:
        type: String
        description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
    InstanceId:
        type: String
        description: (Required) The ID of the EC2 instance you want to tag.
mainSteps:
  - name: tagInstance
    action: 'aws:executeScript'
    inputs:
        Runtime: "python3.11"
        Handler: tagInstance
        InputPayload:
            instanceId: '{{InstanceId}}'
        Script: |-
          def tagInstance(events,context):
            import boto3

            #Initialize client
            ec2 = boto3.client('ec2')
            instanceId = events['instanceId']
            tag = {
                "Key": "Env",
                "Value": "ExamplePython"
            }
            print(f"Adding tag {tag} to instance id {instanceId}")
            ec2.create_tags(
                Resources=[instanceId],
                Tags=[tag]
            )
            return tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

```
description: Tag an instance
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.
  InstanceId:
    type: String
    description: (Required) The ID of the EC2 instance you want to tag.
mainSteps:
  - name: tagInstance
    action: aws:executeScript
    isEnd: true
    inputs:
      Runtime: PowerShell 7.4
      InputPayload:
        instanceId: '{{InstanceId}}'
      Script: |-
        Install-Module AWS.Tools.EC2 -Force
        Import-Module AWS.Tools.EC2

        $input = $env:InputPayload | ConvertFrom-Json

        $tag = New-Object Amazon.EC2.Model.Tag
        $tag.Key = "Env"
        $tag.Value = "ExamplePowerShell"

        Write-Information "Adding tag key: $($tag.Key) and value: $($tag.Value) to instance id $($input.instanceId)"
        New-EC2Tag -Resource $input.instanceId -Tag $tag

        return $tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

Script  
Un script insertado que desea ejecutar durante la automatización.  
Tipo: cadena  
Requerido: No (Python) \$1 Sí (PowerShell)

Archivo adjunto  
Nombre de un archivo de script independiente o archivo .zip que puede invocarse mediante la acción. Especifique el mismo valor que el `Name` del archivo adjunto de documento que especifique en el parámetro de solicitud `Attachments`. Para obtener más información, consulte [Archivos adjuntos](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#systemsmanager-CreateDocument-request-Attachments) en la *referencia de la API de AWS Systems Manager*. Si proporciona un script mediante un archivo adjunto, también debe definir una sección `files` en los elementos de nivel superior del manual de procedimientos. Para obtener más información, consulte [Versión de esquema 0.3](documents-schemas-features.md#automation-doc-syntax-examples).  
Si desea invocar un archivo para Python, use el formato `filename.method_name` en `Handler`.   
El archivo adjunto de un script de Python puede ser un archivo .py o uno .zip que contenga el script. Los scripts de PowerShell deben almacenarse en archivos .zip.
Al incluir bibliotecas de Python en su archivo adjunto, recomendamos que agregue un archivo `__init__.py` vacío en cada directorio del módulo. Esto le permite importar los módulos desde la biblioteca del archivo adjunto dentro del contenido de su script. Por ejemplo: `from library import module`  
Tipo: cadena  
Requerido: noOutput

Carga  
La representación JSON del objeto devuelta por su función. Se devuelven hasta 100 KB. Si genera una lista, incluirá un máximo de 100 elementos.

## Uso de archivos adjuntos con aws:executeScript
<a name="automation-action-executeScript-attachments"></a>

Los archivos adjuntos proporcionan una forma eficaz de empaquetar y reutilizar scripts complejos, varios módulos y dependencias externas con sus acciones `aws:executeScript`. Use archivos adjuntos cuando necesite hacer lo siguiente:
+ Empaquetar varios módulos de Python o scripts de PowerShell juntos.
+ Reutilizar la misma lógica de script en varios manuales de procedimientos.
+ Incluir bibliotecas o dependencias externas en sus scripts.
+ Mantener limpia la definición del manual de procedimientos separando la lógica de los scripts complejos.
+ Compartir paquetes de scripts entre equipos o flujos de trabajo de automatización.

### Estructura y empaquetado de los archivos adjuntos
<a name="automation-action-executeScript-attachment-structure"></a>

Puede adjuntar archivos individuales o paquetes zip que contengan varios archivos. La estructura depende de su caso de uso:

**Archivos adjuntos de un único archivo**  
En el caso de scripts sencillos, puede adjuntar un único archivo `.py` (Python) o un archivo `.zip` que contenga un único script de PowerShell.

**Paquetes de varios módulos**  
Para una automatización compleja que requiera varios módulos, cree un paquete zip con la siguiente estructura recomendada:

```
my-automation-package.zip
├── main.py                    # Entry point script
├── utils/
│   ├── __init__.py           # Required for Python module imports
│   ├── helper_functions.py   # Utility functions
│   └── aws_operations.py     # AWS-specific operations
├── config/
│   ├── __init__.py
│   └── settings.py           # Configuration settings
└── requirements.txt          # Optional: document dependencies
```

**importante**  
Para los paquetes de Python, debe incluir un archivo `__init__.py` vacío en cada directorio que contenga los módulos de Python. Esto le permite importar módulos utilizando la sintaxis de importación estándar de Python, como `from utils import helper_functions`.

**Estructura de paquetes de PowerShell**  
Los archivos adjuntos de PowerShell deben empaquetarse en archivos zip con la siguiente estructura:

```
my-powershell-package.zip
├── Main.ps1                  # Entry point script
├── Modules/
│   ├── HelperFunctions.ps1   # Utility functions
│   └── AWSOperations.ps1     # AWS-specific operations
└── Config/
    └── Settings.ps1          # Configuration settings
```

### Crear manuales de procedimientos con archivos adjuntos
<a name="automation-action-executeScript-attachment-workflow"></a>

Siga estos pasos para crear manuales de procedimientos que utilicen archivos adjuntos:

1. **Cargar el archivo adjunto a Amazon S3**

   Cargue el archivo de script o el paquete zip en un bucket de S3 al que pueda acceder su rol de automatización. Observe el URI de S3 que se usará en el siguiente paso.

   ```
   aws s3 cp my-automation-package.zip s3://my-automation-bucket/scripts/
   ```

1. **Calcular la suma de verificación del archivo adjunto**

   Calcule la suma de verificación SHA-256 de su archivo adjunto para la verificación de seguridad:

   ```
   # Linux/macOS
   shasum -a 256 my-automation-package.zip
   
   # Windows PowerShell
   Get-FileHash -Algorithm SHA256 my-automation-package.zip
   ```

1. **Definir la sección de archivos en su manual de procedimientos**

   Agregue una sección `files` en el nivel superior de su manual de procedimientos para hacer referencia a su archivo adjunto:

   ```
   files:
     my-automation-package.zip:
       checksums:
         sha256: "your-calculated-checksum-here"
   ```

1. **Hacer referencia al archivo adjunto en su paso de executeScript**

   Utilice el parámetro `Attachment` para hacer referencia al archivo cargado:

   ```
   - name: runMyScript
     action: aws:executeScript
     inputs:
       Runtime: python3.11
       Handler: main.process_data
       Attachment: my-automation-package.zip
       InputPayload:
         inputData: "{{InputParameter}}"
   ```

## Ejemplos de archivos adjuntos aws:executeScript
<a name="automation-action-executeScript-examples"></a>

Los siguientes ejemplos muestran diferentes maneras de usar los archivos adjuntos con la acción `aws:executeScript`.

### Ejemplo 1: Archivo adjunto único
<a name="automation-action-executeScript-single-file-example"></a>

En este ejemplo, se muestra cómo utilizar un único archivo Python como adjunto para procesar los datos de la instancia EC2.

**Archivo adjunto: process\$1instance.py**  
Cree un archivo Python con el siguiente contenido:

```
import boto3
import json

def process_instance_data(events, context):
    """Process EC2 instance data and return formatted results."""
    try:
        instance_id = events.get('instanceId')
        if not instance_id:
            raise ValueError("instanceId is required")
        
        ec2 = boto3.client('ec2')
        
        # Get instance details
        response = ec2.describe_instances(InstanceIds=[instance_id])
        instance = response['Reservations'][0]['Instances'][0]
        
        # Format the response
        result = {
            'instanceId': instance_id,
            'instanceType': instance['InstanceType'],
            'state': instance['State']['Name'],
            'availabilityZone': instance['Placement']['AvailabilityZone'],
            'tags': {tag['Key']: tag['Value'] for tag in instance.get('Tags', [])}
        }
        
        print(f"Successfully processed instance {instance_id}")
        return result
        
    except Exception as e:
        print(f"Error processing instance: {str(e)}")
        raise
```

**Manual de procedimientos completo**  
Este es el manual de procedimientos completo que usa el archivo adjunto único:

```
description: Process EC2 instance data using single file attachment
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Required) IAM role for automation execution
  InstanceId:
    type: String
    description: (Required) EC2 instance ID to process

files:
  process_instance.py:
    checksums:
      sha256: "abc123def456..."

mainSteps:
  - name: processInstance
    action: aws:executeScript
    inputs:
      Runtime: python3.11
      Handler: process_instance.process_instance_data
      Attachment: process_instance.py
      InputPayload:
        instanceId: '{{InstanceId}}'
    outputs:
      - Type: StringMap
        Name: InstanceData
        Selector: $.Payload

outputs:
  - processInstance.InstanceData
```

### Ejemplo 2: Paquete de varios módulos
<a name="automation-action-executeScript-multi-module-example"></a>

En este ejemplo, se muestra el uso de un paquete zip que contiene varios módulos de Python para operaciones complejas de bucket de S3.

**Estructura del paquete**  
Cree un paquete zip con la siguiente estructura:

```
s3-operations.zip
├── main.py
├── utils/
│   ├── __init__.py
│   ├── s3_helper.py
│   └── validation.py
└── config/
    ├── __init__.py
    └── settings.py
```

**main.py (punto de entrada)**  
El script principal que orquesta las operaciones:

```
from utils.s3_helper import S3Operations
from utils.validation import validate_bucket_name
from config.settings import get_default_settings

def cleanup_s3_bucket(events, context):
    """Clean up S3 bucket based on specified criteria."""
    try:
        bucket_name = events.get('bucketName')
        max_age_days = events.get('maxAgeDays', 30)
        
        # Validate inputs
        if not validate_bucket_name(bucket_name):
            raise ValueError(f"Invalid bucket name: {bucket_name}")
        
        # Initialize S3 operations
        s3_ops = S3Operations()
        settings = get_default_settings()
        
        # Perform cleanup
        deleted_objects = s3_ops.delete_old_objects(
            bucket_name, 
            max_age_days,
            settings['dry_run']
        )
        
        result = {
            'bucketName': bucket_name,
            'deletedCount': len(deleted_objects),
            'deletedObjects': deleted_objects[:10],  # Return first 10 for brevity
            'dryRun': settings['dry_run']
        }
        
        print(f"Cleanup completed for bucket {bucket_name}")
        return result
        
    except Exception as e:
        print(f"Error during S3 cleanup: {str(e)}")
        raise
```

## Solución de problemas de aws:executeScript
<a name="automation-action-executeScript-troubleshooting"></a>

Utilice la siguiente guía para resolver los problemas habituales relacionados con los archivos adjuntos `aws:executeScript`:

**Errores de importación del módulo**  
Si recibe errores de importación al utilizar paquetes de varios módulos haga lo siguiente:
+ Asegúrese de haber incluido un archivo vacío `__init__.py` en cada directorio que contenga los módulos de Python.
+ Compruebe que las instrucciones de importación coincidan con la estructura real de archivos y directorios del paquete zip.
+ Utilice las importaciones relativas (por ejemplo, `from .utils import helper`) o las importaciones absolutas (por ejemplo, `from utils import helper`) de forma coherente.

**Errores de archivo adjunto no encontrado**  
Si la automatización no encuentra el archivo adjunto, haga lo siguiente:
+ Compruebe que el valor del parámetro `Attachment` coincida exactamente con la clave de su sección `files`.
+ Compruebe que la ruta del bucket de S3 y el nombre del archivo sean correctos en la sección `files`.
+ Asegúrese de que su función de automatización tenga el permiso `s3:GetObject` para la ubicación de S3 del archivo adjunto.
+ Compruebe que la suma de verificación en su manual de procedimientos coincida con la suma de verificación real del archivo.

**Errores de función del controlador**  
Si recibe errores relacionados con el controlador, haga lo siguiente:
+ Para Python: utilice el formato `filename.function_name` en el parámetro `Handler` (por ejemplo, `main.process_data`).
+ Asegúrese de que su función controladora acepte exactamente dos parámetros: `events` y `context`.
+ Para PowerShell: no especifique ningún parámetro `Handler`; el script se ejecuta directamente.

**Errores de ejecución de scripts**  
Si el script falla durante la ejecución, haga lo siguiente:
+ Consulte el historial de ejecución de la automatización para ver los mensajes de error detallados y los seguimientos de la pila.
+ Use instrucciones `print()` (Python) o `Write-Information` (PowerShell) para agregar resultados de depuración.
+ Compruebe que se concedan todos los permisos de AWS necesarios a su función de automatización.
+ Pruebe la lógica del script localmente antes de empaquetarlo como un archivo adjunto.

**Gestión de errores y códigos de salida**  
Para gestionar correctamente los errores y devolver los códigos de salida, haga lo siguiente:
+ En Python: use `raise Exception("error message")` para indicar un error en el script.
+ En PowerShell: utilice `throw "error message"` o `Write-Error` para indicar un error.
+ Devuelva datos estructurados de sus funciones para proporcionar información detallada sobre el éxito o el error.
+ Utilice bloques try-catch para gestionar las excepciones de manera elegante y proporcionar mensajes de error significativos.

# `aws:executeStateMachine`: ejecutar una máquina de estado de AWS Step Functions
<a name="automation-action-executeStateMachine"></a>

Ejecuta una máquina de estado de AWS Step Functions.

**nota**  
La acción `aws:executeStateMachine` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**

Esta acción admite la mayoría de los parámetros de la operación de la API de Step Functions [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html).

**Permisos de AWS Identity and Access Management (IAM) necesarios**
+ `states:DescribeExecution`
+ `states:StartExecution`
+ `states:StopExecution`

------
#### [ YAML ]

```
name: executeTheStateMachine
action: aws:executeStateMachine
inputs:
  stateMachineArn: StateMachine_ARN
  input: '{"parameters":"values"}'
  name: name
```

------
#### [ JSON ]

```
{
    "name": "executeTheStateMachine",
    "action": "aws:executeStateMachine",
    "inputs": {
        "stateMachineArn": "StateMachine_ARN",
        "input": "{\"parameters\":\"values\"}",
        "name": "name"
    }
}
```

------

stateMachineArn  
El nombre de recurso de Amazon (ARN) de la máquina de estado de Step Functions.  
Tipo: cadena  
Obligatorio: sí

name  
El nombre de la ejecución.  
Tipo: cadena  
Requerido: no

input  
Una cadena que contiene los datos de entrada JSON de la ejecución.  
Tipo: cadena  
Requerido: no

**Salidas**  
Las siguientes salidas están predefinidas para esta acción.

executionArn  
El ARN de la ejecución.  
Tipo: cadena

input  
La cadena que contiene los datos de entrada JSON de la ejecución. Las restricciones de longitud se aplican al tamaño de la carga y se expresan como bytes en codificación UTF-8.  
Tipo: cadena

name  
El nombre de la ejecución.  
Tipo: cadena

output  
Los datos de salida JSON de la ejecución. Las restricciones de longitud se aplican al tamaño de la carga y se expresan como bytes en codificación UTF-8.  
Tipo: cadena

startDate  
La fecha en que se inicia la ejecución.  
Tipo: cadena

stateMachineArn  
El ARN de la máquina indicada ejecutada.  
Tipo: cadena

status  
El estado actual de la ejecución.  
Tipo: cadena

stopDate  
Si la ejecución ya ha finalizado, la fecha en que se detuvo la ejecución.  
Tipo: cadena

# `aws:invokeWebhook`: invocar una integración de webhook de Automation
<a name="invoke-webhook"></a>

Invoca la integración de webhook de Automation especificada. Para obtener información acerca de la creación de integraciones de Automation, consulte [Crear integraciones webhook para Automation](creating-webhook-integrations.md).

**nota**  
La acción `aws:invokeWebhook` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**nota**  
Para utilizar la acción `aws:invokeWebhook`, su usuario o rol de servicio debe permitir las siguientes acciones:  
ssm:GetParameter
kms:Decrypt
El permiso para la operación `Decrypt` de AWS Key Management Service (AWS KMS) solo es necesario si utiliza una clave administrada por el cliente con el fin de cifrar el parámetro de la integración.

**Input**  
Proporcione la información de la integración de Automation que desea que invoque.

------
#### [ YAML ]

```
action: "aws:invokeWebhook"
inputs: 
 IntegrationName: "exampleIntegration"
 Body: "Request body"
```

------
#### [ JSON ]

```
{
    "action": "aws:invokeWebhook",
    "inputs": {
        "IntegrationName": "exampleIntegration",
        "Body": "Request body"
    }
}
```

------

IntegrationName  
El nombre de la integración de Automation. Por ejemplo, `exampleIntegration`. La integración que especifique debe existir previamente.  
Tipo: cadena  
Obligatorio: sí

Cuerpo  
La carga que desea enviar cuando se invoca la integración de webhook.  
Tipo: cadena  
Requerido: noOutput

Respuesta  
El texto recibido de la respuesta del proveedor de webhook.

ResponseCode  
El código del estado HTTP recibido de la respuesta del proveedor de webhook.

# `aws:invokeLambdaFunction`: invocar una función de AWS Lambda
<a name="automation-action-lamb"></a>

Invoca la función de AWS Lambda especificada.

**nota**  
Cada acción `aws:invokeLambdaFunction` puede ejecutarse hasta un máximo de 300 segundos (5 minutos). Puede limitar el tiempo de espera mediante la especificación del parámetro `timeoutSeconds` para un paso `aws:invokeLambdaFunction`.

**nota**  
La acción `aws:invokeLambdaFunction` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
Esta acción admite la mayoría de los parámetros invocados del servicio Lambda. Para obtener más información, consulte [Invoke](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html).

------
#### [ YAML ]

```
name: invokeMyLambdaFunction
action: aws:invokeLambdaFunction
maxAttempts: 3
timeoutSeconds: 120
onFailure: Abort
inputs:
  FunctionName: MyLambdaFunction
```

------
#### [ JSON ]

```
{
    "name": "invokeMyLambdaFunction",
    "action": "aws:invokeLambdaFunction",
    "maxAttempts": 3,
    "timeoutSeconds": 120,
    "onFailure": "Abort",
    "inputs": {
        "FunctionName": "MyLambdaFunction"
    }
}
```

------

FunctionName  
El nombre de la función de Lambda. Esta función debe existir.  
Tipo: cadena  
Obligatorio: sí

Calificador  
La versión de función o nombre de alias.  
Tipo: cadena  
Requerido: no

InvocationType  
El tipo de invocación. El valor predeterminado es `RequestResponse`.  
Tipo: cadena  
Valores válidos: `Event` \$1 `RequestResponse` \$1 `DryRun`  
Obligatorio: no

LogType  
Si el valor predeterminado es `Tail`, el tipo de invocación debe ser `RequestResponse`. Lambda devuelve los últimos 4 KB de datos de registro generados por la función de Lambda, con codificación Base64.  
Tipo: cadena  
Valores válidos: `None` \$1 `Tail`  
Obligatorio: no

ClientContext  
La información específica del cliente.  
Obligatorio: no

InputPayload  
Un objeto JSON o YAML que se pasará al primer parámetro del controlador. Puede utilizar esta entrada para transferir datos a la función. Esta entrada proporciona más flexibilidad y compatibilidad que la entrada de `Payload` heredada. Si define `InputPayload` y `Payload` para la acción, `InputPayload` tiene prioridad y el valor de `Payload` no se utiliza.  
Tipo: StringMap  
Obligatorio: no

Carga  
Una cadena JSON que se pasará al primer parámetro del controlador. Puede utilizar estos datos de entrada para pasarlos a la función. Recomendamos utilizar la entrada de `InputPayload` para garantizar una mayor funcionalidad.  
Tipo: cadena  
Requerido: noOutput

StatusCode  
El código de estado HTTP.

FunctionError  
Si está presente, indica que se ha producido un error durante la ejecución de la función. Se incluyen detalles sobre el error en la carga de la respuesta.

LogResult  
Los registros con codificación Base64 para la invocación de la función de Lambda. Los registros están presentes solo si el tipo de invocación es `RequestResponse` y se han solicitado.

Carga  
La representación JSON del objeto devuelto por la función de Lambda. Payload está presente solo si el tipo de invocación es `RequestResponse`.

Lo que aparece a continuación es una parte del manual de procedimientos `AWS-PatchInstanceWithRollback` que muestra cómo hacer referencia a las salidas de la acción `aws:invokeLambdaFunction`.

------
#### [ YAML ]

```
- name: IdentifyRootVolume
  action: aws:invokeLambdaFunction
  inputs:
    FunctionName: "IdentifyRootVolumeLambda-{{automation:EXECUTION_ID}}"
    Payload: '{"InstanceId": "{{InstanceId}}"}'
- name: PrePatchSnapshot
  action: aws:executeAutomation
  inputs:
    DocumentName: "AWS-CreateSnapshot"
    RuntimeParameters:
      VolumeId: "{{IdentifyRootVolume.Payload}}"
      Description: "ApplyPatchBaseline restoration case contingency"
```

------
#### [ JSON ]

```
{
    "name": "IdentifyRootVolume",
    "action": "aws:invokeLambdaFunction",
    "inputs": {
      "FunctionName": "IdentifyRootVolumeLambda-{{automation:EXECUTION_ID}}",
      "Payload": "{\"InstanceId\": \"{{InstanceId}}\"}"
    }
  },
  {
    "name": "PrePatchSnapshot",
    "action": "aws:executeAutomation",
    "inputs": {
      "DocumentName": "AWS-CreateSnapshot",
      "RuntimeParameters": {
        "VolumeId": "{{IdentifyRootVolume.Payload}}",
        "Description": "ApplyPatchBaseline restoration case contingency"
      }
    }
  }
```

------

# `aws:loop` — Repita los pasos en una automatización
<a name="automation-action-loop"></a>

Esta acción se repite en un subconjunto de pasos de un manual de procedimientos de automatización. Puede elegir un bucle de estilo `do while` o `for each`. Para construir un bucle `do while`, utilice el parámetro de entrada `LoopCondition`. Para construir un bucle `for each`, utilice los parámetros de entrada `Iterators` y `IteratorDataType`. Cuando utilice una acción `aws:loop`, especifique únicamente el parámetro de entrada `Iterators` o `LoopCondition`. El número máximo de veces que se van a ejecutar es de 100.

La propiedad `onCancel` solo se puede utilizar para los pasos definidos dentro de un bucle. La propiedad `onCancel` no es compatible con la acción `aws:loop`. La propiedad `onFailure` se puede usar para una acción `aws:loop`, pero solo se usará si se produce un error inesperado que provoque un error en el paso. Si define propiedades `onFailure` para los pasos de un bucle, la acción `aws:loop` hereda esas propiedades y reacciona en consecuencia cuando se produce un error.

**Ejemplos**  
A continuación se muestran ejemplos de cómo construir los distintos tipos de acciones de bucle.

------
#### [ do while ]

```
name: RepeatMyLambdaFunctionUntilOutputIsReturned
action: aws:loop
inputs:
    Steps:
    - name: invokeMyLambda
        action: aws:invokeLambdaFunction
        inputs:
        FunctionName: LambdaFunctionName
        outputs:
        - Name: ShouldRetry
            Selector: $.Retry
            Type: Boolean
    LoopCondition:
        Variable: "{{ invokeMyLambda.ShouldRetry }}"
        BooleanEquals: true
    MaxIterations: 3
```

------
#### [ for each ]

```
name: stopAllInstancesWithWaitTime
action: aws:loop
inputs:
    Iterators: "{{ DescribeInstancesStep.InstanceIds }}"
    IteratorDataType: "String"
    Steps:
    - name: stopOneInstance
        action: aws:changeInstanceState
        inputs:
        InstanceIds:
            - "{{stopAllInstancesWithWaitTime.CurrentIteratorValue}}"
        CheckStateOnly: false
        DesiredState: stopped
    - name: wait10Seconds
        action: aws:sleep
        inputs:
        Duration: PT10S
```

------

**Input**  
La entrada es la siguiente.

Iteradores  
La lista de elementos sobre los que se deben iterar los pasos. El número máximo de iteradores es 100.  
Tipo: StringList  
Obligatorio: no

IteratorDataType (Tipo de datos de iteradores)  
Un parámetro opcional para especificar el tipo de datos del `Iterators`. Se puede proporcionar un valor para este parámetro junto con el parámetro de entrada `Iterators`. Si no especifica un valor para este parámetro y `Iterators`, luego debe especificar un valor para el parámetro `LoopCondition`.  
Tipo: cadena  
Valores válidos: Boolean \$1 Integer \$1 String \$1 StringMap  
Predeterminado: String  
Obligatorio: no

LoopCondition  
Consta de una `Variable` y una condición de operador a evaluar. Si no especifica un valor para este parámetro, debe especificar un valor para los parámetros `Iterators` y `IteratorDataType`. Puede utilizar evaluaciones de operadores complejas mediante una combinación de operadores `And`, `Not` y `Or`. La condición se evalúa una vez completados los pasos del ciclo. Si la condición es `true` y el valor `MaxIterations` no se ha alcanzado, los pasos del bucle se vuelven a ejecutar. Las condiciones del operador son las siguientes:  

**Operaciones de cadena**
+ StringEquals
+ EqualsIgnoreCase
+ StartsWith
+ EndsWith
+ Contiene

**Numeric operations**
+ NumericEquals
+ NumericGreater
+ NumericLesser
+ NumericGreaterOrEquals
+ NumericLesser
+ NumericLesserOrEquals

**Operación booleana**
+ BooleanEquals
Tipo: StringMap  
Obligatorio: no

MaxIterations (Iteraciones máximas)  
Número máximo de veces que se van a ejecutar los pasos del ciclo. Una vez que se alcanza el valor especificado para esta entrada, el bucle deja de ejecutarse incluso si `LoopCondition` aún es `true` o si quedan objetos en el parámetro `Iterators`.  
Tipo: número entero  
Valores válidos: 1 - 100  
Obligatorio: no

Steps  
La lista de pasos que se van a ejecutar en el bucle. Funcionan como un manual de procedimientos anidado. En estos pasos, puede acceder al valor del iterador actual de un bucle `for each` mediante la sintaxis `{{loopStepName.CurrentIteratorValue}}`. También puede acceder a un valor entero de la iteración actual para ambos tipos de bucles mediante la sintaxis `{{loopStepName.CurrentIteration}}`.  
Tipo: lista de pasos  
Obligatorio: síOutput

Currentiteration (Iteración actual)  
La iteración del bucle actual como número entero. Los valores de iteración comienzan en 1.  
Tipo: número entero

CurrentiteratorValue (Valor del iterador actual)  
El valor del iterador actual como una cadena. Esta salida solo está presente en los bucles `for each`.  
Tipo: cadena

# `aws:pause`: detener una automatización
<a name="automation-action-pause"></a>

Esta acción detiene la automatización. Una vez detenida, el estado de la automatización es *Waiting* (En espera). Para continuar con la automatización, utilice la operación de la API [SendAutomationSignal](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendAutomationSignal.html) con el tipo de señal `Resume`. Se recomienda utilizar las acciones `aws:sleep` o `aws:approve` para tener un control más detallado de los flujos de trabajo.

**nota**  
El tiempo de espera predeterminado para esta acción es de 7 días (604 800 segundos) y el valor máximo es de 30 días (2 592 000 segundos). Puede limitar o ampliar el tiempo de espera mediante la especificación del parámetro `timeoutSeconds` para un paso `aws:pause`.

**Input**  
La entrada es la siguiente.

------
#### [ YAML ]

```
name: pauseThis
action: aws:pause
timeoutSeconds: 1209600
inputs: {}
```

------
#### [ JSON ]

```
{
    "name": "pauseThis",
    "action": "aws:pause",
    "timeoutSeconds": "1209600",
    "inputs": {}
}
```

------Output

Ninguno  


# `aws:runCommand`: ejecutar un comando en una instancia administrada
<a name="automation-action-runcommand"></a>

Ejecuta los comandos especificados.

**nota**  
Automation solo admite *output* de una acción de AWS Systems Manager Run Command. Un manual de procedimientos puede incluir varias acciones de Run Command, pero output solo se admite para una acción a la vez.

**Input**  
Esta acción admite la mayoría de los parámetros de comando. Para obtener más información, consulte [SendCommand](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html).

------
#### [ YAML ]

```
- name: checkMembership
  action: 'aws:runCommand'
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
      - '{{InstanceIds}}'
    Parameters:
      commands:
        - (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
```

------
#### [ JSON ]

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "InstanceIds": [
            "{{InstanceIds}}"
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        }
    }
}
```

------

DocumentName  
Si el documento de tipo Command le pertenece a usted o a AWS, especifique el nombre del documento. Si está utilizando un documento que una Cuenta de AWS diferente compartió con usted, especifique el nombre de recurso de Amazon (ARN) del documento. Para obtener más información acerca del uso de documentos compartidos, consulte [Uso de documentos de SSM compartidos](documents-ssm-sharing.md#using-shared-documents).  
Tipo: cadena  
Obligatorio: sí

InstanceIds  
Los ID de instancia donde desea que se ejecute el comando. Puede especificar un máximo de 50 ID.   
También puede utilizar el pseudoparámetro `{{RESOURCE_ID}}` en lugar de los ID de instancias para ejecutar el comando en todas las instancias del grupo de destino. Para obtener más información sobre pseudoparámetros, consulte . [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md).  
Otra alternativa es enviar comandos a una flota de instancias con el parámetro `Targets`. El parámetro `Targets` acepta etiquetas de Amazon Elastic Compute Cloud (Amazon EC2). Para obtener más información acerca de cómo utilizar el parámetro `Targets`, consulte [Ejecución de comandos a escala](send-commands-multiple.md).  
Tipo: StringList  
Obligatorio: no (Si no especifica InstanceIds ni utiliza el pseudoparámetro `{{RESOURCE_ID}}`, debe especificar el parámetro `Targets`).

Targets  
Una matriz de criterios de búsqueda que indica instancias como destino mediante el uso de una combinación de clave-valor que usted especifique. `Targets` es obligatorio si no se proporciona uno o más ID de instancia en la llamada. Para obtener más información acerca de cómo utilizar el parámetro `Targets`, consulte [Ejecución de comandos a escala](send-commands-multiple.md).  
Tipo: MapList (El esquema del mapa en la lista debe coincidir con el objeto). Para obtener información, consulte [Target](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_Target.html) en la *Referencia de la API de AWS Systems Manager*.  
Obligatorio: no (Si no especifica `Targets`, debe especificar InstanceIds o utilizar el pseudoparámetro `{{RESOURCE_ID}}`).  
A continuación se muestra un ejemplo.  

```
- name: checkMembership
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    Targets:
      - Key: tag:Stage
        Values:
          - Gamma
          - Beta
      - Key: tag-key
        Values:
          - Suite
    Parameters:
      commands:
        - (Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
```

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "Targets": [                   
            {
                "Key": "tag:Stage",
                "Values": [
                    "Gamma", "Beta"
                ]
            },
            {
                "Key": "tag:Application",
                "Values": [
                    "Suite"
                ]
            }
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        }
    }
}
```

Parameters  
Los parámetros obligatorios y opcionales especificados en el documento.  
Tipo: mapa  
Obligatorio: no

CloudWatchOutputConfig  
Las opciones de configuración para enviar el comando output a Registros de Amazon CloudWatch. Para obtener más información acerca de cómo enviar el comando output a Registros de CloudWatch, consulte [Configuración de Registros de Amazon CloudWatch para Run Command](sysman-rc-setting-up-cwlogs.md).  
Tipo: StringMap (El esquema del mapa debe coincidir con el objeto. Para obtener más información, consulte [CloudWatchOutputConfig](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CloudWatchOutputConfig.html) en la *Referencia de la API de AWS Systems Manager*).  
Obligatorio: no  
A continuación se muestra un ejemplo.  

```
- name: checkMembership
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
      - "{{InstanceIds}}"
    Parameters:
      commands:
        - "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
    CloudWatchOutputConfig:
      CloudWatchLogGroupName: CloudWatchGroupForSSMAutomationService
      CloudWatchOutputEnabled: true
```

```
{
    "name": "checkMembership",
    "action": "aws:runCommand",
    "inputs": {
        "DocumentName": "AWS-RunPowerShellScript",
        "InstanceIds": [
            "{{InstanceIds}}"
        ],
        "Parameters": {
            "commands": [
                "(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain"
            ]
        },
        "CloudWatchOutputConfig" : { 
                "CloudWatchLogGroupName": "CloudWatchGroupForSSMAutomationService",
                "CloudWatchOutputEnabled": true
        }
    }
}
```

Comment  
Información definida por el usuario sobre el comando.  
Tipo: cadena  
Requerido: no

DocumentHash  
El hash del documento.  
Tipo: cadena  
Requerido: no

DocumentHashType  
El tipo del hash.  
Tipo: cadena  
Valores válidos: `Sha256` \$1 `Sha1`  
Obligatorio: no

NotificationConfig  
Las configuraciones para enviar notificaciones.  
Obligatorio: no

OutputS3BucketName  
El nombre del bucket de S3 para las respuestas del comando output. Su nodo administrado debe tener permisos para el bucket de S3 con el objetivo de registrar correctamente output.  
Tipo: cadena  
Requerido: no

OutputS3KeyPrefix  
El prefijo.  
Tipo: cadena  
Requerido: no

ServiceRoleArn  
El ARN del rol de AWS Identity and Access Management (IAM).  
Tipo: cadena  
Requerido: no

TimeoutSeconds  
La cantidad de segundos que hay que esperar para que un comando entregue el resultado a AWS Systems Manager SSM Agent en una instancia. Si SSM Agent en la instancia no recibe el comando antes de que se alcance el valor especificado, el estado del comando se transforma en `Delivery Timed Out`.  
Tipo: entero  
Obligatorio: no  
Valores válidos: 30-2592000Output

CommandId  
El ID del comando.

Status  
El estado del comando.

ResponseCode  
El código de respuesta del comando. Si el documento que ejecuta tiene más de 1 paso, no se devuelve ningún valor para esta salida.

Output  
La salida del comando. Si dirige el comando a una etiqueta o a varias instancias, no se devuelve n ningún valor de output. Puede usar las operaciones de la API `GetCommandInvocation` y `ListCommandInvocations` para recuperar output para instancias individuales.

# `aws:runInstances`: lanzar una instancia de Amazon EC2
<a name="automation-action-runinstance"></a>

Lanza una instancia nueva de Amazon Elastic Compute Cloud (Amazon EC2).

**nota**  
La acción `aws:runInstances` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
La acción admite la mayoría de los parámetros de la API. Para obtener más información, consulte la documentación de la API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html).

------
#### [ YAML ]

```
name: launchInstance
action: aws:runInstances
maxAttempts: 3
timeoutSeconds: 1200
onFailure: Abort
inputs:
  ImageId: ami-12345678
  InstanceType: t2.micro
  MinInstanceCount: 1
  MaxInstanceCount: 1
  IamInstanceProfileName: myRunCmdRole
  TagSpecifications:
  - ResourceType: instance
    Tags:
    - Key: LaunchedBy
      Value: SSMAutomation
    - Key: Category
      Value: HighAvailabilityFleetHost
```

------
#### [ JSON ]

```
{
   "name":"launchInstance",
   "action":"aws:runInstances",
   "maxAttempts":3,
   "timeoutSeconds":1200,
   "onFailure":"Abort",
   "inputs":{
      "ImageId":"ami-12345678",
      "InstanceType":"t2.micro",
      "MinInstanceCount":1,
      "MaxInstanceCount":1,
      "IamInstanceProfileName":"myRunCmdRole",
      "TagSpecifications":[
         {
            "ResourceType":"instance",
            "Tags":[
               {
                  "Key":"LaunchedBy",
                  "Value":"SSMAutomation"
               },
               {
                  "Key":"Category",
                  "Value":"HighAvailabilityFleetHost"
               }
            ]
         }
      ]
   }
}
```

------

AdditionalInfo  
Reservado.  
Tipo: cadena  
Requerido: no

BlockDeviceMappings  
Los dispositivos de bloques para la instancia.  
Tipo: MapList  
Obligatorio: no

ClientToken  
El identificador para garantizar la instancia idempotente de la solicitud.  
Tipo: cadena  
Requerido: no

DisableApiTermination  
Activa o desactiva la terminación de la API de la instancia.  
Tipo: Booleano  
Obligatorio: no

EbsOptimized  
Activa o desactiva la optimización de Amazon Elastic Block Store (Amazon EBS).  
Tipo: Booleano  
Obligatorio: no

IamInstanceProfileArn  
El nombre de recurso de Amazon (ARN) del perfil de instancia de AWS Identity and Access Management (IAM).  
Tipo: cadena  
Requerido: no

IamInstanceProfileName  
El nombre del perfil de instancia de IAM correspondiente a la instancia.  
Tipo: cadena  
Requerido: no

ImageId  
El ID de la Amazon Machine Image (AMI).  
Tipo: cadena  
Obligatorio: sí

InstanceInitiatedShutdownBehavior  
Indica si la instancia se detiene o termina al cerrarse el sistema.  
Tipo: cadena  
Requerido: no

InstanceType  
El tipo de instancia.  
Si no se proporciona el valor de tipo de instancia, se emplea el tipo de instancia m1.small.
Tipo: cadena  
Requerido: no

KernelId  
El ID del kernel.  
Tipo: cadena  
Requerido: no

KeyName  
El nombre del par de claves.  
Tipo: cadena  
Requerido: no

MaxInstanceCount  
El número máximo de instancias que se van a lanzar.  
Tipo: cadena  
Requerido: no

MetadataOptions  
Opciones de metadatos de la instancia. Para obtener más información, consulte [InstanceMetadataOptionsRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceMetadataOptionsRequest.html).  
Tipo: StringMap  
Obligatorio: no

MinInstanceCount  
El número mínimo de instancias que se van a lanzar.  
Tipo: cadena  
Requerido: no

Supervisión  
Activa o desactiva el monitoreo detallado.  
Tipo: Booleano  
Obligatorio: no

NetworkInterfaces  
Las interfaces de red.  
Tipo: MapList  
Obligatorio: no

Placement  
La ubicación de la instancia.  
Tipo: StringMap  
Obligatorio: no

PrivateIpAddress  
La dirección IPv4 principal.  
Tipo: cadena  
Requerido: no

RamdiskId  
El ID del disco RAM.  
Tipo: cadena  
Requerido: no

SecurityGroupIds  
Los ID de los grupos de seguridad para la instancia.  
Tipo: StringList  
Obligatorio: no

SecurityGroups  
Los nombres de los grupos de seguridad para la instancia.  
Tipo: StringList  
Obligatorio: no

SubnetId  
El ID de subred.  
Tipo: cadena  
Requerido: no

TagSpecifications  
Las etiquetas que aplicar a los recursos durante el lanzamiento. Solo puede etiquetar instancias y volúmenes en el momento del lanzamiento. Las etiquetas especificadas se aplican a todas las instancias o volúmenes que se crean durante el lanzamiento. Para etiquetar una instancia después de que se haya lanzado, utilice la acción [`aws:createTags`: crear etiquetas para recursos de AWS](automation-action-createtag.md).  
Tipo MapList (Para obtener más información, consulte [TagSpecification](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TagSpecification.html)).  
Obligatorio: no

UserData  
Un script proporcionado como un valor literal de cadena. Si se escribe un valor literal, debe estar codificado en Base64.  
Tipo: cadena  
Requerido: noOutput

InstanceIds  
Los ID de las instancias.

InstanceStates  
El estado actual de la instancia.

# `aws:sleep`: retrasar una automatización
<a name="automation-action-sleep"></a>

Retrasa una automatización durante un periodo determinado. Esta acción utiliza el formato de fecha y hora de la Organización Internacional de Normalización (ISO, por sus siglas en inglés) 8601. Para obtener más información sobre este formato de fecha y hora, consulte [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html).

**Input**  
Puede retrasar una automatización durante un periodo determinado. 

------
#### [ YAML ]

```
name: sleep
action: aws:sleep
inputs:
  Duration: PT10M
```

------
#### [ JSON ]

```
{
   "name":"sleep",
   "action":"aws:sleep",
   "inputs":{
      "Duration":"PT10M"
   }
}
```

------

También puede retrasar la automatización hasta una fecha y una hora específicas. Si la fecha y hora especificadas ha transcurrido, la acción avanza de forma inmediata. 

------
#### [ YAML ]

```
name: sleep
action: aws:sleep
inputs:
  Timestamp: '2020-01-01T01:00:00Z'
```

------
#### [ JSON ]

```
{
    "name": "sleep",
    "action": "aws:sleep",
    "inputs": {
        "Timestamp": "2020-01-01T01:00:00Z"
    }
}
```

------

**nota**  
La automatización admite un tiempo de espera máximo de 604 799 segundos (7 días).

Duración  
Una duración ISO 8601. No puede especificar una duración negativa.   
Tipo: cadena  
Requerido: no

Marca de tiempo  
Una marca de tiempo ISO 8601. Si no especifica un valor para este parámetro, debe especificar un valor para el parámetro `Duration`.   
Tipo: cadena  
Requerido: noOutput

Ninguno  


# `aws:updateVariable` — Actualiza el valor de una variable del manual de procedimientos
<a name="automation-action-update-variable"></a>

Esta acción actualiza el valor de una variable del manual de procedimientos. El tipo de datos del valor debe coincidir con el tipo de datos de la variable que desea actualizar. Las conversiones de tipos de datos no son compatibles. La propiedad `onCancel` no es compatible con la acción `aws:updateVariable`.

**Input**  
La entrada es la siguiente.

------
#### [ YAML ]

```
name: updateStringList
action: aws:updateVariable
inputs:
    Name: variable:variable name
    Value:
    - "1"
    - "2"
```

------
#### [ JSON ]

```
{
    "name": "updateStringList",
    "action": "aws:updateVariable",
    "inputs": {
        "Name": "variable:variable name",
        "Value": ["1","2"]
    }
}
```

------

Nombre  
El nombre de la variable cuyo valor desea actualizar. Debe usar el formato `variable:variable name`  
Tipo: cadena  
Obligatorio: sí

Valor  
El nuevo valor que se va a asignar a la variable. El valor debe coincidir con el tipo de datos de la variable. Las conversiones de tipos de datos no son compatibles.  
Tipo: Boolean \$1 Integer \$1 MapList \$1 String \$1 StringList \$1 StringMap  
Obligatorio: sí  
Restricciones:  
+ MapList (Lista de mapas) puede contener un número máximo de 200 elementos.
+ La clave puede tener una longitud mínima de 1 y una longitud máxima de 50.
+ StringList puede tener un número mínimo de 0 elementos y un número máximo de 50 elementos.
+ La cadena puede tener una longitud mínima de 1 y una longitud máxima de 512.Output

Ninguno  


# `aws:waitForAwsResourceProperty`: esperar una propiedad de recurso de AWS
<a name="automation-action-waitForAwsResourceProperty"></a>

La acción `aws:waitForAwsResourceProperty` permite a su automatización esperar hasta alcanzar un estado de recurso o de evento específico antes de continuar con la automatización. Para más ejemplos sobre cómo usar esta acción, consulte [Ejemplos adicionales de manuales de procedimientos](automation-document-examples.md).

**nota**  
El valor del tiempo de espera predeterminado para esta acción es de 3600 segundos (una hora). Puede limitar o ampliar el tiempo de espera mediante la especificación del parámetro `timeoutSeconds` para un paso `aws:waitForAwsResourceProperty`. Para obtener más información y ejemplos sobre cómo usar esta acción, consulte [Administración de los tiempos de espera en los manuales de procedimientos](automation-handling-timeouts.md).

**nota**  
La acción `aws:waitForAwsResourceProperty` admite el reintento automático de limitación. Para obtener más información, consulte [Configurar el reintento automático para operaciones limitadas](automation-throttling-retry.md).

**Input**  
Las entradas se definen con la operación de la API que elija.

------
#### [ YAML ]

```
action: aws:waitForAwsResourceProperty
inputs:
  Service: The official namespace of the service
  Api: The API operation or method name
  API operation inputs or parameters: A value
  PropertySelector: Response object
  DesiredValues:
  - Desired property value
```

------
#### [ JSON ]

```
{
  "action": "aws:waitForAwsResourceProperty",
  "inputs": {
    "Service":"The official namespace of the service",
    "Api":"The API operation or method name",
    "API operation inputs or parameters":"A value",
    "PropertySelector": "Response object",
    "DesiredValues": [
      "Desired property value"
    ]
  }
}
```

------

Servicio  
El espacio de nombres del Servicio de AWS que contiene la operación de la API que desea ejecutar. Por ejemplo, el espacio de nombres para AWS Systems Manager es `ssm`. El espacio de nombres para Amazon Elastic Compute Cloud (Amazon EC2) es `ec2`. Puede ver una lista de espacios de nombres de Servicio de AWS admitidos en la sección [Available Services](https://docs.aws.amazon.com/cli/latest/reference/#available-services) (Servicios disponibles) de la *Referencia de los comandos de la AWS CLI*.  
Tipo: cadena  
Obligatorio: sí

API  
El nombre de la operación de la API que desea ejecutar. Puede ver las operaciones de la API (también llamadas métodos) si elige un servicio en el panel de navegación ubicado a la izquierda, en la siguiente página: [Services Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todas las operaciones de la API (los métodos) para Amazon Relational Database Service (Amazon RDS) se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html).  
Tipo: cadena  
Obligatorio: sí

Entradas de la operación de la API  
Una o más entradas de la operación de la API. Puede ver las entradas disponibles (también llamadas parámetros) eligiendo un servicio en el panel de navegación izquierdo en la siguiente página de [referencia de servicios](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todos los métodos para Amazon RDS se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html). Elija el método [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) y desplácese hacia abajo para ver los parámetros disponibles, como, por ejemplo, **DBInstanceIdentifier**, **Name** y **Values**.  

```
inputs:
  Service: The official namespace of the service
  Api: The API operation name
  API input 1: A value
  API Input 2: A value
  API Input 3: A value
```

```
"inputs":{
      "Service":"The official namespace of the service",
      "Api":"The API operation name",
      "API input 1":"A value",
      "API Input 2":"A value",
      "API Input 3":"A value"
}
```
Tipo: se determina a partir de la operación de la API elegida  
Obligatorio: sí

PropertySelector  
El elemento JSONPath a un atributo específico en el objeto de respuesta. Puede ver los objetos de respuesta eligiendo un servicio en el panel de navegación izquierdo en la siguiente página de [referencia de servicios](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todos los métodos para Amazon RDS se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html). Elija el método [describe\$1db\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.describe_db_instances) y desplácese hasta la sección **Response Structure (Estructura de respuesta)**. **DBInstances** aparece como un objeto de respuesta.  
Tipo: cadena  
Obligatorio: sí

DesiredValues  
El estado previsto o el estado en el que continuará la automatización.  
Tipo: MapList, StringList  
Obligatorio: sí

# Variables del sistema de Automation
<a name="automation-variables"></a>

Los manuales de procedimientos de AWS Systems Manager Automation usan las siguientes variables. En el código fuente JSON del manual de procedimientos `AWS-UpdateWindowsAmi`, puede ver un ejemplo de cómo se usan estas variables. 

**Para ver el código fuente JSON del manual de procedimientos `AWS-UpdateWindowsAmi`**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En la lista de documentos, utilice la barra de búsqueda o los números que se encuentran a la derecha de la barra de búsqueda para seleccionar el manual de procedimientos `AWS-UpdateWindowsAmi`.

1. Elija la pestaña **Content**. 

**Variables del sistema**  
Los manuales de procedimientos de Automation admiten las siguientes variables del sistema.


****  

| Variable | Detalles | 
| --- | --- | 
|  `global:ACCOUNT_ID`  |  El ID de la Cuenta de AWS del usuario o el rol donde se ejecuta Automatización.  | 
|  `global:DATE`  |  La fecha (en el tiempo de ejecución) con el formato aaaa-MM-dd.  | 
|  `global:DATE_TIME`  |  La fecha y la hora (en el tiempo de ejecución) con el formato aaaa-MM-dd\$1HH.mm.ss.  | 
|  `global:AWS_PARTITION`  |  Partición en la que se encuentra el recurso. Para las Regiones de AWS estándar, la partición es `aws`. Para los recursos en otras particiones, la partición es `aws-partitionname`. Por ejemplo, la partición de los recursos de la región AWS GovCloud (EE. UU. Oeste) es `aws-us-gov`.  | 
|  `global:REGION`  |  La región en la que se ejecuta el manual de procedimientos. Por ejemplo, us-east-2.  | 

**Variables de Automation**  
Los manuales de procedimientos de Automation admiten las siguientes variables de la automatización.


****  

| Variable | Detalles | 
| --- | --- | 
|  `automation:EXECUTION_ID`  |  El identificador único asignado a la automatización actual. Por ejemplo, `1a2b3c-1a2b3c-1a2b3c-1a2b3c1a2b3c1a2b3c`.  | 

**Topics**
+ [Terminología](#automation-terms)
+ [Escenarios admitidos](#automation-variables-support)
+ [Escenarios no admitidos](#automation-variables-unsupported)

## Terminología
<a name="automation-terms"></a>

Los siguientes términos describen cómo se resuelven las variables y los parámetros.


****  

| Plazo | Definición | Ejemplo | 
| --- | --- | --- | 
|  ARN constante  |  Un nombre de recurso de Amazon (ARN) válido sin variables.  |  `arn:aws:iam::123456789012:role/roleName`  | 
|  Parámetro del manual de procedimientos  |  Un parámetro definido en el nivel del manual de procedimientos (por ejemplo, `instanceId`). El parámetro se utiliza en un reemplazo de cadena básica. Su valor se proporciona en el tiempo de ejecución de inicio.  |  <pre>{ <br />   "description": "Create Image Demo",<br />   "version": "0.3",<br />   "assumeRole": "Your_Automation_Assume_Role_ARN",<br />   "parameters":{ <br />      "instanceId": { <br />         "type": "String",<br />         "description": "Instance to create image from"<br />   }<br />}</pre>  | 
|  Variable del sistema  |  Una variable general que se sustituye en el manual de procedimientos cuando se evalúa cualquiera de sus partes.  |  <pre>"activities": [ <br />   { <br />      "id": "copyImage",<br />      "activityType": "AWS-CopyImage",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": { <br />         "ImageName": "{{imageName}}",<br />         "SourceImageId": "{{sourceImageId}}",<br />         "SourceRegion": "{{sourceRegion}}",<br />         "Encrypted": true,<br />         "ImageDescription": "Test CopyImage Description created on {{global:DATE}}"<br />      }<br />   }<br />]</pre>  | 
|  Variable de Automation  |  Una variable relacionada con la automatización que se sustituye en el manual de procedimientos cuando se evalúa cualquier parte del manual.  |  <pre>{ <br />   "name": "runFixedCmds",<br />   "action": "aws:runCommand",<br />   "maxAttempts": 1,<br />   "onFailure": "Continue",<br />   "inputs": { <br />      "DocumentName": "AWS-RunPowerShellScript",<br />      "InstanceIds": [ <br />         "{{LaunchInstance.InstanceIds}}"<br />      ],<br />      "Parameters": { <br />         "commands": [ <br />            "dir",<br />            "date",<br />            "“{{outputFormat}}” -f “left”,”right”,”{{global:DATE}}”,”{{automation:EXECUTION_ID}}”<br />         ]<br />      }<br />   }<br />}</pre>  | 
|  Parámetro de Systems Manager  |  Un variable definida en AWS Systems Manager Parameter Store. No se puede referenciar directamente en la entrada de paso. Es posible que se requieran permisos para acceder al parámetro.  |  <pre><br />description: Launch new Windows test instance<br />schemaVersion: '0.3'<br />assumeRole: '{{AutomationAssumeRole}}'<br />parameters:<br />  AutomationAssumeRole:<br />    type: String<br />    default: ''<br />    description: >-<br />      (Required) The ARN of the role that allows Automation to perform the<br />      actions on your behalf. If no role is specified, Systems Manager<br />      Automation uses your IAM permissions to run this runbook.<br />  LatestAmi:<br />    type: String<br />    default: >-<br />      {{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}<br />    description: The latest Windows Server 2016 AMI queried from the public parameter.<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{LatestAmi}}'<br />...</pre>  | 

## Escenarios admitidos
<a name="automation-variables-support"></a>


****  

| Escenario | Comentarios | Ejemplo | 
| --- | --- | --- | 
|  ARN constante `assumeRole` en la creación.  |  Se lleva a cabo una comprobación de autenticación para verificar que el usuario que realiza la llamada tiene permiso para pasar el `assumeRole` indicado.  |  <pre>{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "arn:aws:iam::123456789012:role/roleName",<br />  "parameters": { <br />  ...</pre>  | 
|  Parámetro de manual de procedimientos suministrado para `AssumeRole` cuando se inicia la automatización.  |  Se debe definir en la lista de parámetros del manual de procedimientos.  |  <pre>{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "{{dynamicARN}}",<br />  "parameters": {<br /> ...</pre>  | 
|  Valor proporcionado para el parámetro del manual de procedimientos en el inicio.  |  El cliente proporciona el valor que se usará para un parámetro. Las entradas suministradas en el inicio deben estar definidas en la lista de parámetros del manual de procedimientos.  |  <pre>...<br />"parameters": {<br />    "amiId": {<br />      "type": "String",<br />      "default": "ami-12345678",<br />      "description": "list of commands to run as part of first step"<br />    },<br />...</pre> Las entradas en la ejecución de automatización de inicio incluyen: `{"amiId" : ["ami-12345678"] }`  | 
|  Parámetro de Systems Manager que se referencia en el contenido del manual de procedimientos.  |  La variable existe dentro de la cuenta del cliente o es un parámetro de acceso público, y el `AssumeRole` para el manual de procedimientos tiene acceso a la variable. Se lleva a cabo una comprobación en el momento de la creación para confirmar que `AssumeRole` tiene acceso. No se puede referenciar de manera directa el parámetro en la entrada de paso.  |  <pre><br />...<br />parameters:<br />    LatestAmi:<br />    type: String<br />    default: >-<br />      {{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}<br />    description: The latest Windows Server 2016 AMI queried from the public parameter.<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{LatestAmi}}'<br />...</pre>  | 
|  Variable del sistema a la que se hace referencia en la definición del paso  |  Una variable de sistema se sustituye en el manual de procedimientos cuando se inicia la automatización. El valor inyectado en el manual de procedimientos es relativo al momento en el que se produce la sustitución. Por ejemplo, el valor de una variable de tiempo inyectada en el paso 1 es diferente del valor inyectado en el paso 3 debido al tiempo que se tarda en ejecutar los pasos intermedios. No es necesario que las variables del sistema se establezcan en la lista de parámetros del manual de procedimientos.  |  <pre>...<br />  "mainSteps": [<br />    {<br />      "name": "RunSomeCommands",<br />      "action": "aws:runCommand",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "DocumentName": "AWS:RunPowerShell",<br />        "InstanceIds": ["{{LaunchInstance.InstanceIds}}"],<br />        "Parameters": {<br />            "commands" : [<br />                "echo {The time is now {{global:DATE_TIME}}}"<br />            ]<br />        }<br />    }<br />}, ... </pre>  | 
|  Variable de Automation a la que se hace referencia en la definición del paso.  |  No es necesario que las variables de Automation se establezcan en la lista de parámetros del manual de procedimientos. La única variable de Automation admitida es **automation:EXECUTION\$1ID**.  |  <pre>...<br />"mainSteps": [<br />    {<br />      "name": "invokeLambdaFunction",<br />      "action": "aws:invokeLambdaFunction",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "FunctionName": "Hello-World-LambdaFunction",<br /><br />"Payload" : "{ "executionId" : "{{automation:EXECUTION_ID}}" }"<br />      }<br />    }<br />... </pre>  | 
|  Hacer referencia a la salida del paso anterior en la definición del paso siguiente.  |  Es el redireccionamiento de parámetros. Se hace referencia a la salida de un paso anterior con la sintaxis `{{stepName.OutputName}}`. El cliente no puede usar esta sintaxis para los parámetros del manual de procedimientos. Esto se resuelve cuando se ejecuta el paso de la referencia. El parámetro no se incluye en la lista de parámetros del manual de procedimientos.  |  <pre>...<br />"mainSteps": [<br />    {<br />      "name": "LaunchInstance",<br />      "action": "aws:runInstances",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "ImageId": "{{amiId}}",<br />        "MinInstanceCount": 1,<br />        "MaxInstanceCount": 2<br />      }<br />    },<br />    {<br />      "name":"changeState",<br />      "action": "aws:changeInstanceState",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "InstanceIds": ["{{LaunchInstance.InstanceIds}}"],<br />        "DesiredState": "terminated"<br />      }<br />    }<br /><br />... </pre>  | 

## Escenarios no admitidos
<a name="automation-variables-unsupported"></a>


****  

| Escenario | Comentario | Ejemplo | 
| --- | --- | --- | 
|  Parámetro de Systems Manager proporcionado para `assumeRole` en la creación  |  No admitido.  |  <pre>...<br /><br />{<br />  "description": "Test all Automation resolvable parameters",<br />  "schemaVersion": "0.3",<br />  "assumeRole": "{{ssm:administratorRoleARN}}",<br />  "parameters": {<br /><br />... </pre>  | 
|  Parámetro de Systems Manager que se referencia de manera directa en la entrada de paso  |  Devuelve la excepción `InvalidDocumentContent` en el momento de la creación.  |  <pre><br />...<br />mainSteps:<br />  - name: launchInstance<br />    action: 'aws:runInstances'<br />    maxAttempts: 3<br />    timeoutSeconds: 1200<br />    onFailure: Abort<br />    inputs:<br />      ImageId: '{{ssm:/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base}}'<br />...</pre>  | 
|  Definición de paso variable  |  La definición de un paso en el manual de procedimientos se construye a través de variables.  |  <pre>...<br /><br />"mainSteps": [<br />    {<br />      "name": "LaunchInstance",<br />      "action": "aws:runInstances",<br />      "{{attemptModel}}": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "ImageId": "ami-12345678",<br />        "MinInstanceCount": 1,<br />        "MaxInstanceCount": 2<br />      }<br /><br />...<br /><br />User supplies input : { "attemptModel" : "minAttempts" } </pre>  | 
|  Referencia cruzada de los parámetros del manual de procedimientos  |  El usuario proporciona un parámetro de entrada en el inicio, que es una referencia a otro parámetro del manual de procedimientos.  |  <pre>...<br />"parameters": {<br />    "amiId": {<br />      "type": "String",<br />      "default": "ami-7f2e6015",<br />      "description": "list of commands to run as part of first step"<br />    },<br />    "alternateAmiId": {<br />      "type": "String",<br />      "description": "The alternate AMI to try if this first fails".<br /><br />"default" : "{{amiId}}"<br />    },<br /><br />... </pre>  | 
|  Expansión multinivel  |  El manual de procedimientos define una variable que toma el nombre de una variable. Se encuentra dentro de los delimitadores de variable (es decir, *\$1\$1 \$1\$1*) y se expande al valor de dicho parámetro/variable.  |  <pre>...<br />  "parameters": {<br />    "firstParameter": {<br />      "type": "String",<br />      "default": "param2",<br />      "description": "The parameter to reference"<br />    },<br />    "secondParameter": {<br />      "type": "String",<br />      "default" : "echo {Hello world}",<br />      "description": "What to run"<br />    }<br />  },<br />  "mainSteps": [{<br />      "name": "runFixedCmds",<br />      "action": "aws:runCommand",<br />      "maxAttempts": 1,<br />      "onFailure": "Continue",<br />      "inputs": {<br />        "DocumentName": "AWS-RunPowerShellScript",<br /><br />"InstanceIds" : "{{LaunchInstance.InstanceIds}}",<br />        "Parameters": {<br />          "commands": [ "{{ {{firstParameter}} }}"]<br /><br />}<br /><br />...<br /><br />Note: The customer intention here would be to run a command of "echo {Hello world}" </pre>  | 
|  Referencia a la salida de un paso de manual de procedimientos que es un tipo de variable diferente  |  El usuario referencia la salida de un paso de manual de procedimientos anterior en el paso siguiente. La salida es un tipo de variable que no cumple los requisitos de la acción en el paso siguiente.  |  <pre>...<br />mainSteps:<br />- name: getImageId<br />  action: aws:executeAwsApi<br />  inputs:<br />    Service: ec2<br />    Api: DescribeImages<br />    Filters:  <br />    - Name: "name"<br />      Values: <br />      - "{{ImageName}}"<br />  outputs:<br />  - Name: ImageIdList<br />    Selector: "$.Images"<br />    Type: "StringList"<br />- name: copyMyImages<br />  action: aws:copyImage<br />  maxAttempts: 3<br />  onFailure: Abort<br />  inputs:<br />    SourceImageId: {{getImageId.ImageIdList}}<br />    SourceRegion: ap-northeast-2<br />    ImageName: Encrypted Copies of LAMP base AMI in ap-northeast-2<br />    Encrypted: true <br />... <br />Note: You must provide the type required by the Automation action. <br />In this case, aws:copyImage requires a "String" type variable but the preceding step outputs a "StringList" type variable.<br />                                        </pre>  | 

# Creación de sus propios manuales de procedimientos
<a name="automation-documents"></a>

Un manual de procedimientos de automatización define las *acciones* que Systems Manager realiza en las instancias administradas y en otros recursos de AWS cuando se ejecuta una automatización. Automatización es una herramienta de AWS Systems Manager. Un manual de procedimientos contiene uno o más pasos que se ejecutan en orden secuencial. Cada paso se construye en torno a una sola acción. La salida de un paso se puede utilizar como entrada en un paso posterior. 

El proceso de ejecución de estas acciones y sus pasos se denomina *automatización*.

Los tipos de acción admitidos en los manuales de procedimientos le permiten automatizar una amplia variedad de operaciones en su entorno de AWS. Por ejemplo, con el tipo de acción `executeScript`, puede insertar un script de Python o PowerShell directamente en el manual de procedimientos. (Al crear un manual de procedimientos personalizado, puede agregar el script insertado o adjuntarlo desde un bucket de S3 o desde el equipo local). Puede automatizar la administración de sus recursos de AWS CloudFormation mediante el uso de los tipos de acción `deleteStack` y `createStack`. Además, mediante el tipo de acción `executeAwsApi`, un paso puede ejecutar *cualquier* operación de la API en cualquier Servicio de AWS, incluida la creación o la eliminación de recursos de AWS, el inicio de otros procesos, la creación de notificaciones y muchas más operaciones. 

Para obtener una lista de los 20 tipos de acción admitidos para Automation, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

Automation AWS Systems Manager proporciona varios manuales de procedimientos con pasos predefinidos que se pueden utilizar para realizar tareas comunes, como reiniciar una o más instancias de Amazon Elastic Compute Cloud (Amazon EC2), o crear una Amazon Machine Image (AMI). También puede crear sus propios manuales de procedimientos y compartirlos con otras Cuentas de AWS, o volverlos públicos para todos los usuarios de Automation.

Los manuales de procedimientos se escriben con YAML o JSON. Sin embargo, con el **Generador de documentos** en la consola de Automatización de Systems Manager, puede crear un manual de procedimientos sin tener que utilizar YAML o JSON nativo.

**importante**  
Si ejecuta un flujo de trabajo de automatización que invoca otros servicios mediante un rol de servicio de AWS Identity and Access Management (IAM), tenga en cuenta que el rol de servicio debe configurarse con el permiso necesario para invocar dichos servicios. Este requisito se aplica a todos los manuales de procedimientos de automatización de AWS (manuales de `AWS-*`), como los manuales de procedimientos `AWS-ConfigureS3BucketLogging`, `AWS-CreateDynamoDBBackup` y `AWS-RestartEC2Instance`, por nombrar algunos. Este requisito también se aplica a cualquier manual de procedimientos de automatización personalizado que cree para llamar otros Servicios de AWS mediante acciones que llaman a otros servicios. Por ejemplo, si utiliza las acciones `aws:executeAwsApi`, `aws:createStack` o `aws:copyImage`, configure el rol de servicio con el permiso necesario para invocar dichos servicios. Puede conceder permisos a otros Servicios de AWS mediante la incorporación de una política insertada de IAM al rol. Para obtener más información, consulte [(Opcional) Agregar una política insertada de Automatización o una política administrada por el cliente para invocar otros Servicios de AWS](automation-setup-iam.md#add-inline-policy).

Para obtener información acerca de las acciones que puede especificar en un manual de procedimientos, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

Para obtener información acerca del uso de AWS Toolkit for Visual Studio Code para crear manuales de procedimientos, consulte [Uso de documentos de Automatización de Systems Manager](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/systems-manager-automation-docs.html) en la *Guía del usuario de AWS Toolkit for Visual Studio Code*.

Para obtener información acerca del uso del diseñador visual para crear un manual de procedimientos personalizado, consulte [Experiencia de diseño visual para manuales de procedimientos de automatización](automation-visual-designer.md). 

**Contents**
+ [Experiencia de diseño visual para manuales de procedimientos de automatización](automation-visual-designer.md)
  + [Descripción general de la interfaz de experiencia de diseño visual](visual-designer-interface-overview.md)
    + [Navegador de acciones](visual-designer-interface-overview.md#visual-designer-actions)
    + [Canvas](visual-designer-interface-overview.md#visual-designer-canvas)
    + [Formulario](visual-designer-interface-overview.md#visual-designer-form)
    + [Métodos abreviados de teclado](visual-designer-interface-overview.md#visual-designer-keyboard-shortcuts)
  + [Uso de la experiencia de diseño visual](visual-designer-use.md)
    + [Cree de un flujo de trabajo del manual de procedimientos](visual-designer-use.md#visual-designer-create-runbook-workflow)
    + [Diseñe un manual de procedimientos](visual-designer-use.md#visual-designer-build)
    + [Actualice su manual de procedimientos](visual-designer-use.md#visual-designer-update-runbook)
    + [Exporte su manual de procedimientos](visual-designer-use.md#visual-designer-export-runbook)
  + [Configuración de entradas y salidas para sus acciones](visual-designer-action-inputs-outputs.md)
    + [Proporcione datos de entrada para una acción](visual-designer-action-inputs-outputs.md#providing-input)
    + [Defina los datos de salida de una acción](visual-designer-action-inputs-outputs.md#defining-output)
  + [Manejo de errores con la experiencia de diseño visual](visual-designer-error-handling.md)
    + [Vuelva a intentar la acción en caso de error](visual-designer-error-handling.md#retry-actions)
    + [Tiempos de espera](visual-designer-error-handling.md#timeout-seconds)
    + [Acciones fallidas](visual-designer-error-handling.md#failure-actions)
    + [Acciones canceladas](visual-designer-error-handling.md#cancel-actions)
    + [Acciones cruciales](visual-designer-error-handling.md#critical-actions)
    + [Finalización de acciones](visual-designer-error-handling.md#end-actions)
  + [Tutorial: cómo crear un manual de procedimientos utilizando la experiencia de diseño visual](visual-designer-tutorial.md)
    + [Paso 1: navegue hasta la experiencia de diseño visual](visual-designer-tutorial.md#navigate-console)
    + [Paso 2: Cree un flujo de trabajo](visual-designer-tutorial.md#create-workflow)
    + [Paso 3: Revise el código generado automáticamente](visual-designer-tutorial.md#view-generated-code)
    + [Paso 4: Ejecute su nuevo manual de procedimientos](visual-designer-tutorial.md#use-tutorial-runbook)
    + [Paso 5: Eliminar](visual-designer-tutorial.md#cleanup-tutorial-runbook)
+ [Creación de manuales de procedimientos de Automation](automation-authoring-runbooks.md)
  + [Identifique su caso de uso](automation-authoring-runbooks.md#automation-authoring-runbooks-use-case)
  + [Cómo configurar el entorno de desarrollo.](automation-authoring-runbooks.md#automation-authoring-runbooks-environment)
  + [Desarrolle contenido para el manual de procedimientos](automation-authoring-runbooks.md#automation-authoring-runbooks-developing-content)
  + [Ejemplo 1: creación de manuales de procedimientos principal y secundario](automation-authoring-runbooks-parent-child-example.md)
    + [Cree el manual de procedimientos secundario](automation-authoring-runbooks-parent-child-example.md#automation-authoring-runbooks-child-runbook)
    + [Crear el manual de procedimientos principal](automation-authoring-runbooks-parent-child-example.md#automation-authoring-runbooks-parent-runbook)
  + [Ejemplo 2: manual de procedimientos con scripts](automation-authoring-runbooks-scripted-example.md)
  + [Ejemplos adicionales de manuales de procedimientos](automation-document-examples.md)
    + [Implementación de la arquitectura de VPC y de controladores de dominio de Microsoft Active Directory](automation-document-architecture-deployment-example.md)
    + [Restauración de un volumen raíz a partir de la última instantánea](automation-document-instance-recovery-example.md)
    + [Creación de una AMI y de una copia entre regiones](automation-document-backup-maintenance-example.md)
+ [Creación de parámetros de entrada que rellenan recursos de AWS](populating-input-parameters.md)
+ [Uso del Generador de documentos para crear un manual de procedimientos](automation-document-builder.md)
  + [Crear un manual de procedimientos con el Generador de documentos](automation-document-builder.md#create-runbook)
  + [Crear un manual de procedimientos que ejecute scripts](automation-document-builder.md#create-runbook-scripts)
+ [Uso de scripts en manuales de procedimientos](automation-document-script-considerations.md)
  + [Permisos para utilizar los manuales de procedimientos](automation-document-script-considerations.md#script-permissions)
  + [Incorporación de scripts a los manuales de procedimientos](automation-document-script-considerations.md#adding-scripts)
  + [Restricciones de script para los manuales de procedimientos](automation-document-script-considerations.md#script-constraints)
+ [Uso de instrucciones condicionales en manuales de procedimientos](automation-branch-condition.md)
  + [Uso de la acción `aws:branch`](automation-branch-condition.md#branch-action-explained)
    + [Creación de un paso `aws:branch` en un manual de procedimientos](automation-branch-condition.md#create-branch-action)
      + [Acerca de la creación de la variable de salida](automation-branch-condition.md#branch-action-output)
    + [Manuales de procedimientos `aws:branch` de ejemplo](automation-branch-condition.md#branch-runbook-examples)
    + [Creación de automatizaciones con bifurcación complejas a través de operadores](automation-branch-condition.md#branch-operators)
  + [Ejemplos de cómo usar opciones condicionales](automation-branch-condition.md#conditional-examples)
+ [Uso de salidas de acción como entradas](automation-action-outputs-inputs.md)
  + [Uso de JSONPath en un manual de procedimientos](automation-action-outputs-inputs.md#automation-action-json-path)
+ [Crear integraciones webhook para Automation](creating-webhook-integrations.md)
  + [Creación de integraciones (consola)](creating-webhook-integrations.md#creating-integrations-console)
  + [Creación de integraciones (línea de comandos)](creating-webhook-integrations.md#creating-integrations-commandline)
  + [Creación de webhooks para integraciones](creating-webhook-integrations.md#creating-webhooks)
+ [Administración de los tiempos de espera en los manuales de procedimientos](automation-handling-timeouts.md)

# Experiencia de diseño visual para manuales de procedimientos de automatización
<a name="automation-visual-designer"></a>

La automatización AWS Systems Manager proporciona una experiencia de diseño visual low-code que le ayuda a crear manuales de procedimientos de automatización. La experiencia de diseño visual proporciona una interfaz de arrastrar y soltar con la opción de añadir su propio código para que pueda crear y editar manuales con mayor facilidad. Con la experiencia en diseño visual, tiene las siguientes opciones:
+ Controle instrucciones condicionales.
+ Controle cómo se filtran o transforman la entrada y la salida para cada acción.
+ Configure la gestión de errores.
+ Cree prototipos de nuevos manuales de procedimientos.
+ Utilice sus prototipos de manuales de procedimientos como punto de partida para el desarrollo local con el AWS Toolkit for Visual Studio Code.

Al crear o editar un manual de procedimientos, puede acceder a la experiencia de diseño visual desde la consola de [Automatización](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/). A medida que crea un manual de procedimientos, la experiencia de diseño visual valida su trabajo y genera código automáticamente. Puede revisar el código generado o exportarlo para su desarrollo local. Cuando haya terminado, puede guardar el manual de procedimientos, ejecutarlo y examinar los resultados en la consola de automatización de Systems Manager. 

**Topics**
+ [Información general de la interfaz](visual-designer-interface-overview.md)
+ [Uso de la experiencia de diseño visual](visual-designer-use.md)
+ [Configure entradas y salidas](visual-designer-action-inputs-outputs.md)
+ [Manejo de errores con la experiencia de diseño visual](visual-designer-error-handling.md)
+ [Tutorial: cómo crear un manual de procedimientos utilizando la experiencia de diseño visual](visual-designer-tutorial.md)

# Descripción general de la interfaz de experiencia de diseño visual
<a name="visual-designer-interface-overview"></a>

La experiencia de diseño visual de la automatización de Systems Manager consiste en un diseñador visual de flujos de trabajo low-code que le ayuda a crear manuales de procedimientos de automatización.

Conozca la experiencia de diseño visual con una descripción general de los componentes de la interfaz:

![\[Componentes de la experiencia de diseño visual\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_overview.png)

+ El navegador de **Acciones** contiene las pestañas **Acciones**, **AWSAPI** y **Runbooks**.
+ El *lienzo* es donde usted arrastra y suelta las acciones en el gráfico del flujo de trabajo, se cambia el orden de las acciones y se seleccionan las acciones que se van a configurar o ver.
+ El panel **Formulario** es el lugar donde puede ver y editar las propiedades de cualquier acción que haya seleccionado en el lienzo. Seleccione el botón **Contenido** para ver el formato YAML o JSON de su manual de procedimientos, con la acción actualmente seleccionada resaltada. 

Los enlaces de **Información** abren un panel con información contextual cuando necesita ayuda. Estos paneles también incluyen enlaces a temas relacionados en la documentación de automatización de Systems Manager. 

## Navegador de acciones
<a name="visual-designer-actions"></a>

Desde el navegador de **Acciones**, puede seleccionar acciones para arrastrarlas y soltarlas en su gráfico de flujo de trabajo. Puede buscar todas las acciones mediante el campo de búsqueda situado en la parte superior del navegador de **Acciones**. El navegador de **Acciones** contiene las siguientes pestañas:
+ La pestaña **Acciones** proporciona una lista de acciones de automatización que puede arrastrar y soltar en el gráfico de flujo de trabajo del manual de procedimientos en el lienzo.
+ La pestaña **AWS de APIs** proporciona una lista de AWS APIs que puede arrastrar y soltar en el gráfico de flujo de trabajo de su manual de procedimientos en el lienzo.
+ La pestaña **Runbooks** incluye varios manuales de procedimientos reutilizables y listos para usar como bloques de construcción que puede usar para una variedad de casos de uso. Por ejemplo, puede utilizar los manuales de procedimientos para realizar tareas de corrección habituales en las instancias de Amazon EC2 de su flujo de trabajo sin tener que volver a crear las mismas acciones.

![\[Experiencia de diseño visual: navegador de acciones\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_actions_multi_view.png)


## Canvas
<a name="visual-designer-canvas"></a>

Después de elegir una acción para añadirla a su automatización, arrástrela al lienzo y suéltela en el gráfico de flujo de trabajo. También puede arrastrar y soltar acciones para moverlas a diferentes lugares del flujo de trabajo de su manual de procedimientos. Si su flujo de trabajo es complejo, es posible que no pueda verlo en su totalidad en el panel del lienzo. Use los controles de la parte superior del lienzo para acercar o alejar la imagen. Para ver diferentes partes de un flujo de trabajo, puede arrastrar el gráfico del flujo de trabajo al lienzo. 

Arrastre una acción desde el navegador de **Acciones** y suéltela en el gráfico de flujo de trabajo de su manual de procedimientos. Una línea muestra dónde se colocará en su flujo de trabajo. Para cambiar el orden de una acción, puede arrastrarla a un lugar diferente de su flujo de trabajo. La nueva acción se ha añadido a su flujo de trabajo y su código se genera automáticamente.

![\[Experiencia de diseño visual: lienzo\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_canvas.png)


## Formulario
<a name="visual-designer-form"></a>

Después de añadir una acción a su flujo de trabajo del manual de procedimientos, puede configurarla para que se adapte a su caso de uso. Elija la acción que desee configurar y verá sus parámetros y opciones en el panel **Formulario**. También puedes ver el código YAML o JSON pulsando el botón **Contenido**. El código asociado a la acción que ha seleccionado aparece resaltado.

![\[Experiencia de diseño visual: panel formulario\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_form.png)


![\[Experiencia de diseño visual: panel contenido\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_content.png)


## Métodos abreviados de teclado
<a name="visual-designer-keyboard-shortcuts"></a>

La experiencia de diseño visual es compatible con los atajos de teclado que se muestran en la siguiente tabla.


| Método abreviado de teclado | Función | 
| --- | --- | 
| Ctrl\$1Z | Deshacer la última operación. | 
| Ctrl\$1Mayús\$1Z | Rehacer la última operación. | 
| Alt \$1 C | Centrar el flujo de trabajo en el lienzo. | 
| Retroceso | Eliminar todos los estados seleccionados. | 
| Eliminar | Eliminar todos los estados seleccionados. | 
| Ctrl\$1D | Duplicar el estado seleccionado. | 

# Uso de la experiencia de diseño visual
<a name="visual-designer-use"></a>

Aprenda a crear, editar y ejecutar flujos de trabajo de manual de procedimientos utilizando la experiencia de diseño visual. Una vez que el flujo de trabajo esté listo, puede guardarlo o exportarlo. También puede utilizar la experiencia de diseño visual para crear prototipos rápidamente. 

## Cree de un flujo de trabajo del manual de procedimientos
<a name="visual-designer-create-runbook-workflow"></a>

1. Inicie sesión en la [consola de automatización de Systems Manager](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/).

1. Seleccione **Crear runbook**.

1. En el cuadro **Nombre** , escriba un nombre para el manual de procedimientos, por ejemplo,`MyNewRunbook`.

1. Junto a los botones **Diseño** y **Código**, seleccione el icono del lápiz e introduzca un nombre para el manual de procedimientos.

Ahora puede diseñar un flujo de trabajo para su nuevo manual de procedimientos.

## Diseñe un manual de procedimientos
<a name="visual-designer-build"></a>

 Para diseñar un flujo de trabajo de manual de procedimientos utilizando la experiencia de diseño visual, arrastre una acción de automatización desde el navegador de **Acciones** al lienzo y sitúela en el lugar que desee en el flujo de trabajo del manual de procedimientos. También puede reordenar las acciones de su flujo de trabajo arrastrándolas a una ubicación diferente. A medida que arrastra una acción al lienzo, aparece una línea en el lugar donde puede colocar la acción en el flujo de trabajo. Cuando una acción se coloca en el lienzo, su código se genera automáticamente y se añade al contenido del manual de procedimientos.

Si sabe el nombre de la acción que quiere añadir, utilice el cuadro de búsqueda situado en la parte superior del navegador de **Acciones** para buscarla.

Después de colocar una acción en el lienzo, configúrela mediante el panel **Formulario** de la derecha. Este panel contiene las pestañas **General**, **Entradas**, **Salidas** y **Configuración** para cada acción de automatización o acción de API que coloque en el lienzo. Por ejemplo, la pestaña **General** contiene las siguientes secciones:
+ El **Nombre del paso** identifica el paso. Especifique un valor único para el nombre del paso.
+ La **Descripción** le ayuda a describir lo que está haciendo la acción en el flujo de trabajo de su manual de procedimientos.

La pestaña **Entradas** contiene campos que varían en función de la acción. Por ejemplo, la acción de automatización de `aws:executeScript` contiene las siguientes secciones:
+ El **Tiempo de ejecución** es el lenguaje a usar para ejecutar el script proporcionado.
+ El **Controlador** es el nombre de su función. Debe asegurarse de que la función definida en el controlador tenga dos parámetros: `events` y `context`. El tiempo de ejecución de PowerShell no admite este parámetro. 
+ El **Script** es un script insertado que desea ejecutar durante el flujo de trabajo.
+ (Opcional) El **Archivo adjunto** es para scripts independientes o archivos.zip que la acción puede invocar. Este parámetro es obligatorio para los manuales de procedimientos JSON.

La pestaña **Salidas** le ayuda a especificar los valores que desea generar de una acción. Puede hacer referencia a los valores de salida en acciones posteriores de su flujo de trabajo o generar resultados para fines de registro. No todas las acciones tendrán una pestaña de **Salidas** porque no todas las acciones admiten salidas. Por ejemplo, la acción `aws:pause` no admite salidas. En el caso de las acciones que son compatibles con salidas, la pestaña **Salidas** consta de las siguientes secciones:
+ El **Nombre** es el nombre que se utilizará para el valor de salida. Puede hacer referencia a los resultados en acciones posteriores de su flujo de trabajo.
+ El **Selector** es una expresión de cadena JSONPath que comienza con `"$."` que se utiliza para seleccionar uno de varios componentes dentro de un elemento JSON.
+ El **Tipo** es el tipo de datos del valor de salida. Por ejemplo, escriba tipo de dato `String` o `Integer`.

La pestaña **Configuración** contiene propiedades y opciones que pueden utilizar todas las acciones de automatización. La acción consta de las secciones siguientes:
+ La propiedad **Cantidad máxima de intentos** es el número de veces que se reintenta una acción si se produce un error.
+ La propiedad **Tiempo de espera en segundos** especifica el valor de tiempo de espera de una acción.
+ La propiedad **Es crítico** determina si el error de la acción detiene toda la automatización.
+ La propiedad **Siguiente paso** determina la siguiente acción que debe realizar la automatización en el manual de procedimientos.
+ La propiedad **En caso de error** determina la siguiente acción de la automatización en el manual de procedimientos en caso de que la acción falle.
+ La propiedad **Al cancelar** determina la siguiente acción de la automatización en el manual de procedimientos si un usuario cancela la acción.

Para eliminar una acción, puedes usar la barra de herramientas situada sobre el lienzo o hacer clic con el botón derecho del ratón y seleccionar **Eliminar acción**.

A medida que el flujo de trabajo vaya creciendo, es posible que no quepa en el lienzo. Pruebe una de las siguientes opciones para que el flujo de trabajo encaje en el lienzo: 
+ Use los controles de los paneles laterales para cambiar el tamaño de los paneles o cerrarlos.
+ Utilice la barra de herramientas situada en la parte superior del lienzo para acercar o alejar el gráfico del flujo de trabajo.

## Actualice su manual de procedimientos
<a name="visual-designer-update-runbook"></a>

Puedes actualizar el flujo de trabajo de un manual de procedimientos existente creando una nueva versión del manual. Las actualizaciones de sus manuales de procedimientos se pueden realizar utilizando la experiencia de diseño visual o editando el código directamente. Para actualizar un manual de procedimientos existente, siga el siguiente procedimiento:

1. Inicie sesión en la [consola de automatización de Systems Manager](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/).

1. Elija el manual de procedimientos que desea actualizar.

1. Elija **Create new version (Crear nueva versión)**.

1. La experiencia de diseño visual tiene dos paneles: un panel de códigos y un panel de flujo de trabajo visual. Elija **Diseño** en el panel de flujo de trabajo visual para editar su flujo de trabajo con la experiencia de diseño visual. Cuando haya terminado, elija **Crear nueva versión** para guardar los cambios y salir.

1. (Opcional) Use el panel de códigos para editar el contenido del manual de procedimientos en YAML o JSON.

## Exporte su manual de procedimientos
<a name="visual-designer-export-runbook"></a>

Para exportar el código YAML o JSON del flujo de trabajo de su manual de procedimientos y también un gráfico del flujo de trabajo, siga el siguiente procedimiento: 

1. Elija tu manual de procedimientos en la consola **Documentos**.

1. Elija **Create new version (Crear nueva versión)**.

1. En el menú desplegable **Acciones**, elige si quiere exportar el gráfico o el manual de procedimientos y el formato que prefiera.

# Configuración de entradas y salidas para sus acciones
<a name="visual-designer-action-inputs-outputs"></a>

Cada acción de automatización responde en función de las entradas que recibe. En la mayoría de los casos, se pasa el resultado a las acciones siguientes. En la experiencia de diseño visual, puede configurar los datos de entrada y salida de una acción en las pestañas de **Entradas** y **Salidas** del panel de **Formulario**.

Para obtener información detallada acerca de cómo definir y utilizar la salida para las acciones de automatización, consulte [Uso de salidas de acción como entradas](automation-action-outputs-inputs.md). 

## Proporcione datos de entrada para una acción
<a name="providing-input"></a>

Cada acción de automatización tiene una o más entradas para las que debe proporcionar un valor. El valor que proporcione para la entrada de una acción viene determinado por el tipo de datos y el formato que acepte la acción. Por ejemplo, las acciones `aws:sleep` requieren un valor de cadena con formato ISO 8601 para la entrada `Duration`.

Por lo general, en el flujo de trabajo del manual de procedimientos se utilizan acciones que devuelven los resultados que se desean utilizar en acciones posteriores. Es importante que se asegure de que los valores de entrada son correctos para evitar errores en el flujo de trabajo del manual de procedimientos. Los valores de entrada también son importantes porque determinan si la acción devuelve el resultado esperado. Por ejemplo, al usar la acción `aws:executeAwsApi`, debe asegurarse de que está proporcionando el valor correcto para la operación de la API.

## Defina los datos de salida de una acción
<a name="defining-output"></a>

Algunas acciones de automatización devuelven la salida después de realizar las operaciones definidas. Las acciones que devuelven salidas tienen resultados predefinidos o le permiten definir las salidas usted mismo. Por ejemplo, la acción `aws:createImage` tiene salidas predefinidas que devuelven un `ImageId` y `ImageState`. Comparativamente, con la acción `aws:executeAwsApi`, puede definir las salidas que desea obtener de la operación de API especificada. Como resultado, puede devolver uno o más valores de una sola operación de API para usarlos en acciones posteriores.

Para definir sus propios resultados para una acción de automatización, debe especificar el nombre del resultado, el tipo de datos y el valor del resultado. Para seguir utilizando la `aws:executeAwsApi` acción como ejemplo, supongamos que llama a la operación de `DescribeInstances` API desde Amazon EC2. En este ejemplo, desea devolver o generar el `State` de una instancia de Amazon EC2 y ramificar el flujo de trabajo de su manual de procedimientos en función del resultado. Puede elegir un nombre para la salida **InstanceState** y usar el tipo de datos **String**. 

El proceso para definir el valor real de la salida varía según la acción. Por ejemplo, si utiliza la acción `aws:executeScript`, debe utilizar argumentos de `return` en las funciones para proporcionar datos a las salidas. Con otras acciones como `aws:executeAwsApi``aws:waitForAwsResourceProperty`, y `aws:assertAwsResourceProperty`, se requiere un `Selector`. El `Selector`, o `PropertySelector` como lo denominan algunas acciones, es una cadena JSONPath que se utiliza para procesar la respuesta JSON de una operación de API. Es importante entender cómo está estructurado el objeto de respuesta JSON de una operación de API para poder seleccionar el valor correcto para la salida. Con la operación `DescribeInstances` de API mencionada anteriormente, consulte el siguiente ejemplo de respuesta JSON:

```
{
  "reservationSet": {
    "item": {
      "reservationId": "r-1234567890abcdef0",
      "ownerId": 123456789012,
      "groupSet": "",
      "instancesSet": {
        "item": {
          "instanceId": "i-1234567890abcdef0",
          "imageId": "ami-bff32ccc",
          "instanceState": {
            "code": 16,
            "name": "running"
          },
          "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal",
          "dnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com",
          "reason": "",
          "keyName": "my_keypair",
          "amiLaunchIndex": 0,
          "productCodes": "",
          "instanceType": "t2.micro",
          "launchTime": "2018-05-08T16:46:19.000Z",
          "placement": {
            "availabilityZone": "eu-west-1c",
            "groupName": "",
            "tenancy": "default"
          },
          "monitoring": {
            "state": "disabled"
          },
          "subnetId": "subnet-56f5f000",
          "vpcId": "vpc-11112222",
          "privateIpAddress": "192.168.1.88",
          "ipAddress": "54.194.252.215",
          "sourceDestCheck": true,
          "groupSet": {
            "item": {
              "groupId": "sg-e4076000",
              "groupName": "SecurityGroup1"
            }
          },
          "architecture": "x86_64",
          "rootDeviceType": "ebs",
          "rootDeviceName": "/dev/xvda",
          "blockDeviceMapping": {
            "item": {
              "deviceName": "/dev/xvda",
              "ebs": {
                "volumeId": "vol-1234567890abcdef0",
                "status": "attached",
                "attachTime": "2015-12-22T10:44:09.000Z",
                "deleteOnTermination": true
              }
            }
          },
          "virtualizationType": "hvm",
          "clientToken": "xMcwG14507example",
          "tagSet": {
            "item": {
              "key": "Name",
              "value": "Server_1"
            }
          },
          "hypervisor": "xen",
          "networkInterfaceSet": {
            "item": {
              "networkInterfaceId": "eni-551ba000",
              "subnetId": "subnet-56f5f000",
              "vpcId": "vpc-11112222",
              "description": "Primary network interface",
              "ownerId": 123456789012,
              "status": "in-use",
              "macAddress": "02:dd:2c:5e:01:69",
              "privateIpAddress": "192.168.1.88",
              "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal",
              "sourceDestCheck": true,
              "groupSet": {
                "item": {
                  "groupId": "sg-e4076000",
                  "groupName": "SecurityGroup1"
                }
              },
              "attachment": {
                "attachmentId": "eni-attach-39697adc",
                "deviceIndex": 0,
                "status": "attached",
                "attachTime": "2018-05-08T16:46:19.000Z",
                "deleteOnTermination": true
              },
              "association": {
                "publicIp": "54.194.252.215",
                "publicDnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com",
                "ipOwnerId": "amazon"
              },
              "privateIpAddressesSet": {
                "item": {
                  "privateIpAddress": "192.168.1.88",
                  "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal",
                  "primary": true,
                  "association": {
                    "publicIp": "54.194.252.215",
                    "publicDnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com",
                    "ipOwnerId": "amazon"
                  }
                }
              },
              "ipv6AddressesSet": {
                "item": {
                  "ipv6Address": "2001:db8:1234:1a2b::123"
                }
              }
            }
          },
          "iamInstanceProfile": {
            "arn": "arn:aws:iam::123456789012:instance-profile/AdminRole",
            "id": "ABCAJEDNCAA64SSD123AB"
          },
          "ebsOptimized": false,
          "cpuOptions": {
            "coreCount": 1,
            "threadsPerCore": 1
          }
        }
      }
    }
  }
}
```

En el objeto de respuesta JSON, la instancia `State` está anidada en un objeto `Instances`, que está anidado en el objeto `Reservations`. Para devolver el valor de la instancia `State`, use la siguiente cadena para el `Selector` para que el valor se pueda usar en nuestra salida: **\$1.Reservations[0].Instances[0].State.Name**.

Para hacer referencia a un valor de salida en acciones posteriores del flujo de trabajo de su manual de procedimientos, se utiliza el siguiente formato: `{{ StepName.NameOfOutput }}`. Por ejemplo, **\$1\$1 GetInstanceState.InstanceState \$1\$1**. En la experiencia de diseño visual, puede elegir valores de salida para usarlos en acciones posteriores utilizando el menú desplegable de entrada. Al utilizar salidas en acciones posteriores, el tipo de datos de la salida debe coincidir con el tipo de datos de la entrada. En este resultado de ejemplo, la `InstanceState` salida es una `String`. Por lo tanto, para usar el valor en la entrada de una acción posterior, la entrada debe aceptar una `String`.

# Manejo de errores con la experiencia de diseño visual
<a name="visual-designer-error-handling"></a>

De forma predeterminada, cuando una acción informa de un error, la automatización detiene por completo el flujo de trabajo del manual de procedimientos. Esto se debe a que el valor predeterminado de la propiedad `onFailure` en todas las acciones es `Abort`. Puedes configurar la forma en que la automatización gestiona los errores en el flujo de trabajo de su manual de procedimientos. Incluso si ha configurado la gestión de errores, es posible que algunos errores provoquen un error en la automatización. Para obtener más información, consulte [Solución de problemas de Automatización de Systems Manager](automation-troubleshooting.md). En la experiencia de diseño visual, la gestión de errores se configura en el panel de **Configuración**.

![\[Opciones de manejo de errores\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_error_handling.png)


## Vuelva a intentar la acción en caso de error
<a name="retry-actions"></a>

Para volver a intentar una acción en caso de error, especifique un valor para la propiedad **Cantidad máxima de intentos**. El valor predeterminado es 1. Si especifica un valor mayor a 1, no se considerará que hay un error en la acción hasta que todos los reintentos produzcan errores.

## Tiempos de espera
<a name="timeout-seconds"></a>

Puede configurar un tiempo de espera para las acciones para establecer el número máximo de segundos que la acción puede ejecutarse antes de que se produzca un error. Para configurar un tiempo de espera, introduzca el número de segundos que debe esperar la acción antes de que se produzca un error en la propiedad **Tiempo de espera en segundos**. Si se alcanza el tiempo de espera y el la acción tiene un valor de `Max attempts` que es mayor que 1, no se considera que se ha agotado el tiempo de espera hasta que se reintente completo.

## Acciones fallidas
<a name="failure-actions"></a>

De forma predeterminada, cuando se produce un error en una acción, la automatización detiene por completo el flujo de trabajo del manual de procedimientos. Puede modificar este comportamiento especificando un valor alternativo para la propiedad **En caso de error** de las acciones del manual de procedimientos. Si desea que el flujo de trabajo continúe con el siguiente paso del manual de procedimientos, elija **Continuar**. Si desea que el flujo de trabajo salte a un paso posterior diferente del manual de procedimientos, elija **Paso** y, a continuación, introduzca el nombre del paso.

## Acciones canceladas
<a name="cancel-actions"></a>

De forma predeterminada, cuando un usuario cancela una acción, la automatización detiene por completo el flujo de trabajo del manual de procedimientos. Puede modificar este comportamiento especificando un valor alternativo para la propiedad **Al cancelar** de las acciones de su manual de procedimientos. Si desea que el flujo de trabajo salte a un paso posterior diferente del manual de procedimientos, elija **Paso** y, a continuación, introduzca el nombre del paso.

## Acciones cruciales
<a name="critical-actions"></a>

Puede designar una acción como *crítica*, lo que significa que determina el estado general de los informes de su automatización. Si un paso con esta designación genera un error, la automatización informa que el estado final es `Failed` independientemente del éxito de otras acciones. Para configurar una acción como crítica, deje el valor predeterminado como **Verdadero** para la propiedad **Es crítico**.

## Finalización de acciones
<a name="end-actions"></a>

La propiedad **Finaliza** detiene una automatización al final de la acción determinada. El valor predeterminado de esta propiedad es `false`. Si configura esta propiedad para una acción, la automatización se detiene tanto si la acción se realiza correctamente como si no. Esta propiedad se utiliza con mayor frecuencia con acciones `aws:branch` para gestionar valores de entrada inesperados o indefinidos. En el siguiente ejemplo, se muestra un manual de procedimientos que espera un estado de instancia igual a `running`, `stopping` o. `stopped` Si una instancia está en un estado diferente, la automatización finaliza.

![\[La experiencia en diseño visual es el ejemplo final\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_is_end_example.png)


# Tutorial: cómo crear un manual de procedimientos utilizando la experiencia de diseño visual
<a name="visual-designer-tutorial"></a>

En este tutorial, aprenderá los conceptos básicos del trabajo con la experiencia de diseño visual que proporciona la automatización de Systems Manager. En la experiencia de diseño visual, puede crear un manual de procedimientos que utilice múltiples acciones. Utilice la característica de arrastrar y soltar para organizar las acciones en el lienzo. También puede buscar, seleccionar y configurar estas acciones. Luego, puedes ver el código YAML generado automáticamente para el flujo de trabajo de su manual de procedimientos, salir de la experiencia de diseño visual, ejecutar el manual de procedimientos y revisar los detalles de la ejecución.

En este tutorial también se muestra cómo actualizar el manual de procedimientos y ver la nueva versión. Al final del tutorial, realizará un paso de limpieza y eliminará su manual de procedimientos.

Después de completar este tutorial, sabrá cómo usar la experiencia de diseño visual para crear un manual de procedimientos. También sabrá cómo actualizar, ejecutar y eliminar su manual de procedimientos.

**nota**  
Antes de empezar este tutorial, asegúrese de completar [Configuración de Automation](automation-setup.md).

**Topics**
+ [Paso 1: navegue hasta la experiencia de diseño visual](#navigate-console)
+ [Paso 2: Cree un flujo de trabajo](#create-workflow)
+ [Paso 3: Revise el código generado automáticamente](#view-generated-code)
+ [Paso 4: Ejecute su nuevo manual de procedimientos](#use-tutorial-runbook)
+ [Paso 5: Eliminar](#cleanup-tutorial-runbook)

## Paso 1: navegue hasta la experiencia de diseño visual
<a name="navigate-console"></a>

1. Inicie sesión en la [consola de automatización de Systems Manager](https://console.aws.amazon.com/systems-manager/automation/home?region=us-east-1#/).

1. Elija **Crear runbook de automatización**.

## Paso 2: Cree un flujo de trabajo
<a name="create-workflow"></a>

En la experiencia de diseño visual, un flujo de trabajo es una representación gráfica de su manual de procedimientos en el lienzo. Puede utilizar la experiencia de diseño visual para definir, configurar y examinar las acciones individuales de su manual de procedimientos.

**Para crear un flujo de trabajo**

1. Junto a los botones **Diseño** y **Código**, seleccione el icono del lápiz e introduzca un nombre para el manual de procedimientos. En este tutorial, escriba **VisualDesignExperienceTutorial**.  
![\[Experiencia en diseño visual: nombre su manual de procedimientos\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_tutorial_name.png)

1. En la sección **Atributos del documento** del panel **Formulario**, expanda el menú desplegable **Parámetros de entrada** y seleccione **Agregar un parámetro**.

   1. En el campo **Nombre del parámetro**, introduzca **InstanceId**.

   1. En el menú desplegable **Tipo**, elija **AWS::EC2::Instance**.

   1. Seleccione el botón **Requerido**.  
![\[Cómo crear un parámetro para su manual de procedimientos\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_actions_tutorial_parameter.png)

1. En el navegador de **API de AWS**, ingrese **DescribeInstances** en la barra de búsqueda.

1. Arrastre una acción **Amazon EC2 – DescribeInstances** al lienzo vacío.

1. Para **Nombre del paso**, ingrese un valor. Para este tutorial, puede utilizar el nombre **GetInstanceState**.  
![\[Elija una acción de API para describir instancias de Amazon EC2.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_tutorial_api_action.png)

   1. Amplíe el menú desplegable de **Entradas adicionales** y, en el campo **Nombre de entrada**, introduzca **InstanceIds**.

   1. Seleccione la pestaña **Entradas**.

   1. En el campo **Valor de entrada**, elija la entrada del documento **InstanceId**. Esto hace referencia al valor del parámetro de entrada que haya creado al principio del procedimiento. Como la entrada **InstanceIds** de la acción `DescribeInstances` acepta valores `StringList`, debes escribir la entrada de **InstanceId** entre corchetes. El YAML del **valor de entrada** debe coincidir con lo siguiente: **['\$1\$1 InstanceId \$1\$1']**.

   1. En la pestaña **Salidas**, seleccione **Añadir una salida** e introduzca **InstanceState** en el campo **Nombre**.

   1. En el campo **Selector**, introduzca **\$1.Reservations[0].Instances[0].State.Name**.

   1. En el menú desplegable **Tipo**, seleccione **Cadena**.

1. Arrastre una acción de **Ramificación** desde el navegador **Acciones** y suéltela debajo del paso **`GetInstanceState`**. 

1. Para **Nombre del paso**, escriba un valor. Para este tutorial, use el nombre `BranchOnInstanceState`.

   Para definir la lógica de ramificación, haga lo siguiente:

   1. Elija el estado **`Branch`** en el lienzo. Luego, en **Entradas** y **Opciones**, seleccione el icono del lápiz para editar la **Regla \$11**.

   1. Elija **Agregar condiciones**.

   1. En el cuadro de diálogo **Condiciones de la regla \$11**, elija la salida del paso **GetInstanceState.InstanceState** en el menú desplegable **Variable**.

   1. En **Operador**, seleccione **es igual a**.

   1. Para **Valor**, escoja **Cadena** de la lista desplegable. Escriba **stopped**.  
![\[Defina una condición para una acción de ramificación.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_tutorial_condition.png)

   1. Seleccione **Guardar condiciones**.

   1. Seleccione **Agregar nueva regla**.

   1. Elija **Añadir condiciones** para la **Regla \$12**.

   1. En el cuadro de diálogo **Condiciones de la regla \$12**, elija la salida del paso **GetInstanceState.InstanceState** en el menú desplegable **Variable**.

   1. En **Operador**, seleccione **es igual a**.

   1. Para **Valor**, escoja **Cadena** de la lista desplegable. Escriba **stopping**.

   1. Seleccione **Guardar condiciones**.

   1. Seleccione **Agregar nueva regla**.

   1. Para la **Regla \$13**, seleccione **Añadir condiciones**.

   1. En el cuadro de diálogo **Condiciones de la regla \$13**, elija la salida del paso **GetInstanceState.InstanceState** en el menú desplegable **Variable**.

   1. En **Operador**, seleccione **es igual a**.

   1. Para **Valor**, escoja **Cadena** de la lista desplegable. Escriba **running**.

   1. Seleccione **Guardar condiciones**.

   1. En la **Regla predeterminada**, seleccione **Ir al final** para el **Paso predeterminado**.

1. Arrastre una acción para **cambiar el estado de la instancia** hasta el cuadro vacío **Arrastrar la acción aquí** bajo la condición **\$1\$1getInstanceState.instanceState\$1\$1 == “stopped”**.

   1. Para el **Nombre del paso**, introduzca **StartInstance**.

   1. En la pestaña **Entradas**, bajo **ID de instancia**, escoja el valor de entrada del documento **Instanceld** del desplegable.

   1. Para el **Estado deseado**, especifique **`running`**.

1. Arrastre una acción **Esperar un recurso de AWS** hasta el cuadro vacío **Arrastrar la acción aquí** bajo la condición **\$1\$1 GetInstanceState.InstanceState \$1\$1 == "stopping"**.

1. Para **Nombre del paso**, escriba un valor. Para este tutorial, use el nombre `WaitForInstanceStop`.

   1. Para el campo **Servicio**, elija **Amazon EC2**.

   1. Para el campo **API**, elija **Describir instancias**.

   1. Para el campo **Selector de propiedades**, introduzca **\$1.Reservations[0].Instances[0].State.Name**.

   1. Para el parámetro **Valores deseados**, introduzca **`["stopped"]`**.

   1. En la pestaña **Configuración** de la acción **WaitForInstanceStop**, elija **StartInstance** en el menú desplegable **Paso siguiente**.

1. Arrastre una acción **Ejecutar el comando en instancias** hasta el cuadro vacío **Arrastrar acción aquí** bajo la condición **\$1\$1getInstanceState.instanceState\$1\$1 == “running”**.

1. Para el **Nombre del paso**, introduzca **SayHello**.

   1. En la pestaña **Entradas**, introduzca **AWS-RunShellScript** para el parámetro **Nombre del documento**.

   1. Para **ID de instancia**, elija el valor de entrada del documento **ID de instancia** en el menú desplegable.

   1. Expanda el desplegable **Entradas adicionales** y, en el menú desplegable **Nombre de entrada**, escoja **Parámetros**.

   1. En el campo **Valor de entrada**, introduzca **`{"commands": "echo 'Hello World'"}`**.

1. Revisa el manual de procedimientos completo en el lienzo y seleccione **Crear runbook** para guardar el manual de procedimientos del tutorial.  
![\[Revise y cree el manual de procedimientos.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/visual_designer_tutorial_complete.png)

## Paso 3: Revise el código generado automáticamente
<a name="view-generated-code"></a>

Al arrastrar y soltar acciones desde el navegador de **Acciones** al lienzo, la experiencia de diseño visual compone automáticamente el contenido YAML o JSON de su manual de procedimientos en tiempo real. Puede ver y editar este código. Para ver el código generado automáticamente, seleccione **Código** para los botones **Diseño** y **Código**.

## Paso 4: Ejecute su nuevo manual de procedimientos
<a name="use-tutorial-runbook"></a>

Después de crear su manual de procedimientos, puede ejecutar la automatización.

**Para ejecutar su nuevo manual de procedimientos de automatización**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la lista **Documento de automatización**, elija un manual de procedimientos. Elija una o más opciones en el panel **Categorías de documentos** para filtrar documentos SSM según su propósito. Para ver un manual de procedimientos que le pertenezca, seleccione la pestaña **De mi propiedad**. Para ver un manual de procedimientos que se haya compartido con su cuenta, elija la pestaña **Compartido conmigo**. Para ver todos los manuales de procedimientos, seleccione la pestaña **Todos los documentos**.
**nota**  
Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

1. En la sección **Detalles del documento**, verifique que **Versión del documento** esté establecido como la versión que desea ejecutar. El sistema incluye las siguientes opciones de versión: 
   + **Versión predeterminada en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y se asigna una nueva versión predeterminada.
   + **Última versión en tiempo de ejecución**: seleccione esta opción si el manual de procedimientos de automatización se actualiza de forma periódica y desea ejecutar la versión que se ha actualizado más recientemente.
   + **1 (Predeterminado)**: seleccione esta opción para ejecutar la primera versión del documento, que es la predeterminada.

1. Elija **Siguiente**.

1. En la página **Ejecutar el runbook de automatización**, elija **Ejecución simple**.

1. En la sección **Parámetros de entrada**, especifique las entradas necesarias: De forma opcional, puede elegir un rol de servicio de IAM de la lista **AutomationAssumeRole**.

1. (Opcional) Elija una alarma de Amazon CloudWatch que desee aplicar a la automatización para fines de monitoreo. Para adjuntar una alarma de CloudWatch a su automatización, la entidad principal de IAM que ejecuta esta última debe tener permiso para la acción `iam:createServiceLinkedRole`. Para obtener más información sobre las alarmas de CloudWatch, consulte [Uso de alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html). Si la alarma se activa, la automatización se detiene. Si usa AWS CloudTrail, verá la llamada a la API en el registro de seguimiento. 

1. Elija **Ejecutar**. 

## Paso 5: Eliminar
<a name="cleanup-tutorial-runbook"></a>

**Para eliminar el manual de procedimientos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Elija la pestaña **De mi propiedad**.

1. Busque el manual de procedimientos de **Experiencia de diseño visual**.

1. Seleccione el botón en la página de la tarjeta del documento y, a continuación, **Eliminar documento** del desplegable **Acciones**.

# Creación de manuales de procedimientos de Automation
<a name="automation-authoring-runbooks"></a>

Cada manual de procedimientos en Automatización, una herramienta de AWS Systems Manager, define una automatización. Los manuales de procedimientos de Automation definen las acciones que se realizan durante una automatización. En el contenido del manual de procedimientos, defina los parámetros de entrada, las salidas y las acciones que Systems Manager realiza en las instancias administradas y en los recursos de AWS. 

Automation incluye varios manuales de procedimientos predefinidos que se pueden utilizar para realizar tareas comunes, como reiniciar una o más instancias de Amazon Elastic Compute Cloud (Amazon EC2), o crear una Amazon Machine Image (AMI). Sin embargo, los casos de uso pueden ir más allá de las capacidades de los manuales de procedimientos predefinidos. Si este es el caso, puede crear sus propios manuales de procedimientos y modificarlos de acuerdo con sus necesidades.

Un manual de procedimientos consta de acciones de automatización, parámetros para esas acciones y parámetros de entrada que usted especifica. El contenido de un manual de procedimientos está escrito en YAML o JSON. Si no conoce YAML ni JSON, recomendamos usar el diseñador visual o aprender más sobre cualquiera de los lenguajes de marcado antes de intentar crear su propio manual de procedimientos. Para obtener más información sobre el diseñador visual, consulte [Experiencia de diseño visual para manuales de procedimientos de automatización](automation-visual-designer.md).

Las siguientes secciones lo ayudarán a crear su primer manual de procedimientos.

## Identifique su caso de uso
<a name="automation-authoring-runbooks-use-case"></a>

El primer paso para crear un manual de procedimientos es identificar su caso de uso. Por ejemplo, ha programado el manual de procedimientos `AWS-CreateImage` de manera que se ejecute diariamente en todas las instancias de Amazon EC2 de producción. Al final del mes, decide tener más imágenes de las necesarias para los puntos de recuperación. Desde entonces, desea eliminar automáticamente la AMI más antigua de una instancia de Amazon EC2 al crear una AMI nueva. Para ello, crea un nuevo manual de procedimientos que hace lo siguiente:

1. Ejecuta la acción `aws:createImage` y especifica el ID de instancia en la descripción de la imagen.

1. Ejecuta la acción `aws:waitForAwsResourceProperty` para sondear el estado de la imagen hasta que sea `available`.

1. Después de que el estado de la imagen se haya establecido como `available`, la acción `aws:executeScript` ejecuta un script de Python personalizado que recopila los ID de todas las imágenes asociadas a su instancia de Amazon EC2. El script hace esto mediante el filtrado, con el ID de instancia en la descripción de la imagen que especificó en el momento de la creación. A continuación, el script ordena la lista de ID de imagen en función de la `creationDate` de la imagen y selecciona el ID de la AMI más antigua.

1. Por último, la acción `aws:deleteImage` se ejecuta para eliminar la AMI más antigua con el ID de la salida del paso anterior.

En este escenario, ya estaba usando el manual de procedimientos `AWS-CreateImage`, pero descubrió que el caso de uso requería más flexibilidad. Esta es una situación común, ya que puede haber superposición entre los manuales de procedimientos y las acciones de automatización. Como resultado, es posible que tenga que ajustar qué manuales de procedimientos o acciones usa para abordar su caso de uso.

Por ejemplo, las acciones `aws:executeScript` y `aws:invokeLambdaFunction` le permiten ejecutar scripts personalizados como parte de la automatización. A la hora de elegir una, es posible que prefiera `aws:invokeLambdaFunction` debido a los lenguajes adicionales de tiempo de ejecución compatibles. Sin embargo, es posible que prefiera `aws:executeScript` porque le permite crear contenido de script directamente en los manuales de procedimientos YAML y proporcionar contenido de script como archivos adjuntos para los manuales de procedimientos JSON. También podría considerar que `aws:executeScript` es más simple en cuanto a la configuración de AWS Identity and Access Management (IAM). Como utiliza los permisos proporcionados en el `AutomationAssumeRole`, `aws:executeScript` no requiere un rol de ejecución de la función de AWS Lambda adicional.

En cualquier escenario, una acción puede proporcionar más flexibilidad o funcionalidad adicional que la otra. Por lo tanto, recomendamos que revise los parámetros de entrada disponibles para el manual de procedimientos o la acción que desea utilizar para determinar cuál se ajusta mejor a su caso de uso y sus preferencias.

## Cómo configurar el entorno de desarrollo.
<a name="automation-authoring-runbooks-environment"></a>

Después de identificar el caso de uso y los manuales de procedimientos predefinidos o las acciones de automatización que desea utilizar en el manual, debe configurar el entorno de desarrollo para el contenido del manual de procedimientos. Para desarrollar el contenido de su manual de procedimientos, recomendamos usar el AWS Toolkit for Visual Studio Code en lugar de la consola de documentos de Systems Manager. 

El Toolkit for VS Code es una extensión de código abierto para Visual Studio Code (VS Code) que ofrece más características que la consola de documentos de Systems Manager. Entre las características útiles, se incluyen la validación de esquemas para YAML y JSON, los fragmentos para tipos de acciones de automatización y la compatibilidad con la capacidad de completar de manera automática para distintas opciones en YAML y JSON. 

Para obtener más información acerca de la instalación de Toolkit for VS Code, consulte [Instalación de AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html). Para obtener más información acerca del uso de Toolkit for VS Code para desarrollar manuales de procedimientos, consulte [Uso de documentos de Automatización de Systems Manager](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/systems-manager-automation-docs.html) en la *Guía del usuario de AWS Toolkit for Visual Studio Code*.

## Desarrolle contenido para el manual de procedimientos
<a name="automation-authoring-runbooks-developing-content"></a>

Con su caso de uso identificado y su entorno configurado, ya está listo para desarrollar el contenido para su manual de procedimientos. Su caso de uso y sus preferencias determinarán en gran medida las acciones de automatización o los manuales de procedimientos que utilice en el contenido de su manual. Algunas acciones admiten solo un subconjunto de parámetros de entrada si se comparan con otra acción que le permite llevar a cabo una tarea similar. Otras acciones tienen salidas específicas, como `aws:createImage`, donde algunas acciones le permiten definir sus propias salidas, tales como `aws:executeAwsApi`. 

Si no está seguro de cómo se usa una acción concreta en el manual de procedimientos, le recomendamos que revise la entrada correspondiente a la acción en la [Referencia de acciones de Automatización de Systems Manager](automation-actions.md). También recomendamos que revise el contenido de manuales de procedimientos predefinidos para ver ejemplos reales de cómo se utilizan estas acciones. Para obtener más ejemplos de la aplicación real de los manuales de procedimientos, consulte [Ejemplos adicionales de manuales de procedimientos](automation-document-examples.md).

Con el fin de demostrar las diferencias en materia de simplicidad y flexibilidad que proporciona el contenido del manual de procedimientos, los siguientes tutoriales brindan un ejemplo de cómo aplicar revisiones a grupos de instancias de Amazon EC2 por etapas:
+ [Ejemplo 1: creación de manuales de procedimientos principal y secundario](automation-authoring-runbooks-parent-child-example.md): en este ejemplo, se utilizan dos manuales de procedimientos en una relación de manuales de tipo principal-secundario. El manual de procedimientos principal inicia una automatización de control de frecuencia del manual de procedimientos secundario. 
+ [Ejemplo 2: manual de procedimientos con scripts](automation-authoring-runbooks-scripted-example.md): en este ejemplo, se muestra cómo puede realizar las mismas tareas del ejemplo 1 mediante la condensación del contenido en un único manual de procedimientos y a través del uso de scripts.

# Ejemplo 1: creación de manuales de procedimientos principal y secundario
<a name="automation-authoring-runbooks-parent-child-example"></a>

En el siguiente ejemplo, se muestra cómo crear dos manuales de procedimientos que apliquen revisiones a grupos etiquetados de instancias de Amazon Elastic Compute Cloud (Amazon EC2) por etapas. Estos manuales de procedimientos se utilizan en una relación de manuales de tipo principal-secundario, por la cual se usa el manual de procedimientos principal para iniciar una automatización de control de frecuencia del manual de procedimientos secundario. Para obtener más información acerca de las automatizaciones de control de frecuencia, consulte [Ejecución de operaciones automatizadas a escala](running-automations-scale.md). Para obtener más información acerca de las acciones de automatización que se utilizan en este ejemplo, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

## Cree el manual de procedimientos secundario
<a name="automation-authoring-runbooks-child-runbook"></a>

En este manual de procedimientos de ejemplo, se aborda el siguiente escenario. Emily se desempeña como ingeniera en sistemas en AnyCompany Consultants, LLC. Debe configurar la aplicación de revisiones para grupos de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que alojen bases de datos primarias y secundarias. Las aplicaciones acceden a estas bases de datos las 24 horas del día, por lo que una de las instancias de base de datos siempre debe estar disponible. 

Ella decide que lo mejor que puede hacer es aplicar revisiones a las instancias por etapas. Primero se aplicará revisiones al grupo principal de instancias de base de datos y, luego, al grupo secundario. Además, para evitar incurrir en costos adicionales por dejar en ejecución instancias que se habían detenido anteriormente, Emily quiere que las instancias a las que se aplicaron revisiones se devuelvan a su estado original antes de que se apliquen las revisiones. 

Emily identifica los grupos primarios y secundarios de instancias de base de datos a través de las etiquetas asociadas a las instancias. Ella decide crear un manual de procedimientos principal que inicia una automatización de control de frecuencia de un manual de procedimientos secundario. Al hacerlo, puede indicar como destino las etiquetas asociadas a los grupos primarios y secundarios de las instancias de base de datos y, a la vez, administrar la simultaneidad de las automatizaciones secundarias. Después de revisar los documentos disponibles de Systems Manager (SSM) para aplicar revisiones, elige el documento `AWS-RunPatchBaseline`. Mediante el uso de este documento de SSM, sus colegas pueden revisar la información de conformidad de las revisiones asociados una vez finalizada la operación de aplicación de revisiones.

Para empezar a crear el contenido de su manual de procedimientos, Emily revisa las acciones de automatización disponibles y comienza a crear el contenido del manual de procedimientos secundario de la siguiente manera:

1. En primer lugar, proporciona valores para el esquema y la descripción del manual de procedimientos, y define los parámetros de entrada para el manual de procedimientos secundario.

   A través del parámetro `AutomationAssumeRole`, Emily y sus colegas pueden utilizar un rol de IAM existente que permite a Automation realizar las acciones en el manual de procedimientos en su nombre. Emily utiliza el parámetro `InstanceId` para determinar a qué instancia se le debe aplicar una revisión. De forma opcional, los parámetros `Operation`, `RebootOption` y `SnapshotId` se pueden utilizar para proporcionar valores a los parámetros del documento para `AWS-RunPatchBaseline`. Para evitar que se proporcionen valores no válidos a esos parámetros del documento, define los `allowedValues` como se necesiten.

------
#### [ YAML ]

   ```
   schemaVersion: '0.3'
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: >-
         '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the
         actions on your behalf. If no role is specified, Systems Manager
         Automation uses your IAM permissions to operate this runbook.'
       default: ''
     InstanceId:
       type: String
       description: >-
         '(Required) The instance you want to patch.'
     SnapshotId:
       type: String
       description: '(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.'
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: '(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.'
       allowedValues:
         - Install
         - Scan
       default: Install
   ```

------
#### [ JSON ]

   ```
   {
      "schemaVersion":"0.3",
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.",
            "default":""
         },
         "InstanceId":{
            "type":"String",
            "description":"(Required) The instance you want to patch."
         },
         "SnapshotId":{
            "type":"String",
            "description":"(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.",
            "default":""
         },
         "RebootOption":{
            "type":"String",
            "description":"(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.",
            "allowedValues":[
               "NoReboot",
               "RebootIfNeeded"
            ],
            "default":"RebootIfNeeded"
         },
         "Operation":{
            "type":"String",
            "description":"(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.",
            "allowedValues":[
               "Install",
               "Scan"
            ],
            "default":"Install"
         }
      }
   },
   ```

------

1. Con los elementos de nivel superior definidos, Emily continúa con la creación de las acciones que componen los `mainSteps` del manual de procedimientos. El primer paso genera el estado actual de la instancia de destino especificada en el parámetro de entrada `InstanceId` mediante la acción `aws:executeAwsApi`. La salida de esta acción se utiliza en acciones posteriores.

------
#### [ YAML ]

   ```
   mainSteps:
     - name: getInstanceState
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
       outputs:
         - Name: instanceState
           Selector: '$.Reservations[0].Instances[0].State.Name'
           Type: String
       nextStep: branchOnInstanceState
   ```

------
#### [ JSON ]

   ```
   "mainSteps":[
         {
            "name":"getInstanceState",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "inputs":null,
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "outputs":[
               {
                  "Name":"instanceState",
                  "Selector":"$.Reservations[0].Instances[0].State.Name",
                  "Type":"String"
               }
            ],
            "nextStep":"branchOnInstanceState"
         },
   ```

------

1. En lugar de realizar un inicio manual y un seguimiento del estado original de cada instancia a la que se debe aplicar una revisión, Emily utiliza la salida de la acción anterior para bifurcar la automatización en función del estado de la instancia de destino. Esto permite que la automatización ejecute diferentes pasos dependiendo de las condiciones definidas en la acción `aws:branch` y, además, mejora la eficiencia general de la automatización sin intervención manual.

   Si el estado de la instancia ya es `running`, la automatización continúa con la aplicación de revisiones a la instancia con el documento `AWS-RunPatchBaseline` mediante la acción `aws:runCommand`.

   Si el estado de la instancia es `stopping`, la automatización realiza un sondeo para que la instancia alcance el estado `stopped` con la acción `aws:waitForAwsResourceProperty`, activa la instancia con la acción `executeAwsApi` y realiza un sondeo para que la instancia alcance el estado `running` antes de aplicarle revisiones.

   Si el estado de la instancia es `stopped`, la automatización activa la instancia y realiza un sondeo para que alcance el estado `running` antes de aplicarle revisiones con las mismas acciones.

------
#### [ YAML ]

   ```
   - name: branchOnInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: startInstance
              Variable: '{{getInstanceState.instanceState}}'
              StringEquals: stopped
            - NextStep: verifyInstanceStopped
              Variable: '{{getInstanceState.instanceState}}'
              StringEquals: stopping
            - NextStep: patchInstance
              Variable: '{{getInstanceState.instanceState}}'
              StringEquals: running
       isEnd: true
     - name: startInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StartInstances
         InstanceIds:
           - '{{InstanceId}}'
       nextStep: verifyInstanceRunning
     - name: verifyInstanceRunning
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - running
       nextStep: patchInstance
     - name: verifyInstanceStopped
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - stopped
         nextStep: startInstance
     - name: patchInstance
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 5400
       inputs:
         DocumentName: 'AWS-RunPatchBaseline'
         InstanceIds: 
         - '{{InstanceId}}'
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
   ```

------
#### [ JSON ]

   ```
   {
            "name":"branchOnInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"startInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"stopped"
                  },
                  {
                     "Or":[
                        {
                           "Variable":"{{getInstanceState.instanceState}}",
                           "StringEquals":"stopping"
                        }
                     ],
                     "NextStep":"verifyInstanceStopped"
                  },
                  {
                     "NextStep":"patchInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"running"
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"startInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StartInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "nextStep":"verifyInstanceRunning"
         },
         {
            "name":"verifyInstanceRunning",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "running"
               ]
            },
            "nextStep":"patchInstance"
         },
         {
            "name":"verifyInstanceStopped",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "stopped"
               ],
               "nextStep":"startInstance"
            }
         },
         {
            "name":"patchInstance",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":5400,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               }
            }
         },
   ```

------

1. Una vez finalizada la operación de aplicación de revisiones, Emily quiere que la automatización devuelva la instancia de destino al mismo estado en que estaba antes de que comenzara la automatización. Para hacerlo, usa la salida de la primera acción otra vez. La automatización se bifurca en función del estado original de la instancia de destino con la acción `aws:branch`. Si, anteriormente, la instancia estaba en cualquier estado distinto de `running`, se detiene. De lo contrario, si el estado de la instancia es `running`, se termina la automatización.

------
#### [ YAML ]

   ```
   - name: branchOnOriginalInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: stopInstance
             Not: 
               Variable: '{{getInstanceState.instanceState}}'
               StringEquals: running
       isEnd: true
     - name: stopInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StopInstances
         InstanceIds:
           - '{{InstanceId}}'
   ```

------
#### [ JSON ]

   ```
   {
            "name":"branchOnOriginalInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"stopInstance",
                     "Not":{
                        "Variable":"{{getInstanceState.instanceState}}",
                        "StringEquals":"running"
                     }
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"stopInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StopInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            }
         }
      ]
   }
   ```

------

1. Emily revisa el contenido del manual de procedimientos secundario completado y crea el manual en la misma Cuenta de AWS y Región de AWS que las instancias de destino. Ya está lista para seguir con la creación del contenido del manual de procedimientos principal. A continuación, se muestra el contenido del manual de procedimientos secundario completado.

------
#### [ YAML ]

   ```
   schemaVersion: '0.3'
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: >-
         '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the
         actions on your behalf. If no role is specified, Systems Manager
         Automation uses your IAM permissions to operate this runbook.'
       default: ''
     InstanceId:
       type: String
       description: >-
         '(Required) The instance you want to patch.'
     SnapshotId:
       type: String
       description: '(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.'
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: '(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.'
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: getInstanceState
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
       outputs:
         - Name: instanceState
           Selector: '$.Reservations[0].Instances[0].State.Name'
           Type: String
       nextStep: branchOnInstanceState
     - name: branchOnInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: startInstance
             Variable: '{{getInstanceState.instanceState}}'
             StringEquals: stopped
           - Or:
               - Variable: '{{getInstanceState.instanceState}}'
                 StringEquals: stopping
             NextStep: verifyInstanceStopped
           - NextStep: patchInstance
             Variable: '{{getInstanceState.instanceState}}'
             StringEquals: running
       isEnd: true
     - name: startInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StartInstances
         InstanceIds:
           - '{{InstanceId}}'
       nextStep: verifyInstanceRunning
     - name: verifyInstanceRunning
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - running
       nextStep: patchInstance
     - name: verifyInstanceStopped
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 120
       inputs:
         Service: ec2
         Api: DescribeInstances
         InstanceIds:
           - '{{InstanceId}}'
         PropertySelector: '$.Reservations[0].Instances[0].State.Name'
         DesiredValues:
           - stopped
         nextStep: startInstance
     - name: patchInstance
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 5400
       inputs:
         DocumentName: 'AWS-RunPatchBaseline'
         InstanceIds: 
         - '{{InstanceId}}'
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
     - name: branchOnOriginalInstanceState
       action: 'aws:branch'
       onFailure: Abort
       inputs:
         Choices:
           - NextStep: stopInstance
             Not: 
               Variable: '{{getInstanceState.instanceState}}'
               StringEquals: running
       isEnd: true
     - name: stopInstance
       action: 'aws:executeAwsApi'
       onFailure: Abort
       inputs:
         Service: ec2
         Api: StopInstances
         InstanceIds:
           - '{{InstanceId}}'
   ```

------
#### [ JSON ]

   ```
   {
      "schemaVersion":"0.3",
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"'(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'",
            "default":""
         },
         "InstanceId":{
            "type":"String",
            "description":"'(Required) The instance you want to patch.'"
         },
         "SnapshotId":{
            "type":"String",
            "description":"(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.",
            "default":""
         },
         "RebootOption":{
            "type":"String",
            "description":"(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.",
            "allowedValues":[
               "NoReboot",
               "RebootIfNeeded"
            ],
            "default":"RebootIfNeeded"
         },
         "Operation":{
            "type":"String",
            "description":"(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.",
            "allowedValues":[
               "Install",
               "Scan"
            ],
            "default":"Install"
         }
      },
      "mainSteps":[
         {
            "name":"getInstanceState",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "inputs":null,
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "outputs":[
               {
                  "Name":"instanceState",
                  "Selector":"$.Reservations[0].Instances[0].State.Name",
                  "Type":"String"
               }
            ],
            "nextStep":"branchOnInstanceState"
         },
         {
            "name":"branchOnInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"startInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"stopped"
                  },
                  {
                     "Or":[
                        {
                           "Variable":"{{getInstanceState.instanceState}}",
                           "StringEquals":"stopping"
                        }
                     ],
                     "NextStep":"verifyInstanceStopped"
                  },
                  {
                     "NextStep":"patchInstance",
                     "Variable":"{{getInstanceState.instanceState}}",
                     "StringEquals":"running"
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"startInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StartInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            },
            "nextStep":"verifyInstanceRunning"
         },
         {
            "name":"verifyInstanceRunning",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "running"
               ]
            },
            "nextStep":"patchInstance"
         },
         {
            "name":"verifyInstanceStopped",
            "action":"aws:waitForAwsResourceProperty",
            "timeoutSeconds":120,
            "inputs":{
               "Service":"ec2",
               "Api":"DescribeInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "PropertySelector":"$.Reservations[0].Instances[0].State.Name",
               "DesiredValues":[
                  "stopped"
               ],
               "nextStep":"startInstance"
            }
         },
         {
            "name":"patchInstance",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":5400,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "InstanceIds":[
                  "{{InstanceId}}"
               ],
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               }
            }
         },
         {
            "name":"branchOnOriginalInstanceState",
            "action":"aws:branch",
            "onFailure":"Abort",
            "inputs":{
               "Choices":[
                  {
                     "NextStep":"stopInstance",
                     "Not":{
                        "Variable":"{{getInstanceState.instanceState}}",
                        "StringEquals":"running"
                     }
                  }
               ]
            },
            "isEnd":true
         },
         {
            "name":"stopInstance",
            "action":"aws:executeAwsApi",
            "onFailure":"Abort",
            "inputs":{
               "Service":"ec2",
               "Api":"StopInstances",
               "InstanceIds":[
                  "{{InstanceId}}"
               ]
            }
         }
      ]
   }
   ```

------

Para obtener más información acerca de las acciones de automatización que se utilizan en este ejemplo, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

## Crear el manual de procedimientos principal
<a name="automation-authoring-runbooks-parent-runbook"></a>

En este manual de procedimientos de ejemplo, se continúa con el escenario descrito en la sección anterior. Ahora que Emily ha creado el manual de procedimientos secundario, comienza a generar el contenido del manual de procedimientos principal de la siguiente manera:

1. En primer lugar, proporciona valores para el esquema y la descripción del manual de procedimientos, y define los parámetros de entrada para el manual de procedimientos principal.

   A través del parámetro `AutomationAssumeRole`, Emily y sus colegas pueden utilizar un rol de IAM existente que permite a Automation realizar las acciones en el manual de procedimientos en su nombre. Emily utiliza los parámetros `PatchGroupPrimaryKey` y `PatchGroupPrimaryValue` para especificar la etiqueta asociada al grupo principal de instancias de base de datos a las cuales se aplicarán revisiones. Utiliza los parámetros `PatchGroupSecondaryKey` y `PatchGroupSecondaryValue` para especificar la etiqueta asociada al grupo secundario de instancias de base de datos a las cuales se aplicarán revisiones.

------
#### [ YAML ]

   ```
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
       default: ''
     PatchGroupPrimaryKey:
       type: String
       description: '(Required) The key of the tag for the primary group of instances you want to patch.''
     PatchGroupPrimaryValue:
       type: String
       description: '(Required) The value of the tag for the primary group of instances you want to patch.'
     PatchGroupSecondaryKey:
       type: String
       description: '(Required) The key of the tag for the secondary group of instances you want to patch.'
     PatchGroupSecondaryValue:
       type: String
       description: '(Required) The value of the tag for the secondary group of instances you want to patch.'
   ```

------
#### [ JSON ]

   ```
   {
      "schemaVersion": "0.3",
      "description": "An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "assumeRole": "{{AutomationAssumeRole}}",
      "parameters": {
         "AutomationAssumeRole": {
            "type": "String",
            "description": "(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.",
            "default": ""
         },
         "PatchGroupPrimaryKey": {
            "type": "String",
            "description": "(Required) The key of the tag for the primary group of instances you want to patch."
         },
         "PatchGroupPrimaryValue": {
            "type": "String",
            "description": "(Required) The value of the tag for the primary group of instances you want to patch."
         },
         "PatchGroupSecondaryKey": {
            "type": "String",
            "description": "(Required) The key of the tag for the secondary group of instances you want to patch."
         },
         "PatchGroupSecondaryValue": {
            "type": "String",
            "description": "(Required) The value of the tag for the secondary group of instances you want to patch."
         }
      }
   },
   ```

------

1. Con los elementos de nivel superior definidos, Emily continúa con la creación de las acciones que componen los `mainSteps` del manual de procedimientos. 

   La primera acción inicia una automatización de control de frecuencia con el manual de procedimientos secundario que acaba de crear y que indica como destino instancias asociadas a la etiqueta que se especificó en los parámetros de entrada `PatchGroupPrimaryKey` y `PatchGroupPrimaryValue`. Utiliza los valores proporcionados para los parámetros de entrada con el fin de especificar la clave y el valor de la etiqueta asociada al grupo principal de instancias de base de datos a las que desea aplicar revisiones.

   Una vez finalizada la primera automatización, la segunda acción inicia otra automatización de control de frecuencia con el manual de procedimientos secundario que indica como destino instancias asociadas a la etiqueta que se especificó en los parámetros de entrada `PatchGroupSecondaryKey` y `PatchGroupSecondaryValue`. Utiliza los valores proporcionados para los parámetros de entrada con el fin de especificar la clave y el valor de la etiqueta asociada al grupo secundario de instancias de base de datos a las que desea aplicar revisiones.

------
#### [ YAML ]

   ```
   mainSteps:
     - name: patchPrimaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupPrimaryKey}}'
             Values:
               - '{{PatchGroupPrimaryValue}}'
         TargetParameterName: 'InstanceId'
     - name: patchSecondaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupSecondaryKey}}'
             Values:
               - '{{PatchGroupSecondaryValue}}'
         TargetParameterName: 'InstanceId'
   ```

------
#### [ JSON ]

   ```
   "mainSteps":[
         {
            "name":"patchPrimaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupPrimaryKey}}",
                     "Values":[
                        "{{PatchGroupPrimaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         },
         {
            "name":"patchSecondaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupSecondaryKey}}",
                     "Values":[
                        "{{PatchGroupSecondaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         }
      ]
   }
   ```

------

1. Emily revisa el contenido del manual de procedimientos principal completado y crea el manual en la misma Cuenta de AWS y Región de AWS que las instancias de destino. Ahora, está lista para probar sus manuales de procedimientos y así asegurarse de que la automatización funciona como desea antes de implementarlos en su entorno de producción. A continuación, se muestra el contenido del manual de procedimientos principal completado.

------
#### [ YAML ]

   ```
   description: An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
       default: ''
     PatchGroupPrimaryKey:
       type: String
       description: (Required) The key of the tag for the primary group of instances you want to patch.
     PatchGroupPrimaryValue:
       type: String
       description: '(Required) The value of the tag for the primary group of instances you want to patch. '
     PatchGroupSecondaryKey:
       type: String
       description: (Required) The key of the tag for the secondary group of instances you want to patch.
     PatchGroupSecondaryValue:
       type: String
       description: '(Required) The value of the tag for the secondary group of instances you want to patch.  '
   mainSteps:
     - name: patchPrimaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupPrimaryKey}}'
             Values:
               - '{{PatchGroupPrimaryValue}}'
         TargetParameterName: 'InstanceId'
     - name: patchSecondaryTargets
       action: 'aws:executeAutomation'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: RunbookTutorialChildAutomation
         Targets:
           - Key: 'tag:{{PatchGroupSecondaryKey}}'
             Values:
               - '{{PatchGroupSecondaryValue}}'
         TargetParameterName: 'InstanceId'
   ```

------
#### [ JSON ]

   ```
   {
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "schemaVersion":"0.3",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Optional) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.",
            "default":""
         },
         "PatchGroupPrimaryKey":{
            "type":"String",
            "description":"(Required) The key of the tag for the primary group of instances you want to patch."
         },
         "PatchGroupPrimaryValue":{
            "type":"String",
            "description":"(Required) The value of the tag for the primary group of instances you want to patch. "
         },
         "PatchGroupSecondaryKey":{
            "type":"String",
            "description":"(Required) The key of the tag for the secondary group of instances you want to patch."
         },
         "PatchGroupSecondaryValue":{
            "type":"String",
            "description":"(Required) The value of the tag for the secondary group of instances you want to patch.  "
         }
      },
      "mainSteps":[
         {
            "name":"patchPrimaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupPrimaryKey}}",
                     "Values":[
                        "{{PatchGroupPrimaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         },
         {
            "name":"patchSecondaryTargets",
            "action":"aws:executeAutomation",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"RunbookTutorialChildAutomation",
               "Targets":[
                  {
                     "Key":"tag:{{PatchGroupSecondaryKey}}",
                     "Values":[
                        "{{PatchGroupSecondaryValue}}"
                     ]
                  }
               ],
               "TargetParameterName":"InstanceId"
            }
         }
      ]
   }
   ```

------

Para obtener más información acerca de las acciones de automatización que se utilizan en este ejemplo, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

# Ejemplo 2: manual de procedimientos con scripts
<a name="automation-authoring-runbooks-scripted-example"></a>

En este manual de procedimientos de ejemplo, se aborda el siguiente escenario. Emily se desempeña como ingeniera en sistemas en AnyCompany Consultants, LLC. Anteriormente, creó dos manuales de procedimientos que se utilizan en una relación de manuales de tipo principal-secundario a fin de aplicar parches a grupos de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que alojan bases de datos primarias y secundarias. Las aplicaciones acceden a estas bases de datos las 24 horas del día, por lo que una de las instancias de base de datos siempre debe estar disponible. 

Teniendo en cuenta este requisito, creó una solución que aplica parches a las instancias en etapas mediante el documento `AWS-RunPatchBaseline` de Systems Manager (SSM). Mediante el uso de este documento de SSM, sus colegas pueden revisar la información de conformidad de los parches asociados una vez finalizada la operación de aplicación de parches. 

Primero se aplican parches al grupo principal de instancias de base de datos y, luego, al grupo secundario. Además, para evitar incurrir en costos adicionales por dejar en ejecución instancias que se habían detenido anteriormente, Emily se aseguró de que la automatización devolviera las instancias a las que se aplicaron parches a su estado original antes de que se aplicaran los parches. Emily utilizó etiquetas asociadas a los grupos primarios y secundarios de instancias de base de datos para identificar a qué instancias se deben aplicar parches en el orden deseado.

Su solución automatizada existente funciona, pero, de ser posible, quiere mejorarla. Para ayudar con el mantenimiento del contenido del manual de procedimientos y facilitar la solución de problemas, le gustaría condensar la automatización en un solo manual de procedimientos y simplificar el número de parámetros de entrada. Además, le gustaría evitar la creación de múltiples automatizaciones secundarias. 

Después de que Emily revisa las acciones de automatización disponibles, determina que puede mejorar su solución mediante la acción `aws:executeScript` para ejecutar sus scripts de Python personalizados. Ahora, comienza a crear el contenido del manual de procedimientos de la siguiente manera:

1. En primer lugar, proporciona valores para el esquema y la descripción del manual de procedimientos, y define los parámetros de entrada para el manual de procedimientos principal.

   A través del parámetro `AutomationAssumeRole`, Emily y sus colegas pueden utilizar un rol de IAM existente que permite a Automation realizar las acciones en el manual de procedimientos en su nombre. A diferencia del [ejemplo 1](automation-authoring-runbooks-parent-child-example.md), ahora el parámetro `AutomationAssumeRole` es obligatorio en lugar de opcional. Debido a que este manual de procedimientos incluye acciones `aws:executeScript`, siempre se requiere un rol de servicio de AWS Identity and Access Management (IAM) (o rol de asunción). Este requisito es necesario, ya que algunos de los scripts de Python especificados para las acciones llaman las operaciones de la API de AWS.

   Emily utiliza los parámetros `PrimaryPatchGroupTag` y `SecondaryPatchGroupTag` para especificar las etiquetas asociadas al grupo principal y secundario de instancias de base de datos a las cuales se aplicarán parches. Para simplificar los parámetros de entrada necesarios, decide utilizar los parámetros `StringMap` en lugar de varios parámetros `String`, como hizo con el manual de procedimientos del ejemplo 1. De forma opcional, los parámetros `Operation`, `RebootOption` y `SnapshotId` se pueden utilizar para proporcionar valores a los parámetros del documento para `AWS-RunPatchBaseline`. Para evitar que se proporcionen valores no válidos a esos parámetros del documento, define los `allowedValues` como se necesiten.

------
#### [ YAML ]

   ```
   description: 'An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.'
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
     PrimaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     SecondaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     SnapshotId:
       type: String
       description: '(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.'
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: '(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.'
       allowedValues:
         - Install
         - Scan
       default: Install
   ```

------
#### [ JSON ]

   ```
   {
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "schemaVersion":"0.3",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook."
         },
         "PrimaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "SecondaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "SnapshotId":{
            "type":"String",
            "description":"(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.",
            "default":""
         },
         "RebootOption":{
            "type":"String",
            "description":"(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.",
            "allowedValues":[
               "NoReboot",
               "RebootIfNeeded"
            ],
            "default":"RebootIfNeeded"
         },
         "Operation":{
            "type":"String",
            "description":"(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.",
            "allowedValues":[
               "Install",
               "Scan"
            ],
            "default":"Install"
         }
      }
   },
   ```

------

1. Con los elementos de nivel superior definidos, Emily continúa con la creación de las acciones que componen los `mainSteps` del manual de procedimientos. El primer paso recopila los ID de todas las instancias asociadas a la etiqueta especificada en el parámetro `PrimaryPatchGroupTag` y genera un parámetro `StringMap` que contiene el ID de instancia y su estado actual. La salida de esta acción se utiliza en acciones posteriores. 

   Tenga en cuenta que el parámetro de entrada `script` no es compatible con los manuales de procedimientos JSON. Los manuales de procedimientos JSON deben proporcionar contenido de script a través del parámetro de entrada `attachment`.

------
#### [ YAML ]

   ```
   mainSteps:
     - name: getPrimaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['primaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifyPrimaryInstancesRunning
   ```

------
#### [ JSON ]

   ```
   "mainSteps":[
         {
            "name":"getPrimaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifyPrimaryInstancesRunning"
         },
   ```

------

1. Emily utiliza la salida de la acción anterior en otra acción `aws:executeScript` para verificar que todas las instancias asociadas a la etiqueta especificada en el parámetro `PrimaryPatchGroupTag` se encuentren en el estado `running`.

   Si el estado de la instancia ya es `running` o `shutting-down`, el script sigue recorriendo las instancias restantes.

   Si el estado de la instancia es `stopping`, el script realiza un sondeo para que la instancia llegue al estado `stopped` y activa la instancia.

   Si el estado de la instancia es `stopped`, el script activa la instancia.

------
#### [ YAML ]

   ```
   - name: verifyPrimaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForPrimaryRunningInstances
   ```

------
#### [ JSON ]

   ```
   {
            "name":"verifyPrimaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForPrimaryRunningInstances"
         },
   ```

------

1. Emily verifica que todas las instancias asociadas a la etiqueta especificada en el parámetro `PrimaryPatchGroupTag` ya estén en funcionamiento o se encuentren en el estado `running`. A continuación, usa otro script para verificar que todas las instancias, incluidas las que se activaron con la acción anterior, hayan alcanzado el estado `running`.

------
#### [ YAML ]

   ```
   - name: waitForPrimaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnPrimaryTagKey
   ```

------
#### [ JSON ]

   ```
   {
            "name":"waitForPrimaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnPrimaryTagKey"
         },
   ```

------

1. Emily usa dos scripts más para devolver los valores `String` individuales de la clave y el valor de la etiqueta especificada en el parámetro `PrimaryPatchGroupTag`. Los valores que devuelven estas acciones le permiten proporcionar valores al parámetro `Targets` para el documento `AWS-RunPatchBaseline` de manera directa. A continuación, la automatización continúa con la aplicación de parches a la instancia con el documento `AWS-RunPatchBaseline` a través de la acción `aws:runCommand`.

------
#### [ YAML ]

   ```
   - name: returnPrimaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnPrimaryTagValue
     - name: returnPrimaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchPrimaryInstances
     - name: patchPrimaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnPrimaryTagKey.primaryPatchGroupKey}}'
             Values:
               - '{{returnPrimaryTagValue.primaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnPrimaryToOriginalState
   ```

------
#### [ JSON ]

   ```
   {
            "name":"returnPrimaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnPrimaryTagValue"
         },
         {
            "name":"returnPrimaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchPrimaryInstances"
         },
         {
            "name":"patchPrimaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnPrimaryTagKey.primaryPatchGroupKey}}",
                     "Values":[
                        "{{returnPrimaryTagValue.primaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnPrimaryToOriginalState"
         },
   ```

------

1. Una vez finalizada la operación de aplicación de parches, Emily quiere que la automatización devuelva las instancias de destino asociadas a la etiqueta que se especificó en el parámetro `PrimaryPatchGroupTag` al mismo estado en que estaban antes de que se iniciara la automatización. Para hacerlo, usa otra vez la salida de la primera acción en un script. En función del estado original de la instancia de destino, si la instancia estaba anteriormente en un estado distinto de `running`, se detiene. En cambio, si el estado de la instancia es `running`, el script sigue recorriendo las instancias restantes.

------
#### [ YAML ]

   ```
   - name: returnPrimaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
       nextStep: getSecondaryInstanceState
   ```

------
#### [ JSON ]

   ```
   {
            "name":"returnPrimaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"getSecondaryInstanceState"
         },
   ```

------

1. La operación de aplicación de parches se completa para las instancias asociadas a la etiqueta especificada en el parámetro `PrimaryPatchGroupTag`. Ahora, Emily duplica todas las acciones anteriores en el contenido de su manual de procedimientos para indicar como destino las instancias asociadas a la etiqueta que se especificó en el parámetro `SecondaryPatchGroupTag`.

------
#### [ YAML ]

   ```
   - name: getSecondaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['secondaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifySecondaryInstancesRunning
     - name: verifySecondaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForSecondaryRunningInstances
     - name: waitForSecondaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnSecondaryTagKey
     - name: returnSecondaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnSecondaryTagValue
     - name: returnSecondaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchSecondaryInstances
     - name: patchSecondaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnSecondaryTagKey.secondaryPatchGroupKey}}'
             Values:
             - '{{returnSecondaryTagValue.secondaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnSecondaryToOriginalState
     - name: returnSecondaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
   ```

------
#### [ JSON ]

   ```
   {
            "name":"getSecondaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifySecondaryInstancesRunning"
         },
         {
            "name":"verifySecondaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForSecondaryRunningInstances"
         },
         {
            "name":"waitForSecondaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnSecondaryTagKey"
         },
         {
            "name":"returnSecondaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnSecondaryTagValue"
         },
         {
            "name":"returnSecondaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchSecondaryInstances"
         },
         {
            "name":"patchSecondaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnSecondaryTagKey.secondaryPatchGroupKey}}",
                     "Values":[
                        "{{returnSecondaryTagValue.secondaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnSecondaryToOriginalState"
         },
         {
            "name":"returnSecondaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            }
         }
      ]
   }
   ```

------

1. Emily revisa el contenido del manual de procedimientos en script completado y crea el manual en la misma Cuenta de AWS y Región de AWS que las instancias de destino. Ahora, está lista para probar su manual de procedimientos para asegurarse de que la automatización funciona como desea antes de implementarlo en su entorno de producción. A continuación, se muestra el contenido del manual de procedimientos completado con scripts.

------
#### [ YAML ]

   ```
   description: An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.
   schemaVersion: '0.3'
   assumeRole: '{{AutomationAssumeRole}}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.'
     PrimaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     SecondaryPatchGroupTag:
       type: StringMap
       description: '(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {"key" : "value"}'
     SnapshotId:
       type: String
       description: '(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.'
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: '(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.'
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: getPrimaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['primaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifyPrimaryInstancesRunning
     - name: verifyPrimaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForPrimaryRunningInstances
     - name: waitForPrimaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnPrimaryTagKey
     - name: returnPrimaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnPrimaryTagValue
     - name: returnPrimaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           primaryTag: '{{PrimaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['primaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: primaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchPrimaryInstances
     - name: patchPrimaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnPrimaryTagKey.primaryPatchGroupKey}}'
             Values:
               - '{{returnPrimaryTagValue.primaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnPrimaryToOriginalState
     - name: returnPrimaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getPrimaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
       nextStep: getSecondaryInstanceState
     - name: getSecondaryInstanceState
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: getInstanceStates
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def getInstanceStates(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             tag = events['secondaryTag']
             tagKey, tagValue = list(tag.items())[0]
             instanceQuery = ec2.describe_instances(
             Filters=[
                 {
                     "Name": "tag:" + tagKey,
                     "Values": [tagValue]
                 }]
             )
             if not instanceQuery['Reservations']:
                 noInstancesForTagString = "No instances found for specified tag."
                 return({ 'noInstancesFound' : noInstancesForTagString })
             else:
                 queryResponse = instanceQuery['Reservations']
                 originalInstanceStates = {}
                 for results in queryResponse:
                     instanceSet = results['Instances']
                     for instance in instanceSet:
                         instanceId = instance['InstanceId']
                         originalInstanceStates[instanceId] = instance['State']['Name']
                 return originalInstanceStates
       outputs:
         - Name: originalInstanceStates
           Selector: $.Payload
           Type: StringMap
       nextStep: verifySecondaryInstancesRunning
     - name: verifySecondaryInstancesRunning
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: verifyInstancesRunning
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def verifyInstancesRunning(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped':
                   print("The target instance " + instance + " is stopped. The instance will now be started.")
                   ec2.start_instances(
                       InstanceIds=[instance]
                       )
               elif instanceDict[instance] == 'stopping':
                   print("The target instance " + instance + " is stopping. Polling for instance to reach stopped state.")
                   while instanceDict[instance] != 'stopped':
                       poll = ec2.get_waiter('instance_stopped')
                       poll.wait(
                           InstanceIds=[instance]
                       )
                   ec2.start_instances(
                       InstanceIds=[instance]
                   )
               else:
                 pass
       nextStep: waitForSecondaryRunningInstances
     - name: waitForSecondaryRunningInstances
       action: 'aws:executeScript'
       timeoutSeconds: 300
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: waitForRunningInstances
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def waitForRunningInstances(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
                 poll = ec2.get_waiter('instance_running')
                 poll.wait(
                     InstanceIds=[instance]
                 )
       nextStep: returnSecondaryTagKey
     - name: returnSecondaryTagKey
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             stringKey = "tag:" + tagKey
             return {'tagKey' : stringKey}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupKey
           Selector: $.Payload.tagKey
           Type: String
       nextStep: returnSecondaryTagValue
     - name: returnSecondaryTagValue
       action: 'aws:executeScript'
       timeoutSeconds: 120
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnTagValues
         InputPayload:
           secondaryTag: '{{SecondaryPatchGroupTag}}'
         Script: |-
           def returnTagValues(events,context):
             tag = events['secondaryTag']
             tagKey = list(tag)[0]
             tagValue = tag[tagKey]
             return {'tagValue' : tagValue}
       outputs:
         - Name: Payload
           Selector: $.Payload
           Type: StringMap
         - Name: secondaryPatchGroupValue
           Selector: $.Payload.tagValue
           Type: String
       nextStep: patchSecondaryInstances
     - name: patchSecondaryInstances
       action: 'aws:runCommand'
       onFailure: Abort
       timeoutSeconds: 7200
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         Targets:
           - Key: '{{returnSecondaryTagKey.secondaryPatchGroupKey}}'
             Values:
             - '{{returnSecondaryTagValue.secondaryPatchGroupValue}}'
         MaxConcurrency: 10%
         MaxErrors: 10%
       nextStep: returnSecondaryToOriginalState
     - name: returnSecondaryToOriginalState
       action: 'aws:executeScript'
       timeoutSeconds: 600
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: returnToOriginalState
         InputPayload:
           targetInstances: '{{getSecondaryInstanceState.originalInstanceStates}}'
         Script: |-
           def returnToOriginalState(events,context):
             import boto3
   
             #Initialize client
             ec2 = boto3.client('ec2')
             instanceDict = events['targetInstances']
             for instance in instanceDict:
               if instanceDict[instance] == 'stopped' or instanceDict[instance] == 'stopping':
                   ec2.stop_instances(
                       InstanceIds=[instance]
                       )
               else:
                 pass
   ```

------
#### [ JSON ]

   ```
   {
      "description":"An example of an Automation runbook that patches groups of Amazon EC2 instances in stages.",
      "schemaVersion":"0.3",
      "assumeRole":"{{AutomationAssumeRole}}",
      "parameters":{
         "AutomationAssumeRole":{
            "type":"String",
            "description":"(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook."
         },
         "PrimaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the primary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "SecondaryPatchGroupTag":{
            "type":"StringMap",
            "description":"(Required) The tag for the secondary group of instances you want to patch. Specify a key-value pair. Example: {\"key\" : \"value\"}"
         },
         "SnapshotId":{
            "type":"String",
            "description":"(Optional) The snapshot ID to use to retrieve a patch baseline snapshot.",
            "default":""
         },
         "RebootOption":{
            "type":"String",
            "description":"(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.",
            "allowedValues":[
               "NoReboot",
               "RebootIfNeeded"
            ],
            "default":"RebootIfNeeded"
         },
         "Operation":{
            "type":"String",
            "description":"(Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.",
            "allowedValues":[
               "Install",
               "Scan"
            ],
            "default":"Install"
         }
      },
      "mainSteps":[
         {
            "name":"getPrimaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifyPrimaryInstancesRunning"
         },
         {
            "name":"verifyPrimaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForPrimaryRunningInstances"
         },
         {
            "name":"waitForPrimaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnPrimaryTagKey"
         },
         {
            "name":"returnPrimaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnPrimaryTagValue"
         },
         {
            "name":"returnPrimaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "primaryTag":"{{PrimaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"primaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchPrimaryInstances"
         },
         {
            "name":"patchPrimaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnPrimaryTagKey.primaryPatchGroupKey}}",
                     "Values":[
                        "{{returnPrimaryTagValue.primaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnPrimaryToOriginalState"
         },
         {
            "name":"returnPrimaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getPrimaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"getSecondaryInstanceState"
         },
         {
            "name":"getSecondaryInstanceState",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"getInstanceStates",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"originalInstanceStates",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               }
            ],
            "nextStep":"verifySecondaryInstancesRunning"
         },
         {
            "name":"verifySecondaryInstancesRunning",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"verifyInstancesRunning",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"waitForSecondaryRunningInstances"
         },
         {
            "name":"waitForSecondaryRunningInstances",
            "action":"aws:executeScript",
            "timeoutSeconds":300,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"waitForRunningInstances",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            },
            "nextStep":"returnSecondaryTagKey"
         },
         {
            "name":"returnSecondaryTagKey",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupKey",
                  "Selector":"$.Payload.tagKey",
                  "Type":"String"
               }
            ],
            "nextStep":"returnSecondaryTagValue"
         },
         {
            "name":"returnSecondaryTagValue",
            "action":"aws:executeScript",
            "timeoutSeconds":120,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnTagValues",
               "InputPayload":{
                  "secondaryTag":"{{SecondaryPatchGroupTag}}"
               },
               "Script":"..."
            },
            "outputs":[
               {
                  "Name":"Payload",
                  "Selector":"$.Payload",
                  "Type":"StringMap"
               },
               {
                  "Name":"secondaryPatchGroupValue",
                  "Selector":"$.Payload.tagValue",
                  "Type":"String"
               }
            ],
            "nextStep":"patchSecondaryInstances"
         },
         {
            "name":"patchSecondaryInstances",
            "action":"aws:runCommand",
            "onFailure":"Abort",
            "timeoutSeconds":7200,
            "inputs":{
               "DocumentName":"AWS-RunPatchBaseline",
               "Parameters":{
                  "SnapshotId":"{{SnapshotId}}",
                  "RebootOption":"{{RebootOption}}",
                  "Operation":"{{Operation}}"
               },
               "Targets":[
                  {
                     "Key":"{{returnSecondaryTagKey.secondaryPatchGroupKey}}",
                     "Values":[
                        "{{returnSecondaryTagValue.secondaryPatchGroupValue}}"
                     ]
                  }
               ],
               "MaxConcurrency":"10%",
               "MaxErrors":"10%"
            },
            "nextStep":"returnSecondaryToOriginalState"
         },
         {
            "name":"returnSecondaryToOriginalState",
            "action":"aws:executeScript",
            "timeoutSeconds":600,
            "onFailure":"Abort",
            "inputs":{
               "Runtime":"python3.11",
               "Handler":"returnToOriginalState",
               "InputPayload":{
                  "targetInstances":"{{getSecondaryInstanceState.originalInstanceStates}}"
               },
               "Script":"..."
            }
         }
      ]
   }
   ```

------

Para obtener más información acerca de las acciones de automatización que se utilizan en este ejemplo, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

# Ejemplos adicionales de manuales de procedimientos
<a name="automation-document-examples"></a>

El siguiente manual de procedimientos de ejemplo demuestra cómo puede usar las acciones de automatización de AWS Systems Manager para automatizar tareas comunes de implementación, solución de problemas y mantenimiento.

**nota**  
Los manuales de procedimientos de ejemplo de esta sección se proporcionan para demostrar cómo puede crear manuales de procedimientos personalizados para satisfacer sus necesidades operativas específicas. Estos manuales de procedimientos no están diseñados para su uso en entornos de producción tal como están. Sin embargo, puede personalizarlos para su propio uso.

**Topics**
+ [Implementación de la arquitectura de VPC y de controladores de dominio de Microsoft Active Directory](automation-document-architecture-deployment-example.md)
+ [Restauración de un volumen raíz a partir de la última instantánea](automation-document-instance-recovery-example.md)
+ [Creación de una AMI y de una copia entre regiones](automation-document-backup-maintenance-example.md)

# Implementación de la arquitectura de VPC y de controladores de dominio de Microsoft Active Directory
<a name="automation-document-architecture-deployment-example"></a>

Para aumentar la eficiencia y estandarizar las tareas comunes, puede elegir automatizar las implementaciones. Esto resulta útil si suele implementar la misma arquitectura en varias cuentas y de manera regular Regiones de AWS. La automatización de las implementaciones de arquitectura también puede reducir la posibilidad de que se produzcan los errores humanos inherentes a los procesos manuales. AWS Systems Manager Las acciones de Automation pueden ayudarlo a lograrlo. Automatización es una herramienta de AWS Systems Manager.

El siguiente manual de procedimientos de AWS Systems Manager de ejemplo realiza estas acciones:
+ Recupera la última Amazon Machine Image (AMI) de Windows Server 2016 con Parameter Store de Systems Manager para usarla al momento de lanzar las instancias de EC2 que se configurarán como controladores de dominio. Parameter Store es una herramienta de AWS Systems Manager.
+ Utiliza la acción de automatización `aws:executeAwsApi` a fin de llamar varias operaciones de la API de AWS para crear la arquitectura de VPC. Las instancias del controlador de dominio se inician en subredes privadas y se conectan a Internet mediante una puerta de enlace NAT. Esto permite que el SSM Agent en las instancias acceda a los puntos de enlace necesarios de Systems Manager.
+ Utiliza la acción de automatización `aws:waitForAwsResourceProperty` a fin de confirmar que las instancias lanzadas por la acción anterior estén `Online` para AWS Systems Manager.
+ Utiliza la acción de automatización `aws:runCommand` para configurar las instancias lanzadas como controladores de dominio de Microsoft Active Directory.

------
#### [ YAML ]

```
    ---
    description: Custom Automation Deployment Example
    schemaVersion: '0.3'
    parameters:
      AutomationAssumeRole:
        type: String
        default: ''
        description: >-
          (Optional) The ARN of the role that allows Automation to perform the
          actions on your behalf. If no role is specified, Systems Manager
          Automation uses your IAM permissions to run this runbook.
    mainSteps:
      - name: getLatestWindowsAmi
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ssm
          Api: GetParameter
          Name: >-
            /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base
        outputs:
          - Name: amiId
            Selector: $.Parameter.Value
            Type: String
        nextStep: createSSMInstanceRole
      - name: createSSMInstanceRole
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: CreateRole
          AssumeRolePolicyDocument: >-
            {"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["ec2.amazonaws.com"]},"Action":["sts:AssumeRole"]}]}
          RoleName: sampleSSMInstanceRole
        nextStep: attachManagedSSMPolicy
      - name: attachManagedSSMPolicy
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: AttachRolePolicy
          PolicyArn: 'arn:aws:iam::aws:policy/service-role/AmazonSSMManagedInstanceCore'
          RoleName: sampleSSMInstanceRole
        nextStep: createSSMInstanceProfile
      - name: createSSMInstanceProfile
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: CreateInstanceProfile
          InstanceProfileName: sampleSSMInstanceRole
        outputs:
          - Name: instanceProfileArn
            Selector: $.InstanceProfile.Arn
            Type: String
        nextStep: addSSMInstanceRoleToProfile
      - name: addSSMInstanceRoleToProfile
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: iam
          Api: AddRoleToInstanceProfile
          InstanceProfileName: sampleSSMInstanceRole
          RoleName: sampleSSMInstanceRole
        nextStep: createVpc
      - name: createVpc
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateVpc
          CidrBlock: 10.0.100.0/22
        outputs:
          - Name: vpcId
            Selector: $.Vpc.VpcId
            Type: String
        nextStep: getMainRtb
      - name: getMainRtb
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: DescribeRouteTables
          Filters:
            - Name: vpc-id
              Values:
                - '{{ createVpc.vpcId }}'
        outputs:
          - Name: mainRtbId
            Selector: '$.RouteTables[0].RouteTableId'
            Type: String
        nextStep: verifyMainRtb
      - name: verifyMainRtb
        action: aws:assertAwsResourceProperty
        onFailure: Abort
        inputs:
          Service: ec2
          Api: DescribeRouteTables
          RouteTableIds:
            - '{{ getMainRtb.mainRtbId }}'
          PropertySelector: '$.RouteTables[0].Associations[0].Main'
          DesiredValues:
            - 'True'
        nextStep: createPubSubnet
      - name: createPubSubnet
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSubnet
          CidrBlock: 10.0.103.0/24
          AvailabilityZone: us-west-2c
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: pubSubnetId
            Selector: $.Subnet.SubnetId
            Type: String
        nextStep: createPubRtb
      - name: createPubRtb
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateRouteTable
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: pubRtbId
            Selector: $.RouteTable.RouteTableId
            Type: String
        nextStep: createIgw
      - name: createIgw
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateInternetGateway
        outputs:
          - Name: igwId
            Selector: $.InternetGateway.InternetGatewayId
            Type: String
        nextStep: attachIgw
      - name: attachIgw
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AttachInternetGateway
          InternetGatewayId: '{{ createIgw.igwId }}'
          VpcId: '{{ createVpc.vpcId }}'
        nextStep: allocateEip
      - name: allocateEip
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AllocateAddress
          Domain: vpc
        outputs:
          - Name: eipAllocationId
            Selector: $.AllocationId
            Type: String
        nextStep: createNatGw
      - name: createNatGw
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateNatGateway
          AllocationId: '{{ allocateEip.eipAllocationId }}'
          SubnetId: '{{ createPubSubnet.pubSubnetId }}'
        outputs:
          - Name: natGwId
            Selector: $.NatGateway.NatGatewayId
            Type: String
        nextStep: verifyNatGwAvailable
      - name: verifyNatGwAvailable
        action: aws:waitForAwsResourceProperty
        timeoutSeconds: 150
        inputs:
          Service: ec2
          Api: DescribeNatGateways
          NatGatewayIds:
            - '{{ createNatGw.natGwId }}'
          PropertySelector: '$.NatGateways[0].State'
          DesiredValues:
            - available
        nextStep: createNatRoute
      - name: createNatRoute
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateRoute
          DestinationCidrBlock: 0.0.0.0/0
          NatGatewayId: '{{ createNatGw.natGwId }}'
          RouteTableId: '{{ getMainRtb.mainRtbId }}'
        nextStep: createPubRoute
      - name: createPubRoute
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateRoute
          DestinationCidrBlock: 0.0.0.0/0
          GatewayId: '{{ createIgw.igwId }}'
          RouteTableId: '{{ createPubRtb.pubRtbId }}'
        nextStep: setPubSubAssoc
      - name: setPubSubAssoc
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AssociateRouteTable
          RouteTableId: '{{ createPubRtb.pubRtbId }}'
          SubnetId: '{{ createPubSubnet.pubSubnetId }}'
      - name: createDhcpOptions
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateDhcpOptions
          DhcpConfigurations:
            - Key: domain-name-servers
              Values:
                - '10.0.100.50,10.0.101.50'
            - Key: domain-name
              Values:
                - sample.com
        outputs:
          - Name: dhcpOptionsId
            Selector: $.DhcpOptions.DhcpOptionsId
            Type: String
        nextStep: createDCSubnet1
      - name: createDCSubnet1
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSubnet
          CidrBlock: 10.0.100.0/24
          AvailabilityZone: us-west-2a
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: firstSubnetId
            Selector: $.Subnet.SubnetId
            Type: String
        nextStep: createDCSubnet2
      - name: createDCSubnet2
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSubnet
          CidrBlock: 10.0.101.0/24
          AvailabilityZone: us-west-2b
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: secondSubnetId
            Selector: $.Subnet.SubnetId
            Type: String
        nextStep: createDCSecGroup
      - name: createDCSecGroup
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: CreateSecurityGroup
          GroupName: SampleDCSecGroup
          Description: Security Group for Sample Domain Controllers
          VpcId: '{{ createVpc.vpcId }}'
        outputs:
          - Name: dcSecGroupId
            Selector: $.GroupId
            Type: String
        nextStep: authIngressDCTraffic
      - name: authIngressDCTraffic
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AuthorizeSecurityGroupIngress
          GroupId: '{{ createDCSecGroup.dcSecGroupId }}'
          IpPermissions:
            - FromPort: -1
              IpProtocol: '-1'
              IpRanges:
                - CidrIp: 0.0.0.0/0
                  Description: Allow all traffic between Domain Controllers
        nextStep: verifyInstanceProfile
      - name: verifyInstanceProfile
        action: aws:waitForAwsResourceProperty
        maxAttempts: 5
        onFailure: Abort
        inputs:
          Service: iam
          Api: ListInstanceProfilesForRole
          RoleName: sampleSSMInstanceRole
          PropertySelector: '$.InstanceProfiles[0].Arn'
          DesiredValues:
            - '{{ createSSMInstanceProfile.instanceProfileArn }}'
        nextStep: iamEventualConsistency
      - name: iamEventualConsistency
        action: aws:sleep
        inputs:
          Duration: PT2M
        nextStep: launchDC1
      - name: launchDC1
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: RunInstances
          BlockDeviceMappings:
            - DeviceName: /dev/sda1
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 50
                VolumeType: gp2
            - DeviceName: xvdf
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 100
                VolumeType: gp2
          IamInstanceProfile:
            Arn: '{{ createSSMInstanceProfile.instanceProfileArn }}'
          ImageId: '{{ getLatestWindowsAmi.amiId }}'
          InstanceType: t2.micro
          MaxCount: 1
          MinCount: 1
          PrivateIpAddress: 10.0.100.50
          SecurityGroupIds:
            - '{{ createDCSecGroup.dcSecGroupId }}'
          SubnetId: '{{ createDCSubnet1.firstSubnetId }}'
          TagSpecifications:
            - ResourceType: instance
              Tags:
                - Key: Name
                  Value: SampleDC1
        outputs:
          - Name: pdcInstanceId
            Selector: '$.Instances[0].InstanceId'
            Type: String
        nextStep: launchDC2
      - name: launchDC2
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: RunInstances
          BlockDeviceMappings:
            - DeviceName: /dev/sda1
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 50
                VolumeType: gp2
            - DeviceName: xvdf
              Ebs:
                DeleteOnTermination: true
                VolumeSize: 100
                VolumeType: gp2
          IamInstanceProfile:
            Arn: '{{ createSSMInstanceProfile.instanceProfileArn }}'
          ImageId: '{{ getLatestWindowsAmi.amiId }}'
          InstanceType: t2.micro
          MaxCount: 1
          MinCount: 1
          PrivateIpAddress: 10.0.101.50
          SecurityGroupIds:
            - '{{ createDCSecGroup.dcSecGroupId }}'
          SubnetId: '{{ createDCSubnet2.secondSubnetId }}'
          TagSpecifications:
            - ResourceType: instance
              Tags:
                - Key: Name
                  Value: SampleDC2
        outputs:
          - Name: adcInstanceId
            Selector: '$.Instances[0].InstanceId'
            Type: String
        nextStep: verifyDCInstanceState
      - name: verifyDCInstanceState
        action: aws:waitForAwsResourceProperty
        inputs:
          Service: ec2
          Api: DescribeInstanceStatus
          IncludeAllInstances: true
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
            - '{{ launchDC2.adcInstanceId }}'
          PropertySelector: '$.InstanceStatuses..InstanceState.Name'
          DesiredValues:
            - running
        nextStep: verifyInstancesOnlineSSM
      - name: verifyInstancesOnlineSSM
        action: aws:waitForAwsResourceProperty
        timeoutSeconds: 600
        inputs:
          Service: ssm
          Api: DescribeInstanceInformation
          InstanceInformationFilterList:
            - key: InstanceIds
              valueSet:
                - '{{ launchDC1.pdcInstanceId }}'
                - '{{ launchDC2.adcInstanceId }}'
          PropertySelector: '$.InstanceInformationList..PingStatus'
          DesiredValues:
            - Online
        nextStep: installADRoles
      - name: installADRoles
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
            - '{{ launchDC2.adcInstanceId }}'
          Parameters:
            commands: |-
              try {
                  Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
              }
              catch {
                  Write-Error "Failed to install ADDS Role."
              }
        nextStep: setAdminPassword
      - name: setAdminPassword
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
          Parameters:
            commands:
              - net user Administrator "sampleAdminPass123!"
        nextStep: createForest
      - name: createForest
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC1.pdcInstanceId }}'
          Parameters:
            commands: |-
              $dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force
              try {
                  Install-ADDSForest -DomainName "sample.com" -DomainMode 6 -ForestMode 6 -InstallDNS -DatabasePath "D:\NTDS" -SysvolPath "D:\SYSVOL" -SafeModeAdministratorPassword $dsrmPass -Force
              }
              catch {
                  Write-Error $_
              }
              try {
                  Add-DnsServerForwarder -IPAddress "10.0.100.2"
              }
              catch {
                  Write-Error $_
              }
        nextStep: associateDhcpOptions
      - name: associateDhcpOptions
        action: aws:executeAwsApi
        onFailure: Abort
        inputs:
          Service: ec2
          Api: AssociateDhcpOptions
          DhcpOptionsId: '{{ createDhcpOptions.dhcpOptionsId }}'
          VpcId: '{{ createVpc.vpcId }}'
        nextStep: waitForADServices
      - name: waitForADServices
        action: aws:sleep
        inputs:
          Duration: PT1M
        nextStep: promoteADC
      - name: promoteADC
        action: aws:runCommand
        inputs:
          DocumentName: AWS-RunPowerShellScript
          InstanceIds:
            - '{{ launchDC2.adcInstanceId }}'
          Parameters:
            commands: |-
              ipconfig /renew
              $dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force
              $domAdminUser = "sample\Administrator"
              $domAdminPass = "sampleAdminPass123!" | ConvertTo-SecureString -asPlainText -Force
              $domAdminCred = New-Object System.Management.Automation.PSCredential($domAdminUser,$domAdminPass)
    
              try {
                  Install-ADDSDomainController -DomainName "sample.com" -InstallDNS -DatabasePath "D:\NTDS" -SysvolPath "D:\SYSVOL" -SafeModeAdministratorPassword $dsrmPass -Credential $domAdminCred -Force
              }
              catch {
                  Write-Error $_
              }
```

------
#### [ JSON ]

```
{
      "description": "Custom Automation Deployment Example",
      "schemaVersion": "0.3",
      "assumeRole": "{{ AutomationAssumeRole }}",
      "parameters": {
        "AutomationAssumeRole": {
          "type": "String",
          "description": "(Optional) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to run this runbook.",
          "default": ""
        }
      },
      "mainSteps": [
        {
          "name": "getLatestWindowsAmi",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ssm",
            "Api": "GetParameter",
            "Name": "/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-Base"
          },
          "outputs": [
            {
              "Name": "amiId",
              "Selector": "$.Parameter.Value",
              "Type": "String"
            }
          ],
          "nextStep": "createSSMInstanceRole"
        },
        {
          "name": "createSSMInstanceRole",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "CreateRole",
            "AssumeRolePolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}",
            "RoleName": "sampleSSMInstanceRole"
          },
          "nextStep": "attachManagedSSMPolicy"
        },
        {
          "name": "attachManagedSSMPolicy",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "AttachRolePolicy",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonSSMManagedInstanceCore",
            "RoleName": "sampleSSMInstanceRole"
          },
          "nextStep": "createSSMInstanceProfile"
        },
        {
          "name": "createSSMInstanceProfile",
          "action":"aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "CreateInstanceProfile",
            "InstanceProfileName": "sampleSSMInstanceRole"
          },
          "outputs": [
            {
              "Name": "instanceProfileArn",
              "Selector": "$.InstanceProfile.Arn",
              "Type": "String"
            }
          ],
          "nextStep": "addSSMInstanceRoleToProfile"
        },
        {
          "name": "addSSMInstanceRoleToProfile",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "AddRoleToInstanceProfile",
            "InstanceProfileName": "sampleSSMInstanceRole",
            "RoleName": "sampleSSMInstanceRole"
          },
          "nextStep": "createVpc"
        },
        {
          "name": "createVpc",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateVpc",
            "CidrBlock": "10.0.100.0/22"
          },
          "outputs": [
            {
              "Name": "vpcId",
              "Selector": "$.Vpc.VpcId",
              "Type": "String"
            }
          ],
          "nextStep": "getMainRtb"
        },
        {
          "name": "getMainRtb",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeRouteTables",
            "Filters": [
              {
                "Name": "vpc-id",
                "Values": ["{{ createVpc.vpcId }}"]
              }
            ]
          },
          "outputs": [
            {
              "Name": "mainRtbId",
              "Selector": "$.RouteTables[0].RouteTableId",
              "Type": "String"
            }
          ],
          "nextStep": "verifyMainRtb"
        },
        {
          "name": "verifyMainRtb",
          "action": "aws:assertAwsResourceProperty",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeRouteTables",
            "RouteTableIds": ["{{ getMainRtb.mainRtbId }}"],
            "PropertySelector": "$.RouteTables[0].Associations[0].Main",
            "DesiredValues": ["True"]
          },
          "nextStep": "createPubSubnet"
        },
        {
          "name": "createPubSubnet",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSubnet",
            "CidrBlock": "10.0.103.0/24",
            "AvailabilityZone": "us-west-2c",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs":[
            {
              "Name": "pubSubnetId",
              "Selector": "$.Subnet.SubnetId",
              "Type": "String"
            }
          ],
          "nextStep": "createPubRtb"
        },
        {
          "name": "createPubRtb",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateRouteTable",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "pubRtbId",
              "Selector": "$.RouteTable.RouteTableId",
              "Type": "String"
            }
          ],
          "nextStep": "createIgw"
        },
        {
          "name": "createIgw",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateInternetGateway"
          },
          "outputs": [
            {
              "Name": "igwId",
              "Selector": "$.InternetGateway.InternetGatewayId",
              "Type": "String"
            }
          ],
          "nextStep": "attachIgw"
        },
        {
          "name": "attachIgw",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AttachInternetGateway",
            "InternetGatewayId": "{{ createIgw.igwId }}",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "nextStep": "allocateEip"
        },
        {
          "name": "allocateEip",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AllocateAddress",
            "Domain": "vpc"
          },
          "outputs": [
            {
              "Name": "eipAllocationId",
              "Selector": "$.AllocationId",
              "Type": "String"
            }
          ],
          "nextStep": "createNatGw"
        },
        {
          "name": "createNatGw",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateNatGateway",
            "AllocationId": "{{ allocateEip.eipAllocationId }}",
            "SubnetId": "{{ createPubSubnet.pubSubnetId }}"
          },
          "outputs":[
            {
              "Name": "natGwId",
              "Selector": "$.NatGateway.NatGatewayId",
              "Type": "String"
            }
          ],
          "nextStep": "verifyNatGwAvailable"
        },
        {
          "name": "verifyNatGwAvailable",
          "action": "aws:waitForAwsResourceProperty",
          "timeoutSeconds": 150,
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeNatGateways",
            "NatGatewayIds": [
              "{{ createNatGw.natGwId }}"
            ],
            "PropertySelector": "$.NatGateways[0].State",
            "DesiredValues": [
              "available"
            ]
          },
          "nextStep": "createNatRoute"
        },
        {
          "name": "createNatRoute",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateRoute",
            "DestinationCidrBlock": "0.0.0.0/0",
            "NatGatewayId": "{{ createNatGw.natGwId }}",
            "RouteTableId": "{{ getMainRtb.mainRtbId }}"
          },
          "nextStep": "createPubRoute"
        },
        {
          "name": "createPubRoute",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateRoute",
            "DestinationCidrBlock": "0.0.0.0/0",
            "GatewayId": "{{ createIgw.igwId }}",
            "RouteTableId": "{{ createPubRtb.pubRtbId }}"
          },
          "nextStep": "setPubSubAssoc"
        },
        {
          "name": "setPubSubAssoc",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AssociateRouteTable",
            "RouteTableId": "{{ createPubRtb.pubRtbId }}",
            "SubnetId": "{{ createPubSubnet.pubSubnetId }}"
          }
        },
        {
          "name": "createDhcpOptions",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateDhcpOptions",
            "DhcpConfigurations": [
              {
                "Key": "domain-name-servers",
                "Values": ["10.0.100.50,10.0.101.50"]
              },
              {
                "Key": "domain-name",
                "Values": ["sample.com"]
              }
            ]
          },
          "outputs": [
            {
              "Name": "dhcpOptionsId",
              "Selector": "$.DhcpOptions.DhcpOptionsId",
              "Type": "String"
            }
          ],
          "nextStep": "createDCSubnet1"
        },
        {
          "name": "createDCSubnet1",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSubnet",
            "CidrBlock": "10.0.100.0/24",
            "AvailabilityZone": "us-west-2a",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "firstSubnetId",
              "Selector": "$.Subnet.SubnetId",
              "Type": "String"
            }
          ],
          "nextStep": "createDCSubnet2"
        },
        {
          "name": "createDCSubnet2",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSubnet",
            "CidrBlock": "10.0.101.0/24",
            "AvailabilityZone": "us-west-2b",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "secondSubnetId",
              "Selector": "$.Subnet.SubnetId",
              "Type": "String"
            }
          ],
          "nextStep": "createDCSecGroup"
        },
        {
          "name": "createDCSecGroup",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "CreateSecurityGroup",
            "GroupName": "SampleDCSecGroup",
            "Description": "Security Group for Example Domain Controllers",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "outputs": [
            {
              "Name": "dcSecGroupId",
              "Selector": "$.GroupId",
              "Type": "String"
            }
          ],
          "nextStep": "authIngressDCTraffic"
        },
        {
          "name": "authIngressDCTraffic",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AuthorizeSecurityGroupIngress",
            "GroupId": "{{ createDCSecGroup.dcSecGroupId }}",
            "IpPermissions": [
              {
                "FromPort": -1,
                "IpProtocol": "-1",
                "IpRanges": [
                  {
                    "CidrIp": "0.0.0.0/0",
                    "Description": "Allow all traffic between Domain Controllers"
                  }
                ]
              }
            ]
          },
          "nextStep": "verifyInstanceProfile"
        },
        {
          "name": "verifyInstanceProfile",
          "action": "aws:waitForAwsResourceProperty",
          "maxAttempts": 5,
          "onFailure": "Abort",
          "inputs": {
            "Service": "iam",
            "Api": "ListInstanceProfilesForRole",
            "RoleName": "sampleSSMInstanceRole",
            "PropertySelector": "$.InstanceProfiles[0].Arn",
            "DesiredValues": [
              "{{ createSSMInstanceProfile.instanceProfileArn }}"
            ]
          },
          "nextStep": "iamEventualConsistency"
        },
        {
          "name": "iamEventualConsistency",
          "action": "aws:sleep",
          "inputs": {
            "Duration": "PT2M"
          },
          "nextStep": "launchDC1"
        },
        {
          "name": "launchDC1",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "RunInstances",
            "BlockDeviceMappings": [
              {
                "DeviceName": "/dev/sda1",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 50,
                  "VolumeType": "gp2"
                }
              },
              {
                "DeviceName": "xvdf",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 100,
                  "VolumeType": "gp2"
                }
              }
            ],
            "IamInstanceProfile": {
              "Arn": "{{ createSSMInstanceProfile.instanceProfileArn }}"
            },
            "ImageId": "{{ getLatestWindowsAmi.amiId }}",
            "InstanceType": "t2.micro",
            "MaxCount": 1,
            "MinCount": 1,
            "PrivateIpAddress": "10.0.100.50",
            "SecurityGroupIds": [
              "{{ createDCSecGroup.dcSecGroupId }}"
            ],
            "SubnetId": "{{ createDCSubnet1.firstSubnetId }}",
            "TagSpecifications": [
              {
                "ResourceType": "instance",
                "Tags": [
                  {
                    "Key": "Name",
                    "Value": "SampleDC1"
                  }
                ]
              }
            ]
          },
          "outputs": [
            {
              "Name": "pdcInstanceId",
              "Selector": "$.Instances[0].InstanceId",
              "Type": "String"
            }
          ],
          "nextStep": "launchDC2"
        },
        {
          "name": "launchDC2",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "RunInstances",
            "BlockDeviceMappings": [
              {
                "DeviceName": "/dev/sda1",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 50,
                  "VolumeType": "gp2"
                }
              },
              {
                "DeviceName": "xvdf",
                "Ebs": {
                  "DeleteOnTermination": true,
                  "VolumeSize": 100,
                  "VolumeType": "gp2"
                }
              }
            ],
            "IamInstanceProfile": {
              "Arn": "{{ createSSMInstanceProfile.instanceProfileArn }}"
            },
            "ImageId": "{{ getLatestWindowsAmi.amiId }}",
            "InstanceType": "t2.micro",
            "MaxCount": 1,
            "MinCount": 1,
            "PrivateIpAddress": "10.0.101.50",
            "SecurityGroupIds": [
              "{{ createDCSecGroup.dcSecGroupId }}"
            ],
            "SubnetId": "{{ createDCSubnet2.secondSubnetId }}",
            "TagSpecifications": [
              {
                "ResourceType": "instance",
                "Tags": [
                  {
                    "Key": "Name",
                    "Value": "SampleDC2"
                  }
                ]
              }
            ]
          },
          "outputs": [
            {
              "Name": "adcInstanceId",
              "Selector": "$.Instances[0].InstanceId",
              "Type": "String"
            }
          ],
          "nextStep": "verifyDCInstanceState"
        },
        {
          "name": "verifyDCInstanceState",
          "action": "aws:waitForAwsResourceProperty",
          "inputs": {
            "Service": "ec2",
            "Api": "DescribeInstanceStatus",
            "IncludeAllInstances": true,
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}",
              "{{ launchDC2.adcInstanceId }}"
            ],
            "PropertySelector": "$.InstanceStatuses[0].InstanceState.Name",
            "DesiredValues": [
              "running"
            ]
          },
          "nextStep": "verifyInstancesOnlineSSM"
        },
        {
          "name": "verifyInstancesOnlineSSM",
          "action": "aws:waitForAwsResourceProperty",
          "timeoutSeconds": 600,
          "inputs": {
            "Service": "ssm",
            "Api": "DescribeInstanceInformation",
            "InstanceInformationFilterList": [
              {
                "key": "InstanceIds",
                "valueSet": [
                  "{{ launchDC1.pdcInstanceId }}",
                  "{{ launchDC2.adcInstanceId }}"
                ]
              }
            ],
            "PropertySelector": "$.InstanceInformationList[0].PingStatus",
            "DesiredValues": [
              "Online"
            ]
          },
          "nextStep": "installADRoles"
        },
        {
          "name": "installADRoles",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}",
              "{{ launchDC2.adcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "try {",
                "  Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools",
                "}",
                "catch {",
                "  Write-Error \"Failed to install ADDS Role.\"",
                "}"
              ]
            }
          },
          "nextStep": "setAdminPassword"
        },
        {
          "name": "setAdminPassword",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "net user Administrator \"sampleAdminPass123!\""
              ]
            }
          },
          "nextStep": "createForest"
        },
        {
          "name": "createForest",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC1.pdcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "$dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force",
                "try {",
                "   Install-ADDSForest -DomainName \"sample.com\" -DomainMode 6 -ForestMode 6 -InstallDNS -DatabasePath \"D:\\NTDS\" -SysvolPath \"D:\\SYSVOL\" -SafeModeAdministratorPassword $dsrmPass -Force",
                "}",
                "catch {",
                "   Write-Error $_",
                "}",
                "try {",
                "   Add-DnsServerForwarder -IPAddress \"10.0.100.2\"",
                "}",
                "catch {",
                "   Write-Error $_",
                "}"
              ]
            }
          },
          "nextStep": "associateDhcpOptions"
        },
        {
          "name": "associateDhcpOptions",
          "action": "aws:executeAwsApi",
          "onFailure": "Abort",
          "inputs": {
            "Service": "ec2",
            "Api": "AssociateDhcpOptions",
            "DhcpOptionsId": "{{ createDhcpOptions.dhcpOptionsId }}",
            "VpcId": "{{ createVpc.vpcId }}"
          },
          "nextStep": "waitForADServices"
        },
        {
          "name": "waitForADServices",
          "action": "aws:sleep",
          "inputs": {
            "Duration": "PT1M"
          },
          "nextStep": "promoteADC"
        },
        {
          "name": "promoteADC",
          "action": "aws:runCommand",
          "inputs": {
            "DocumentName": "AWS-RunPowerShellScript",
            "InstanceIds": [
              "{{ launchDC2.adcInstanceId }}"
            ],
            "Parameters": {
              "commands": [
                "ipconfig /renew",
                "$dsrmPass = 'sample123!' | ConvertTo-SecureString -asPlainText -Force",
                "$domAdminUser = \"sample\\Administrator\"",
                "$domAdminPass = \"sampleAdminPass123!\" | ConvertTo-SecureString -asPlainText -Force",
                "$domAdminCred = New-Object System.Management.Automation.PSCredential($domAdminUser,$domAdminPass)",
                "try {",
                "   Install-ADDSDomainController -DomainName \"sample.com\" -InstallDNS -DatabasePath \"D:\\NTDS\" -SysvolPath \"D:\\SYSVOL\" -SafeModeAdministratorPassword $dsrmPass -Credential $domAdminCred -Force",
                "}",
                "catch {",
                "   Write-Error $_",
                "}"
              ]
            }
          }
        }
      ]
    }
```

------

# Restauración de un volumen raíz a partir de la última instantánea
<a name="automation-document-instance-recovery-example"></a>

El sistema operativo en un volumen raíz puede dañarse por varias razones. Por ejemplo, después de una operación de revisióno, las instancias podrían arrancar de manera incorrecta debido a un kernel o un registro dañado. La automatización de tareas comunes de solución de problemas, como la restauración de un volumen raíz a partir de la última instantánea tomada antes de la operación de aplicación de revisiones, puede reducir el tiempo de inactividad y agilizar los esfuerzos de solución de problemas. AWS Systems Manager Las acciones de Automation pueden ayudarlo a lograrlo. Automatización es una herramienta de AWS Systems Manager.

El siguiente manual de procedimientos de AWS Systems Manager de ejemplo realiza estas acciones: 
+ Utiliza la acción de automatización `aws:executeAwsApi` para recuperar detalles del volumen raíz de la instancia.
+ Utiliza la acción de automatización `aws:executeScript` para recuperar la última instantánea del volumen raíz.
+ Utiliza la acción de automatización `aws:branch` para continuar la automatización si se encuentra una instantánea para el volumen raíz.

------
#### [ YAML ]

```
    ---
    description: Custom Automation Troubleshooting Example
    schemaVersion: '0.3'
    assumeRole: "{{ AutomationAssumeRole }}"
    parameters:
      AutomationAssumeRole:
        type: String
        description: "(Required) The ARN of the role that allows Automation to perform
          the actions on your behalf. If no role is specified, Systems Manager Automation
          uses your IAM permissions to use this runbook."
        default: ''
      InstanceId:
          type: String
          description: "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot."
          default: ''
    mainSteps:
    - name: getInstanceDetails
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: DescribeInstances
        InstanceIds:
        - "{{ InstanceId }}"
      outputs:
        - Name: availabilityZone
          Selector: "$.Reservations[0].Instances[0].Placement.AvailabilityZone"
          Type: String
        - Name: rootDeviceName
          Selector: "$.Reservations[0].Instances[0].RootDeviceName"
          Type: String
      nextStep: getRootVolumeId
    - name: getRootVolumeId
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: DescribeVolumes
        Filters:
        -  Name: attachment.device
           Values: ["{{ getInstanceDetails.rootDeviceName }}"]
        -  Name: attachment.instance-id
           Values: ["{{ InstanceId }}"]
      outputs:
        - Name: rootVolumeId
          Selector: "$.Volumes[0].VolumeId"
          Type: String
      nextStep: getSnapshotsByStartTime
    - name: getSnapshotsByStartTime
      action: aws:executeScript
      timeoutSeconds: 45
      onFailure: Abort
      inputs:
        Runtime: python3.11
        Handler: getSnapshotsByStartTime
        InputPayload:
          rootVolumeId : "{{ getRootVolumeId.rootVolumeId }}"
        Script: |-
          def getSnapshotsByStartTime(events,context):
            import boto3
    
            #Initialize client
            ec2 = boto3.client('ec2')
            rootVolumeId = events['rootVolumeId']
            snapshotsQuery = ec2.describe_snapshots(
              Filters=[
                {
                  "Name": "volume-id",
                  "Values": [rootVolumeId]
                }
              ]
            )
            if not snapshotsQuery['Snapshots']:
              noSnapshotFoundString = "NoSnapshotFound"
              return { 'noSnapshotFound' : noSnapshotFoundString }
            else:
              jsonSnapshots = snapshotsQuery['Snapshots']
              sortedSnapshots = sorted(jsonSnapshots, key=lambda k: k['StartTime'], reverse=True)
              latestSortedSnapshotId = sortedSnapshots[0]['SnapshotId']
              return { 'latestSnapshotId' : latestSortedSnapshotId }
      outputs:
      - Name: Payload
        Selector: $.Payload
        Type: StringMap
      - Name: latestSnapshotId
        Selector: $.Payload.latestSnapshotId
        Type: String
      - Name: noSnapshotFound
        Selector: $.Payload.noSnapshotFound
        Type: String 
      nextStep: branchFromResults
    - name: branchFromResults
      action: aws:branch
      onFailure: Abort
      inputs:
        Choices:
        - NextStep: createNewRootVolumeFromSnapshot
          Not:
            Variable: "{{ getSnapshotsByStartTime.noSnapshotFound }}"
            StringEquals: "NoSnapshotFound"
      isEnd: true
    - name: createNewRootVolumeFromSnapshot
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: CreateVolume
        AvailabilityZone: "{{ getInstanceDetails.availabilityZone }}"
        SnapshotId: "{{ getSnapshotsByStartTime.latestSnapshotId }}"
      outputs:
        - Name: newRootVolumeId
          Selector: "$.VolumeId"
          Type: String
      nextStep: stopInstance
    - name: stopInstance
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: StopInstances
        InstanceIds:
        - "{{ InstanceId }}"
      nextStep: verifyVolumeAvailability
    - name: verifyVolumeAvailability
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 120
      inputs:
        Service: ec2
        Api: DescribeVolumes
        VolumeIds:
        - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
        PropertySelector: "$.Volumes[0].State"
        DesiredValues:
        - "available"
      nextStep: verifyInstanceStopped
    - name: verifyInstanceStopped
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 120
      inputs:
        Service: ec2
        Api: DescribeInstances
        InstanceIds:
        - "{{ InstanceId }}"
        PropertySelector: "$.Reservations[0].Instances[0].State.Name"
        DesiredValues:
        - "stopped"
      nextStep: detachRootVolume
    - name: detachRootVolume
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: DetachVolume
        VolumeId: "{{ getRootVolumeId.rootVolumeId }}"
      nextStep: verifyRootVolumeDetached
    - name: verifyRootVolumeDetached
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 30
      inputs:
        Service: ec2
        Api: DescribeVolumes
        VolumeIds:
        - "{{ getRootVolumeId.rootVolumeId }}"
        PropertySelector: "$.Volumes[0].State"
        DesiredValues:
        - "available"
      nextStep: attachNewRootVolume
    - name: attachNewRootVolume
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: AttachVolume
        Device: "{{ getInstanceDetails.rootDeviceName }}"
        InstanceId: "{{ InstanceId }}"
        VolumeId: "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
      nextStep: verifyNewRootVolumeAttached
    - name: verifyNewRootVolumeAttached
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 30
      inputs:
        Service: ec2
        Api: DescribeVolumes
        VolumeIds:
        - "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
        PropertySelector: "$.Volumes[0].Attachments[0].State"
        DesiredValues:
        - "attached"
      nextStep: startInstance
    - name: startInstance
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: StartInstances
        InstanceIds:
        - "{{ InstanceId }}"
```

------
#### [ JSON ]

```
    {
       "description": "Custom Automation Troubleshooting Example",
       "schemaVersion": "0.3",
       "assumeRole": "{{ AutomationAssumeRole }}",
       "parameters": {
          "AutomationAssumeRole": {
             "type": "String",
             "description": "(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to run this runbook.",
             "default": ""
          },
          "InstanceId": {
             "type": "String",
             "description": "(Required) The Instance Id whose root EBS volume you want to restore the latest Snapshot.",
             "default": ""
          }
       },
       "mainSteps": [
          {
             "name": "getInstanceDetails",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ]
             },
             "outputs": [
                {
                   "Name": "availabilityZone",
                   "Selector": "$.Reservations[0].Instances[0].Placement.AvailabilityZone",
                   "Type": "String"
                },
                {
                   "Name": "rootDeviceName",
                   "Selector": "$.Reservations[0].Instances[0].RootDeviceName",
                   "Type": "String"
                }
             ],
             "nextStep": "getRootVolumeId"
          },
          {
             "name": "getRootVolumeId",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "Filters": [
                   {
                      "Name": "attachment.device",
                      "Values": [
                         "{{ getInstanceDetails.rootDeviceName }}"
                      ]
                   },
                   {
                      "Name": "attachment.instance-id",
                      "Values": [
                         "{{ InstanceId }}"
                      ]
                   }
                ]
             },
             "outputs": [
                {
                   "Name": "rootVolumeId",
                   "Selector": "$.Volumes[0].VolumeId",
                   "Type": "String"
                }
             ],
             "nextStep": "getSnapshotsByStartTime"
          },
          {
             "name": "getSnapshotsByStartTime",
             "action": "aws:executeScript",
             "timeoutSeconds": 45,
             "onFailure": "Continue",
             "inputs": {
                "Runtime": "python3.11",
                "Handler": "getSnapshotsByStartTime",
                "InputPayload": {
                   "rootVolumeId": "{{ getRootVolumeId.rootVolumeId }}"
                },
                "Attachment": "getSnapshotsByStartTime.py"
             },
             "outputs": [
                {
                   "Name": "Payload",
                   "Selector": "$.Payload",
                   "Type": "StringMap"
                },
                {
                   "Name": "latestSnapshotId",
                   "Selector": "$.Payload.latestSnapshotId",
                   "Type": "String"
                },
                {
                   "Name": "noSnapshotFound",
                   "Selector": "$.Payload.noSnapshotFound",
                   "Type": "String"
                }
             ],
             "nextStep": "branchFromResults"
          },
          {
             "name": "branchFromResults",
             "action": "aws:branch",
             "onFailure": "Abort",
             "inputs": {
                "Choices": [
                   {
                      "NextStep": "createNewRootVolumeFromSnapshot",
                      "Not": {
                         "Variable": "{{ getSnapshotsByStartTime.noSnapshotFound }}",
                         "StringEquals": "NoSnapshotFound"
                      }
                   }
                ]
             },
             "isEnd": true
          },
          {
             "name": "createNewRootVolumeFromSnapshot",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "CreateVolume",
                "AvailabilityZone": "{{ getInstanceDetails.availabilityZone }}",
                "SnapshotId": "{{ getSnapshotsByStartTime.latestSnapshotId }}"
             },
             "outputs": [
                {
                   "Name": "newRootVolumeId",
                   "Selector": "$.VolumeId",
                   "Type": "String"
                }
             ],
             "nextStep": "stopInstance"
          },
          {
             "name": "stopInstance",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "StopInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ]
             },
             "nextStep": "verifyVolumeAvailability"
          },
          {
             "name": "verifyVolumeAvailability",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 120,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "VolumeIds": [
                   "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
                ],
                "PropertySelector": "$.Volumes[0].State",
                "DesiredValues": [
                   "available"
                ]
             },
             "nextStep": "verifyInstanceStopped"
          },
          {
             "name": "verifyInstanceStopped",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 120,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ],
                "PropertySelector": "$.Reservations[0].Instances[0].State.Name",
                "DesiredValues": [
                   "stopped"
                ]
             },
             "nextStep": "detachRootVolume"
          },
          {
             "name": "detachRootVolume",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "DetachVolume",
                "VolumeId": "{{ getRootVolumeId.rootVolumeId }}"
             },
             "nextStep": "verifyRootVolumeDetached"
          },
          {
             "name": "verifyRootVolumeDetached",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 30,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "VolumeIds": [
                   "{{ getRootVolumeId.rootVolumeId }}"
                ],
                "PropertySelector": "$.Volumes[0].State",
                "DesiredValues": [
                   "available"
                ]
             },
             "nextStep": "attachNewRootVolume"
          },
          {
             "name": "attachNewRootVolume",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "AttachVolume",
                "Device": "{{ getInstanceDetails.rootDeviceName }}",
                "InstanceId": "{{ InstanceId }}",
                "VolumeId": "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
             },
             "nextStep": "verifyNewRootVolumeAttached"
          },
          {
             "name": "verifyNewRootVolumeAttached",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 30,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeVolumes",
                "VolumeIds": [
                   "{{ createNewRootVolumeFromSnapshot.newRootVolumeId }}"
                ],
                "PropertySelector": "$.Volumes[0].Attachments[0].State",
                "DesiredValues": [
                   "attached"
                ]
             },
             "nextStep": "startInstance"
          },
          {
             "name": "startInstance",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "StartInstances",
                "InstanceIds": [
                   "{{ InstanceId }}"
                ]
             }
          }
       ],
       "files": {
            "getSnapshotsByStartTime.py": {
                "checksums": {
                    "sha256": "sampleETagValue"
                }
            }
        }
    }
```

------

# Creación de una AMI y de una copia entre regiones
<a name="automation-document-backup-maintenance-example"></a>

La creación de una Amazon Machine Image (AMI) a partir de una instancia es un proceso que se utiliza para realizar copias de seguridad y tareas de recuperación. En una arquitectura de recuperación de desastres, también puede copiar una AMI en otra Región de AWS, si así lo desea. La automatización de tareas de mantenimiento habituales puede reducir el tiempo de inactividad si un problema requiere la conmutación por error. AWS Systems Manager Las acciones de Automation pueden ayudarlo a lograrlo. Automatización es una herramienta de AWS Systems Manager.

El siguiente manual de procedimientos de AWS Systems Manager de ejemplo realiza estas acciones:
+ Utiliza la acción de automatización `aws:executeAwsApi` para crear una AMI.
+ Utiliza la acción de automatización `aws:waitForAwsResourceProperty` para confirmar la disponibilidad de la AMI.
+ Utiliza la acción de automatización `aws:executeScript` para copiar la AMI en la región de destino.

------
#### [ YAML ]

```
    ---
    description: Custom Automation Backup and Recovery Example
    schemaVersion: '0.3'
    assumeRole: "{{ AutomationAssumeRole }}"
    parameters:
      AutomationAssumeRole:
        type: String
        description: "(Required) The ARN of the role that allows Automation to perform
          the actions on your behalf. If no role is specified, Systems Manager Automation
          uses your IAM permissions to use this runbook."
        default: ''
      InstanceId:
        type: String
        description: "(Required) The ID of the EC2 instance."
        default: ''
    mainSteps:
    - name: createImage
      action: aws:executeAwsApi
      onFailure: Abort
      inputs:
        Service: ec2
        Api: CreateImage
        InstanceId: "{{ InstanceId }}"
        Name: "Automation Image for {{ InstanceId }}"
        NoReboot: false
      outputs:
        - Name: newImageId
          Selector: "$.ImageId"
          Type: String
      nextStep: verifyImageAvailability
    - name: verifyImageAvailability
      action: aws:waitForAwsResourceProperty
      timeoutSeconds: 600
      inputs:
        Service: ec2
        Api: DescribeImages
        ImageIds:
        - "{{ createImage.newImageId }}"
        PropertySelector: "$.Images[0].State"
        DesiredValues:
        - available
      nextStep: copyImage
    - name: copyImage
      action: aws:executeScript
      timeoutSeconds: 45
      onFailure: Abort
      inputs:
        Runtime: python3.11
        Handler: crossRegionImageCopy
        InputPayload:
          newImageId : "{{ createImage.newImageId }}"
        Script: |-
          def crossRegionImageCopy(events,context):
            import boto3
    
            #Initialize client
            ec2 = boto3.client('ec2', region_name='us-east-1')
            newImageId = events['newImageId']
    
            ec2.copy_image(
              Name='DR Copy for ' + newImageId,
              SourceImageId=newImageId,
              SourceRegion='us-west-2'
            )
```

------
#### [ JSON ]

```
    {
       "description": "Custom Automation Backup and Recovery Example",
       "schemaVersion": "0.3",
       "assumeRole": "{{ AutomationAssumeRole }}",
       "parameters": {
          "AutomationAssumeRole": {
             "type": "String",
             "description": "(Required) The ARN of the role that allows Automation to perform\nthe actions on your behalf. If no role is specified, Systems Manager Automation\nuses your IAM permissions to run this runbook.",
             "default": ""
          },
          "InstanceId": {
             "type": "String",
             "description": "(Required) The ID of the EC2 instance.",
             "default": ""
          }
       },
       "mainSteps": [
          {
             "name": "createImage",
             "action": "aws:executeAwsApi",
             "onFailure": "Abort",
             "inputs": {
                "Service": "ec2",
                "Api": "CreateImage",
                "InstanceId": "{{ InstanceId }}",
                "Name": "Automation Image for {{ InstanceId }}",
                "NoReboot": false
             },
             "outputs": [
                {
                   "Name": "newImageId",
                   "Selector": "$.ImageId",
                   "Type": "String"
                }
             ],
             "nextStep": "verifyImageAvailability"
          },
          {
             "name": "verifyImageAvailability",
             "action": "aws:waitForAwsResourceProperty",
             "timeoutSeconds": 600,
             "inputs": {
                "Service": "ec2",
                "Api": "DescribeImages",
                "ImageIds": [
                   "{{ createImage.newImageId }}"
                ],
                "PropertySelector": "$.Images[0].State",
                "DesiredValues": [
                   "available"
                ]
             },
             "nextStep": "copyImage"
          },
          {
             "name": "copyImage",
             "action": "aws:executeScript",
             "timeoutSeconds": 45,
             "onFailure": "Abort",
             "inputs": {
                "Runtime": "python3.11",
                "Handler": "crossRegionImageCopy",
                "InputPayload": {
                   "newImageId": "{{ createImage.newImageId }}"
                },
                "Attachment": "crossRegionImageCopy.py"
             }
          }
       ],
       "files": {
            "crossRegionImageCopy.py": {
                "checksums": {
                    "sha256": "sampleETagValue"
                }
            }
        }
    }
```

------

# Creación de parámetros de entrada que rellenan recursos de AWS
<a name="populating-input-parameters"></a>

Automatización, una herramienta de Systems Manager, rellena los recursos de AWS en la Consola de administración de AWS que concuerdan con el tipo de recurso que el usuario defina para un parámetro de entrada. Los recursos en su Cuenta de AWS que concuerden con el tipo de recurso se muestran en una lista desplegable para que elija. Puede definir tipos de parámetros de entrada para instancias de Amazon Elastic Compute Cloud (Amazon EC2), buckets de Amazon Simple Storage Service (Amazon S3) y roles de AWS Identity and Access Management (IAM). Las definiciones de tipo admitidas y las expresiones regulares que se utilizan para localizar los recursos coincidentes son las siguientes:
+ `AWS::EC2::Instance::Id` - `^m?i-([a-z0-9]{8}|[a-z0-9]{17})$`
+ `List<AWS::EC2::Instance::Id>` - `^m?i-([a-z0-9]{8}|[a-z0-9]{17})$`
+ `AWS::S3::Bucket::Name` - `^[0-9a-z][a-z0-9\\-\\.]{3,63}$`
+ `List<AWS::S3::Bucket::Name>` - `^[0-9a-z][a-z0-9\\-\\.]{3,63}$`
+ `AWS::IAM::Role::Arn` - `^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$`
+ `List<AWS::IAM::Role::Arn>` - `^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$`

A continuación, se muestra un ejemplo de los tipos de parámetros de entrada definidos en el contenido del runbook.

------
#### [ YAML ]

```
description: Enables encryption on an Amazon S3 bucket
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  BucketName:
    type: 'AWS::S3::Bucket::Name'
    description: (Required) The name of the Amazon S3 bucket you want to encrypt.
  SSEAlgorithm:
    type: String
    description: (Optional) The server-side encryption algorithm to use for the default encryption.
    default: AES256
  AutomationAssumeRole:
    type: 'AWS::IAM::Role::Arn'
    description: (Optional) The Amazon Resource Name (ARN) of the role that allows Automation to perform the actions on your behalf.
    default: ''
mainSteps:
  - name: enableBucketEncryption
    action: 'aws:executeAwsApi'
    inputs:
      Service: s3
      Api: PutBucketEncryption
      Bucket: '{{BucketName}}'
      ServerSideEncryptionConfiguration:
        Rules:
          - ApplyServerSideEncryptionByDefault:
              SSEAlgorithm: '{{SSEAlgorithm}}'
    isEnd: true
```

------
#### [ JSON ]

```
{
   "description": "Enables encryption on an Amazon S3 bucket",
   "schemaVersion": "0.3",
   "assumeRole": "{{ AutomationAssumeRole }}",
   "parameters": {
      "BucketName": {
         "type": "AWS::S3::Bucket::Name",
         "description": "(Required) The name of the Amazon S3 bucket you want to encrypt."
      },
      "SSEAlgorithm": {
         "type": "String",
         "description": "(Optional) The server-side encryption algorithm to use for the default encryption.",
         "default": "AES256"
      },
      "AutomationAssumeRole": {
         "type": "AWS::IAM::Role::Arn",
         "description": "(Optional) The Amazon Resource Name (ARN) of the role that allows Automation to perform the actions on your behalf.",
         "default": ""
      }
   },
   "mainSteps": [
      {
         "name": "enableBucketEncryption",
         "action": "aws:executeAwsApi",
         "inputs": {
            "Service": "s3",
            "Api": "PutBucketEncryption",
            "Bucket": "{{BucketName}}",
            "ServerSideEncryptionConfiguration": {
               "Rules": [
                  {
                     "ApplyServerSideEncryptionByDefault": {
                        "SSEAlgorithm": "{{SSEAlgorithm}}"
                     }
                  }
               ]
            }
         },
         "isEnd": true
      }
   ]
}
```

------

# Uso del Generador de documentos para crear un manual de procedimientos
<a name="automation-document-builder"></a>

Si los manuales de procedimientos públicos de AWS Systems Manager no admiten todas las acciones que desea realizar en sus recursos de AWS, puede crear sus propios manuales. Para crear un manual de procedimientos personalizado, puede crear manualmente un archivo de formato YAML o JSON local con las acciones de automatización adecuadas. Como alternativa, puede usar el Generador de documentos en la consola de Automatización de Systems Manager para crear un manual de procedimientos personalizado.

Con el Generador de documentos, puede agregar acciones de automatización a su manual de procedimientos personalizado y proporcionar los parámetros necesarios sin tener que usar la sintaxis JSON o YAML. Después de agregar pasos y crear el manual de procedimientos, el sistema convierte las acciones que ha agregado al formato YAML que Systems Manager puede utilizar para ejecutar la automatización.

Los manuales de procedimientos admiten el uso de Markdown, un lenguaje de marcado que le permite agregar descripciones de estilo Wiki a manuales de procedimientos y pasos individuales dentro del manual. Para obtener más información acerca del uso de Markdown, consulte [Uso de Markdown en AWS](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html).

## Crear un manual de procedimientos con el Generador de documentos
<a name="create-runbook"></a>

**Antes de empezar**  
Le recomendamos que lea acerca de las diferentes acciones que puede usar dentro de un manual de procedimientos. Para obtener más información, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

**Para crear un manual de procedimientos con el Generador de documentos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Elija **Create automation (Crear automatización)**.

1. En **Name** (Nombre), ingrese un nombre descriptivo para el manual de procedimientos.

1. En **Document description** (Descripción del documento), proporcione la descripción del estilo Markdown del manual de procedimientos. Puede proporcionar instrucciones para utilizar el manual de procedimientos, pasos numerados o cualquier otro tipo de información para describir el manual de procedimientos. Consulte el texto predeterminado para obtener información sobre cómo dar formato al contenido.
**sugerencia**  
Alterna entre **Hide preview (Ocultar vista previa)** y **Show preview (Mostrar vista previa)** para ver el aspecto del contenido de la descripción mientras redacta.

1. De forma opcional, en **Assume role (Asumir rol)**, escriba el nombre o ARN de un rol de servicio que realizará acciones en su nombre. Si no especifica un rol, Automation utiliza los permisos de acceso del usuario que ejecuta la automatización.
**importante**  
Para los manuales de procedimientos que no son propiedad de Amazon y que utilizan la acción `aws:executeScript`, es necesario especificar un rol. Para obtener más información, consulte [Permisos para utilizar los manuales de procedimientos](automation-document-script-considerations.md#script-permissions).

1. (Opcional) En **Outputs** (Salidas), ingrese cualquier salida para la automatización de este manual de procedimientos a fin de que esté disponible para otros procesos. 

   Por ejemplo, si el manual de procedimientos crea una AMI nueva, puede especificar ["CreateImage.ImageId"] y, a continuación, utilizar esta salida para crear instancias nuevas en una automatización posterior.

1. De forma opcional, expanda la sección **Input parameters (Parámetros de entrada)** y haga lo siguiente.

   1. En **Parameter name** (Nombre de parámetro), ingrese un nombre descriptivo para el parámetro del manual de procedimientos que está creando.

   1. En **Type (Tipo)**, elija un tipo para el parámetro, como `String` o `MapList`.

   1. En **Required (Requerido)**, realice una de las acciones siguientes: 
      + Elija **Yes** (Sí) si se debe proporcionar un valor para este parámetro del manual de procedimientos en el tiempo de ejecución.
      + Elija **No** si el parámetro no es necesario y, de forma opcional, ingrese el valor de un parámetro predeterminado en **Default value** (Valor predeterminado).

   1. En **Description** (Descripción), ingrese una descripción para el parámetro del manual de procedimientos.
**nota**  
Para agregar más parámetros del manual de procedimientos, elija **Add a parameter** (Agregar un parámetro). Para quitar un parámetro del manual de procedimientos, elija el botón **X** (quitar).

1. (Opcional) Expanda la sección **Target type** (Tipo de destino) y elija un tipo de destino para definir los tipos de recursos en los que se puede ejecutar la automatización. Por ejemplo, para usar un manual de procedimientos en instancias EC2, elija `/AWS::EC2::Instance`.
**nota**  
Si especifica un valor de “`/`”, el manual de procedimientos puede ejecutarse en todos los tipos de recursos. Para obtener una lista de los tipos de recursos válidos, consulte la [Referencia de tipos de recursos de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) en la *Guía del usuario AWS CloudFormation*.

1. (Opcional) Expanda la sección **Document tags** (Etiquetas del documento) e ingrese uno o más pares de clave-valor de etiqueta para aplicarlos al manual de procedimientos. Las etiquetas facilitan la identificación, la organización y la búsqueda de recursos.

1. En la sección **Step 1 (Paso 1)** proporcione la siguiente información.
   + En **Step name** (Nombre del paso), escriba un nombre descriptivo para el primer paso de la automatización.
   + En **Action type (Tipo de acción)**, seleccione el tipo de acción que desea utilizar para este paso.

     Para obtener una lista e información acerca de los tipos de acción disponibles, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).
   + En **Description (Descripción)**, escriba una descripción del paso de automatización. Puede usar Markdown para dar formato al texto.
   + Según el **Action type (Tipo de acción)** seleccionado, introduzca las entradas necesarias para el tipo de acción en la sección **Step inputs (Entradas de paso)**. Por ejemplo, si ha seleccionado la acción `aws:approve`, debe especificar un valor para la propiedad `Approvers`.

     Para obtener información acerca de los campos de entrada de pasos, consulte la entrada de [Referencia de acciones de Automatización de Systems Manager](automation-actions.md) correspondiente al tipo de acción seleccionado. Por ejemplo: [`aws:executeStateMachine`: ejecutar una máquina de estado de AWS Step Functions](automation-action-executeStateMachine.md).
   + (Opcional) En **Additional inputs** (Entradas adicionales), proporcione los valores de entrada adicionales que se necesitan para el manual de procedimientos. Los tipos de entrada disponibles dependen del tipo de acción seleccionado para el paso. (Tenga en cuenta que algunos tipos de acción requieren valores de entrada).
**nota**  
Para agregar más entradas, elija **Add optional input (Agregar entrada opcional)**. Para eliminar una entrada, elija el botón **X** (eliminar).
   + (Opcional) En **Outputs** (Salidas), ingrese cualquier salida que corresponda a este paso a fin de que esté disponible para otros procesos.
**nota**  
Las **Outputs (Salidas)** no están disponibles para todos los tipos de acción.
   + (Opcional) Expanda la sección **Common properties** (Propiedades comunes) y especifique propiedades para las acciones que son comunes a todas las acciones de automatización. Por ejemplo, para **Timeout seconds** (Segundos de tiempo de espera), puede proporcionar un valor en segundos para especificar cuánto tiempo se puede ejecutar el paso antes de que se detenga.

     Para obtener más información, consulte [Propiedades compartidas por todas las acciones](automation-actions.md#automation-common).
**nota**  
Para agregar más pasos, seleccione **Add step** (Agregar paso) y repita el procedimiento para crear un paso. Para quitar un paso, elija **Remove step** (Quitar paso).

1. Elija **Create automation** (Crear automatización) para guardar el manual de procedimientos.

## Crear un manual de procedimientos que ejecute scripts
<a name="create-runbook-scripts"></a>

El siguiente procedimiento muestra cómo usar el Generador de documentos en la consola de Automation de AWS Systems Manager para crear un manual de procedimientos personalizado que ejecuta un script.

El primer paso del manual de procedimientos que crea ejecuta un script para lanzar una instancia de Amazon Elastic Compute Cloud (Amazon EC2). El segundo paso ejecuta otro script para monitorear que el estado de la instancia pase a ser `ok`. A continuación, se informa el estado general `Success` para la automatización.

**Antes de empezar**  
Asegúrese de haber completado los pasos siguientes:
+ Verifique que tiene privilegios de administrador o que se le han concedido los permisos adecuados para acceder a Systems Manager en AWS Identity and Access Management (IAM). 

  Para obtener más información, consulte [Comprobación del acceso del usuario para manuales de procedimientos](automation-setup.md#automation-setup-user-access).
+ Compruebe que tiene un rol de servicio de IAM para Automation (también conocido como *rol de asunción*) en su Cuenta de AWS. El rol es necesario porque esta explicación utiliza la acción `aws:executeScript`. 

  Para obtener información acerca de la creación de esta función, consulta [Configuración del acceso de un rol de servicio (rol de asunción) para automatizaciones](automation-setup.md#automation-setup-configure-role). 

  Para obtener información acerca del requisito de rol de servicio de IAM para ejecutar `aws:executeScript`, consulte [Permisos para utilizar los manuales de procedimientos](automation-document-script-considerations.md#script-permissions).
+ Compruebe que tiene permiso para lanzar instancias EC2. 

  Para obtener información, consulte [IAM y Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingIAM.html#intro-to-iam) en la *Guía del usuario de Amazon EC2*.

**Para crear un manual de procedimientos personalizado que ejecute scripts mediante el Generador de documentos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Elija **Create automation (Crear automatización)**.

1. En **Name** (Nombre), escriba este nombre descriptivo para el manual de procedimientos: **LaunchInstanceAndCheckStatus**.

1. (Opcional) En **Document description** (Descripción del documento), reemplace el texto predeterminado con una descripción de este manual de procedimientos utilizando Markdown. A continuación se muestra un ejemplo.

   ```
   ##Title: LaunchInstanceAndCheckState
       -----
       **Purpose**: This runbook first launches an EC2 instance using the AMI ID provided in the parameter ```imageId```. The second step of this runbook continuously checks the instance status check value for the launched instance until the status ```ok``` is returned.
       
       ##Parameters:
       -----
       Name | Type | Description | Default Value
       ------------- | ------------- | ------------- | -------------
       assumeRole | String | (Optional) The ARN of the role that allows Automation to perform the actions on your behalf. | -
       imageId  | String | (Optional) The AMI ID to use for launching the instance. The default value uses the latest Amazon Linux 2023 AMI ID available. | {{ ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64 }}
   ```

1. En **Assume role** (Rol de asunción), ingrese el ARN del rol de servicio de IAM para Automation (Rol de asunción) para la automatización, en el formato **arn:aws:iam::111122223333:role/AutomationServiceRole**. Sustituya el ID de la Cuenta de AWS por 111122223333.

   El rol que especifique se utiliza para proporcionar los permisos necesarios para iniciar la automatización.
**importante**  
Para los manuales de procedimientos que no son propiedad de Amazon y que utilizan la acción `aws:executeScript`, es necesario especificar un rol. Para obtener más información, consulte [Permisos para utilizar los manuales de procedimientos](automation-document-script-considerations.md#script-permissions).

1. Expanda **Input parameters (Parámetros de entrada)** y haga lo siguiente.

   1. En **Parameter name (Nombre de parámetro)**, introduzca **imageId**.

   1. En **Type (Tipo)**, elija **String**.

   1. En **Required (Requerido)**, elija `No`. 

   1. En **Default value (Valor predeterminado)**, escriba lo siguiente.

      ```
      {{ ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64 }}
      ```
**nota**  
Este valor lanza una instancia de Amazon EC2 con el ID de la última Amazon Machine Image (AMI) de Amazon Linux 2023. Si desea utilizar una AMI diferente, reemplace el valor con el ID de su AMI.

   1. En **Description (Descripción)**, escriba lo siguiente.

      ```
      (Optional) The AMI ID to use for launching the instance. The default value uses the latest released Amazon Linux 2023 AMI ID.
      ```

1. Seleccione **Add a parameter (Añadir un parámetro)** para crear el segundo parámetro, **tagValue**, y escriba lo siguiente.

   1. En **Parameter name (Nombre de parámetro)**, introduzca **tagValue**.

   1. En **Type (Tipo)**, elija **String**.

   1. En **Required (Requerido)**, elija `No`. 

   1. En **Default value (Valor predeterminado)**, introduzca **LaunchedBySsmAutomation**. Esto agrega el valor de par de claves de etiqueta `Name:LaunchedBySsmAutomation` a la instancia.

   1. En **Description (Descripción)**, escriba lo siguiente.

      ```
      (Optional) The tag value to add to the instance. The default value is LaunchedBySsmAutomation.
      ```

1. Seleccione **Add a parameter (Añadir un parámetro)** para crear el tercer parámetro, **instanceType**, y escriba lo siguiente.

   1. En **Parameter name (Nombre de parámetro)**, introduzca **instanceType**.

   1. En **Type (Tipo)**, elija **String**.

   1. En **Required (Requerido)**, elija `No`. 

   1. En **Default value (Valor predeterminado)**, introduzca **t2.micro**.

   1. En **Parameter description (Descripción del parámetro)**, escriba lo siguiente.

      ```
      (Optional) The instance type to use for the instance. The default value is t2.micro.
      ```

1. Expanda **Target type (Tipo de destino)** y elija **"/"**.

1. (Opcional) Expanda **Document tags** (Etiquetas de documento) para aplicar etiquetas de recursos al manual de procedimientos. En **Tag key (Clave de etiqueta)**, escriba **Purpose** y en **Tag value (Valor de etiqueta)**, escriba **LaunchInstanceAndCheckState**.

1. En la sección **Step 1 (Paso 1)** siga los pasos siguientes.

   1. En **Step name** (Nombre del paso), ingrese este nombre descriptivo para el primer paso de la automatización: **LaunchEc2Instance**.

   1. En **Action type (Tipo de acción)**, seleccione **Run a script)** (**aws:executeScript**).

   1. En **Description (Descripción)**, escriba una descripción para el paso de automatización, como la siguiente.

      ```
      **About This Step**
          
          This step first launches an EC2 instance using the ```aws:executeScript``` action and the provided script.
      ```

   1. Amplíe **Inputs (Entradas)**.

   1. En **Runtime (Entorno de ejecución)**, elija el lenguaje del entorno de ejecución que se va a usar para ejecutar el script proporcionado.

   1. En **Handler (Controlador)**, escriba **launch\$1instance**. Este es el nombre de la función declarado en el siguiente script.
**nota**  
Esto no es necesario para PowerShell.

   1. En **Script**, reemplace el contenido predeterminado por lo siguiente. Asegúrese de que el script coincide con el valor del entorno de ejecución.

------
#### [ Python ]

      ```
      def launch_instance(events, context):
            import boto3
            ec2 = boto3.client('ec2')
          
            image_id = events['image_id']
            tag_value = events['tag_value']
            instance_type = events['instance_type']
          
            tag_config = {'ResourceType': 'instance', 'Tags': [{'Key':'Name', 'Value':tag_value}]}
          
            res = ec2.run_instances(ImageId=image_id, InstanceType=instance_type, MaxCount=1, MinCount=1, TagSpecifications=[tag_config])
          
            instance_id = res['Instances'][0]['InstanceId']
          
            print('[INFO] 1 EC2 instance is successfully launched', instance_id)
          
            return { 'InstanceId' : instance_id }
      ```

------
#### [ PowerShell ]

      ```
      Install-Module AWS.Tools.EC2 -Force
          Import-Module AWS.Tools.EC2
          
          $payload = $env:InputPayload | ConvertFrom-Json
          
          $imageid = $payload.image_id
          
          $tagvalue = $payload.tag_value
          
          $instanceType = $payload.instance_type
          
          $type = New-Object Amazon.EC2.InstanceType -ArgumentList $instanceType
          
          $resource = New-Object Amazon.EC2.ResourceType -ArgumentList 'instance'
          
          $tag = @{Key='Name';Value=$tagValue}
          
          $tagSpecs = New-Object Amazon.EC2.Model.TagSpecification
          
          $tagSpecs.ResourceType = $resource
          
          $tagSpecs.Tags.Add($tag)
          
          $res = New-EC2Instance -ImageId $imageId -MinCount 1 -MaxCount 1 -InstanceType $type -TagSpecification $tagSpecs
          
          return @{'InstanceId'=$res.Instances.InstanceId}
      ```

------

   1. Amplíe **Additional inputs (Entradas adicionales)**. 

   1. En **Input name (Nombre de entrada)**, elija **InputPayload**. En **Input Value (Valor de entrada)**, introduzca los siguientes datos YAML. 

      ```
      image_id: "{{ imageId }}"
          tag_value: "{{ tagValue }}"
          instance_type: "{{ instanceType }}"
      ```

1. Expanda **Outputs (Salidas)** y realice lo siguiente:
   + En **Nombre**, escriba **payload**.
   + Para **Selector**, escriba **\$1.Payload**.
   + En **Type (Tipo)**, elija `StringMap`.

1. Seleccione **Add step** (Agregar paso) para agregar un segundo paso al manual de procedimientos. El segundo paso consulta el estado de la instancia iniciada en el paso 1 y espera hasta que el estado devuelto sea `ok`.

1. En la sección **Step 2 (Paso 2)** haga lo siguiente.

   1. En **Step name** (Nombre del paso), ingrese este nombre descriptivo para el segundo paso de la automatización: **WaitForInstanceStatusOk**.

   1. En **Action type (Tipo de acción)**, seleccione **Run a script)** (**aws:executeScript**).

   1. En **Description (Descripción)**, escriba una descripción para el paso de automatización, como la siguiente.

      ```
      **About This Step**
          
          The script continuously polls the instance status check value for the instance launched in Step 1 until the ```ok``` status is returned.
      ```

   1. En **Runtime (Entorno de ejecución)**, elija el lenguaje del entorno de ejecución que se va a usar para ejecutar el script proporcionado.

   1. En **Handler (Controlador)**, escriba **poll\$1instance**. Este es el nombre de la función declarado en el siguiente script.
**nota**  
Esto no es necesario para PowerShell.

   1. En **Script**, reemplace el contenido predeterminado por lo siguiente. Asegúrese de que el script coincide con el valor del entorno de ejecución.

------
#### [ Python ]

      ```
      def poll_instance(events, context):
            import boto3
            import time
          
            ec2 = boto3.client('ec2')
          
            instance_id = events['InstanceId']
          
            print('[INFO] Waiting for instance status check to report ok', instance_id)
          
            instance_status = "null"
          
            while True:
              res = ec2.describe_instance_status(InstanceIds=[instance_id])
          
              if len(res['InstanceStatuses']) == 0:
                print("Instance status information is not available yet")
                time.sleep(5)
                continue
          
              instance_status = res['InstanceStatuses'][0]['InstanceStatus']['Status']
          
              print('[INFO] Polling to get status of the instance', instance_status)
          
              if instance_status == 'ok':
                break
          
              time.sleep(10)
          
            return {'Status': instance_status, 'InstanceId': instance_id}
      ```

------
#### [ PowerShell ]

      ```
          Install-Module AWS.Tools.EC2 -Force
          
          $inputPayload = $env:InputPayload | ConvertFrom-Json
          
          $instanceId = $inputPayload.payload.InstanceId
          
          $status = Get-EC2InstanceStatus -InstanceId $instanceId
          
          while ($status.Status.Status -ne 'ok'){
             Write-Host 'Polling get status of the instance', $instanceId
          
             Start-Sleep -Seconds 5
          
             $status = Get-EC2InstanceStatus -InstanceId $instanceId
          }
          
          return @{Status = $status.Status.Status; InstanceId = $instanceId}
      ```

------

   1. Amplíe **Additional inputs (Entradas adicionales)**. 

   1. En **Input name (Nombre de entrada)**, elija **InputPayload**. En **Input value (Valor de entrada)**, introduzca lo siguiente:

      ```
      {{ LaunchEc2Instance.payload }}
      ```

1. Elija **Create automation** (Crear automatización) para guardar el manual de procedimientos.

# Uso de scripts en manuales de procedimientos
<a name="automation-document-script-considerations"></a>

Los manuales de procedimientos de Automation admiten la ejecución de scripts como parte de la automatización. Automatización es una herramienta de AWS Systems Manager. Mediante los manuales de procedimientos, puede ejecutar scripts directamente en AWS sin crear un entorno informático independiente para ejecutar los scripts. Dado que los manuales de procedimientos pueden ejecutar pasos de script junto con otros tipos de pasos de automatización, como las aprobaciones, usted puede intervenir manualmente en situaciones críticas o ambiguas. Puede enviar la salida desde las acciones `aws:executeScript` en sus manuales de procedimientos a Amazon CloudWatch Logs. Para obtener más información, consulte [Registro de salida de acción de Automation con CloudWatch Logs](automation-action-logging.md).

## Permisos para utilizar los manuales de procedimientos
<a name="script-permissions"></a>

Para utilizar un manual de procedimientos, Systems Manager debe utilizar los permisos de un rol de AWS Identity and Access Management (IAM). El método que Automation utiliza para determinar qué permisos de rol utilizar depende de algunos factores y de si un paso utiliza la acción `aws:executeScript`. 

Para los manuales de procedimientos que no utilizan `aws:executeScript`, Automation emplea una de dos fuentes de permisos:
+ Los permisos de un rol de servicio de IAM, o rol de asunción, que se especifica en el manual de procedimientos o se transfiere como parámetro.
+ Si no se especifica ningún rol de servicio de IAM, los permisos del usuario que inició la automatización. 

Sin embargo, cuando un paso de un manual de procedimientos incluye la acción `aws:executeScript`, siempre se requiere un rol de servicio (rol de asunción) de IAM si el script de Python o PowerShell especificado para la acción llama cualquier operación de la API de AWS. Automation comprueba este rol en el siguiente orden:
+ Los permisos de un rol de servicio de IAM, o rol de asunción, que se especifica en el manual de procedimientos o se transfiere como parámetro.
+ Si no se encuentra ningún rol, Automation intenta ejecutar el script de Python o PowerShell especificado para `aws:executeScript` sin ningún permiso. Si el script llama una operación de la API de AWS (por ejemplo, la operación `CreateImage` de Amazon EC2) o intenta actuar sobre un recurso de AWS (como una instancia de EC2), el paso que contiene el script produce un error y Systems Manager devuelve un mensaje al respecto. 

## Incorporación de scripts a los manuales de procedimientos
<a name="adding-scripts"></a>

Puede agregar scripts a los manuales de procedimientos si los inserta en un paso del manual de procedimientos. También puede adjuntar scripts al manual de procedimientos al cargarlos desde el equipo local o mediante la especificación del bucket de Amazon Simple Storage Service (Amazon S3) donde se encuentren los scripts. Una vez que se complete un paso que ejecuta un script, la salida del script estará disponible como un objeto JSON, el cual luego puede utilizar como entrada para los pasos posteriores del manual de procedimientos. Para obtener más información sobre la acción de `aws:executeScript` y cómo utilizar los archivos adjuntos para los scripts, consulte [`aws:executeScript`: ejecutar un script](automation-action-executeScript.md).

## Restricciones de script para los manuales de procedimientos
<a name="script-constraints"></a>

Los manuales de procedimientos imponen un límite de cinco archivos adjuntos. Los scripts pueden adoptar la forma de scripts de Python (.py) o scripts de PowerShell Core (.ps1), o adjuntarse como contenido dentro de un archivo .zip.

# Uso de instrucciones condicionales en manuales de procedimientos
<a name="automation-branch-condition"></a>

De forma predeterminada, los pasos que defina en la sección `mainSteps` de un manual de procedimientos se ejecutan en orden secuencial. Cuando finaliza una acción, comienza la siguiente acción especificada en la sección `mainSteps`. Asimismo, si una acción no se ejecuta, falla toda la automatización (de forma predeterminada). Puede utilizar la acción de automatización `aws:branch` y las opciones de manual de procedimientos que se describen en esta sección para crear automatizaciones que aplican la *bifurcación condicional*. Esto significa que puede crear automatizaciones que salten a otro paso después de evaluar diferentes elecciones o de responder de forma dinámica a los cambios cuando se completa un paso. A continuación, se muestra una lista de las opciones que puede utilizar para crear automatizaciones dinámicas:
+ **`aws:branch`**: esta acción de automatización le permite crear una automatización dinámica que evalúa varias elecciones en un solo paso y, a continuación, salta a otro paso en el manual de procedimientos en función de los resultados de dicha evaluación.
+ **`nextStep`**: esta opción especifica qué paso de una automatización se debe procesar después de finalizar correctamente un paso. 
+ **`isEnd`**: esta opción detiene una automatización al final de un paso determinado. El valor predeterminado para esta opción es false.
+ **`isCritical`**: esta opción designa un paso como crítico para la finalización correcta de la automatización. Si un paso con esta designación genera un error, Automation informa que el estado final de la automatización es `Failed`. El valor predeterminado para esta opción es `true`.
+ **`onFailure`**: esta opción indica si la automatización debe detenerse, continuar, o bien, pasar a otro paso en caso de error. El valor predeterminado para esta opción es abort (anular).

En la siguiente sección, se describe la acción de automatización `aws:branch`. Para obtener más información acerca de las opciones `nextStep`, `isEnd`, `isCritical` y `onFailure`, consulte [Manuales de procedimientos `aws:branch` de ejemplo](#branch-runbook-examples).

## Uso de la acción `aws:branch`
<a name="branch-action-explained"></a>

La acción `aws:branch` ofrece las opciones de bifurcación condicional más dinámicas para las automatizaciones. Como se ha indicado anteriormente, esta acción permite que la automatización evalúe varias condiciones en un solo paso y, a continuación, salte a un nuevo paso en función de los resultados de dicha evaluación. La acción `aws:branch` funciona como una instrucción `IF-ELIF-ELSE` en programación.

A continuación, se muestra un ejemplo YAML de un paso `aws:branch`.

```
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      PostProcessing
```

Cuando se especifica la acción `aws:branch` para un paso, se especifican `Choices` que la automatización debe evaluar. La automatización puede evaluar `Choices` según el valor de un parámetro que especificó en la sección `Parameters` del manual de procedimientos. La automatización también puede evaluar `Choices` en función de la salida de un paso anterior.

La automatización evalúa cada elección mediante una expresión booleana. Si la evaluación determina que la primera elección es `true`, la automatización saltará al paso designado para esa elección. Si la evaluación determina que la primera elección es `false`, entonces la automatización evaluará la siguiente elección. Si el paso incluye tres o más `Choices`, la automatización evalúa cada elección en orden secuencial hasta que evalúa una que sea `true`. A continuación, la automatización saltará al paso designado para la elección `true`.

Si ninguna de las `Choices` es `true`, la automatización comprueba si el paso contiene un valor `Default`. Un valor `Default` define un paso al cual la automatización debe saltar si ninguna de las elecciones es `true`. Si no se especifica un valor `Default` para el paso, la automatización procesará el siguiente paso en el manual de procedimientos.

A continuación, se muestra un paso `aws:branch` en YAML llamado **chooseOSfromParameter**. Este paso incluye dos `Choices`: (`NextStep: runWindowsCommand`) y (`NextStep: runLinuxCommand`). La automatización evalúa estas `Choices` a fin de determinar qué comando ejecutar para el sistema operativo adecuado. La `Variable` para cada elección utiliza `{{OSName}}`, que es un parámetro que el autor del manual de procedimientos definió en la sección `Parameters` del manual.

```
mainSteps:
- name: chooseOSfromParameter
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{OSName}}"
      StringEquals: Windows
    - NextStep: runLinuxCommand
      Variable: "{{OSName}}"
      StringEquals: Linux
```

A continuación, se muestra un paso `aws:branch` en YAML llamado **chooseOSfromOutput**. Este paso incluye dos `Choices`: (`NextStep: runPowerShellCommand`) y (`NextStep: runShellCommand`). La automatización evalúa estas `Choices` a fin de determinar qué comando ejecutar para el sistema operativo adecuado. La `Variable` para cada elección utiliza `{{GetInstance.platform}}`, que es la salida de un paso anterior en el manual de procedimientos. En este ejemplo también se incluye una opción llamada `Default`. Si la automatización evalúa ambas `Choices` y ninguna de ellas es `true`, saltará a un paso llamado `PostProcessing`.

```
mainSteps:
- name: chooseOSfromOutput
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      PostProcessing
```

### Creación de un paso `aws:branch` en un manual de procedimientos
<a name="create-branch-action"></a>

Al crear un paso `aws:branch` en un manual de procedimientos, debe definir las `Choices` que la automatización deberá evaluar para determinar a qué paso debe pasar a continuación. Tal y como se ha mencionado anteriormente, las `Choices` se evalúan mediante una expresión booleana. Cada elección debe definir las siguientes opciones:
+ **NextStep**: el siguiente paso en el manual de procedimientos que se debe procesar si la elección designada es `true`.
+ **Variable**: especifique el nombre de un parámetro que se define en la sección `Parameters` del manual de procedimientos, una variable que se define en la sección `Variables` o un objeto de salida de un paso anterior.

  Especifique los valores variables con el siguiente formato.

  `Variable: "{{variable name}}"`

  Especifique los valores de parámetro con el siguiente formato.

  `Variable: "{{parameter name}}"`

  Especifique las variables de objetos de salida con el siguiente formato.

  `Variable: "{{previousStepName.outputName}}"`
**nota**  
La creación de la variable de salida se describe con más detalle en la siguiente sección, [Acerca de la creación de la variable de salida](#branch-action-output).
+ **Operation**: los criterios utilizados para evaluar la elección, como por ejemplo `StringEquals: Linux`. La acción `aws:branch` admite las siguientes operaciones:

**Operaciones de cadena**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + Contiene

**Numeric operations**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**Operación booleana**
  + BooleanEquals
**importante**  
Al crear un manual de procedimientos, el sistema valida cada operación del manual. Si no se admite una operación, el sistema devuelve un error cuando intenta crear el manual de procedimientos.
+ **Default**: define un paso alternativo al que la automatización debe saltar si ninguna de las `Choices` son `true`.
**nota**  
Si no desea especificar un valor `Default`, puede especificar la opción `isEnd`. Si ninguna de las `Choices` es `true` y no se especifica ningún valor `Default`, la automatización se detiene al final del paso.

Utilice las siguientes plantillas para construir el paso `aws:branch` en los manuales de procedimientos. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ YAML ]

```
mainSteps:
- name: step name
  action: aws:branch
  inputs:
    Choices:
    - NextStep: step to jump to if evaluation for this choice is true
      Variable: "{{parameter name or output from previous step}}"
      Operation type: Operation value
    - NextStep: step to jump to if evaluation for this choice is true
      Variable: "{{parameter name or output from previous step}}"
      Operation type: Operation value
    Default:
      step to jump to if all choices are false
```

------
#### [ JSON ]

```
{
   "mainSteps":[
      {
         "name":"a name for the step",
         "action":"aws:branch",
         "inputs":{
            "Choices":[
               {
                  "NextStep":"step to jump to if evaluation for this choice is true",
                  "Variable":"{{parameter name or output from previous step}}",
                  "Operation type":"Operation value"
               },
               {
                  "NextStep":"step to jump to if evaluation for this choice is true",
                  "Variable":"{{parameter name or output from previous step}}",
                  "Operation type":"Operation value"
               }
            ],
            "Default":"step to jump to if all choices are false"
         }
      }
   ]
}
```

------

#### Acerca de la creación de la variable de salida
<a name="branch-action-output"></a>

Para crear una elección `aws:branch` que haga referencia a la salida de un paso anterior, debe identificar el nombre del paso anterior y el nombre del campo de salida. A continuación, combine los nombres del paso y el campo con el siguiente formato.

`Variable: "{{previousStepName.outputName}}"`

Por ejemplo, el primer paso del siguiente ejemplo se denomina `GetInstance`. Y, a continuación, debajo de `outputs`, hay un campo llamado `platform`. En el segundo paso (`ChooseOSforCommands`), el autor quiere hacer referencia a la salida del campo platform como una variable. Para crear la variable, solo tiene que combinar el nombre del paso (GetInstance) y el nombre del campo de salida (platform) para crear `Variable: "{{GetInstance.platform}}"`.

```
mainSteps:
- Name: GetInstance
  action: aws:executeAwsApi
  inputs:
    Service: ssm
    Api: DescribeInstanceInformation
    Filters:
    - Key: InstanceIds
      Values: ["{{ InstanceId }}"]
  outputs:
  - Name: myInstance
    Selector: "$.InstanceInformationList[0].InstanceId"
    Type: String
  - Name: platform
    Selector: "$.InstanceInformationList[0].PlatformType"
    Type: String
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      Sleep
```

En este ejemplo, se muestra cómo se crea *"Variable": "\$1\$1 describeInstance.Platform \$1\$1"* a partir del paso anterior y el resultado.

```
- name: describeInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
  outputs:
  - Name: Platform
    Selector: "$.Reservations[0].Instances[0].Platform"
    Type: String
  nextStep: branchOnInstancePlatform
- name: branchOnInstancePlatform
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runEC2RescueForWindows
      Variable: "{{ describeInstance.Platform }}"
      StringEquals: windows
    Default: runEC2RescueForLinux
```

### Manuales de procedimientos `aws:branch` de ejemplo
<a name="branch-runbook-examples"></a>

A continuación, se muestran algunos ejemplos de manuales de procedimientos que utilizan `aws:branch`.

**Ejemplo 1: uso de `aws:branch` con una variable de salida para ejecutar comandos según el tipo de sistema operativo**

En el primer paso de este ejemplo (`GetInstance`), el autor del manual de procedimientos utiliza la acción `aws:executeAwsApi` para llamar la operación `ssm` `DescribeInstanceInformation` de la API. El autor utiliza esta acción para determinar el tipo de sistema operativo que utiliza una instancia. La acción `aws:executeAwsApi` devuelve el ID de instancia y el tipo de plataforma.

En el segundo paso (`ChooseOSforCommands`), el autor utiliza la acción `aws:branch` con dos `Choices` (`NextStep: runPowerShellCommand`) y (`NextStep: runShellCommand`). La automatización evalúa el sistema operativo de la instancia a través de la salida del paso anterior (`Variable: "{{GetInstance.platform}}"`). La automatización salta a un paso para el sistema operativo designado.

```
---
schemaVersion: '0.3'
assumeRole: "{{AutomationAssumeRole}}"
parameters:
  AutomationAssumeRole:
    default: ""
    type: String
mainSteps:
- name: GetInstance
  action: aws:executeAwsApi
  inputs:
    Service: ssm
    Api: DescribeInstanceInformation
  outputs:
  - Name: myInstance
    Selector: "$.InstanceInformationList[0].InstanceId"
    Type: String
  - Name: platform
    Selector: "$.InstanceInformationList[0].PlatformType"
    Type: String
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      Sleep
- name: runShellCommand
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunShellScript
    InstanceIds:
    - "{{GetInstance.myInstance}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: runPowerShellCommand
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
    - "{{GetInstance.myInstance}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: Sleep
  action: aws:sleep
  inputs:
    Duration: PT3S
```

**Ejemplo 2: Uso de `aws:branch` con una variable de parámetro para ejecutar comandos según el tipo de sistema operativo**

El autor del manual de procedimientos define varias opciones de parámetros al principio del manual, en la sección `parameters`. Un parámetro se llama `OperatingSystemName`. En el primer paso (`ChooseOS`), el autor utiliza la acción `aws:branch` con dos `Choices` (`NextStep: runWindowsCommand`) y (`NextStep: runLinuxCommand`). La variable para estas `Choices` hace referencia a la opción del parámetro especificada en la sección de parámetros (`Variable: "{{OperatingSystemName}}"`). Cuando el usuario ejecuta este manual de procedimientos, especifica un valor en el tiempo de ejecución para `OperatingSystemName`. La automatización utiliza el parámetro de tiempo de ejecución durante la evaluación de `Choices`. La automatización salta a un paso para el sistema operativo designado según el parámetro de tiempo de ejecución especificado para `OperatingSystemName`.

```
---
schemaVersion: '0.3'
assumeRole: "{{AutomationAssumeRole}}"
parameters:
  AutomationAssumeRole:
    default: ""
    type: String
  OperatingSystemName:
    type: String
  LinuxInstanceId:
    type: String
  WindowsInstanceId:
    type: String
mainSteps:
- name: ChooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{OperatingSystemName}}"
      StringEquals: windows
    - NextStep: runLinuxCommand
      Variable: "{{OperatingSystemName}}"
      StringEquals: linux
    Default:
      Sleep
- name: runLinuxCommand
  action: aws:runCommand
  inputs:
    DocumentName: "AWS-RunShellScript"
    InstanceIds:
    - "{{LinuxInstanceId}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: runWindowsCommand
  action: aws:runCommand
  inputs:
    DocumentName: "AWS-RunPowerShellScript"
    InstanceIds:
    - "{{WindowsInstanceId}}"
    Parameters:
      commands:
      - date
  isEnd: true
- name: Sleep
  action: aws:sleep
  inputs:
    Duration: PT3S
```

### Creación de automatizaciones con bifurcación complejas a través de operadores
<a name="branch-operators"></a>

Puede crear automatizaciones con bifurcación complejas mediante el uso de los operadores `And`, `Or` y `Not` en los pasos `aws:branch`.

**El operador “And”**  
Utilice el operador `And` cuando desee que varias variables sean `true` para una elección. En el siguiente ejemplo, la primera elección evalúa si una instancia está en ejecución, `running`, y utiliza el sistema operativo `Windows`. Si la evaluación de *ambas* variables es da como resultado true, la automatización salta al paso `runPowerShellCommand`. Si una o más de las variables es `false`, la automatización evaluará las variables de la segunda elección.

```
mainSteps:
- name: switch2
  action: aws:branch
  inputs:
    Choices:
    - And:
      - Variable: "{{GetInstance.pingStatus}}"
        StringEquals: running
      - Variable: "{{GetInstance.platform}}"
        StringEquals: Windows
      NextStep: runPowerShellCommand

    - And:
      - Variable: "{{GetInstance.pingStatus}}"
        StringEquals: running
      - Variable: "{{GetInstance.platform}}"
        StringEquals: Linux
      NextStep: runShellCommand
    Default:
      sleep3
```

**El operador “Or”**  
Utilice el operador `Or` cuando desee que *cualquiera* de entre varias variables sea verdadera para una elección. En el siguiente ejemplo, la primera elección evalúa si una cadena de parámetro es `Windows` y si la salida de un paso AWS Lambda es verdadera. Si la evaluación determina que *alguna* de estas variables es true, la automatización salta al paso `RunPowerShellCommand`. Si las dos variables son false, la automatización evaluará las variables de la segunda elección.

```
- Or:
  - Variable: "{{parameter1}}"
    StringEquals: Windows
  - Variable: "{{BooleanParam1}}"
    BooleanEquals: true
  NextStep: RunPowershellCommand
- Or:
  - Variable: "{{parameter2}}"
    StringEquals: Linux
  - Variable: "{{BooleanParam2}}"
    BooleanEquals: true
  NextStep: RunShellScript
```

**El operador “Not”**  
Utilice el operador `Not` cuando desee saltar a un paso definido cuando una variable *no* sea verdadera. En el siguiente ejemplo, la primera elección evalúa si una cadena de parámetro es `Not Linux`. Si la evaluación determina que la variable no es Linux, la automatización salta al paso `sleep2`. Si la evaluación de la primera elección determina que *es* Linux, entonces la automatización evaluará la siguiente elección.

```
mainSteps:
- name: switch
  action: aws:branch
  inputs:
    Choices:
    - NextStep: sleep2
      Not:
        Variable: "{{testParam}}"
        StringEquals: Linux
    - NextStep: sleep1
      Variable: "{{testParam}}"
      StringEquals: Windows
    Default:
      sleep3
```

## Ejemplos de cómo usar opciones condicionales
<a name="conditional-examples"></a>

En esta sección, se incluyen diferentes ejemplos de cómo utilizar opciones dinámicas en un manual de procedimientos. Cada ejemplo de esta sección amplía el siguiente manual de procedimientos. Este manual de procedimientos tiene dos acciones. La primera acción se denomina `InstallMsiPackage`. Utiliza la `aws:runCommand` acción para instalar una aplicación en una Windows Server instancia. La segunda acción se denomina `TestInstall`. Utiliza la acción `aws:invokeLambdaFunction` para probar la aplicación instalada si esta se instala correctamente. El paso uno especifica `onFailure: Abort`. Esto significa que, si la aplicación no se instala correctamente, la automatización se detiene antes del paso dos.

**Ejemplo 1: manual de procedimientos con dos acciones lineales**

```
---
schemaVersion: '0.3'
description: Install MSI package and run validation.
assumeRole: "{{automationAssumeRole}}"
parameters:
  automationAssumeRole:
    type: String
    description: "(Required) Assume role."
  packageName:
    type: String
    description: "(Required) MSI package to be installed."
  instanceIds:
    type: String
    description: "(Required) Comma separated list of instances."
mainSteps:
- name: InstallMsiPackage
  action: aws:runCommand
  maxAttempts: 2
  onFailure: Abort
  inputs:
    InstanceIds:
    - "{{instanceIds}}"
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - msiexec /i {{packageName}}
- name: TestInstall
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: TestLambdaFunction
...
```

**Creación de una automatización dinámica que salta a diferentes pasos con la opción `onFailure`**

En el siguiente ejemplo, se utilizan las opciones `onFailure: step:step name`, `nextStep` e `isEnd` para crear una automatización dinámica. En este ejemplo, si la acción `InstallMsiPackage` produce un error, la automatización salta a una acción denominada *PostFailure* (`onFailure: step:PostFailure`) para ejecutar una función de AWS Lambda con la que se realiza alguna acción en caso de que se produzca un error durante la instalación. Si la instalación se realiza correctamente, la automatización salta a la acción TestInstall (`nextStep: TestInstall`). Tanto el paso `TestInstall` como el paso `PostFailure` utilizan la opción `isEnd` (`isEnd: true`) de modo que la automatización se finaliza cuando se haya completado alguno de esos pasos.

**nota**  
Uso de la opción `isEnd` en el último paso de la sección `mainSteps` es opcional. Si el último paso no salta a otros pasos, la automatización se detiene después de ejecutar la acción en el último paso.

**Ejemplo 2: una automatización dinámica que salta a diferentes pasos**

```
mainSteps
- name: InstallMsiPackage
  action: aws:runCommand
  onFailure: step:PostFailure
  maxAttempts: 2
  inputs:
    InstanceIds:
    - "{{instanceIds}}"
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - msiexec /i {{packageName}}
  nextStep: TestInstall
- name: TestInstall
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: TestLambdaFunction
  isEnd: true
- name: PostFailure
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: PostFailureRecoveryLambdaFunction
  isEnd: true
...
```

**nota**  
Antes de procesar un manual de procedimientos, el sistema verifica que no cree un bucle infinito. Si se detecta un bucle infinito, Automation devuelve un error y un rastro en forma de círculo que muestra los pasos que crean el bucle.

**Creación de una automatización dinámica que define pasos críticos**

Puede especificar que un paso es de importancia crítica para el éxito general de la automatización. Si un paso crítico presenta error, Automation informa que el estado de la automatización es `Failed`, incluso aunque uno o más pasos se hayan ejecutado correctamente. En el siguiente ejemplo, se indica que debe ejecutarse el paso *VerifyDependencies* si se produce un error en el paso *InstallMsiPackage* (`onFailure: step:VerifyDependencies`). También se indica que el paso `InstallMsiPackage` no es crítico (`isCritical: false`). En este ejemplo, si la aplicación no se instala correctamente, la Automation procesa el paso `VerifyDependencies` para determinar si faltan una o varias dependencias, lo que ha provocado que la aplicación no se instale. 

**Ejemplo 3: definición de pasos críticos para la automatización **

```
---
name: InstallMsiPackage
action: aws:runCommand
onFailure: step:VerifyDependencies
isCritical: false
maxAttempts: 2
inputs:
  InstanceIds:
  - "{{instanceIds}}"
  DocumentName: AWS-RunPowerShellScript
  Parameters:
    commands:
    - msiexec /i {{packageName}}
nextStep: TestPackage
...
```

# Uso de salidas de acción como entradas
<a name="automation-action-outputs-inputs"></a>

Varias acciones de automatización devuelven salidas predefinidas. Puede pasar estas salidas como entradas a pasos posteriores de su manual de procedimientos utilizando el formato `{{stepName.outputName}}`. También puede definir salidas personalizadas para las acciones de automatización en sus manuales de procedimientos. Esto le permite ejecutar scripts o invocar operaciones API para otros Servicios de AWS una vez para que pueda reutilizar los valores como entradas en acciones posteriores. Los tipos de parámetros de los manuales de procedimientos son estáticos. Esto significa que el tipo de parámetro no se puede cambiar después de definirlo. Para definir la salida de un paso, proporcione los siguientes campos:
+ Nombre: (Requeridas) El nombre de la salida que se utiliza para hacer referencia al valor de salida en los pasos posteriores.
+ Selector: (Requerido) La expresión JSONPath que se utiliza para determinar el valor de salida.
+ Tipo: (Opcional) El tipo de datos del valor devuelto por el campo selector. Los tipo de valores válidos son `String`, `Integer`, `Boolean`, `StringList`, `StringMap`, `MapList`. El valor predeterminado es `String`.

Si el valor de una salida no coincide con el tipo de datos que especificó, la automatización intentará convertir el tipo de datos. Por ejemplo, si el valor devuelto es un `Integer`, pero el valor `Type` especificado es `String`, el valor de salida final es un valor `String`. Las siguientes conversiones de tipos son compatibles:
+ Los valores `String` se pueden convertir en `StringList`, `Integer` y `Boolean`.
+ Los valores `Integer` se pueden convertir en `String` y `StringList`.
+ Los valores `Boolean` se pueden convertir en `String` y `StringList`.
+ Los valores `StringList`, `IntegerList`, o `BooleanList` que contienen un elemento se pueden convertir en `String`, `Integer`, o `Boolean`.

Cuando se utilizan parámetros con acciones de automatización, el tipo de parámetro no se puede cambiar dinámicamente dentro de la entrada de una acción.

Este es un ejemplo de un manual de procedimientos que demuestra cómo definir salidas de acción y hacer referencia al valor como entrada para una acción posterior. El manual de procedimientos hace lo siguiente:
+ Utiliza la acción `aws:executeAwsApi` para llamar a la operación de la API de Amazon EC2 DescribeImages a fin de obtener el nombre de una AMI de Windows Server 2016 específica. Da como salida el ID de la imagen como `ImageId`.
+ Utiliza la acción `aws:executeAwsApi` para llamar a la operación de la API de Amazon EC2 RunInstances a fin de lanzar una instancia que utiliza el `ImageId` del paso anterior. Da como salida el ID de la instancia como `InstanceId`.
+ Utiliza la acción ` aws:waitForAwsResourceProperty` para sondear la operación de API de Amazon EC2 DescribeInstanceStatus a fin de esperar hasta que la instancia alcance el estado `running`. La acción agota el tiempo de espera en 60 segundos. El paso agota el tiempo de espera si el estado de la instancia no consigue alcanzar el estado `running` después de 60 segundos de sondeo.
+ Usa la acción `aws:assertAwsResourceProperty` para llamar a la operación de la API de Amazon EC2 `DescribeInstanceStatus` y confirmar que la instancia se encuentra en estado `running`. El paso presenta un error si el estado de la instancia no es `running`.

```
---
description: Sample runbook using AWS API operations
schemaVersion: '0.3'
assumeRole: "{{ AutomationAssumeRole }}"
parameters:
  AutomationAssumeRole:
    type: String
    description: "(Optional) The ARN of the role that allows Automation to perform the actions on your behalf."
    default: ''
  ImageName:
    type: String
    description: "(Optional) Image Name to launch EC2 instance with."
    default: "Windows_Server-2022-English-Full-Base*"
mainSteps:
- name: getImageId
  action: aws:executeAwsApi
  inputs:
    Service: ec2
    Api: DescribeImages
    Filters:  
    - Name: "name"
      Values: 
      - "{{ ImageName }}"
  outputs:
  - Name: ImageId
    Selector: "$.Images[0].ImageId"
    Type: "String"
- name: launchOneInstance
  action: aws:executeAwsApi
  inputs:
    Service: ec2
    Api: RunInstances
    ImageId: "{{ getImageId.ImageId }}"
    MaxCount: 1
    MinCount: 1
  outputs:
  - Name: InstanceId
    Selector: "$.Instances[0].InstanceId"
    Type: "String"
- name: waitUntilInstanceStateRunning
  action: aws:waitForAwsResourceProperty
  timeoutSeconds: 60
  inputs:
    Service: ec2
    Api: DescribeInstanceStatus
    InstanceIds:
    - "{{ launchOneInstance.InstanceId }}"
    PropertySelector: "$.InstanceStatuses[0].InstanceState.Name"
    DesiredValues:
    - running
- name: assertInstanceStateRunning
  action: aws:assertAwsResourceProperty
  inputs:
    Service: ec2
    Api: DescribeInstanceStatus
    InstanceIds:
    - "{{ launchOneInstance.InstanceId }}"
    PropertySelector: "$.InstanceStatuses[0].InstanceState.Name"
    DesiredValues:
    - running
outputs:
- "launchOneInstance.InstanceId"
...
```

Cada una de las acciones de automatización descritas anteriormente le permiten llamar una operación de la API determinada mediante la especificación del espacio de nombres de servicio, el nombre de la operación de la API, los parámetros de entrada y los parámetros de salida. Las entradas se definen con la operación de la API que elija. Puede ver las operaciones de la API (también llamadas métodos) si elige un servicio en el panel de navegación ubicado a la izquierda, en la siguiente página: [Services Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). Elija un método en la sección **Cliente** para el servicio que desea invocar. Por ejemplo, todas las operaciones de la API (los métodos) para Amazon Relational Database Service (Amazon RDS) se indican en la siguiente página: [métodos de Amazon RDS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html).

Puede ver el esquema para cada acción de automatización en las siguientes ubicaciones:
+ [`aws:assertAwsResourceProperty`: confirmar el estado de un recurso o un evento de AWS](automation-action-assertAwsResourceProperty.md)
+ [`aws:executeAwsApi`: llamar y ejecutar operaciones de la API de AWS](automation-action-executeAwsApi.md)
+ [`aws:waitForAwsResourceProperty`: esperar una propiedad de recurso de AWS](automation-action-waitForAwsResourceProperty.md)

Los esquemas incluyen descripciones de los campos obligatorios para utilizar cada acción.

**Uso de los campos Selector/PropertySelector**  
Cada acción de Automation requiere que especifique una salida `Selector` (para `aws:executeAwsApi`) o un `PropertySelector` (para `aws:assertAwsResourceProperty` y `aws:waitForAwsResourceProperty`). Estos campos se utilizan para procesar la respuesta JSON desde una operación de la API de AWS. Estos campos utilizan la sintaxis de JSONPath.

A continuación, se muestra un ejemplo que tiene como objetivo ilustrar este concepto para la acción `aws:executeAwsAPi`.

```
---
mainSteps:
- name: getImageId
  action: aws:executeAwsApi
  inputs:
    Service: ec2
    Api: DescribeImages
    Filters:  
      - Name: "name"
        Values: 
          - "{{ ImageName }}"
  outputs:
    - Name: ImageId
      Selector: "$.Images[0].ImageId"
      Type: "String"
...
```

En `aws:executeAwsApi` del paso `getImageId`, la automatización invoca la operación de la API `DescribeImages` y recibe una respuesta de `ec2`. A continuación, la automatización aplica `Selector - "$.Images[0].ImageId"` a la respuesta de la API y asigna el valor seleccionado a la variable `ImageId` de salida. Otros pasos de la misma automatización pueden utilizar el valor de `ImageId` especificando `"{{ getImageId.ImageId }}"`.

A continuación, se muestra un ejemplo que tiene como objetivo ilustrar este concepto para la acción `aws:waitForAwsResourceProperty`.

```
---
- name: waitUntilInstanceStateRunning
  action: aws:waitForAwsResourceProperty
  # timeout is strongly encouraged for action - aws:waitForAwsResourceProperty
  timeoutSeconds: 60
  inputs:
    Service: ec2
    Api: DescribeInstanceStatus
    InstanceIds:
    - "{{ launchOneInstance.InstanceId }}"
    PropertySelector: "$.InstanceStatuses[0].InstanceState.Name"
    DesiredValues:
    - running
...
```

En `aws:waitForAwsResourceProperty` del paso `waitUntilInstanceStateRunning`, la automatización invoca la operación de la API `DescribeInstanceStatus` y recibe una respuesta de `ec2`. La automatización aplica `PropertySelector - "$.InstanceStatuses[0].InstanceState.Name"` a la respuesta y comprueba si el valor devuelto especificado coincide con un valor en la lista `DesiredValues` (en este caso, `running`). El paso repite el proceso hasta que la respuesta devuelve un estado de instancia de `running`. 

## Uso de JSONPath en un manual de procedimientos
<a name="automation-action-json-path"></a>

Una expresión JSONPath es una cadena que comienza con “\$1” que se utiliza para seleccionar uno de varios componentes dentro de un elemento JSON. La siguiente lista incluye información sobre los operadores de JSONPath que Automatización de Systems Manager admite:
+ **Elemento secundario con notación de puntos (.)**: utilizar con un objeto JSON. Este operador selecciona el valor de una clave específica.
+ **Análisis profundo (..)**: utilizar con un elemento JSON. Este operador analiza el nivel de elemento JSON por nivel y selecciona una lista de valores con la clave específica. El tipo de retorno de este operador siempre es una matriz JSON. En el contexto de un tipo de salida de la acción de automatización, el operador puede ser StringList o MapList.
+ **Índice de matriz ([ ])**: utilizar con una matriz JSON. Este operador obtiene el valor de un índice específico.
+ **Filtro ([?(*expresión*)])**: se usa con una matriz JSON. Este operador filtra los valores de la matriz JSON que coinciden con los criterios definidos en la expresión de filtro. Las expresiones de filtro solo pueden utilizar los siguientes operadores: ==,\$1 =, >, <, >= o <=. La combinación de varias expresiones de filtro con AND (&&) u OR (\$1\$1) no es compatible. El tipo de retorno de este operador siempre es una matriz JSON. 

Para comprender mejor los operadores de JSONPath, revise la siguiente respuesta de JSON de la operación de la API de EC2 `DescribeInstances`. Debajo de esta respuesta se muestran algunos ejemplos con resultados diferentes si se aplican distintas expresiones JSONPath a la respuesta de la operación de la API `DescribeInstances`.

```
{
    "NextToken": "abcdefg",
    "Reservations": [
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-abcd12345678910",
            "Instances": [
                {
                    "ImageId": "ami-12345678",
                    "BlockDeviceMappings": [
                        {
                            "Ebs": {
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-000000000000"
                            },
                            "DeviceName": "/dev/xvda"
                        }
                    ],
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    }
                }
            ],
            "Groups": []
        },
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-12345678910abcd",
            "Instances": [
                {
                    "ImageId": "ami-12345678",
                    "BlockDeviceMappings": [
                        {
                            "Ebs": {
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-111111111111"
                            },
                            "DeviceName": "/dev/xvda"
                        }
                    ],
                    "State": {
                        "Code": 80,
                        "Name": "stopped"
                    }
                }
            ],
            "Groups": []
        }
    ]
}
```

**Ejemplo de JSONPath 1: obtener una cadena específica de una respuesta de JSON**

```
JSONPath: 
$.Reservations[0].Instances[0].ImageId 

Returns:
"ami-12345678"

Type: String
```

**Ejemplo de JSONPath 2: obtener un booleano específico de una respuesta de JSON**

```
JSONPath:
$.Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.DeleteOnTermination
        
Returns:
true

Type: Boolean
```

**Ejemplo de JSONPath 3: obtener un entero específico de una respuesta de JSON**

```
JSONPath:
$.Reservations[0].Instances[0].State.Code
        
Returns:
16

Type: Integer
```

**Ejemplo de JSONPath 4: analizar en profundidad una respuesta de JSON y, a continuación, obtener todos los valores para VolumeId como una StringList** 

```
JSONPath:
$.Reservations..BlockDeviceMappings..VolumeId
        
Returns:
[
   "vol-000000000000",
   "vol-111111111111"
]

Type: StringList
```

**Ejemplo de JSONPath 5: obtener un objeto BlockDeviceMappings como un StringMap**

```
JSONPath:
$.Reservations[0].Instances[0].BlockDeviceMappings[0]
        
Returns:
{
   "Ebs" : {
      "DeleteOnTermination" : true,
      "Status" : "attached",
      "VolumeId" : "vol-000000000000"
   },
   "DeviceName" : "/dev/xvda"
}

Type: StringMap
```

**Ejemplo de JSONPath 6: analizar en profundidad una respuesta de JSON y, a continuación, obtener todos los objetos de estado como una MapList**

```
JSONPath:
$.Reservations..Instances..State 
    
Returns:
[
   {
      "Code" : 16,
      "Name" : "running"
   },
   {
      "Code" : 80,
      "Name" : "stopped"
   }
]

Type: MapList
```

**Ejemplo 7 de JSONPath: filtro para instancias en el `running` estado**

```
JSONPath:
$.Reservations..Instances[?(@.State.Name == 'running')]

Returns:
[
  {
    "ImageId": "ami-12345678",
    "BlockDeviceMappings": [
      {
        "Ebs": {
          "DeleteOnTermination": true,
          "Status": "attached",
          "VolumeId": "vol-000000000000"
        },
        "DeviceName": "/dev/xvda"
      }
    ],
    "State": {
      "Code": 16,
      "Name": "running"
    }
  }
]

Type: MapList
```

**Ejemplo 8 de JSONPath: devuelve el `ImageId` de instancias que no están en el `running` estado**

```
JSONPath:
$.Reservations..Instances[?(@.State.Name != 'running')].ImageId

Returns:
[
  "ami-12345678"
]

Type: StringList | String
```

# Crear integraciones webhook para Automation
<a name="creating-webhook-integrations"></a>

Para enviar mensajes mediante manuales de procedimientos durante una automatización, cree una integración. Las integraciones se pueden invocar durante una automatización mediante la acción `aws:invokeWebhook` en su manual de procedimientos. Si aún no ha creado un manual de procedimientos, consulte [Creación de webhooks para integraciones](#creating-webhooks). Para obtener más información acerca de la acción `aws:invokeWebhook`, consulte [`aws:invokeWebhook`: invocar una integración de webhook de Automation](invoke-webhook.md).

Como se muestra en los siguientes procedimientos, puede crear una integración mediante la consola de Automatización de Systems Manager o su herramienta de la línea de comandos preferida. 

## Creación de integraciones (consola)
<a name="creating-integrations-console"></a>

**Para crear una integración para Automation (consola)**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Elija la pestaña **Integrations** (Integraciones).

1. Seleccione **Add integration** (Agregar integración) y elija **Webhook**.

1. Ingrese los valores obligatorios y los valores opcionales que desee incluir para la integración.

1. Elija **Add** (Agregar) para crear la integración.

## Creación de integraciones (línea de comandos)
<a name="creating-integrations-commandline"></a>

Para crear una integración mediante herramientas de la línea de comandos, debe crear el parámetro `SecureString` obligatorio para una integración. Automatización utiliza un espacio de nombres reservado en Parameter Store, una herramienta de Systems Manager, para almacenar información sobre su integración. Si crea una integración mediante la Consola de administración de AWS, Automation se encarga de este proceso por usted. Después del espacio de nombres, debe especificar el tipo de integración que desea crear y, a continuación, el nombre de la integración. Actualmente, Automation admite la integración de tipos `webhook`.

Los campos admitidos para las integraciones de tipo `webhook` son las siguientes:
+ Descripción
+ headers
+ payload
+ URL

**Antes de empezar**  
Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI) o las Herramientas de AWS para PowerShell. Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

**Para crear una integración para Automation (línea de comandos)**
+ Ejecute los siguientes comandos para crear el parámetro `SecureString` para una integración. Reemplace cada *example resource placeholder* con su propia información. El espacio de nombres `/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/` está reservado en Parameter Store para las integraciones. El nombre del parámetro debe utilizar este espacio de nombres seguido del nombre de la integración. Por ejemplo, `/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration`.

------
#### [ Linux & macOS ]

  ```
  aws ssm put-parameter \
      --name "/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration" \
      --type "SecureString" \
      --data-type "aws:ssm:integration" \
      --value '{"description": "My first webhook integration for Automation.", "url": "myWebHookURL"}'
  ```

------
#### [ Windows ]

  ```
  aws ssm put-parameter ^
      --name "/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration" ^
      --type "SecureString" ^
      --data-type "aws:ssm:integration" ^
      --value  "{\"description\":\"My first webhook integration for Automation.\",\"url\":\"myWebHookURL\"}"
  ```

------
#### [ PowerShell ]

  ```
  Write-SSMParameter `
      -Name "/d9d01087-4a3f-49e0-b0b4-d568d7826553/ssm/integrations/webhook/myWebhookIntegration" `
      -Type "SecureString"
      -DataType "aws:ssm:integration"
      -Value '{"description": "My first webhook integration for Automation.", "url": "myWebHookURL"}'
  ```

------

## Creación de webhooks para integraciones
<a name="creating-webhooks"></a>

Al crear webhooks con su proveedor, tenga en cuenta lo siguiente:
+ El protocolo debe ser HTTPS.
+ Se admiten encabezados de solicitud personalizados.
+ Se puede especificar un cuerpo de la solicitud predeterminado.
+ El cuerpo de la solicitud predeterminado se puede anular cuando se invoca una integración mediante la acción `aws:invokeWebhook`.

# Administración de los tiempos de espera en los manuales de procedimientos
<a name="automation-handling-timeouts"></a>

Todas las acciones de automatización comparten la propiedad `timeoutSeconds`. Esta propiedad se puede utilizar para especificar el valor de tiempo de espera de la ejecución de una acción. Además, se puede modificar el modo en que afecta a la automatización y al estado general de la ejecución el hecho de que se agote dicho tiempo para una acción. Para ello, puede definir también las propiedades compartidas `onFailure` y `isCritical` de una acción.

Por ejemplo, dependiendo del caso de uso, si se agota el tiempo de espera de una acción, tal vez prefiera que la automatización continúe con una acción diferente y que no afecte a su estado general. En este ejemplo, va a especificar con la propiedad `timeoutSeconds` el tiempo que debe esperarse antes de que se agote el tiempo de espera de la acción. A continuación, especifica la acción o el paso al que la automatización debe pasar si se agota el tiempo de espera. Especifique un valor utilizando el formato `step:step name` en la propiedad `onFailure` en lugar del valor predeterminado de `Abort`. De forma predeterminada, si se agota el tiempo de espera de una acción, el estado de ejecución de la automatización será `Timed Out`. Para evitar que el agotamiento del tiempo de espera afecte el estado de ejecución de la automatización, especifique `false` en la propiedad `isCritical`.

En el ejemplo siguiente, se muestra cómo se definen las propiedades compartidas de una acción que se describe en este escenario.

------
#### [ YAML ]

```
- name: verifyImageAvailability
  action: 'aws:waitForAwsResourceProperty'
  timeoutSeconds: 600
  isCritical: false
  onFailure: 'step:getCurrentImageState'
  inputs:
    Service: ec2
    Api: DescribeImages
    ImageIds:
      - '{{ createImage.newImageId }}'
    PropertySelector: '$.Images[0].State'
    DesiredValues:
      - available
  nextStep: copyImage
```

------
#### [ JSON ]

```
{
    "name": "verifyImageAvailability",
    "action": "aws:waitForAwsResourceProperty",
    "timeoutSeconds": 600,
    "isCritical": false,
    "onFailure": "step:getCurrentImageState",
    "inputs": {
        "Service": "ec2",
        "Api": "DescribeImages",
        "ImageIds": [
            "{{ createImage.newImageId }}"
        ],
        "PropertySelector": "$.Images[0].State",
        "DesiredValues": [
            "available"
        ]
    },
    "nextStep": "copyImage"
}
```

------

Para obtener más información acerca de las propiedades que comparten todas las acciones de automatización, consulte [Propiedades compartidas por todas las acciones](automation-actions.md#automation-common).

# Referencia del manual de procedimientos de Automatización de Systems Manager
<a name="automation-documents-reference"></a>

Para ayudarlo a empezar rápidamente, AWS Systems Manager proporciona manuales de procedimientos predefinidos. Amazon Web Services, AWS Support y AWS Config mantienen estos manuales de procedimientos. La referencia del manual de procedimientos describe cada uno de los manuales predefinidos que proporcionan Systems Manager, Soporte y AWS Config. Para obtener más información, consulte [Referencia del manual de procedimientos de Automatización de Systems Manager](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide).

# Tutoriales
<a name="automation-tutorials"></a>

Los siguientes tutoriales le serán de ayuda para utilizar Automation de AWS Systems Manager para abordar casos de uso comunes. Estos tutoriales demuestran cómo usar sus propios manuales de procedimientos, manuales de procedimientos predefinidos proporcionados por Automatización y otras herramientas de Systems Manager con otros Servicios de AWS.

**Contents**
+ [Actualización de AMIs](automation-tutorial-update-ami.md)
  + [Actualizar una AMI de Linux](automation-tutorial-update-patch-linux-ami.md)
  + [Actualizar una AMI (AWS CLI) de Linux](automation-tutorial-update-ami.md#update-patch-linux-ami-cli)
  + [Actualización de un Windows Server AMI](automation-tutorial-update-patch-windows-ami.md)
  + [Actualice un golden AMI mediante la Automation, AWS Lambda, y Parameter Store](automation-tutorial-update-patch-golden-ami.md)
    + [Tarea 1: crear un parámetro en Systems Manager Parameter Store](automation-tutorial-update-patch-golden-ami.md#create-parameter-ami)
    + [Tarea 2: crear un rol de IAM para AWS Lambda](automation-tutorial-update-patch-golden-ami.md#create-lambda-role)
    + [Tarea 3: crear una función de AWS Lambda](automation-tutorial-update-patch-golden-ami.md#create-lambda-function)
    + [Tarea 4: crear un manual de procedimientos y aplicar revisiones a la AMI](automation-tutorial-update-patch-golden-ami.md#create-custom-ami-update-runbook)
  + [Actualización de las AMIs mediante Automatización y Jenkins](automation-tutorial-update-patch-ami-jenkins-integration.md)
  + [Actualización de AMIs para grupos de escalado automático](automation-tutorial-update-patch-windows-ami-autoscaling.md)
    + [Crear el manual de procedimientos **PatchAMIAndUpdateASG**](automation-tutorial-update-patch-windows-ami-autoscaling.md#create-autoscaling-update-runbook)
+ [Uso de los manuales de procedimientos de autoservicio de AWS Support](automation-tutorial-support-runbooks.md)
  + [Ejecutar la herramienta EC2Rescue en instancias inaccesibles](automation-ec2rescue.md)
    + [Funcionamiento](automation-ec2rescue.md#automation-ec2rescue-how)
    + [Antes de empezar](automation-ec2rescue.md#automation-ec2rescue-begin)
      + [Concesión de permisos `AWSSupport-EC2Rescue` para realizar acciones en las instancias](automation-ec2rescue.md#automation-ec2rescue-access)
        + [Concesión de permisos mediante políticas de IAM](automation-ec2rescue.md#automation-ec2rescue-access-iam)
        + [Concesión de permisos mediante una plantilla de CloudFormation](automation-ec2rescue.md#automation-ec2rescue-access-cfn)
    + [Ejecución de Automation](automation-ec2rescue.md#automation-ec2rescue-executing)
  + [Restablecimiento de contraseñas y claves de SSH en instancias EC2](automation-ec2reset.md)
    + [Funcionamiento](automation-ec2reset.md#automation-ec2reset-how)
    + [Antes de empezar](automation-ec2reset.md#automation-ec2reset-begin)
      + [Concesión de permisos a AWSSupport-EC2Rescue para realizar acciones en las instancias](automation-ec2reset.md#automation-ec2reset-access)
        + [Concesión de permisos mediante políticas de IAM](automation-ec2reset.md#automation-ec2reset-access-iam)
        + [Concesión de permisos mediante una plantilla de CloudFormation](automation-ec2reset.md#automation-ec2reset-access-cfn)
    + [Ejecución de Automation](automation-ec2reset.md#automation-ec2reset-executing)
+ [Transferir datos a Automatización usando transformadores de entrada](automation-tutorial-eventbridge-input-transformers.md)

# Actualización de AMIs
<a name="automation-tutorial-update-ami"></a>

Los siguientes tutoriales explican cómo actualizar Amazon Machine Image (AMIs) para incluir las revisiones más recientes.

**Topics**
+ [Actualizar una AMI de Linux](automation-tutorial-update-patch-linux-ami.md)
+ [Actualizar una AMI (AWS CLI) de Linux](#update-patch-linux-ami-cli)
+ [Actualización de un Windows Server AMI](automation-tutorial-update-patch-windows-ami.md)
+ [Actualice un golden AMI mediante la Automation, AWS Lambda, y Parameter Store](automation-tutorial-update-patch-golden-ami.md)
+ [Actualización de las AMIs mediante Automatización y Jenkins](automation-tutorial-update-patch-ami-jenkins-integration.md)
+ [Actualización de AMIs para grupos de escalado automático](automation-tutorial-update-patch-windows-ami-autoscaling.md)

# Actualizar una AMI de Linux
<a name="automation-tutorial-update-patch-linux-ami"></a>

Este tutorial de Automatización de Systems Manager le muestra cómo utilizar la consola o AWS CLI y el manual de procedimientos de `AWS-UpdateLinuxAmi` para actualizar una AMI de Linux con las revisiones más recientes de los paquetes que especifique. Automatización es una herramienta de AWS Systems Manager. El manual de procedimientos `AWS-UpdateLinuxAmi` también automatiza la instalación de paquetes y configuraciones adicionales que sean específicos del sitio. Puede actualizar diversas distribuciones de Linux con esta explicación, incluidas Ubuntu Server, Red Hat Enterprise Linux (RHEL) o Amazon Linux AMIs. Para obtener una lista completa de las versiones de Linux compatibles, consulte [Patch ManagerRequisitos previos de](patch-manager-prerequisites.md).

El manual de procedimientos de `AWS-UpdateLinuxAmi` le permite automatizar las tareas de mantenimiento de imágenes sin tener que crear el manual de procedimientos en JSON o YAML. Puede utilizar el manual de procedimientos `AWS-UpdateLinuxAmi` para realizar los siguientes tipos de tareas.
+ Actualice todos los paquetes de distribución y el software de Amazon en una Red Hat Enterprise Linux de Amazon Linux o Ubuntu Server Amazon Machine Image (AMI). Este es el comportamiento predeterminado del manual de procedimientos.
+ Instale AWS Systems Manager SSM Agent en una imagen existente para habilitar las herramientas de Systems Manager, como la ejecución remota de comandos mediante AWS Systems Manager Run Command o la recopilación de inventario de software con Inventario.
+ Instalar paquetes de software adicionales.

**Antes de empezar**  
Antes de empezar a trabajar con los manuales de procedimientos, configure los roles y, opcionalmente, EventBridge para Automation. Para obtener más información, consulte [Configuración de Automation](automation-setup.md). Esta explicación también requiere que especifique el nombre de un perfil de instancia de AWS Identity and Access Management (IAM). Para obtener más información sobre cómo crear un perfil de instancia de IAM, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md).

El manual de procedimientos `AWS-UpdateLinuxAmi` acepta los siguientes parámetros de entrada.


****  

| Parámetro | Tipo | Descripción | 
| --- | --- | --- | 
|  SourceAmiId  |  Cadena  |  (Obligatorio) ID de AMI de origen.  | 
|  IamInstanceProfileName  |  Cadena  |  (Obligatorio) Nombre del rol de perfil de instancia de IAM que ha creado en [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md). El rol de perfil de instancia concede permiso a Automation para que realice acciones en sus instancias, como ejecutar comandos o iniciar y detener servicios. El manual de procedimientos utiliza únicamente el nombre del rol de perfil de instancia. Si especifica el nombre de recurso de Amazon (ARN), se produce un error en la automatización.  | 
|  AutomationAssumeRole  |  Cadena  |  (Obligatorio) El nombre del rol de servicio de IAM que ha creado en [Configuración de Automation](automation-setup.md). El rol de servicio (también denominado rol de asunción) concede permiso a Automation para asumir el rol de IAM y realizar acciones en su nombre. Por ejemplo, el rol de servicio permite a Automation crear una AMI nueva al ejecutar la acción `aws:createImage` en un manual de procedimientos. Para este parámetro, debe especificarse el ARN completo.  | 
|  TargetAmiName  |  Cadena  |  (Opcional) El nombre de la nueva AMI después de que se cree. El nombre predeterminado es una cadena generada por el sistema que incluye el ID de la AMI de origen, así como la hora y la fecha de creación.  | 
|  InstanceType  |  Cadena  |  (Opcional) El tipo de instancia que se lanzará como el host de espacio de trabajo. Los tipos de instancia varían según la región. El tipo predeterminado es t2.micro.  | 
|  PreUpdateScript  |  Cadena  |  (Opcional) La URL de un script que se ejecutará antes de que se apliquen las actualizaciones. El valor predeterminado (\$1"none\$1") es no ejecutar un script.  | 
|  PostUpdateScript  |  Cadena  |  (Opcional) La URL de un script que se ejecutará después de que se apliquen las actualizaciones de paquete. El valor predeterminado (\$1"none\$1") es no ejecutar un script.  | 
|  IncludePackages  |  Cadena  |  (Opcional) Actualizar solo estos paquetes designados. De forma predeterminada (\$1"all\$1"), se aplican todas las actualizaciones disponibles.  | 
|  ExcludePackages  |  Cadena  |  (Opcional) Nombres de los paquetes a los que no se aplicarán las actualizaciones, en todas las condiciones. De forma predeterminada (\$1"none\$1"), no se excluye ningún paquete.  | 

**Pasos de Automation**  
El manual de procedimientos `AWS-UpdateLinuxAmi` incluye las siguientes acciones de automatización de forma predeterminada.

**Paso 1: launchInstance (acción `aws:runInstances`) **  
En este paso, se lanza una instancia con los datos de usuario de Amazon Elastic Compute Cloud (Amazon EC2) y un rol de perfil de instancia de IAM. Los datos de usuario instalan el SSM Agent adecuado en función del sistema operativo. La instalación del SSM Agent le permite utilizar herramientas de Systems Manager, como Run Command, State Manager e Inventario.

**Paso 2: updateOSSoftware (acción `aws:runCommand`) **  
Este paso ejecuta los siguientes comandos en la instancia lanzada:  
+ Descarga un script de actualización de Amazon S3.
+ Ejecuta un script de preactualización opcional.
+ Actualiza los paquetes de distribución y el software de Amazon.
+ Ejecuta un script de posactualización opcional.
El registro de ejecución se almacena en la carpeta /tmp para que el usuario la consulte más tarde.  
Si desea actualizar un conjunto específico de paquetes, puede proporcionar la lista utilizando el parámetro `IncludePackages`. Cuando se proporciona, el sistema intenta actualizar únicamente estos paquetes y sus dependencias. No se realizan otras actualizaciones. De forma predeterminada, cuando no se especifica ningún paquete de *inclusión*, el programa actualiza todos los paquetes disponibles.  
Si desea excluir la actualización de un conjunto específico de paquetes, puede proporcionar la lista al parámetro `ExcludePackages`. Si se proporciona, estos paquetes permanecen en su versión actual, independientemente de otras opciones especificadas. De forma predeterminada, cuando no se especifica ningún paquete de *exclusión*, no se excluye ningún paquete.

**Paso 3: stopInstance (acción `aws:changeInstanceState`)**  
Este paso detiene la instancia actualizada.

**Paso 4: createImage (acción `aws:createImage`) **  
Este paso crea una AMI con un nombre descriptivo que se enlaza con ID de origen y la hora de creación. Por ejemplo: “AMI generada con EC2 Automation a la(s) \$1\$1global:DATE\$1TIME\$1\$1 a partir de \$1\$1SourceAmiId\$1\$1” donde DATE\$1TIME y SourceID representan variables de Automation.

**Paso 5: terminateInstance (acción `aws:changeInstanceState`) **  
Este paso limpia la automatización con la terminación de la instancia en ejecución.

**Output**  
La automatización devuelve el ID de la AMI nueva como salida.

**nota**  
De forma predeterminada, cuando Automation ejecuta el manual de procedimientos `AWS-UpdateLinuxAmi`, el sistema crea una instancia temporal en la VPC predeterminada (172.30.0.0/16). Si ha eliminado la VPC predeterminada, recibirá el siguiente error:  
`VPC not defined 400`  
Para solucionar este problema, debe generar una copia del manual de procedimientos `AWS-UpdateLinuxAmi` y especificar un ID de subred. Para obtener más información, consulte [VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc).

**Para crear una AMI con revisiones mediante Automation (AWS Systems Manager)**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Elija **Ejecutar automatización**.

1. En la lista **Automation document** (Documento de Automation), elija `AWS-UpdateLinuxAmi`.

1. En la sección **Document details (Detalles del documento)**, compruebe que el valor de **Document version (Versión del documento)** es **Default version at runtime (Versión predeterminada en tiempo de ejecución)**.

1. Elija **Siguiente**.

1. En la sección **Execution mode (Modo de ejecución)**, seleccione **Simple Execution (Ejecución sencilla)**.

1. En la sección **Input parameters** (Parámetros de entrada), ingrese la información que ha recopilado en la sección **Before you begin** (Antes de empezar).

1. Elija **Ejecutar**. La consola muestra el estado de la ejecución de Automation.

Una vez finalizada la automatización, lance una instancia de prueba desde la AMI actualizada para verificar los cambios.

**nota**  
Si se produce un error en cualquier paso de la automatización, la información acerca del error se muestra en la página **Automation Executions** (Ejecuciones de automatizaciones). La automatización está diseñada para terminar la instancia temporal después de completar correctamente todas las tareas. Si se produce un error en un paso, puede que el sistema no finalice la instancia. Por lo tanto, si se produce un error en un paso, termine manualmente la instancia temporal.

## Actualizar una AMI (AWS CLI) de Linux
<a name="update-patch-linux-ami-cli"></a>

En esta explicación de AWS Systems Manager Automation, se muestra cómo utilizar la AWS Command Line Interface (AWS CLI) y el manual de procedimientos `AWS-UpdateLinuxAmi` de Systems Manager para aplicar revisiones de forma automática a una Amazon Machine Image (AMI) de Linux con las versiones más recientes de los paquetes que usted especifique. Automatización es una herramienta de AWS Systems Manager. El manual de procedimientos `AWS-UpdateLinuxAmi` también automatiza la instalación de paquetes y configuraciones adicionales que sean específicos del sitio. Puede actualizar diversas distribuciones de Linux con esta explicación, incluidas Ubuntu Server, Red Hat Enterprise Linux (RHEL) o Amazon Linux AMIs. Para obtener una lista completa de las versiones de Linux compatibles, consulte [Patch ManagerRequisitos previos de](patch-manager-prerequisites.md).

El manual de procedimientos `AWS-UpdateLinuxAmi` le permite automatizar las tareas de mantenimiento de imágenes sin tener que crear el manual de procedimientos en JSON o YAML. Puede utilizar el manual de procedimientos `AWS-UpdateLinuxAmi` para realizar los siguientes tipos de tareas.
+ Actualice todos los paquetes de distribución y el software de Amazon en una RHEL de Amazon Linux o Ubuntu Server Amazon Machine Image (AMI). Este es el comportamiento predeterminado del manual de procedimientos.
+ Instalar AWS Systems Manager SSM Agent en una imagen existente para habilitar las capacidades de Systems Manager, como la ejecución remota de comandos mediante AWS Systems Manager Run Command o la recopilación de inventario de software con Inventory.
+ Instalar paquetes de software adicionales.

**Antes de empezar**  
Antes de empezar a trabajar con los manuales de procedimientos, configure los roles y, opcionalmente, EventBridge para Automation. Para obtener más información, consulte [Configuración de Automation](automation-setup.md). Esta explicación también requiere que especifique el nombre de un perfil de instancia de AWS Identity and Access Management (IAM). Para obtener más información sobre cómo crear un perfil de instancia de IAM, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md).

El manual de procedimientos `AWS-UpdateLinuxAmi` acepta los siguientes parámetros de entrada.


****  

| Parámetro | Tipo | Descripción | 
| --- | --- | --- | 
|  SourceAmiId  |  Cadena  |  (Obligatorio) ID de AMI de origen. Puede referenciar automáticamente el último ID de una AMI de Amazon EC2 para Linux mediante un parámetro de AWS Systems Manager Parameter Store *público*. Para obtener más información, consulte [Query for the latest Amazon Linux AMI IDs using AWS Systems Manager Parameter Store](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/).  | 
|  IamInstanceProfileName  |  Cadena  |  (Obligatorio) Nombre del rol de perfil de instancia de IAM que ha creado en [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md). El rol de perfil de instancia concede permiso a Automation para que realice acciones en sus instancias, como ejecutar comandos o iniciar y detener servicios. El manual de procedimientos utiliza únicamente el nombre del rol de perfil de instancia.  | 
|  AutomationAssumeRole  |  Cadena  |  (Obligatorio) El nombre del rol de servicio de IAM que ha creado en [Configuración de Automation](automation-setup.md). El rol de servicio (también denominado rol de asunción) concede permiso a Automation para asumir el rol de IAM y realizar acciones en su nombre. Por ejemplo, el rol de servicio permite a Automation crear una AMI nueva al ejecutar la acción `aws:createImage` en un manual de procedimientos. Para este parámetro, debe especificarse el ARN completo.  | 
|  TargetAmiName  |  Cadena  |  (Opcional) El nombre de la nueva AMI después de que se cree. El nombre predeterminado es una cadena generada por el sistema que incluye el ID de la AMI de origen, así como la hora y la fecha de creación.  | 
|  InstanceType  |  Cadena  |  (Opcional) El tipo de instancia que se lanzará como el host de espacio de trabajo. Los tipos de instancia varían según la región. El tipo predeterminado es t2.micro.  | 
|  PreUpdateScript  |  Cadena  |  (Opcional) La URL de un script que se ejecutará antes de que se apliquen las actualizaciones. El valor predeterminado (\$1"none\$1") es no ejecutar un script.  | 
|  PostUpdateScript  |  Cadena  |  (Opcional) La URL de un script que se ejecutará después de que se apliquen las actualizaciones de paquete. El valor predeterminado (\$1"none\$1") es no ejecutar un script.  | 
|  IncludePackages  |  Cadena  |  (Opcional) Actualizar solo estos paquetes designados. De forma predeterminada (\$1"all\$1"), se aplican todas las actualizaciones disponibles.  | 
|  ExcludePackages  |  Cadena  |  (Opcional) Nombres de los paquetes a los que no se aplicarán las actualizaciones, en todas las condiciones. De forma predeterminada (\$1"none\$1"), no se excluye ningún paquete.  | 

**Pasos de Automation**  
El manual de procedimientos `AWS-UpdateLinuxAmi` incluye los siguientes pasos de forma predeterminada.

**Paso 1: launchInstance (acción `aws:runInstances`) **  
En este paso, se lanza una instancia con los datos de usuario de Amazon Elastic Compute Cloud (Amazon EC2) y un rol de perfil de instancia de IAM. Los datos de usuario instalan SSM Agent adecuado en función del sistema operativo. La instalación del SSM Agent le permite utilizar herramientas de Systems Manager, como Run Command, State Manager e Inventario.

**Paso 2: updateOSSoftware (acción `aws:runCommand`) **  
Este paso ejecuta los siguientes comandos en la instancia lanzada:  
+ Descarga un script de actualización de Amazon Simple Storage Service (Amazon S3).
+ Ejecuta un script de preactualización opcional.
+ Actualiza los paquetes de distribución y el software de Amazon.
+ Ejecuta un script de posactualización opcional.
El registro de ejecución se almacena en la carpeta /tmp para que el usuario la consulte más tarde.  
Si desea actualizar un conjunto específico de paquetes, puede proporcionar la lista utilizando el parámetro `IncludePackages`. Cuando se proporciona, el sistema intenta actualizar únicamente estos paquetes y sus dependencias. No se realizan otras actualizaciones. De forma predeterminada, cuando no se especifica ningún paquete de *inclusión*, el programa actualiza todos los paquetes disponibles.  
Si desea excluir la actualización de un conjunto específico de paquetes, puede proporcionar la lista al parámetro `ExcludePackages`. Si se proporciona, estos paquetes permanecen en su versión actual, independientemente de otras opciones especificadas. De forma predeterminada, cuando no se especifica ningún paquete de *exclusión*, no se excluye ningún paquete.

**Paso 3: stopInstance (acción `aws:changeInstanceState`)**  
Este paso detiene la instancia actualizada.

**Paso 4: createImage (acción `aws:createImage`) **  
Este paso crea una AMI con un nombre descriptivo que se enlaza con ID de origen y la hora de creación. Por ejemplo: “AMI generada con EC2 Automation a la(s) \$1\$1global:DATE\$1TIME\$1\$1 a partir de \$1\$1SourceAmiId\$1\$1” donde DATE\$1TIME y SourceID representan variables de Automation.

**Paso 5: terminateInstance (acción `aws:changeInstanceState`) **  
Este paso limpia la automatización con la terminación de la instancia en ejecución.

**Output**  
La automatización devuelve el ID de la AMI nueva como salida.

**nota**  
De forma predeterminada, cuando Automation ejecuta el manual de procedimientos `AWS-UpdateLinuxAmi`, el sistema crea una instancia temporal en la VPC predeterminada (172.30.0.0/16). Si ha eliminado la VPC predeterminada, recibirá el siguiente error:  
`VPC not defined 400`  
Para solucionar este problema, debe generar una copia del manual de procedimientos `AWS-UpdateLinuxAmi` y especificar un ID de subred. Para obtener más información, consulte [VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc).

**Para crear una AMI con revisiones mediante Automation**

1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

   Para obtener más información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

1. Ejecute el siguiente comando para ejecutar el manual de procedimientos `AWS-UpdateLinuxAmi`. Reemplace cada *example resource placeholder* con su propia información.

   ```
   aws ssm start-automation-execution \
       --document-name "AWS-UpdateLinuxAmi" \
       --parameters \
       SourceAmiId=AMI ID, \
       IamInstanceProfileName=IAM instance profile, \
       AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'
   ```

   El comando devuelve un ID de ejecución. Copie este ID en el portapapeles. Utilizará este ID para ver el estado de la automatización.

   ```
   {
       "AutomationExecutionId": "automation execution ID"
   }
   ```

1. Ejecute el siguiente comando para ver la automatización con la AWS CLI:

   ```
   aws ssm describe-automation-executions
   ```

1. Ejecute el siguiente comando para ver detalles acerca del progreso de la automatización. Reemplace *automation execution ID* con su propia información.

   ```
   aws ssm get-automation-execution --automation-execution-id automation execution ID
   ```

   El proceso de actualización puede tardar 30 minutos o más en completarse.
**nota**  
También puede monitorear el estado de la automatización en la consola. En la lista, elija la automatización que acaba de ejecutar y, a continuación, elija la pestaña **Steps** (Pasos). Esta pestaña le muestra el estado de las acciones de la automatización.

Una vez finalizada la automatización, lance una instancia de prueba desde la AMI actualizada para verificar los cambios.

**nota**  
Si se produce un error en cualquier paso de la automatización, la información acerca del error se muestra en la página **Automation Executions** (Ejecuciones de automatizaciones). La automatización está diseñada para terminar la instancia temporal después de completar correctamente todas las tareas. Si se produce un error en un paso, puede que el sistema no finalice la instancia. Por lo tanto, si se produce un error en un paso, termine manualmente la instancia temporal.

# Actualización de un Windows Server AMI
<a name="automation-tutorial-update-patch-windows-ami"></a>

El manual de procedimientos `AWS-UpdateWindowsAmi` le permite automatizar las tareas de mantenimiento de imágenes en sus Amazon Machine Image (AMI) de Amazon Windows sin tener que crear el manual de procedimientos en JSON o YAML. Este manual de procedimientos es compatible con Windows Server 2008 R2 o versiones posteriores. Puede utilizar el manual de procedimientos `AWS-UpdateWindowsAmi` para realizar los siguientes tipos de tareas.
+ Instalar todas las actualizaciones de Windows y actualizar el software de Amazon (comportamiento predeterminado).
+ Instalar actualizaciones de Windows específicas y actualizar el software de Amazon.
+ Personalizar una AMI con sus propios scripts.

**Antes de empezar**  
Antes de empezar a trabajar con manuales de procedimientos, [configure roles para Automation](automation-setup-iam.md) a fin de agregar una política `iam:PassRole` que referencie el ARN del perfil de instancia al que desea conceder acceso. De forma opcional, configure Amazon EventBridge para Automatización, una herramienta de AWS Systems Manager. Para obtener más información, consulte [Configuración de Automation](automation-setup.md). Esta explicación también requiere que especifique el nombre de un perfil de instancia de AWS Identity and Access Management (IAM). Para obtener más información sobre cómo crear un perfil de instancia de IAM, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md).

**nota**  
Las actualizaciones de AWS Systems Manager SSM Agent normalmente se implementan en diferentes regiones y en distintos momentos. Al personalizar o actualizar una AMI, utilice únicamente las AMI de origen publicadas para la región en la que está trabajando. De este modo, se asegurará de que está trabajando con el último SSM Agent lanzado para esa región y evitará problemas de compatibilidad.

El manual de procedimientos `AWS-UpdateWindowsAmi` acepta los siguientes parámetros de entrada.


****  

| Parámetro | Tipo | Descripción | 
| --- | --- | --- | 
|  SourceAmiId  |  Cadena  |  (Obligatorio) ID de AMI de origen. Puede referenciar automáticamente el ID de la versión más reciente de la AMI de Windows Server mediante un parámetro de Systems Manager Parameter Store *público*. Para obtener más información, vea [Consulta de los últimos ID de la AMI de Windows mediante el Parameter Store de AWS Systems Manager](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/).  | 
|  SubnetId  |  Cadena  |  (Opcional) La subred en la que quiere lanzar la instancia temporal. Debe especificar un valor para este parámetro si ha eliminado su VPC predeterminada.  | 
|  IamInstanceProfileName  |  Cadena  |  (Obligatorio) Nombre del rol de perfil de instancia de IAM que ha creado en [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md). El rol de perfil de instancia concede permiso a Automation para que realice acciones en sus instancias, como ejecutar comandos o iniciar y detener servicios. El manual de procedimientos utiliza únicamente el nombre del rol de perfil de instancia.  | 
|  AutomationAssumeRole  |  Cadena  |  (Obligatorio) El nombre del rol de servicio de IAM que ha creado en [Configuración de Automation](automation-setup.md). El rol de servicio (también denominado rol de asunción) concede permiso a Automation para asumir el rol de IAM y realizar acciones en su nombre. Por ejemplo, el rol de servicio permite a Automation crear una AMI nueva al ejecutar la acción `aws:createImage` en un manual de procedimientos. Para este parámetro, debe especificarse el ARN completo.  | 
|  TargetAmiName  |  Cadena  |  (Opcional) El nombre de la nueva AMI después de que se cree. El nombre predeterminado es una cadena generada por el sistema que incluye el ID de la AMI de origen, así como la hora y la fecha de creación.  | 
|  InstanceType  |  Cadena  |  (Opcional) El tipo de instancia que se lanzará como el host de espacio de trabajo. Los tipos de instancia varían según la región. El tipo predeterminado es t2.medium.  | 
|  PreUpdateScript  |  Cadena  |  (Opcional) Un script que se ejecutará antes de actualizar la AMI. Ingrese un script en el manual de procedimientos o en el tiempo de ejecución como parámetro.  | 
|  PostUpdateScript  |  Cadena  |  (Opcional) Un script que se ejecutará después de actualizar la AMI. Ingrese un script en el manual de procedimientos o en el tiempo de ejecución como parámetro.  | 
|  IncludeKbs  |  Cadena  |  (Opcional) Especifique uno o varios ID de artículo de la Base de conocimientos de Microsoft (KB) para incluirlos. Puede instalar varios ID utilizando valores separados por comas. Formatos válidos: KB9876543 o 9876543.  | 
|  ExcludeKbs  |  Cadena  |  (Opcional) Especifique uno o varios ID de artículo de la Base de conocimientos de Microsoft (KB) para excluirlos. Puede excluir varios ID utilizando valores separados por comas. Formatos válidos: KB9876543 o 9876543.  | 
|  Categorías  |  Cadena  |  (Opcional) Especifique una o más categorías de actualización. Puede filtrar las categorías usando valores separados por comas. Opciones: Critical Update, Security Update, Definition Update, Update Rollup, Service Pack, Tool, Update o Driver. Los formatos válidos incluyen una sola entrada, por ejemplo: Critical Update. O bien, puede especificar una lista separada por comas: Critical Update,Security Update,Definition Update.  | 
|  SeverityLevels  |  Cadena  |  (Opcional) Especifique uno o varios niveles de seguridad de MSRC asociados con una actualización. Puede filtrar los niveles de gravedad usando valores separados por comas. Opciones: Critical, Important, Low, Moderate o Unspecified. Los formatos válidos incluyen una sola entrada, por ejemplo: Critical. O bien, puede especificar una lista separada por comas: Critical,Important,Low.  | 

**Pasos de Automation**  
El manual de procedimientos `AWS-UpdateWindowsAmi` incluye los siguientes pasos de forma predeterminada.

**Paso 1: launchInstance (acción `aws:runInstances`)**  
Este paso lanza una instancia con un rol de perfil de instancia de IAM desde el especificado `SourceAmiID`.

**Paso 2: runPreUpdateScript (acción `aws:runCommand`)**  
Este paso le permite especificar un script como una cadena que se ejecuta antes de que se instalen las actualizaciones.

**Paso 3: updateEC2Config (acción `aws:runCommand`)**  
En este paso, se utiliza el manual de procedimientos `AWS-InstallPowerShellModule` para descargar un módulo de PowerShell de AWS público. Systems Manager verifica la integridad del módulo con un hash SHA-256. A continuación, Systems Manager revisa el sistema operativo para determinar si debe actualizar EC2Launch o EC2Config. EC2Config se ejecuta desde Windows Server 2008 R2 a Windows Server 2012 R2. EC2Launch se ejecuta en Windows Server 2016.

**Paso 4: updateSSMAgent (acción `aws:runCommand`)**  
Este paso actualiza SSM Agent con el manual de procedimientos `AWS-UpdateSSMAgent`.

**Paso 5: updateAWSPVDriver (acción `aws:runCommand`)**  
Este paso actualiza controladores PV de AWS con el manual de procedimientos `AWS-ConfigureAWSPackage`.

**Paso 6: updateAwsEnaNetworkDriver (acción `aws:runCommand`)**  
Este paso actualiza controladores de red ENA de AWS con el manual de procedimientos `AWS-ConfigureAWSPackage`.

**Paso 7: installWindowsUpdates (acción `aws:runCommand`) **  
Este paso instala actualizaciones de Windows con el manual de procedimientos `AWS-InstallWindowsUpdates`. De forma predeterminada, Systems Manager busca e instala todas las actualizaciones que faltan. Puede cambiar el comportamiento predeterminado si especifica uno de los siguientes parámetros: `IncludeKbs`, `ExcludeKbs`, `Categories` o `SeverityLevels`. 

**Paso 8: runPostUpdateScript (acción `aws:runCommand`)**  
Este paso le permite especificar un script como una cadena que se ejecuta después de que se hayan instalado las actualizaciones.

**Paso 9: runSysprepGeneralize (acción `aws:runCommand`) **  
En este paso, se utiliza el manual de procedimientos `AWS-InstallPowerShellModule` para descargar un módulo de PowerShell de AWS público. Systems Manager verifica la integridad del módulo con un hash SHA-256. A continuación, Systems Manager ejecuta sysprep mediante el uso de métodos admitidos por AWS para EC2Launch (Windows Server 2016) o EC2Config (Windows Server 2008 R2 a 2012 R2).

**Paso 10: stopInstance (acción `aws:changeInstanceState`) **  
Este paso detiene la instancia actualizada. 

**Paso 11: createImage (acción `aws:createImage`) **  
Este paso crea una AMI con un nombre descriptivo que se enlaza con ID de origen y la hora de creación. Por ejemplo: “AMI generada con EC2 Automation a la(s) \$1\$1global:DATE\$1TIME\$1\$1 a partir de \$1\$1SourceAmiId\$1\$1” donde DATE\$1TIME y SourceID representan variables de Automation.

**Paso 12: TerminateInstance (acción `aws:changeInstanceState`) **  
Este paso limpia la automatización con la terminación de la instancia en ejecución. 

**Output**  
Esta sección le permite designar las salidas de diversos pasos o los valores de cualquier parámetro como la salida de Automation. De forma predeterminada, la salida es el ID de la AMI de Windows actualizada que se creó con la automatización.

**nota**  
De forma predeterminada, cuando Automation ejecuta el manual de procedimientos `AWS-UpdateWindowsAmi` y crea una instancia temporal, el sistema usa la VPC predeterminada (172.30.0.0/16). Si ha eliminado la VPC predeterminada, recibirá el siguiente error:  
VPC not defined 400  
Para solucionar este problema, debe generar una copia del manual de procedimientos `AWS-UpdateWindowsAmi` y especificar un ID de subred. Para obtener más información, consulte [VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc).

**Para crear una AMI de Windows con revisiones mediante Automation**

1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

   Para obtener más información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

1. Ejecute el siguiente comando para ejecutar el manual de procedimientos `AWS-UpdateWindowsAmi`. Reemplace cada *example resource placeholder* con su propia información. El comando de ejemplo que aparece a continuación utiliza una AMI de Amazon EC2 reciente para minimizar el número de revisiones que es necesario aplicar. Si ejecuta este comando más de una vez, debe especificar un valor único para `targetAMIname`. Los nombres para las AMI deben ser únicos.

   ```
   aws ssm start-automation-execution \
       --document-name="AWS-UpdateWindowsAmi" \
       --parameters SourceAmiId='AMI ID',IamInstanceProfileName='IAM instance profile',AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'
   ```

   El comando devuelve un ID de ejecución. Copie este ID en el portapapeles. Utilizará este ID para ver el estado de la automatización.

   ```
   {
       "AutomationExecutionId": "automation execution ID"
   }
   ```

1. Ejecute el siguiente comando para ver la automatización con la AWS CLI:

   ```
   aws ssm describe-automation-executions
   ```

1. Ejecute el siguiente comando para ver detalles acerca del progreso de la automatización.

   ```
   aws ssm get-automation-execution 
       --automation-execution-id automation execution ID
   ```

**nota**  
En función del número de revisiones aplicados, el proceso de aplicación de revisiones de Windows que se ejecuta en esta automatización de muestra puede tardar 30 minutos o más en completarse.

# Actualice un golden AMI mediante la Automation, AWS Lambda, y Parameter Store
<a name="automation-tutorial-update-patch-golden-ami"></a>

El siguiente ejemplo utiliza el modelo en el que una organización mantiene sus propias AMIs propietarias y les aplica revisiones de forma periódica, en lugar de basarse en las AMIs de Amazon Elastic Compute Cloud (Amazon EC2).

En el siguiente procedimiento se muestra cómo aplicar de forma automática las revisiones de sistema operativo (SO) a una AMI que ya se considera la AMI más actualizada o la *más reciente*. En el ejemplo, el valor predeterminado, el parámetro `SourceAmiId` se define mediante un parámetro de AWS Systems Manager Parameter Store que se denomina `latestAmi`. El valor de `latestAmi` se actualiza mediante una función de AWS Lambda invocada al final de la automatización. Como resultado de este proceso de Automatización, se reducen el tiempo y el esfuerzo empleados en la aplicación de revisiones a las AMIs, ya que las revisiones siempre se aplican a la AMI más actualizada. Parameter Store y Automatización son herramientas de AWS Systems Manager.

**Antes de empezar**  
Configure los roles de Automation y, si así lo desea, Amazon EventBridge para Automation. Para obtener más información, consulte [Configuración de Automation](automation-setup.md).

**Topics**
+ [Tarea 1: crear un parámetro en Systems Manager Parameter Store](#create-parameter-ami)
+ [Tarea 2: crear un rol de IAM para AWS Lambda](#create-lambda-role)
+ [Tarea 3: crear una función de AWS Lambda](#create-lambda-function)
+ [Tarea 4: crear un manual de procedimientos y aplicar revisiones a la AMI](#create-custom-ami-update-runbook)

## Tarea 1: crear un parámetro en Systems Manager Parameter Store
<a name="create-parameter-ami"></a>

Cree un parámetro de cadena en Parameter Store que utilice la siguiente información:
+ **Nombre**: `latestAmi`.
+ **Valor**: un ID de AMI. Por ejemplo: .:` ami-188d6e0e`.

Para obtener información sobre cómo crear un parámetro de cadena de Parameter Store, consulte [Creación de parámetros de Parameter Store en Systems Manager](sysman-paramstore-su-create.md).

## Tarea 2: crear un rol de IAM para AWS Lambda
<a name="create-lambda-role"></a>

Utilice el siguiente procedimiento para crear un rol de servicio de IAM para AWS Lambda. Estas políticas conceden permiso a Lambda para que actualice el valor del parámetro `latestAmi` con una función de Lambda y Systems Manager.

**Para crear un rol de servicio de IAM para Lambda**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Políticas** y, a continuación, **Crear política**.

1. Seleccione la pestaña **JSON**.

1. Reemplace el contenido predeterminado por la siguiente política. Reemplace cada *example resource placeholder* por su propia información.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "logs:CreateLogGroup",
               "Resource": "arn:aws:logs:us-east-1:111122223333:*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogStream",
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/function name:*"
               ]
           }
       ]
   }
   ```

------

1. Elija **Siguiente: etiquetas**.

1. (Opcional) Agregue uno o varios pares de valor etiqueta-clave para organizar, realizar un seguimiento o controlar el acceso a esta política. 

1. Elija **Siguiente: Revisar**.

1. En la página **Review Policy (Revisar política)**, en **Name (Nombre)**, escriba un nombre para la política insertada, como **amiLambda**.

1. Elija **Crear política**.

1. Repita los pasos 2 y 3.

1. Pegue la política siguiente. Reemplace cada *example resource placeholder* por su propia información.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "ssm:PutParameter",
               "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/latestAmi"
           },
           {
               "Effect": "Allow",
               "Action": "ssm:DescribeParameters",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Elija **Siguiente: etiquetas**.

1. (Opcional) Agregue uno o varios pares de valor etiqueta-clave para organizar, realizar un seguimiento o controlar el acceso a esta política. 

1. Elija **Siguiente: Revisar**.

1. En la página **Review Policy (Revisar política)**, en **Name (Nombre)**, escriba un nombre para la política insertada, como **amiParameter**.

1. Elija **Crear política**.

1. En el panel de navegación, seleccione **Roles** y luego seleccione **Crear rol**.

1. Inmediatamente debajo de **Caso de uso**, seleccione **Lambda** y, a continuación, **Siguiente**.

1. En la página **Agregar permisos**, utilice el campo **Buscar** para localizar las dos políticas que ha creado anteriormente.

1. Elija la casilla de verificación situada junto a las políticas y, a continuación, elija **Siguiente**.

1. En **Role name (Nombre del rol)**, escriba un nombre para el rol nuevo (por ejemplo, **lambda-ssm-role** o el nombre que prefiera). 
**nota**  
Dado que varias entidades pueden hacer referencia al rol, no puede cambiar el nombre del rol después de crearla.

1. (Opcional) Agregue uno o varios pares clave-valor de etiqueta para organizar o controlar el acceso a este rol o realizar su seguimiento y, a continuación, elija **Crear rol**.

## Tarea 3: crear una función de AWS Lambda
<a name="create-lambda-function"></a>

Utilice el siguiente procedimiento para crear una función de Lambda que actualice automáticamente el valor del parámetro `latestAmi`.

**Cómo crear una función de Lambda**

1. Inicie sesión en la Consola de administración de AWS y abra la consola AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Seleccione **Creación de función**.

1. En la página **Crear función**, elija **Diseñar desde cero**.

1. En **Nombre de la función**, introduzca **Automation-UpdateSsmParam**.

1. En **Tiempo de ejecución**, seleccione **Python 3.11**.

1. En **Arquitectura**, seleccione el tipo de procesador de equipo que Lambda utilizará para ejecutar la función, **x86\$164** o **arm64**, 

1. En la sección **Permisos**, expanda **Cambiar rol de ejecución predeterminado**.

1. Elija **Use an existing role** (Usar un rol existente) y, a continuación, elija el rol de servicio para Lambda que creó en la tarea 2.

1. Seleccione **Creación de función**.

1. En la sección **Origen de código** de la pestaña **lambda\$1function**, elimine el código existente en el campo y, a continuación, pegue el siguiente código de ejemplo.

   ```
   from __future__ import print_function
   
   import json
   import boto3
   
   print('Loading function')
   
   
   #Updates an SSM parameter
   #Expects parameterName, parameterValue
   def lambda_handler(event, context):
       print("Received event: " + json.dumps(event, indent=2))
   
       # get SSM client
       client = boto3.client('ssm')
   
       #confirm  parameter exists before updating it
       response = client.describe_parameters(
          Filters=[
             {
              'Key': 'Name',
              'Values': [ event['parameterName'] ]
             },
           ]
       )
   
       if not response['Parameters']:
           print('No such parameter')
           return 'SSM parameter not found.'
   
       #if parameter has a Description field, update it PLUS the Value
       if 'Description' in response['Parameters'][0]:
           description = response['Parameters'][0]['Description']
           
           response = client.put_parameter(
             Name=event['parameterName'],
             Value=event['parameterValue'],
             Description=description,
             Type='String',
             Overwrite=True
           )
       
       #otherwise just update Value
       else:
           response = client.put_parameter(
             Name=event['parameterName'],
             Value=event['parameterValue'],
             Type='String',
             Overwrite=True
           )
           
       responseString = 'Updated parameter %s with value %s.' % (event['parameterName'], event['parameterValue'])
           
       return responseString
   ```

1. Elija **Archivo, Guardar**.

1. Para probar la función de Lambda, en el menú **Prueba**, elija **Configurar eventos de prueba**.

1. En **Event Name** (Nombre del evento), escriba un nombre para el evento de prueba, como **MyTestEvent**.

1. Reemplace el texto existente por el código JSON siguiente. Reemplace *AMI ID* con su propia información para establecer el valor del parámetro `latestAmi`.

   ```
   {
      "parameterName":"latestAmi",
      "parameterValue":"AMI ID"
   }
   ```

1. Seleccione **Save**.

1. Elija **Test (Probar)** para probar la función. En la pestaña **Resultado de la ejecución**, el estado debe indicarse como **Correcto**, junto con otros detalles sobre la actualización.

## Tarea 4: crear un manual de procedimientos y aplicar revisiones a la AMI
<a name="create-custom-ami-update-runbook"></a>

Utilice el siguiente procedimiento para crear y ejecutar un manual de procedimientos que aplique revisiones a la AMI que ha especificado en el parámetro **latestAmi**. Después de que se complete la automatización, el valor de **latestAmi** se actualiza con el ID de la AMI a la cual se acaba de aplicar revisiones. Las automatizaciones posteriores utilizan la AMI creada con la ejecución anterior.

**Para crear y ejecutar el manual de procedimientos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Para **Crear documento**, seleccione **Automatización**.

1. En **Nombre**, escriba **UpdateMyLatestWindowsAmi**.

1. Elija la pestaña **Editor** y después elija **Edit (Editar)**.

1. Elija **Aceptar** cuando se le solicite.

1. En el campo **Editor de documentos**, reemplace el contenido predeterminado con el siguiente manual de procedimientos YAML de muestra.

   ```
   ---
   description: Systems Manager Automation Demo - Patch AMI and Update ASG
   schemaVersion: '0.3'
   assumeRole: '{{ AutomationAssumeRole }}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to execute this document.'
       default: ''
     SourceAMI:
       type: String
       description: The ID of the AMI you want to patch.
       default: '{{ ssm:latestAmi }}'
     SubnetId:
       type: String
       description: The ID of the subnet where the instance from the SourceAMI parameter is launched.
     SecurityGroupIds:
       type: StringList
       description: The IDs of the security groups to associate with the instance that's launched from the SourceAMI parameter.
     NewAMI:
       type: String
       description: The name of of newly patched AMI.
       default: 'patchedAMI-{{global:DATE_TIME}}'
     InstanceProfile:
       type: String
       description: The name of the IAM instance profile you want the source instance to use.
     SnapshotId:
       type: String
       description: (Optional) The snapshot ID to use to retrieve a patch baseline snapshot.
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: (Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: startInstances
       action: 'aws:runInstances'
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
         ImageId: '{{ SourceAMI }}'
         InstanceType: m5.large
         MinInstanceCount: 1
         MaxInstanceCount: 1
         IamInstanceProfileName: '{{ InstanceProfile }}'
         SubnetId: '{{ SubnetId }}'
         SecurityGroupIds: '{{ SecurityGroupIds }}'
     - name: verifyInstanceManaged
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 600
       inputs:
         Service: ssm
         Api: DescribeInstanceInformation
         InstanceInformationFilterList:
           - key: InstanceIds
             valueSet:
               - '{{ startInstances.InstanceIds }}'
         PropertySelector: '$.InstanceInformationList[0].PingStatus'
         DesiredValues:
           - Online
       onFailure: 'step:terminateInstance'
     - name: installPatches
       action: 'aws:runCommand'
       timeoutSeconds: 7200
       onFailure: Abort
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
     - name: stopInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: stopped
     - name: createImage
       action: 'aws:createImage'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceId: '{{ startInstances.InstanceIds }}'
         ImageName: '{{ NewAMI }}'
         NoReboot: false
         ImageDescription: Patched AMI created by Automation
     - name: terminateInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: terminated
     - name: updateSsmParam
       action: aws:invokeLambdaFunction
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
           FunctionName: Automation-UpdateSsmParam
           Payload: '{"parameterName":"latestAmi", "parameterValue":"{{createImage.ImageId}}"}'
   outputs:
   - createImage.ImageId
   ```

1. Elija **Create automation (Crear automatización)**.

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la página **Choose document** (Elegir documento), seleccione la pestaña **Owned by me** (De mi propiedad).

1. Busque el manual de procedimientos **UpdateMyLatestWindowsAmi** y seleccione el botón en la tarjeta **UpdateMyLatestWindowsAmi**.

1. Elija **Siguiente**.

1. Elija **Simple execution (Ejecución sencilla)**.

1. Especifique los valores de los parámetros de entrada.

1. Elija **Ejecutar**.

1. Una vez que se complete la automatización, elija **Parameter Store** en el panel de navegación y confirme que el nuevo valor de `latestAmi` coincide con el valor que devuelve la automatización. También puede verificar que el nuevo ID de AMI coincida con la salida de Automation en la sección **AMIs** de la consola de Amazon EC2.

# Actualización de las AMIs mediante Automatización y Jenkins
<a name="automation-tutorial-update-patch-ami-jenkins-integration"></a>

Si su organización utiliza el software Jenkins en una canalización de CI/CD, puede agregar Automatización como un paso posterior a la compilación para preinstalar las versiones de las aplicaciones en las Amazon Machine Images (AMIs). Automatización es una herramienta de AWS Systems Manager. También puede utilizar la característica de programación de Jenkins para llamar a Automatización y crear su propia cadencia de revisiones de sistema operativo (SO).

En el siguiente ejemplo, se muestra cómo invocar a Automatización desde un servidor Jenkins que se ejecuta en las instalaciones o en Amazon Elastic Compute Cloud (Amazon EC2). Para la autenticación, el servidor Jenkins utiliza las credenciales AWS basadas en una política de (IAM) que usted crea en el ejemplo y adjunta al perfil de instancia.

**nota**  
Asegúrese de seguir las prácticas recomendadas de seguridad Jenkins al configurar la instancia.

**Antes de empezar**  
Complete las siguientes tareas antes de configurar Automatización con Jenkins:
+ Complete el ejemplo [Actualice un golden AMI mediante la Automation, AWS Lambda, y Parameter Store](automation-tutorial-update-patch-golden-ami.md). En el siguiente ejemplo, se utiliza el manual de procedimientos **UpdateMyLatestWindowsAmi** creado en ese ejemplo.
+ Configure los roles de IAM para Automation. Systems Manager requiere un rol de perfil de instancia y un ARN de rol de servicio para procesar automatizaciones. Para obtener más información, consulte [Configuración de Automation](automation-setup.md).

**Para crear una política de IAM para el servidor Jenkins**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Políticas** y, a continuación, **Crear política**.

1. Seleccione la pestaña **JSON**.

1. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "ssm:StartAutomationExecution",
               "Resource": [
                   "arn:aws:ssm:us-east-1:111122223333:document/UpdateMyLatestWindowsAmi",
                   "arn:aws:ssm:us-east-1:111122223333:automation-execution/*"
               ]
           }
       ]
   }
   ```

------

1. Elija **Revisar política**.

1. En la página **Review Policy (Revisar política)**, en **Name (Nombre)**, escriba un nombre para la política insertada, como **JenkinsPolicy**.

1. Elija **Crear política**.

1. Seleccione **Roles** en el panel de navegación.

1. Elija el perfil de instancia que está asociado a su servidor Jenkins.

1. En la pestaña **Permisos**, elija **Agregar permisos** y, a continuación, **Adjuntar políticas**.

1. En la sección **Otras políticas de permisos**, ingrese el nombre de la política que ha creado en los pasos anteriores. Por ejemplo, **JenkinsPolicy**.

1. Marque la casilla de verificación situada junto a la política y, a continuación, elija **Adjuntar políticas**.

Utilice el siguiente procedimiento para configurar AWS CLI en su servidor Jenkins.

**Configuración del servidor Jenkins para Automatización**

1. Conéctese a su servidor Jenkins en el puerto 8080 con su navegador preferido para acceder a la interfaz de administración.

1. Ingrese la contraseña que se encuentra en `/var/lib/jenkins/secrets/initialAdminPassword`. Para mostrar la contraseña, ejecute el comando siguiente.

   ```
   sudo cat /var/lib/jenkins/secrets/initialAdminPassword
   ```

1. El script de instalación Jenkins lo dirige a la página **Personalizar Jenkins**. Seleccione **Install suggested plugins** (Instalar complementos sugeridos).

1. Una vez que se complete la instalación, elija **Credenciales de Administrador**, seleccione **Guardar credenciales** y, a continuación, seleccione **Empezar a usarJenkins**.

1. En el panel de navegación de la izquierda, elija **AdministrarJenkins** y, a continuación, elija **Administrar complementos**.

1. Seleccione la pestaña **Available** (Disponible) y, a continuación, ingrese **Amazon EC2 plugin**.

1. Seleccione la casilla de verificación para **Amazon EC2 plugin** y, a continuación, **Install without restart** (Instalar sin reiniciar).

1. Una vez que se complete la instalación, seleccione **Go back to the top page** (Volver a la página superior).

1. Elija **Administrar Jenkins** y, a continuación, seleccione **Administrar nodos y nubes**.

1. En la sección **Configurar nubes**, seleccione **Agregar una nube nueva** y, a continuación, elija **Amazon EC2**.

1. Ingrese su información en los campos restantes. Asegúrese de seleccionar la opción **Usar perfil de instancia de EC2 para obtener credenciales**.

Utilice el siguiente procedimiento a fin de configurar su proyecto de Jenkins para invocar a Automatización.

**Configuración del servidor Jenkins para invocar a Automatización**

1. Abra la consola Jenkins en un navegador web.

1. Elija el proyecto que desee configurar con Automation y, a continuación, elija **Configure**.

1. En la pestaña **Build**, elija **Add Build Step**.

1. Elija **Execute shell** o **Execute Windows batch command** (en función de su sistema operativo).

1. En el campo **Command** (Comando), ejecute un comando de la AWS CLI como el siguiente. Reemplace cada *example resource placeholder* con su propia información.

   ```
   aws ssm start-automation-execution \
           --document-name runbook name \
           --region Región de AWS of your source AMI \
           --parameters runbook parameters
   ```

   El siguiente comando de ejemplo usa el manual de procedimientos **UpdateMyLatestWindowsAmi** y el parámetro `latestAmi` de Systems Manager creado en [Actualice un golden AMI mediante la Automation, AWS Lambda, y Parameter Store](automation-tutorial-update-patch-golden-ami.md).

   ```
   aws ssm start-automation-execution \
           --document-name UpdateMyLatestWindowsAmi \
           --parameters \
               "sourceAMIid='{{ssm:latestAmi}}'"
           --region region
   ```

   En Jenkins, el comando se parece al ejemplo de la siguiente captura de pantalla.  
![\[Un comando de ejemplo en el software de Jenkins.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/sysman-ami-jenkins2.png)

1. En el proyecto Jenkins, seleccione **Construir ahora**. Jenkins devuelve un resultado similar al del siguiente ejemplo.  
![\[Ejemplo de salida de comandos en el software de Jenkins.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/sysman-ami-jenkins.png)

# Actualización de AMIs para grupos de escalado automático
<a name="automation-tutorial-update-patch-windows-ami-autoscaling"></a>

En el ejemplo siguiente se actualiza un grupo de escalado automático con una AMI a la que recién se ha aplicado revisiones. Este enfoque garantiza que las nuevas imágenes se pongan automáticamente a disposición de los entornos informáticos que utilizan grupos de escalado automático

El paso final de la automatización en este ejemplo utiliza una función de Python para crear una nueva plantilla de lanzamiento que utiliza la AMI a la que recién se ha aplicado revisiones. A continuación, el grupo de escalado automático se actualiza para utilizar la nueva plantilla de lanzamiento. En este tipo de escenario de escalado automático, los usuarios podrían terminar las instancias existentes en el grupo de escalado automático para forzar el lanzamiento de una instancia nueva que utilice la nueva imagen. O los usuarios podrían esperar y permitir que los eventos de escala vertical y horizontal lancen instancias más recientes de forma natural.

**Antes de empezar**  
Complete las tareas siguientes antes de comenzar este ejemplo.
+ Configure los roles de IAM para Automatización, una herramienta de AWS Systems Manager. Systems Manager requiere un rol de perfil de instancia y un ARN de rol de servicio para procesar automatizaciones. Para obtener más información, consulte [Configuración de Automation](automation-setup.md).

## Crear el manual de procedimientos **PatchAMIAndUpdateASG**
<a name="create-autoscaling-update-runbook"></a>

Utilice el siguiente procedimiento para crear el manual de procedimientos **PatchAMIAndUpdateASG** que aplica revisiones a la AMI que especifica para el parámetro **SourceAMI**. El manual de procedimientos también actualiza un grupo de escalado automático para utilizar la última AMI a la que se ha aplicado revisiones.

**Para crear y ejecutar el manual de procedimientos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En el menú desplegable **Create document** (Crear documento), seleccione **Automation**.

1. En el campo **Nombre**, escriba **PatchAMIAndUpdateASG**.

1. Seleccione la pestaña **Editor** (Editor) y elija **Edit** (Editar).

1. Elija **OK** (Aceptar) cuando se le solicite y elimine el contenido en el campo **Document editor** (Editor de documentos).

1. En el campo **Document editor** (Editor de documentos), pegue el siguiente contenido del manual de procedimientos YAML de muestra.

   ```
   ---
   description: Systems Manager Automation Demo - Patch AMI and Update ASG
   schemaVersion: '0.3'
   assumeRole: '{{ AutomationAssumeRole }}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to execute this document.'
       default: ''
     SourceAMI:
       type: String
       description: '(Required) The ID of the AMI you want to patch.'
     SubnetId:
       type: String
       description: '(Required) The ID of the subnet where the instance from the SourceAMI parameter is launched.'
     SecurityGroupIds:
       type: StringList
       description: '(Required) The IDs of the security groups to associate with the instance launched from the SourceAMI parameter.'
     NewAMI:
       type: String
       description: '(Optional) The name of of newly patched AMI.'
       default: 'patchedAMI-{{global:DATE_TIME}}'
     TargetASG:
       type: String
       description: '(Required) The name of the Auto Scaling group you want to update.'
     InstanceProfile:
       type: String
       description: '(Required) The name of the IAM instance profile you want the source instance to use.'
     SnapshotId:
       type: String
       description: (Optional) The snapshot ID to use to retrieve a patch baseline snapshot.
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: (Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: startInstances
       action: 'aws:runInstances'
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
         ImageId: '{{ SourceAMI }}'
         InstanceType: m5.large
         MinInstanceCount: 1
         MaxInstanceCount: 1
         IamInstanceProfileName: '{{ InstanceProfile }}'
         SubnetId: '{{ SubnetId }}'
         SecurityGroupIds: '{{ SecurityGroupIds }}'
     - name: verifyInstanceManaged
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 600
       inputs:
         Service: ssm
         Api: DescribeInstanceInformation
         InstanceInformationFilterList:
           - key: InstanceIds
             valueSet:
               - '{{ startInstances.InstanceIds }}'
         PropertySelector: '$.InstanceInformationList[0].PingStatus'
         DesiredValues:
           - Online
       onFailure: 'step:terminateInstance'
     - name: installPatches
       action: 'aws:runCommand'
       timeoutSeconds: 7200
       onFailure: Abort
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
     - name: stopInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: stopped
     - name: createImage
       action: 'aws:createImage'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceId: '{{ startInstances.InstanceIds }}'
         ImageName: '{{ NewAMI }}'
         NoReboot: false
         ImageDescription: Patched AMI created by Automation
     - name: terminateInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: terminated
     - name: updateASG
       action: 'aws:executeScript'
       timeoutSeconds: 300
       maxAttempts: 1
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: update_asg
         InputPayload:
           TargetASG: '{{TargetASG}}'
           NewAMI: '{{createImage.ImageId}}'
         Script: |-
           from __future__ import print_function
           import datetime
           import json
           import time
           import boto3
   
           # create auto scaling and ec2 client
           asg = boto3.client('autoscaling')
           ec2 = boto3.client('ec2')
   
           def update_asg(event, context):
               print("Received event: " + json.dumps(event, indent=2))
   
               target_asg = event['TargetASG']
               new_ami = event['NewAMI']
   
               # get object for the ASG we're going to update, filter by name of target ASG
               asg_query = asg.describe_auto_scaling_groups(AutoScalingGroupNames=[target_asg])
               if 'AutoScalingGroups' not in asg_query or not asg_query['AutoScalingGroups']:
                   return 'No ASG found matching the value you specified.'
   
               # gets details of an instance from the ASG that we'll use to model the new launch template after
               source_instance_id = asg_query.get('AutoScalingGroups')[0]['Instances'][0]['InstanceId']
               instance_properties = ec2.describe_instances(
                   InstanceIds=[source_instance_id]
               )
               source_instance = instance_properties['Reservations'][0]['Instances'][0]
   
               # create list of security group IDs
               security_groups = []
               for group in source_instance['SecurityGroups']:
                   security_groups.append(group['GroupId'])
   
               # create a list of dictionary objects for block device mappings
               mappings = []
               for block in source_instance['BlockDeviceMappings']:
                   volume_query = ec2.describe_volumes(
                       VolumeIds=[block['Ebs']['VolumeId']]
                   )
                   volume_details = volume_query['Volumes']
                   device_name = block['DeviceName']
                   volume_size = volume_details[0]['Size']
                   volume_type = volume_details[0]['VolumeType']
                   device = {'DeviceName': device_name, 'Ebs': {'VolumeSize': volume_size, 'VolumeType': volume_type}}
                   mappings.append(device)
   
               # create new launch template using details returned from instance in the ASG and specify the newly patched AMI
               time_stamp = time.time()
               time_stamp_string = datetime.datetime.fromtimestamp(time_stamp).strftime('%m-%d-%Y_%H-%M-%S')
               new_template_name = f'{new_ami}_{time_stamp_string}'
               try:
                   ec2.create_launch_template(
                       LaunchTemplateName=new_template_name,
                       LaunchTemplateData={
                           'BlockDeviceMappings': mappings,
                           'ImageId': new_ami,
                           'InstanceType': source_instance['InstanceType'],
                           'IamInstanceProfile': {
                               'Arn': source_instance['IamInstanceProfile']['Arn']
                           },
                           'KeyName': source_instance['KeyName'],
                           'SecurityGroupIds': security_groups
                       }
                   )
               except Exception as e:
                   return f'Exception caught: {str(e)}'
               else:
                   # update ASG to use new launch template
                   asg.update_auto_scaling_group(
                       AutoScalingGroupName=target_asg,
                       LaunchTemplate={
                           'LaunchTemplateName': new_template_name
                       }
                   )
                   return f'Updated ASG {target_asg} with new launch template {new_template_name} which uses AMI {new_ami}.'
   outputs:
   - createImage.ImageId
   ```

1. Elija **Create automation (Crear automatización)**.

1. En el panel de navegación, elija **Automatización** y, después, seleccione **Ejecutar automatización**.

1. En la página **Choose document** (Elegir documento), seleccione la pestaña **Owned by me** (De mi propiedad).

1. Busque el manual de procedimientos **PatchAMIAndUpdateASG** y seleccione el botón de la tarjeta **PatchAMIAndUpdateASG**.

1. Elija **Siguiente**.

1. Elija **Simple execution (Ejecución sencilla)**.

1. Especifique los valores de los parámetros de entrada. Asegúrese de que el `SubnetId` y `SecurityGroupIds` que especifica permitan el acceso a los puntos de conexión públicos de Systems Manager o a los puntos de conexión de la interfaz para Systems Manager.

1. Elija **Ejecutar**.

1. Una vez finalizada la automatización, en la consola de Amazon EC2, elija **Auto Scaling** y, a continuación, **Launch Templates** (Plantillas de lanzamiento). Verifique que ve la nueva plantilla de lanzamiento y que utiliza la nueva AMI.

1. Seleccione **Auto Scaling** y, a continuación, **Auto Scaling Groups** (grupo de escalado automático). Verifique que el grupo de escalado automático utiliza la nueva plantilla de lanzamiento.

1. Termine una o más instancias de su grupo de escalado automático. Las instancias de reemplazo se lanzarán con la nueva AMI.

# Uso de los manuales de procedimientos de autoservicio de AWS Support
<a name="automation-tutorial-support-runbooks"></a>

En esta sección, se describe cómo utilizar algunas de las automatizaciones de autoservicio que creó el equipo de AWS Support. Estas automatizaciones lo ayudan a administrar sus recursos de AWS.

**Flujos de trabajo de automatización de Support**  
Los flujos de trabajo de automatización de Support (SAW, Support Automation Workflow) son manuales de procedimientos de automatización que escribe y mantiene el equipo de AWS Support. Estos manuales de procedimientos lo ayudan a solucionar problemas comunes en sus recursos de AWS, monitorear e identificar de forma proactiva los problemas de red, recopilar y analizar registros, entre muchas otras actividades.

Los unbooks SAW utilizan el prefijo **`AWSSupport`**. Por ejemplo, [https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-activatewindowswithamazonlicense.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-activatewindowswithamazonlicense.html).

Asimismo, los clientes con planes Business Support\$1 y superiores a AWS Support tienen acceso a los manuales de procedimientos que utilizan el prefijo **`AWSPremiumSupport`**. Por ejemplo, [https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awspremiumsupport-troubleshootEC2diskusage.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awspremiumsupport-troubleshootEC2diskusage.html).

Para obtener más información acerca de AWS Support, consulte [Introducción a AWS Support](https://docs.aws.amazon.com/awssupport/latest/user/getting-started.html).

**Topics**
+ [Ejecutar la herramienta EC2Rescue en instancias inaccesibles](automation-ec2rescue.md)
+ [Restablecimiento de contraseñas y claves de SSH en instancias EC2](automation-ec2reset.md)

# Ejecutar la herramienta EC2Rescue en instancias inaccesibles
<a name="automation-ec2rescue"></a>

EC2Rescue puede ayudarlo a diagnosticar y resolver problemas de las instancias de Amazon Elastic Compute Cloud (Amazon EC2) para Linux y Windows Server. Puede ejecutar la herramienta manualmente, tal y como se describe en [Uso de EC2Rescue para Linux Server](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Linux-Server-EC2Rescue.html) y [Uso de EC2Rescue para Windows Server](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Windows-Server-EC2Rescue.html). También puede ejecutar la herramienta de forma automática a través de Automatización de Systems Manager y el manual de procedimientos **`AWSSupport-ExecuteEC2Rescue`**. Automatización es una herramienta de AWS Systems Manager. El manual de procedimientos **`AWSSupport-ExecuteEC2Rescue`** está diseñado para realizar una combinación de acciones de Systems Manager, acciones de CloudFormation y funciones de Lambda que automatizan los pasos que normalmente se necesitan para utilizar EC2Rescue. 

Puede utilizar el manual de procedimientos **`AWSSupport-ExecuteEC2Rescue`** para solucionar diferentes tipos de problemas del sistema operativo (OS). No se admiten instancias con volúmenes raíz cifrados. Consulte los temas siguientes para obtener una lista completa:

**Windows**: consulte *Acción de rescate* en [Uso de EC2Rescue for Windows Server con la línea de comando](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-cli.html#ec2rw-rescue).

**Linux** y **macOS**: algunos módulos de EC2Rescue para Linux detectan problemas e intentan remediarlos. Para obtener más información, consulte la documentación [https://github.com/awslabs/aws-ec2rescue-linux/tree/master/docs](https://github.com/awslabs/aws-ec2rescue-linux/tree/master/docs) de cada módulo en GitHub.

## Funcionamiento
<a name="automation-ec2rescue-how"></a>

La solución de problemas de una instancia con Automation y el manual de procedimientos **`AWSSupport-ExecuteEC2Rescue`** funciona de la siguiente manera:
+ Usted especifica el ID de la instancia inaccesible y activa el manual de procedimientos.
+ El sistema crea una VPC temporal y, a continuación, ejecuta una serie de funciones de Lambda para configurar la VPC.
+ El sistema identifica una subred para su VPC temporal en la misma zona de disponibilidad que la instancia original.
+ El sistema lanza una instancia auxiliar de habilitada para SSM y temporal.
+ El sistema detiene la instancia original y crea una copia de seguridad. A continuación, asocia el volumen raíz original a la instancia auxiliar.
+ El sistema utiliza Run Command para ejecutar EC2Rescue en la instancia auxiliar. EC2Rescue identifica e intenta corregir los problemas en el volumen raíz original asociado. Cuando finaliza, EC2Rescue vuelve a asociar el volumen raíz a la instancia original.
+ El sistema reinicia la instancia original y termina la instancia temporal. El sistema también termina la VPC temporal y las funciones de Lambda creadas al inicio de la Automation.

## Antes de empezar
<a name="automation-ec2rescue-begin"></a>

Antes de ejecutar la siguiente Automation, haga lo siguiente:
+ Copie el ID de instancia de la instancia inaccesible. Especificará este ID en el procedimiento.
+ Opcionalmente, recopile el ID de una subred en la misma zona de disponibilidad que su instancia inaccesible. La instancia de EC2Rescue se creará en esta subred. Si no especifica ninguna subred, Automation crea una nueva VPC temporal en su Cuenta de AWS. Verifique que su Cuenta de AWS tiene al menos una VPC disponible. De forma predeterminada, puede crear cinco VPC en una región. Si ya ha creado cinco VPC en la región, se produce un error en la Automation sin realizar cambios en la instancia. Para obtener más información acerca de las cuotas de Amazon VPC, consulte [VPC y subredes](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-vpcs-subnets) en la *Guía del usuario de Amazon VPC*.
+ También puede crear y especificar un rol de AWS Identity and Access Management (IAM) para Automation. Si no especifica este rol, Automation se ejecuta en el contexto del usuario que ha ejecutado la Automation.

### Concesión de permisos `AWSSupport-EC2Rescue` para realizar acciones en las instancias
<a name="automation-ec2rescue-access"></a>

EC2Rescue necesita permiso para realizar una serie de acciones en las instancias durante la automatización. Estas acciones invocan los servicios AWS Lambda, IAM y Amazon EC2 para intentar solucionar los problemas de sus instancias de forma segura. Si dispone de permisos de nivel de administrador en su Cuenta de AWS o VPC, es probable que pueda ejecutar la automatización sin configurar permisos, tal y como se describe en esta sección. Si no dispone de permisos de nivel de administrador, usted o un administrador deben configurarlos mediante una de las siguientes opciones.
+ [Concesión de permisos mediante políticas de IAM](#automation-ec2rescue-access-iam)
+ [Concesión de permisos mediante una plantilla de CloudFormation](#automation-ec2rescue-access-cfn)

#### Concesión de permisos mediante políticas de IAM
<a name="automation-ec2rescue-access-iam"></a>

Puede adjuntar la siguiente política de IAM a su cuenta de usuario, grupo o rol como una política insertada o bien puede crear una nueva política administrada de IAM y adjuntarla a su usuario, grupo o rol. Para obtener más información sobre la adición de una política insertada a su usuario, grupo o rol, consulte [Uso de políticas insertadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html). Para obtener más información sobre cómo crear una política administrada, consulte [Uso de políticas administradas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html).

**nota**  
Si crea una nueva política administrada de IAM, también debe adjuntar la política administrada **AmazonSSMAutomationRole** para que la instancia se pueda comunicar con la API de Systems Manager.

**Política de IAM para AWSSupport-EC2Rescue**

Reemplace *account ID* con su propia información.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "lambda:InvokeFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction"
            ],
            "Resource": "arn:aws:lambda:*:111122223333:function:AWSSupport-EC2Rescue-*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::awssupport-ssm.*/*.template",
                "arn:aws:s3:::awssupport-ssm.*/*.zip"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "iam:CreateRole",
                "iam:CreateInstanceProfile",
                "iam:GetRole",
                "iam:GetInstanceProfile",
                "iam:PutRolePolicy",
                "iam:DetachRolePolicy",
                "iam:AttachRolePolicy",
                "iam:PassRole",
                "iam:AddRoleToInstanceProfile",
                "iam:RemoveRoleFromInstanceProfile",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DeleteInstanceProfile"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/AWSSupport-EC2Rescue-*",
                "arn:aws:iam::111122223333:instance-profile/AWSSupport-EC2Rescue-*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "lambda:CreateFunction",
                "ec2:CreateVpc",
                "ec2:ModifyVpcAttribute",
                "ec2:DeleteVpc",
                "ec2:CreateInternetGateway",
                "ec2:AttachInternetGateway",
                "ec2:DetachInternetGateway",
                "ec2:DeleteInternetGateway",
                "ec2:CreateSubnet",
                "ec2:DeleteSubnet",
                "ec2:CreateRoute",
                "ec2:DeleteRoute",
                "ec2:CreateRouteTable",
                "ec2:AssociateRouteTable",
                "ec2:DisassociateRouteTable",
                "ec2:DeleteRouteTable",
                "ec2:CreateVpcEndpoint",
                "ec2:DeleteVpcEndpoints",
                "ec2:ModifyVpcEndpoint",
                "ec2:Describe*",
                "autoscaling:DescribeAutoScalingInstances"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

#### Concesión de permisos mediante una plantilla de CloudFormation
<a name="automation-ec2rescue-access-cfn"></a>

CloudFormation automatiza el proceso de creación de roles y políticas de IAM a través de una plantilla preconfigurada. Utilice el siguiente procedimiento para crear los roles y las políticas de IAM necesarios para EC2Rescue Automation mediante CloudFormation.

**Para crear los roles y las políticas de IAM necesarios para EC2Rescue**

1. Descargue [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip) y extraiga el archivo `AWSSupport-EC2RescueRole.json` en un directorio de su equipo local.

1. Si su Cuenta de AWS está en una partición especial, edite la plantilla para cambiar los valores de ARN por los de su partición.

   Por ejemplo, para las regiones de China, cambie todas las instancias de `arn:aws` por `arn:aws-cn`.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Elija **Create stack (Crear pila)**, **With new resources (standard) (Con nuevos recursos [estándar])**.

1. En la página **Create stack (Crear pila)** en **Prerequisite - Prepare template (Requisito previo: preparar plantilla)**, elija **Template is ready (La plantilla está lista)**.

1. En **Specify template (Especificar plantilla)**, elija **Upload a template file (Cargar un archivo de plantilla)**.

1. Elija **Choose file (Elegir archivo)**, y, a continuación, busque y seleccione el archivo `AWSSupport-EC2RescueRole.json` del directorio en el que lo extrajo.

1. Elija **Siguiente**.

1. En la página **Specify stack details (Especificar detalles de la pila)** para el campo **Stack name (Nombre de la pila)**, escriba un nombre para identificar esta pila y, a continuación, elija **Next (Siguiente)**.

1. (Opcional) En el área **Tags (Etiquetas)**, aplique a la pila uno o varios pares de nombre-valor de claves de etiqueta.

   Las etiquetas son metadatos opcionales que usted asigna a un recurso. Las etiquetas le permiten clasificar los recursos de diversas maneras, por ejemplo, según su finalidad, propietario o entorno. Por ejemplo, puede que desee etiquetar una pila para identificar el tipo de tareas que ejecuta, los tipos de destinos u otros recursos implicados y el entorno en el que se ejecuta.

1. Elegir **Next** (Siguiente)

1. En la página **Review** (Revisar), revise los detalles de la pila y, a continuación, desplácese hacia abajo y elija la opción **I acknowledge that CloudFormation might create IAM resources** (Acepto que es posible que cree recursos de IAM).

1. Seleccione **Creación de pila**.

   CloudFormation muestra el estado **CREATE\$1IN\$1PROGRESS** durante unos minutos. El estado cambia a **CREATE\$1COMPLETE** tras crear la pila. También puede elegir el icono de actualización para comprobar el estado del proceso de creación.

1. En la lista **Stacks** (Pilas), seleccione el botón situado junto a la pila que acaba de crear y, a continuación, elija la pestaña **Outputs** (Salidas).

1. Anote el valor de **Value (Valor)**. Es el ARN de AssumeRole. Especifique este ARN cuando ejecute la automatización en el siguiente procedimiento, [Ejecución de Automation](#automation-ec2rescue-executing). 

## Ejecución de Automation
<a name="automation-ec2rescue-executing"></a>

**importante**  
La siguiente automatización detiene la instancia inaccesible. La detención de la instancia puede ocasionar la pérdida de datos en los volúmenes de almacén de instancias asociados (si los hubiera). La detención de la instancia también puede provocar que cambie la IP pública, si no hay asociada ninguna IP elástica.

**Para ejecutar el manual de procedimientos de Automation `AWSSupport-ExecuteEC2Rescue`**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Elija **Ejecutar automatización**.

1. En la sección **Automation document (Documento de Automation)**, elija **Owned by Amazon (Propiedad de Amazon)** en la lista.

1. En la lista de manuales de procedimientos, seleccione el botón de la tarjeta que corresponde a `AWSSupport-ExecuteEC2Rescue` y, a continuación, elija **Next** (Siguiente).

1. En la página **Execute automation document (Ejecutar documento de Automation)**, elija **Simple execution (Ejecución sencilla)**.

1. En la sección **Document details (Detalles del documento)**, asegúrese de que el valor de **Document version (Versión del documento)** sea la versión predeterminada más alta. Por ejemplo, **\$1DEFAULT** o **3 (default) (3 [predeterminada])**.

1. En la sección **Input parameters**, especifique los siguientes parámetros: 

   1. En **UnreachableInstanceId**, especifique la ID de la instancia inaccesible. 

   1. (Opcional) En **EC2RescueInstanceType**, especifique un tipo de instancia para la instancia de EC2Rescue. El tipo de instancia predeterminada es `t2.medium`.

   1. En **AutomationAssumeRole**, si ha creado roles para esta automatización mediante el procedimiento de CloudFormation descrito anteriormente en este tema, elija el ARN del AssumeRole que creó en la consola de CloudFormation.

   1. (Opcional) En **LogDestination**, especifique un bucket de S3 si desea recopilar registros de nivel del sistema operativo mientras soluciona los problemas de la instancia. Los registros se cargan automáticamente en el bucket especificado.

   1. En **SubnetId**, especifique una subred en una VPC existente en la misma zona de disponibilidad que la instancia inaccesible. De forma predeterminada, Systems Manager crea una nueva VPC, pero usted puede especificar una subred en una VPC existente, si así lo desea.
**nota**  
Si no ve la opción para especificar un ID de subred o bucket, verifique que está usando la versión más reciente **predeterminada** del manual de procedimientos.

1. (Opcional) En el área **Tags** (Etiquetas), aplique uno o más pares de nombre-valor de claves de etiqueta para ayudar a identificar la automatización, como `Key=Purpose,Value=EC2Rescue`.

1. Elija **Ejecutar**.

El manual de procedimientos crea una AMI de copia de seguridad como parte de la automatización. Los demás recursos creados por la automatización se eliminan automáticamente, pero esta AMI permanece en su cuenta. La AMI recibe su nombre siguiendo esta convención:

AMI de copia de seguridad: AWSSupport-EC2Rescue:*UnreachableInstanceId*

Puede localizar esta AMI en la consola de Amazon EC2 mediante la búsqueda del ID de ejecución de Automation.

# Restablecimiento de contraseñas y claves de SSH en instancias EC2
<a name="automation-ec2reset"></a>

Puede utilizar el manual de procedimientos `AWSSupport-ResetAccess` para volver a activar de forma automática la generación de contraseñas del administrador local en las instancias de Amazon Elastic Compute Cloud (Amazon EC2) para Windows Server y generar una nueva clave de SSH en instancias de EC2 para Linux. El manual de procedimientos `AWSSupport-ResetAccess` se ha diseñado para realizar una combinación de acciones de AWS Systems Manager, acciones de AWS CloudFormation y funciones de AWS Lambda que automatizan los pasos que normalmente se requieren para restablecer la contraseña de administrador local.

Puede utilizar Automatización, una herramienta de AWS Systems Manager, con el manual de procedimientos `AWSSupport-ResetAccess` para solucionar los siguientes problemas:

**Windows**

*Ha perdido el par de claves de EC2*: si desea resolver este problema, puede utilizar el manual de procedimientos **AWSSupport-ResetAccess** para crear una AMI que se habilita con contraseñas con la instancia actual, lanzar una nueva instancia a partir de la AMI y seleccionar un par de claves de su propiedad.

*Ha perdido la contraseña de administrador local*: si desea solucionar este problema, puede utilizar el manual de procedimientos `AWSSupport-ResetAccess` para generar una nueva contraseña que se pueda descifrar con el par de claves de EC2 actual.

**Linux**

*Ha perdido el par de claves de EC2 o configuró el acceso de SSH a la instancia con una clave que ha perdido*: si desea solucionar este problema, puede utilizar el manual de procedimientos `AWSSupport-ResetAccess` a fin de crear una nueva clave de SSH para la instancia actual, lo que le permitirá conectarse de nuevo a la instancia.

**nota**  
Si su instancia de EC2 para Windows Server está configurada para Systems Manager, también puede restablecer su contraseña de administrador local mediante EC2Rescue y AWS Systems Manager Run Command. Para obtener más información, consulte [Uso de EC2Rescue para Windows Server con Systems Manager Run Command](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html) en la *Guía del usuario de Amazon EC2*.

**Información relacionada**  
[Conexión a una instancia de Linux desde Windows mediante PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html) en la *Guía del usuario de Amazon EC2*

## Funcionamiento
<a name="automation-ec2reset-how"></a>

La solución de problemas de una instancia con Automation y el manual de procedimientos `AWSSupport-ResetAccess` funciona de la siguiente manera:
+ Especifica el ID de la instancia y ejecuta el manual de procedimientos.
+ El sistema crea una VPC temporal y, a continuación, ejecuta una serie de funciones de Lambda para configurar la VPC.
+ El sistema identifica una subred para su VPC temporal en la misma zona de disponibilidad que la instancia original.
+ El sistema lanza una instancia auxiliar de habilitada para SSM y temporal.
+ El sistema detiene la instancia original y crea una copia de seguridad. A continuación, asocia el volumen raíz original a la instancia auxiliar.
+ El sistema utiliza Run Command para ejecutar EC2Rescue en la instancia auxiliar. En Windows, EC2Rescue permite generar la contraseña para el administrador local usando EC2Config o EC2Launch en el volumen raíz original asociado. En Linux, EC2Rescue genera e introduce una nueva clave de SSH y guarda la clave privada (cifrada) en Parameter Store. Cuando finaliza, EC2Rescue vuelve a asociar el volumen raíz a la instancia original.
+ El sistema crea una nueva Amazon Machine Image (AMI) de su instancia, ahora que la generación de contraseña está habilitada. Puede usar esta AMI para crear una nueva instancia de EC2 y asociar un par de claves nuevo, en caso de ser necesario.
+ El sistema reinicia la instancia original y termina la instancia temporal. El sistema también termina la VPC temporal y las funciones de Lambda creadas al inicio de la Automation.
+ **Windows**: la instancia genera una nueva contraseña que se puede descodificar en la consola de Amazon EC2 con el par de claves que la instancia tiene asignado en este momento.

  **Linux**: puede aplicar SSH a la instancia utilizando la clave de SSH almacenada en Systems Manager Parameter Store como **/ec2rl/openssh/*instance ID*/key**.

## Antes de empezar
<a name="automation-ec2reset-begin"></a>

Antes de ejecutar la siguiente Automation, haga lo siguiente:
+ Copie el ID de la instancia en la que desea restablecer la contraseña de administrador. Especificará este ID en el procedimiento.
+ Opcionalmente, recopile el ID de una subred en la misma zona de disponibilidad que su instancia inaccesible. La instancia de EC2Rescue se creará en esta subred. Si no especifica ninguna subred, Automation crea una nueva VPC temporal en su Cuenta de AWS. Verifique que su Cuenta de AWS tiene al menos una VPC disponible. De forma predeterminada, puede crear cinco VPC en una región. Si ya ha creado cinco VPC en la región, se produce un error en la Automation sin realizar cambios en la instancia. Para obtener más información acerca de las cuotas de Amazon VPC, consulte [VPC y subredes](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-vpcs-subnets) en la *Guía del usuario de Amazon VPC*.
+ También puede crear y especificar un rol de AWS Identity and Access Management (IAM) para Automation. Si no especifica este rol, Automation se ejecuta en el contexto del usuario que ha ejecutado la Automation.

### Concesión de permisos a AWSSupport-EC2Rescue para realizar acciones en las instancias
<a name="automation-ec2reset-access"></a>

EC2Rescue necesita permiso para realizar una serie de acciones en las instancias durante la automatización. Estas acciones invocan los servicios AWS Lambda, IAM y Amazon EC2 para intentar solucionar los problemas de sus instancias de forma segura. Si dispone de permisos de nivel de administrador en su Cuenta de AWS o VPC, es probable que pueda ejecutar la automatización sin configurar permisos, tal y como se describe en esta sección. Si no dispone de permisos de nivel de administrador, usted o un administrador deben configurarlos mediante una de las siguientes opciones.
+ [Concesión de permisos mediante políticas de IAM](#automation-ec2reset-access-iam)
+ [Concesión de permisos mediante una plantilla de CloudFormation](#automation-ec2reset-access-cfn)

#### Concesión de permisos mediante políticas de IAM
<a name="automation-ec2reset-access-iam"></a>

Puede adjuntar la siguiente política de IAM a su cuenta de usuario, grupo o rol como una política insertada o bien puede crear una nueva política administrada de IAM y adjuntarla a su usuario, grupo o rol. Para obtener más información sobre la adición de una política insertada a su usuario, grupo o rol, consulte [Uso de políticas insertadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html). Para obtener más información sobre cómo crear una política administrada, consulte [Uso de políticas administradas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html).

**nota**  
Si crea una nueva política administrada de IAM, también debe adjuntar la política administrada **AmazonSSMAutomationRole** para que la instancia se pueda comunicar con la API de Systems Manager.

**Política de IAM para `AWSSupport-ResetAccess`**

Reemplace *account ID* con su propia información.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "lambda:InvokeFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction"
            ],
            "Resource": "arn:aws:lambda:*:111122223333:function:AWSSupport-EC2Rescue-*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::awssupport-ssm.*/*.template",
                "arn:aws:s3:::awssupport-ssm.*/*.zip"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "iam:CreateRole",
                "iam:CreateInstanceProfile",
                "iam:GetRole",
                "iam:GetInstanceProfile",
                "iam:PutRolePolicy",
                "iam:DetachRolePolicy",
                "iam:AttachRolePolicy",
                "iam:PassRole",
                "iam:AddRoleToInstanceProfile",
                "iam:RemoveRoleFromInstanceProfile",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DeleteInstanceProfile"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/AWSSupport-EC2Rescue-*",
                "arn:aws:iam::111122223333:instance-profile/AWSSupport-EC2Rescue-*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "lambda:CreateFunction",
                "ec2:CreateVpc",
                "ec2:ModifyVpcAttribute",
                "ec2:DeleteVpc",
                "ec2:CreateInternetGateway",
                "ec2:AttachInternetGateway",
                "ec2:DetachInternetGateway",
                "ec2:DeleteInternetGateway",
                "ec2:CreateSubnet",
                "ec2:DeleteSubnet",
                "ec2:CreateRoute",
                "ec2:DeleteRoute",
                "ec2:CreateRouteTable",
                "ec2:AssociateRouteTable",
                "ec2:DisassociateRouteTable",
                "ec2:DeleteRouteTable",
                "ec2:CreateVpcEndpoint",
                "ec2:DeleteVpcEndpoints",
                "ec2:ModifyVpcEndpoint",
                "ec2:Describe*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

#### Concesión de permisos mediante una plantilla de CloudFormation
<a name="automation-ec2reset-access-cfn"></a>

CloudFormation automatiza el proceso de creación de roles y políticas de IAM a través de una plantilla preconfigurada. Utilice el siguiente procedimiento para crear los roles y las políticas de IAM necesarios para EC2Rescue Automation mediante CloudFormation.

**Para crear los roles y las políticas de IAM necesarios para EC2Rescue**

1. Descargue [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip) y extraiga el archivo `AWSSupport-EC2RescueRole.json` en un directorio de su equipo local.

1. Si su Cuenta de AWS está en una partición especial, edite la plantilla para cambiar los valores de ARN por los de su partición.

   Por ejemplo, para las regiones de China, cambie todas las instancias de `arn:aws` por `arn:aws-cn`.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Elija **Create stack (Crear pila)**, **With new resources (standard) (Con nuevos recursos [estándar])**.

1. En la página **Create stack (Crear pila)** en **Prerequisite - Prepare template (Requisito previo: preparar plantilla)**, elija **Template is ready (La plantilla está lista)**.

1. En **Specify template (Especificar plantilla)**, elija **Upload a template file (Cargar un archivo de plantilla)**.

1. Elija **Choose file (Elegir archivo)**, y, a continuación, busque y seleccione el archivo `AWSSupport-EC2RescueRole.json` del directorio en el que lo extrajo.

1. Elija **Siguiente**.

1. En la página **Specify stack details (Especificar detalles de la pila)** para el campo **Stack name (Nombre de la pila)**, escriba un nombre para identificar esta pila y, a continuación, elija **Next (Siguiente)**.

1. (Opcional) En el área **Tags (Etiquetas)**, aplique a la pila uno o varios pares de nombre-valor de claves de etiqueta.

   Las etiquetas son metadatos opcionales que usted asigna a un recurso. Las etiquetas le permiten clasificar los recursos de diversas maneras, por ejemplo, según su finalidad, propietario o entorno. Por ejemplo, puede que desee etiquetar una pila para identificar el tipo de tareas que ejecuta, los tipos de destinos u otros recursos implicados y el entorno en el que se ejecuta.

1. Elegir **Next** (Siguiente)

1. En la página **Review** (Revisar), revise los detalles de la pila y, a continuación, desplácese hacia abajo y elija la opción **I acknowledge that CloudFormation might create IAM resources** (Acepto que es posible que cree recursos de IAM).

1. CloudFormation muestra el estado **CREATE\$1IN\$1PROGRESS** durante unos minutos. El estado cambia a **CREATE\$1COMPLETE** tras crear la pila. También puede elegir el icono de actualización para comprobar el estado del proceso de creación.

1. En la lista de pilas, elija la opción situada junto al pila que acaba de crear y, a continuación, elija la pestaña **Outputs (Salidas)**.

1. Copie el contenido de **Value (Valor)**. Es el ARN de AssumeRole. Especificará este ARN al ejecutar Automation. 

## Ejecución de Automation
<a name="automation-ec2reset-executing"></a>

El siguiente procedimiento describe cómo ejecutar el manual de procedimientos `AWSSupport-ResetAccess` a través de la consola de AWS Systems Manager.

**importante**  
La siguiente automatización detiene la instancia. La detención de la instancia puede ocasionar la pérdida de datos en los volúmenes de almacén de instancias asociados (si los hubiera). La detención de la instancia también puede provocar que cambie la IP pública, si no hay asociada ninguna IP elástica. Para evitar estos cambios de configuración, use Run Command para restablecer el acceso. Para obtener más información, consulte [Uso de EC2Rescue para Windows Server con Systems Manager Run Command](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html) en la *Guía del usuario de Amazon EC2*.

**Para ejecutar el documento de AWSSupport-ResetAccess Automation**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **automatización**.

1. Elija **Ejecutar automatización**.

1. En la sección **Automation document (Documento de Automation)**, elija **Owned by Amazon (Propiedad de Amazon)** en la lista.

1. En la lista de manuales de procedimientos, seleccione el botón de la tarjeta que corresponde a **AWSSupport-ResetAccess** y, a continuación, elija **Next** (Siguiente).

1. En la página **Execute automation document (Ejecutar documento de Automation)**, elija **Simple execution (Ejecución sencilla)**.

1. En la sección **Document details (Detalles del documento)**, asegúrese de que el valor de **Document version (Versión del documento)** sea la versión predeterminada más alta. Por ejemplo, **\$1DEFAULT** o **3 (default) (3 [predeterminada])**.

1. En la sección **Input parameters**, especifique los siguientes parámetros: 

   1. En **InstanceID**, especifique la ID de la instancia inaccesible. 

   1. En **SubnetId**, especifique una subred en una VPC existente en la misma zona de disponibilidad que la instancia que haya indicado. De forma predeterminada, Systems Manager crea una nueva VPC, pero usted puede especificar una subred en una VPC existente, si así lo desea.
**nota**  
Si no ve la opción para especificar un ID de subred, verifique que está usando la versión más reciente **predeterminada** del manual de procedimientos.

   1. En **EC2RescueInstanceType**, especifique un tipo de instancia para la instancia de EC2Rescue, El tipo de instancia predeterminada es `t2.medium`.

   1. Para **AssumeRole**, si ha creado roles para esta automatización mediante el procedimiento de CloudFormation descrito anteriormente en este tema, especifique el ARN de AssumeRole que anotó en la consola de CloudFormation.

1. (Opcional) En el área **Tags** (Etiquetas), aplique uno o más pares de nombre-valor de claves de etiqueta para ayudar a identificar la automatización, como `Key=Purpose,Value=ResetAccess`.

1. Elija **Ejecutar**.

1. Para supervisar el progreso de la automatización, elija la automatización que se esté ejecutando, y luego la pestaña **Steps** (Pasos). Una vez que se haya completado la automatización, elija la pestaña **Descriptions** (Descripciones) y, a continuación, **View output** (Ver salida) para ver los resultados. Para ver la salida de pasos individuales, elija la pestaña **Steps (Pasos)** y, a continuación, **View Outputs (Ver salidas)** junto a un paso.

El manual de procedimientos crea una AMI de copia de seguridad y una AMI que se habilita con contraseñas como parte de la automatización. Los demás recursos que creó la automatización se eliminan automáticamente, pero estas AMIs permanecen en su cuenta. Las AMIs reciben su nombre según las convenciones siguientes:
+ AMI de copia de seguridad: `AWSSupport-EC2Rescue:InstanceID`
+ AMI habilitada con contraseña: AWSSupport-EC2Rescue: AMI habilitada con contraseña de *Instance ID*

Puede localizar estas AMIs buscando el ID de ejecución de Automation.

En Linux, la nueva clave privada de SSH para la instancia se guarda (cifrada) en Parameter Store. El nombre del parámetro es **/ec2rl/openssh/*instance ID*/key**.

# Transferir datos a Automatización usando transformadores de entrada
<a name="automation-tutorial-eventbridge-input-transformers"></a>

Este tutorial de AWS Systems Manager Automation muestra cómo utilizar la característica de transformador de entrada de Amazon EventBridge para extraer el `instance-id` de una instancia de Amazon Elastic Compute Cloud (Amazon EC2) a partir de un evento de cambio de estado de instancia. Automatización es una herramienta de AWS Systems Manager. Utilizamos el transformador de entrada para transmitir esos datos al destino del manual de procedimientos `AWS-CreateImage` como el parámetro de entrada `InstanceId`. La regla se activa cuando alguna instancia cambia al estado `stopped`.

Para obtener más información acerca de cómo trabajar con transformadores de entrada, consulte [Tutorial: utilizar el transformador de entrada para personalizar los datos que se transmiten al destino del evento](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-input-transformer-tutorial.html) en la *Guía del usuario de Amazon EventBridge*.

**Antes de empezar**  
Compruebe que ha agregado los permisos y la política de confianza necesarios de EventBridge a su rol de servicio de Automatización de Systems Manager. Para obtener más información, consulte [Información general sobre la administración de permisos de acceso a los recursos de EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/iam-access-control-identity-based-eventbridge.html) en la *Guía del usuario de Amazon EventBridge*.

**Para utilizar transformadores de entrada con Automation**

1. Abra la consola de Amazon EventBridge en [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. En el panel de navegación, seleccione **Reglas**.

1. Elija **Creación de regla**.

1. Escriba un nombre y una descripción para la regla.

   Una regla no puede tener el mismo nombre que otra regla de la misma región y del mismo bus de eventos.

1. En **Bus de eventos**, seleccione el bus de eventos que desea asociar a esta regla. Si desea que esta regla responda a eventos coincidentes procedentes de su propia Cuenta de AWS, seleccione **default** (predeterminado). Cuando un Servicio de AWS en su cuenta emite un evento, siempre va al bus de eventos predeterminado de su cuenta.

1. En **Tipo de regla**, elija **Regla con un patrón de evento**.

1. Elija **Siguiente**.

1. En **Origen del evento**, elija **Eventos de AWS o eventos de socios de EventBridge**.

1. En la sección **Patrón de eventos**, elija **Formulario de patrón de eventos**.

1. En **Event source** (Origen del evento), elija **AWS services** (Servicios de ).

1. En **AWS service** (Servicio de ), elija **EC2**.

1. En **Event Type (Tipo de evento)**, elija **EC2 Instance State-change Notification (Notificación de cambio de estado de instancia de EC2)**.

1. En **Especificación de tipo de evento 1**, seleccione **Estados específicos** y, a continuación, seleccione **Detenido**.

1. En **Especificación del tipo de evento 2**, seleccione **Cualquier instancia** o seleccione **ID de instancia específicos** e introduzca los ID de las instancias que desee supervisar.

1. Elija **Siguiente**.

1. En **Target types** (Tipos de destino), elija **AWS service**.

1. Para **Select a target** (Seleccione un destino), elija **Systems Manager Automation** (Automatización de Systems Manager).

1. En **Document (Documento)**, elija **AWS-CreateImage**.

1. Expanda la sección **Configure automation parameter(s)** (Configurar parámetros de automatización) y seleccione **Input Transformer** (Transformador de entrada).

1. En **Input path** (Ruta de entrada), escriba **\$1"instance":"\$1.detail.instance-id"\$1**.

1. En **Template** (Plantilla), escriba **\$1"InstanceId":[<instance>]\$1**.

1. En **Execution role** (Rol de ejecución), elija **Use existing role** (Usar rol existente) y elija su rol de servicio de Automation.

1. Elija **Siguiente**.

1. (Opcional) Introduzca una o varias etiquetas para la regla. Para obtener más información, consulte [Etiquetado de los recursos de Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-tagging.html) en la *Guía del usuario de Amazon EventBridge*.

1. Elija **Siguiente**.

1. Revise los detalles de la regla y seleccione **Creación de regla**.

# Obtenga información sobre los estados devueltos por la automatización de Systems Manager
<a name="automation-statuses"></a>

AWS Systems Manager Automation brinda información detallada sobre los diferentes estados por los que pasa una acción o un paso de una automatización, y para la automatización general. Automatización es una herramienta de AWS Systems Manager. Puede monitorear los estados de la automatización con los siguientes métodos:
+ Monitoree el **estado de ejecución** en la consola de Systems Manager Automation.
+ Utilice sus herramientas de línea de comandos preferidas. Para la AWS Command Line Interface (AWS CLI), puede utilizar [describe-automation-step-executions](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-automation-step-executions.html) o [get-automation-execution](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-automation-execution.html). Para las AWS Tools for Windows PowerShell, puede utilizar [Get-SSMAutomationStepExecution](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMAutomationStepExecution.html) o [Get-SSMAutomationExecution](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMAutomationExecution.html).
+ Configure Amazon EventBridge para responder a los cambios de estado de una acción o una automatización.

Para obtener más información sobre cómo gestionar los tiempos de espera de una automatización, consulte [Administración de los tiempos de espera en los manuales de procedimientos](automation-handling-timeouts.md).

## Acerca de los estados de las automatizaciones
<a name="automation-statuses-about"></a>

Automation brinda información detallada sobre el estado de las acciones de automatización individuales, además de la automatización general.

El estado general de la automatización puede ser diferente del estado notificado por una acción o un paso individuales, como se describe en las siguientes tablas.


**Estado detallado de las acciones**  

| Status | Details | 
| --- | --- | 
| Pending (Pendiente) | Todavía no se ha empezado a ejecutar el paso. Si la automatización utiliza acciones condicionales y no se cumplió la condición para ejecutar el paso, este permanece en este estado después de que se completa una automatización. Los pasos también permanecen en este estado si la automatización se cancela antes de que se ejecute el paso. | 
| InProgress | El paso se está ejecutando. | 
| Waiting | El paso está esperando la entrada. | 
| Success | El paso se ha completado correctamente. Se trata de un estado terminal. | 
| TimedOut | No se completó un paso ni una aprobación antes del periodo de espera especificado. Se trata de un estado terminal. | 
| Cancelling | El paso se encuentra en proceso de detención después de ser cancelado por un solicitante. | 
| Cancelado | Un solicitante detuvo el paso antes de que se completara. Se trata de un estado terminal. | 
| Failed |  El paso no se completó correctamente. Se trata de un estado terminal.  | 
| Exited |  Solo devuelto por la acción `aws:loop`. El bucle ciclo no se completó. Un paso dentro del bucle se movió a un paso exterior mediante las propiedades `nextStep`, `onCancel`, o `onFailure`.  | 


**Estado detallado de una automatización**  

| Status | Details | 
| --- | --- | 
| Pending (Pendiente) | Todavía no se ha empezado a ejecutar la automatización. | 
| InProgress | La automatización se está ejecutando. | 
| Waiting | La automatización está esperando la entrada. | 
| Success | Se ha completado correctamente la automatización. Se trata de un estado terminal. | 
| TimedOut | No se completó un paso ni una aprobación antes del periodo de espera especificado. Se trata de un estado terminal. | 
| Cancelling | La automatización se encuentra en proceso de detención después de ser cancelada por un solicitante. | 
| Cancelado | Un solicitante detuvo la automatización antes de que se completara. Se trata de un estado terminal. | 
| Failed |  No se ha completado correctamente la automatización. Se trata de un estado terminal.  | 

# Solución de problemas de Automatización de Systems Manager
<a name="automation-troubleshooting"></a>

Utilice la siguiente información como ayuda para solucionar problemas con Automatización de AWS Systems Manager, una herramienta de AWS Systems Manager. En este tema se incluyen tareas específicas para resolver problemas basados en los mensajes de error de Automation.

**Topics**
+ [Errores de Automation comunes](#automation-trbl-common)
+ [No se ha podido iniciar la ejecución de Automation](#automation-trbl-access)
+ [Ejecución iniciada, pero el estado es Error](#automation-trbl-exstrt)
+ [La ejecución se ha iniciado, pero se ha agotado el tiempo de espera](#automation-trbl-to)

## Errores de Automation comunes
<a name="automation-trbl-common"></a>

En esta sección se incluye información sobre los errores de Automation comunes.

### VPC not defined 400
<a name="automation-trbl-common-vpc"></a>

De forma predeterminada, cuando Automation ejecuta los manuales de procedimientos `AWS-UpdateLinuxAmi` o `AWS-UpdateWindowsAmi`, el sistema crea una instancia temporal en la VPC predeterminada (172.30.0.0/16). Si ha eliminado la VPC predeterminada, recibirá el siguiente error:

`VPC not defined 400`

Para resolver este problema, debe especificar un valor para el parámetro de entrada `SubnetId`.

## No se ha podido iniciar la ejecución de Automation
<a name="automation-trbl-access"></a>

Es posible que no se logre completar una automatización debido a un error de acceso denegado o un error de rol de asunción no válido si no ha configurado correctamente los roles y las políticas de AWS Identity and Access Management (IAM) para Automatización.

### Acceso denegado
<a name="automation-trbl-access-denied"></a>

En los siguientes ejemplos, se describen situaciones en las que no se logra iniciar una automatización por un error de acceso denegado.

**Acceso denegado a la API de Systems Manager**  
**Mensaje de error**: `User: user arn isn't authorized to perform: ssm:StartAutomationExecution on resource: document arn (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: AccessDeniedException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`
+ Posible causa 1: el usuario que intenta iniciar la automatización no tiene permiso para invocar la API `StartAutomationExecution`. Para resolver este problema, adjunte la política de IAM necesaria al usuario que se utilizó para iniciar la automatización. 
+ Posible causa 2: el usuario que intenta iniciar la automatización tiene permiso para invocar la API `StartAutomationExecution`, pero no para invocarla a través del manual de procedimientos específico. Para resolver este problema, adjunte la política de IAM necesaria al usuario que se utilizó para iniciar la automatización. 

**Acceso denegado debido a la falta de permisos PassRole**  
**Mensaje de error**: `User: user arn isn't authorized to perform: iam:PassRole on resource: automation assume role arn (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: AccessDeniedException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`

El usuario que intenta iniciar la automatización no tiene el permiso PassRole para el rol de asunción. Para solucionar este problema, adjunte la política iam:PassRole al rol del usuario que intenta iniciar la automatización. Para obtener más información, consulte [Tarea 2: asociar la política iam:PassRole al rol de Automation](automation-setup-iam.md#attach-passrole-policy).

### Rol de asunción no válido
<a name="automation-trbl-ar"></a>

Al ejecutar una automatización, se proporciona un rol de asunción en el manual de procedimientos o se transmite como un valor de parámetro al manual. Los diferentes tipos de errores se pueden producir si el rol de asunción no se especifica ni se configura correctamente.

**Rol de asunción con formato incorrecto**  
**Mensaje de error**: `The format of the supplied assume role ARN isn't valid.` El rol de asunción tiene un formato incorrecto. Para solucionar este problema, verifique que se ha especificado un rol de asunción válido en el manual de procedimientos o como un parámetro de tiempo de ejecución al iniciar la automatización.

**No se puede asumir el rol de asunción**  
**Mensaje de error**: `The defined assume role is unable to be assumed. (Service: AWSSimpleSystemsManagement; Status Code: 400; Error Code: InvalidAutomationExecutionParametersException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`
+ Posible causa 1: el rol de asunción no existe. Para resolver este problema, cree el rol. Para obtener más información, consulte [Configuración de Automation](automation-setup.md). Los detalles específicos para la creación de este rol se describen en el siguiente tema, [Tarea 1: crear un rol de servicio para Automation](automation-setup-iam.md#create-service-role).
+ Posible causa 2: el rol de asunción no tiene una relación de confianza con el servicio Systems Manager. Para solucionar este problema, cree la relación de confianza. Para obtener más información, consulte [No puedo asumir un rol](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_cant-assume-role) en la *Guía del usuario de IAM*. 

## Ejecución iniciada, pero el estado es Error
<a name="automation-trbl-exstrt"></a>

### Errores específicos de la acción
<a name="automation-trbl-actspec"></a>

Los manuales de procedimientos contienen pasos que se ejecutan en orden. Cada paso invoca una o varias API de Servicio de AWS. Las API determinan las entradas, el comportamiento y las salidas del paso. Hay varios lugares en los que un error puede provocar que no se realice un paso. Los mensajes de error indican cuándo y dónde se ha producido un error.

Para ver un mensaje de error en la consola de Amazon Elastic Compute Cloud (Amazon EC2), elija el enlace **View Outputs** (Ver salidas) del paso con error. Para ver un mensaje de error desde la AWS CLI, llame a `get-automation-execution` y busque el atributo `FailureMessage` en un `StepExecution` con error.

En los siguientes ejemplos, se ha producido un error en un paso asociado a la acción `aws:runInstance`. Cada ejemplo explora un tipo de error distinto.

**Falta la imagen**  
**Mensaje de error**: `Automation Step Execution fails when it's launching the instance(s). Get Exception from RunInstances API of ec2 Service. Exception Message from RunInstances API: [The image id '[ami id]' doesn't exist (Service: AmazonEC2; Status Code: 400; Error Code: InvalidAMIID.NotFound; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)]. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

La acción `aws:runInstances` ha recibido la acción de un `ImageId` que no existe. Para solucionar este problema, actualice el manual de procedimientos o los valores de parámetro con el ID de AMI correcto.

**La política de rol de asunción no tiene permisos suficientes**  
**Mensaje de error**: `Automation Step Execution fails when it's launching the instance(s). Get Exception from RunInstances API of ec2 Service. Exception Message from RunInstances API: [You aren't authorized to perform this operation. Encoded authorization failure message: xxxxxxx (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)]. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

El rol de asunción no tiene permisos suficientes para invocar la API `RunInstances` en las instancias EC2. Para solucionar este problema, adjunte una política de IAM al rol de asunción que tenga permiso para invocar la API `RunInstances`. Para obtener más información, consulte la [Cree los roles de servicio para la automatización mediante la consola](automation-setup-iam.md).

**Estado inesperado**  
**Mensaje de error**: `Step fails when it's verifying launched instance(s) are ready to be used. Instance i-xxxxxxxxx entered unexpected state: shutting-down. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`
+ Posible causa 1: hay un problema en la instancia o el servicio Amazon EC2. Para solucionar este problema, inicie sesión en la instancia o revise el registro del sistema de la instancia para entender por qué la instancia ha comenzado a cerrarse.
+ Posible causa 2: el script de datos de usuario especificado para la acción `aws:runInstances` tiene un problema o una sintaxis incorrecta. Verifique la sintaxis del script de datos de usuario. Además, verifique que los scripts de datos de usuario no cierran la instancia, o invoque otros scripts que cierren la instancia.

**Referencias de errores específicos de la acción**  
Cuando se produce un error en un paso, el mensaje de error podría indicar qué servicio se estaba invocando cuando se produjo el error. En la siguiente tabla se enumeran los servicios invocados por cada acción. La tabla también incluye enlaces a información acerca de cada servicio.


****  

| Action | Servicios de AWS invocados por esta acción | Para obtener información sobre este servicio | Solución de problemas de contenido | 
| --- | --- | --- | --- | 
|  `aws:runInstances`  |  Amazon EC2  |  [Guía del usuario de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/)  |  [Solución de problemas de las instancias EC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-troubleshoot.html)  | 
|  `aws:changeInstanceState`  |  Amazon EC2  |  [Guía del usuario de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/)  |  [Solución de problemas de las instancias EC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-troubleshoot.html)  | 
|  `aws:runCommand`  |  Systems Manager  |   [AWS Systems Manager Run Command](run-command.md)  |   [Solución de problemas Systems Manager Run Command](troubleshooting-remote-commands.md)  | 
|  `aws:createImage`  |  Amazon EC2  |  [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)  |  | 
|  `aws:createStack`  |  CloudFormation  |  [AWS CloudFormation Guía del usuario de](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)  |  [Resolución de problemas de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html)  | 
|  `aws:deleteStack`  |  CloudFormation  |  [AWS CloudFormation Guía del usuario de](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)  |  [Resolución de problemas de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html)  | 
|  `aws:deleteImage`  |  Amazon EC2  |  [Imágenes de máquina de Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)  |  | 
|  `aws:copyImage`  |  Amazon EC2  |  [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)  |  | 
|  `aws:createTag`  |  Amazon EC2, Systems Manager  |  [Recursos y etiquetas de EC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_Resources.html)  |  | 
|  `aws:invokeLambdaFunction`  |  AWS Lambda  |  [AWS Lambda Guía para desarrolladores de](https://docs.aws.amazon.com/lambda/latest/dg/)  |  [Solución de problemas de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html)  | 

### Error interno del servicio Automation
<a name="automation-trbl-err"></a>

**Mensaje de error**: `Internal Server Error. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

Un problema con el servicio de Automation impide que el manual de procedimientos especificado se ejecute correctamente. Para solucionar este problema, póngase en contacto con AWS Support. Proporcione el ID de ejecución y el ID de cliente, si están disponibles.

## La ejecución se ha iniciado, pero se ha agotado el tiempo de espera
<a name="automation-trbl-to"></a>

**Mensaje de error**: `Step timed out while step is verifying launched instance(s) are ready to be used. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.`

Se ha agotado el tiempo de espera de la acción `aws:runInstances`. Esto puede ocurrir si la acción del paso tarda en ejecutarse más que el valor especificado para `timeoutSeconds` en el paso. Para resolver este problema, especifique un valor más largo para el parámetro `timeoutSeconds` en la acción `aws:runInstances`. Si no se resuelve el problema con esto, investigue el motivo por el cual el paso tarda más de lo esperado en ejecutarse

# AWS Systems Manager Change Calendar
<a name="systems-manager-change-calendar"></a>

Change Calendar, una herramienta de AWS Systems Manager, le permite configurar intervalos de fecha y hora cuando las acciones que especifique (por ejemplo, en manuales de procedimientos de [Automatización de Systems Manager](systems-manager-automation.md)) pueden llevarse a cabo o no en su Cuenta de AWS. En Change Calendar, estos intervalos se denominan *eventos*. Cuando crea una entrada de Change Calendar, está creando un [documento de Systems Manager](documents.md) del tipo `ChangeCalendar`. En Change Calendar, el documento almacena datos [iCalendar 2.0](https://icalendar.org/) en texto sin formato. Los eventos que añada a la entrada de Change Calendar pasan a formar parte del documento. Para comenzar a utilizar Change Calendar, abra la [consola de Systems Manager](https://console.aws.amazon.com//systems-manager/change-calendar). En el panel de navegación, elija **Change Calendar**.

Puede crear un calendario y sus eventos en la consola de Systems Manager. También puede importar un iCalendar (`.ics`) que ha exportado desde un proveedor de calendario de terceros compatible para agregar los eventos al calendario. Los proveedores compatibles incluyen Google Calendar, Microsoft Outlook y iCloud Calendar.

Una entrada de Change Calendar puede ser de dos tipos:

**`DEFAULT_OPEN`**, o abierta de forma predeterminada  
Todas las acciones se pueden ejecutar de forma predeterminada, excepto durante los eventos del calendario. Durante los eventos, el estado de un calendario `DEFAULT_OPEN` es `CLOSED` y los eventos están bloqueados para que se ejecuten.

**`DEFAULT_CLOSED`**, o cerrada de forma predeterminada  
Todas las acciones están bloqueadas de forma predeterminada, excepto durante los eventos del calendario. Durante los eventos, el estado de un calendario `DEFAULT_CLOSED` es `OPEN` y se permite ejecutar acciones.

Puede elegir que todos los flujos de trabajo de automatización programados, los períodos de mantenimiento y las asociaciones de State Manager se agreguen automáticamente a un calendario. También puede eliminar cualquiera de esos tipos individuales de la pantalla del calendario. 

## ¿Quién debe utilizar Change Calendar?
<a name="systems-manager-change-calendar-who"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 
+ Los clientes de AWS que realizan los siguientes tipos de acciones:
  + Cree o ejecute manuales de procedimientos de automatización.
  + Cree una solicitud de cambio en Change Manager.
  + Ejecute los periodos de mantenimiento.
  + Cree una asociación en State Manager.

  Automatización, Change Manager, Maintenance Windows y State Manager son herramientas de AWS Systems Manager. Mediante la integración de estas herramientas a Change Calendar, puede permitir o bloquear estos tipos de acciones en función del estado actual del calendario de cambios que asocie a cada uno.
+ Lo deben utilizar los administradores responsables de que las configuraciones de los nodos administrados de Systems Manager sean coherentes, estables y funcionales en todo momento.

## Ventajas de Change Calendar
<a name="systems-manager-change-calendar-benefits"></a>

A continuación se describen los beneficios de Change Calendar.
+ **Revisión de los cambios antes de aplicarlos**

  Una entrada de Change Calendar puede ayudar a garantizar que los cambios potencialmente destructivos para el entorno se revisen antes de aplicarlos.
+ **Aplicación de cambios solo durante los momentos apropiados**

  Change CalendarLas entradas de ayudan a mantener el entorno estable durante los eventos. Por ejemplo, puede crear una entrada de Change Calendar para impedir los cambios cuando espere una gran demanda de recursos; por ejemplo, durante una conferencia o una promoción de marketing pública. Una entrada de calendario también puede impedir los cambios mientras esté previsto que el soporte de administradores sea limitado; por ejemplo, durante las vacaciones o los días festivos. Puede usar una entrada de calendario para permitir los cambios excepto en determinados momentos del día o de la semana en los que disponga de soporte de administradores limitado para solucionar problemas de acciones o implementaciones fallidas.
+ **Obtener el estado actual o próximo del calendario**

  Puede ejecutar la operación `GetCalendarState` de la API de Systems Manager para mostrar el estado actual del calendario, el estado a una hora determinada o la próxima vez programada para cambiar el estado del calendario.
**nota**  
La API `GetCalendarState` tiene una cuota de 10 solicitudes por segundo. Para obtener más información sobre las cuotas de Systems Manager, consulte [Service Quotas de Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm) en *Referencia general de Amazon Web Services*.
+ 

**Compatibilidad con EventBridge**  
Esta herramienta de Systems Manager se admite como un tipo de *evento* en las reglas de Amazon EventBridge. Para obtener más información, consulte [Cómo monitorear eventos de Systems Manager con Amazon EventBridge](monitoring-eventbridge-events.md) y [Referencia: patrones y tipos de eventos de Amazon EventBridge para Systems Manager](reference-eventbridge-events.md).

**Topics**
+ [¿Quién debe utilizar Change Calendar?](#systems-manager-change-calendar-who)
+ [Ventajas de Change Calendar](#systems-manager-change-calendar-benefits)
+ [Cómo configurar Change Calendar](systems-manager-change-calendar-prereqs.md)
+ [Uso de Change Calendar](systems-manager-change-calendar-working.md)
+ [Agregado de dependencias de Change Calendar a manuales de procedimientos de Automation](systems-manager-change-calendar-automations.md)
+ [Resolución de problemas de Change Calendar](change-calendar-troubleshooting.md)

# Cómo configurar Change Calendar
<a name="systems-manager-change-calendar-prereqs"></a>

Complete lo siguiente antes de usar Change Calendar, una herramienta de AWS Systems Manager.

## Instalar las herramientas de línea de comandos más recientes
<a name="change-calendar-prereqs-tools"></a>

Instale las herramientas de línea de comandos más recientes para obtener información de estado acerca de los calendarios.


| Requisito | Descripción | 
| --- | --- | 
|  AWS CLI  |  (Opcional) Para utilizar la AWS Command Line Interface (AWS CLI) con el fin de obtener información de estado acerca de los calendarios, instale la versión más reciente de la AWS CLI en el equipo local. Para obtener más información acerca de cómo se instala o actualiza la CLI, consulte [Instalación, actualización y desinstalación de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la *Guía del usuario de AWS Command Line Interface*.  | 
|  Herramientas de AWS para PowerShell  |  (Opcional) Para utilizar Tools for PowerShell con el fin de obtener información de estado acerca de los calendarios, instale la versión más reciente de Tools for PowerShell en el equipo local. Para obtener más información acerca de cómo se instala o actualiza Tools for PowerShell, consulte [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html) en la *Guía del usuario de Herramientas de AWS para PowerShell*.  | 

## Configuración de permisos
<a name="change-calendar-prereqs-permissions"></a>

Si el usuario, grupo o rol tiene asignados permisos de administrador, entonces tiene acceso a Change Calendar. Si no tiene permisos de administrador, un administrador debe concederle permiso mediante la asignación de la política administrada `AmazonSSMFullAccess` o de una política que proporcione permisos comparables a su usuario, grupo o rol.

Los siguientes permisos son necesarios para utilizar Change Calendar.

**Entradas de Change Calendar**  
Para crear, actualizar o eliminar una entrada de Change Calendar, incluida la adición y eliminación de eventos de la entrada, debe tener una política adjunta a su usuario, grupo o rol que permita las siguientes acciones:  
+ `ssm:CreateDocument`
+ `ssm:DeleteDocument`
+ `ssm:DescribeDocument`
+ `ssm:DescribeDocumentPermission`
+ `ssm:GetCalendar`
+ `ssm:ListDocuments`
+ `ssm:ModifyDocumentPermission`
+ `ssm:PutCalendar`
+ `ssm:UpdateDocument`
+ `ssm:UpdateDocumentDefaultVersion`

**Estado del calendario**  
Para obtener información sobre el estado actual o próximo del calendario, debe tener una política adjunta a su usuario, grupo o rol que permita la siguiente acción:  
+ `ssm:GetCalendarState`

**Eventos operativos**  
Para ver los eventos operativos, como los periodos de mantenimiento, las asociaciones y las automatizaciones planificadas, la política asociada al usuario, grupo o rol debe permitir las siguientes acciones:  
+ `ssm:DescribeMaintenanceWindows`
+ `ssm:DescribeMaintenanceWindowExecution`
+ `ssm:DescribeAutomationExecutions`
+ `ssm:ListAssociations`

**nota**  
Change CalendarLas entradas de que son propiedad de (es decir, que se han creado mediante) cuentas distintas de las suyas serán de solo lectura, aunque se compartan con su cuenta. Los periodos de mantenimiento, las asociaciones de State Manager y las automatizaciones no se comparten.

# Uso de Change Calendar
<a name="systems-manager-change-calendar-working"></a>

Puede usar la consola de AWS Systems Manager para agregar, administrar o eliminar entradas de Change Calendar, una herramienta de AWS Systems Manager. También puede importar eventos de proveedores de calendarios de terceros admitidos mediante la importación de un archivo de iCalendar (`.ics`) que exportó desde el calendario fuente. Puede utilizar la operación de la API `GetCalendarState` o el comando `get-calendar-state` de AWS Command Line Interface (AWS CLI) para obtener información acerca del estado de Change Calendar en un momento específico.

**Topics**
+ [Creación de un calendario de cambios](change-calendar-create.md)
+ [Creación y administración de eventos en Change Calendar](change-calendar-events.md)
+ [Importación y administración de eventos desde calendarios de terceros](third-party-events.md)
+ [Actualización de un calendario de cambios](change-calendar-update.md)
+ [Uso compartido de un calendario de cambios](change-calendar-share.md)
+ [Eliminación de un calendario de cambios](change-calendar-delete.md)
+ [Obtención del estado de un calendario de cambios](change-calendar-getstate.md)

# Creación de un calendario de cambios
<a name="change-calendar-create"></a>

Cuando crea una entrada en Change Calendar, una herramienta de AWS Systems Manager, está creando un documento de Systems Manager (documento de SSM) que utiliza el formato `text`.

**Para crear un calendario de cambios**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. Elija **Create calendar (Crear calendario)**.

   -o bien-

   Si se abre la página de inicio **Change Calendar** primero, elija **Create change calendar** (Creación de calendario de cambios).

1. En la página **Create calendar (Crear calendario)**, en **Calendar details (Detalles del calendario)**, escriba un nombre para la entrada de calendario. Los nombres de entradas de calendario solo pueden incluir letras, números, puntos, guiones y guiones bajos. El nombre debe ser lo bastante específico como para identificar el propósito de la entrada de calendario de un vistazo. Un ejemplo es **support-off-hours**. Este nombre no se puede actualizar después de haber creado la entrada de calendario.

1. (Opcional) En **Description** (Descripción), escriba una descripción para la entrada de calendario.

1. (Opcional) En el área **Import calendar** (Importa calendario), elija **Choose file** (Elegir archivo) para seleccionar un archivo de iCalendar (`.ics`) que ha exportado desde un proveedor de calendario de terceros. Al importar el archivo, los eventos al calendario se agregarán.

   Los proveedores compatibles incluyen Google Calendar, Microsoft Outlook y iCloud Calendar.

   Para obtener más información, consulte [Importación de eventos de proveedores de calendarios de terceros](change-calendar-import.md).

1. En **Calendar type (Tipo de calendario)**, elija una de las opciones siguientes:
   + **Open by default** (Abierto de forma predeterminada): el calendario se abre (las acciones de Automation se pueden ejecutar hasta que se inicie un evento) y, a continuación, se cierra durante el tiempo de un evento asociado.
   + **Closed by default** (Cerrado de forma predeterminada): el calendario se cierra (las acciones de Automation no se pueden ejecutar hasta que se inicie un evento), pero se abre durante el tiempo de un evento asociado.

1. (Opcional) En **Eventos de administración de cambios**, seleccione **Agregar eventos de administración de cambios al calendario**. En esta selección se muestran todos los periodos de mantenimiento programado, las asociaciones de State Manager, los flujos de trabajo de automatización y las solicitudes de cambios de Change Manager en la visualización del calendario mensual.
**sugerencia**  
Si más adelante desea eliminar permanentemente estos tipos de eventos de la visualización del calendario, edite el calendario, desactive esta casilla y, a continuación, elija **Guardar**.

1. Elija **Create calendar (Crear calendario)**.

   Una vez creada la entrada de calendario, Systems Manager muestra la entrada de calendario en la lista **Change Calendar**. Las columnas muestran la versión del calendario y el número de la Cuenta de AWS del propietario del calendario. La entrada de calendario no puede impedir ni permitir ninguna acción hasta que haya agregado al menos un evento. Para obtener más información sobre cómo se crea un evento, consulte [Creación de un evento de Change Calendar](change-calendar-create-event.md). Para obtener información sobre la importación de eventos, consulte [Importación de eventos de proveedores de calendarios de terceros](change-calendar-import.md).

# Creación y administración de eventos en Change Calendar
<a name="change-calendar-events"></a>

Después de crear un calendario en AWS Systems Manager Change Calendar, puede crear, actualizar y eliminar eventos incluidos en el calendario abierto o cerrado. Change Calendar es una herramienta de AWS Systems Manager.

**sugerencia**  
Como alternativa a crear eventos directamente en la consola de Systems Manager, puede importar un archivo de iCalendar (`.ics`) de una aplicación de calendario de terceros compatible. Para obtener más información, consulte [Importación y administración de eventos desde calendarios de terceros](third-party-events.md).

**Topics**
+ [Creación de un evento de Change Calendar](change-calendar-create-event.md)
+ [Actualización de un evento de Change Calendar](change-calendar-update-event.md)
+ [Eliminación de un evento de Change Calendar](change-calendar-delete-event.md)

# Creación de un evento de Change Calendar
<a name="change-calendar-create-event"></a>

Cuando agrega un evento a una entrada de Change Calendar, una herramienta de AWS Systems Manager, especifica un periodo durante el cual se suspende la acción predeterminada de la entrada de calendario. Por ejemplo, si el tipo de entrada de calendario es cerrado de forma predeterminada, el calendario estará abierto para realizar cambios durante los eventos. (Alternativamente, puede crear un evento de asesoramiento, que solo cumple un rol informativo en el calendario).

Actualmente, solo puede crear un evento de Change Calendar mediante la consola. Los eventos se agregan al documento de Change Calendar que crea cuando crea una entrada de Change Calendar.

**Para crear un evento de Change Calendar**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. En la lista de calendarios, elija el nombre de la entrada de calendario a la que desea agregar un evento.

1. En la página de detalles de la entrada de calendario, seleccione **Create event (Crear evento)**.

1. En la página **Create scheduled event (Crear evento programado)**, en **Event details (Detalles del evento)** escriba el un nombre para mostrar del evento. Los nombres de eventos solo pueden incluir letras, números, puntos, guiones y guiones bajos. El nombre debe ser lo bastante específico para identificar el propósito del evento. Un ejemplo es **nighttime-hours**.

1. En **Description** (Descripción), escriba una descripción del evento. Por ejemplo, **The support team isn't available during these hours**.

1. (Opcional) Si desea que este evento sirva solo como notificación visual o recordatorio, seleccione la casilla de verificación **Advisory** (Recordatorio). Los eventos de recordatorio no cumplen ningún rol funcional en su calendario. Solo sirven para fines informativos para aquellos que ven su calendario.

1. En **Event start date** (Fecha de inicio del evento), ingrese o elija un día con el formato `MM/DD/YYYY` para iniciar el evento e indique una hora en el día especificado con el formato `hh:mm:ss` (horas, minutos y segundos) para iniciar el evento.

1. En **Event end date (Fecha de finalización del evento)**, ingrese o elija un día con el formato `MM/DD/YYYY` para finalizar el evento e indique una hora en el día especificado con el formato `hh:mm:ss` (horas, minutos y segundos) para finalizar el evento.

1. En **Schedule time zone (Programar zona horaria)**, elija la zona horaria aplicable a las horas de inicio y finalización del evento. Puede introducir parte del nombre de una ciudad o la diferencia de zona horaria con respecto a la hora media de Greenwich (GMT) para encontrar una zona horaria más rápidamente. El valor predeterminado es la Hora Universal Coordinada (UTC).

1. (Opcional) Para crear un evento que se repita con periodicidad diaria, semanal o mensual, active **Recurrence** (Recurrencia) y, a continuación, especifique la frecuencia y la fecha de finalización opcionales de la repetición.

1. Elija **Create scheduled event (Crear evento programado)**. El nuevo evento se agrega a la entrada de calendario y se muestra en la pestaña **Events (Eventos)** de la página de detalles de la entrada de calendario.

# Actualización de un evento de Change Calendar
<a name="change-calendar-update-event"></a>

Utilice el siguiente procedimiento para actualizar un evento Change Calendar en la consola de AWS Systems Manager. Change Calendar es una herramienta de AWS Systems Manager.

**Para actualizar un evento de Change Calendar**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. En la lista de calendarios, elija el nombre de la entrada de calendario cuyo evento desea editar.

1. En la página de detalles de la entrada de calendario, seleccione **Events (Eventos)**.

1. En la página del calendario, elija el evento que desea editar.
**sugerencia**  
Utilice los botones de la parte superior izquierda para avanzar o retroceder un año o un mes. Si es preciso cambiar la zona horaria, elija la que sea correcta en la lista ubicada en la parte superior derecha.

1. En **Event details** (Detalles del evento), elija **Edit** (Editar).

   Para cambiar el nombre y la descripción del evento, agregue o reemplace los valores de texto actuales.

1. Para cambiar el valor **Event start date** (Fecha de inicio del evento), elija la fecha de inicio actual y, a continuación, elija una nueva fecha del calendario. Para cambiar la hora de inicio, elija la hora de inicio actual y, a continuación, elija una nueva hora de la lista.

1. Para cambiar el valor **Event end date** (Fecha de finalización del evento), elija la fecha actual y, a continuación, elija una nueva fecha de finalización del calendario. Para cambiar la hora de finalización, elija la hora de finalización actual y, a continuación, elija una nueva hora de la lista.

1. Para cambiar el valor de **Schedule time zone** (Programar zona horaria), seleccione la zona horaria aplicable a la hora de inicio y de finalización del evento. Puede introducir parte del nombre de una ciudad o la diferencia de zona horaria con respecto a la hora media de Greenwich (GMT) para encontrar una zona horaria más rápidamente. El valor predeterminado es la Hora Universal Coordinada (UTC).

1. (Opcional) Si desea que este evento sirva solo como notificación visual o recordatorio, seleccione la casilla de verificación **Advisory** (Recordatorio). Los eventos de recordatorio no cumplen ningún rol funcional en su calendario. Solo sirven para fines informativos para aquellos que ven su calendario.

1. Seleccione **Guardar**. Los cambios se muestran en la pestaña **Events (Eventos)** de la página de detalles de la entrada de calendario. Elija el evento que ha actualizado para ver los cambios.

# Eliminación de un evento de Change Calendar
<a name="change-calendar-delete-event"></a>

Puede eliminar un evento a la vez en Change Calendar, una herramienta de AWS Systems Manager, mediante la Consola de administración de AWS. 

**sugerencia**  
Si cuando creó el calendario seleccionó **Agregar eventos de administración de cambios al calendario**, puede hacer lo siguiente:  
Para ocultar *temporalmente* un tipo de evento de administración de cambios de la visualización del calendario, seleccione la **X** para el tipo en la parte superior de la vista previa mensual.
Para eliminar *permanentemente* estos tipos de la visualización del calendario, edite el calendario, desactive la casilla **Agregar eventos de administración de cambios al calendario** y, a continuación, seleccione **Guardar**. Si elimina los tipos de la visualización del calendario, no se eliminarán de la cuenta.

**Para eliminar un evento de Change Calendar**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. En la lista de calendarios, elija el nombre de la entrada de calendario cuyo evento desea eliminar.

1. En la página de detalles de la entrada de calendario, seleccione **Events (Eventos)**.

1. En la página del calendario, elija el evento que desea eliminar.
**sugerencia**  
Utilice los botones de la parte superior izquierda para avanzar o retroceder un año o un mes en el calendario. Si es preciso cambiar la zona horaria, elija la que sea correcta en la lista ubicada en la parte superior derecha.

1. En la página **Event details (Detalles del evento)**, seleccione **Delete (Eliminar)**. Cuando se le pida que confirme que desea eliminar el evento, elija **Confirm** (Confirmar).

# Importación y administración de eventos desde calendarios de terceros
<a name="third-party-events"></a>

Como alternativa a la creación de eventos directamente en la consola de AWS Systems Manager, puede importar un archivo de iCalendar (`.ics`) de una aplicación de calendario de terceros compatible. El calendario puede incluir eventos importados y eventos que cree en Change Calendar, que es una herramienta de AWS Systems Manager.

**Antes de empezar**  
Antes de intentar importar un archivo de calendario, revise los siguientes requisitos y restricciones:

Formato del archivo del calendario  
Solo son compatibles los archivos de iCalendar válidos (`.ics`).

Proveedores de calendarios compatibles  
Solo se admiten los archivos `.ics` exportados de los siguientes proveedores de calendarios de terceros:  
+ Calendario de Google ([Instrucciones de exportación](https://support.google.com/calendar/answer/37111))
+ Microsoft Outlook ([Instrucciones de exportación](https://support.microsoft.com/en-us/office/export-an-outlook-calendar-to-google-calendar-662fa3bb-0794-4b18-add8-9968b665f4e6))
+ Calendario de iCloud ([Instrucciones de exportación](https://support.apple.com/guide/calendar/import-or-export-calendars-icl1023/mac))

Tamaño del archivo  
Puede importar cualquier número de archivos `.ics` válidos. Sin embargo, el tamaño total de todos los archivos importados de cada calendario no puede superar los 64 KB.  
Para minimizar el tamaño del archivo `.ics`, asegúrese de exportar solo los detalles básicos sobre las entradas del calendario. Si es necesario, reduzca la duración del período de tiempo que va a exportar.

Zona horaria  
Además de un nombre de calendario, un proveedor de calendario y al menos un evento, el archivo `.ics` que se exporta debe indicar también la zona horaria del calendario. Si no lo hace o hay un problema al identificar la zona horaria, se le pedirá que especifique una después de importar el archivo.

Limitación de eventos periódicos  
El archivo `.ics` que exportó puede incluir eventos recurrentes. Sin embargo, si se ha eliminado una o varias apariciones de un evento recurrente en el calendario fuente, se produce un error en la importación.

**Topics**
+ [Importación de eventos de proveedores de calendarios de terceros](change-calendar-import.md)
+ [Actualización de todos los eventos de un proveedor de calendario de terceros](change-calendar-import-add-remove.md)
+ [Eliminación de todos los eventos importados de un calendario de terceros](change-calendar-delete-ics.md)

# Importación de eventos de proveedores de calendarios de terceros
<a name="change-calendar-import"></a>

Utilice el siguiente procedimiento para importar un archivo de iCalendar (`.ics`) de una aplicación de calendario de terceros compatible. Los eventos que están en el archivo se incorporan a las reglas del calendario abierto o cerrado. Puede importar un archivo a un nuevo calendario que esté creando con Change Calendar (una herramienta de AWS Systems Manager) o en un calendario existente.

Después de importar el archivo `.ics`, puede eliminar eventos individuales de este mediante el la interfaz de Change Calendar. Para obtener más información, consulte [Eliminación de un evento de Change Calendar](change-calendar-delete-event.md). También puede eliminar todos los eventos del calendario fuente mediante la eliminación del archivo `.ics`. Para obtener más información, consulte [Eliminación de todos los eventos importados de un calendario de terceros](change-calendar-delete-ics.md).

**Importación de eventos de proveedores de calendarios de terceros**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. Para empezar con un calendario nuevo, elija **Create calendar** (Crear calendario). En el área **Import calendar** (Importar calendario), elija **Choose file** (Elegir archivo). Para obtener información sobre otros pasos para crear un calendario nuevo, consulte [Creación de un calendario de cambios](change-calendar-create.md).

   -o bien-

   Para importar eventos de terceros a un calendario existente, elija el nombre de un calendario existente para abrirlo.

1. Elija **Actions, Edit** (Acciones, Editar) y, a continuación, en el área **Import calendar** (Importar calendario), elija **Choose file** (Elegir archivo).

1. Busque y seleccione el archivo `.ics` exportado en su equipo local.

1. Si se le pregunta, en **Select a time zone** (Seleccionar una zona horaria), seleccione qué zona horaria se aplica al calendario.

1. Seleccione **Save**.

# Actualización de todos los eventos de un proveedor de calendario de terceros
<a name="change-calendar-import-add-remove"></a>

Si se agregan o eliminan varios eventos del calendario fuente después de haber importado el archivo `.ics` de iCalendar, puede reflejar esos cambios en Change Calendar. En primer lugar, vuelva a exportar el calendario de origen y, a continuación, importe el archivo nuevo a Change Calendar, que es una herramienta de AWS Systems Manager. Los eventos del calendario de cambios se actualizarán para reflejar el contenido del archivo más reciente.

**Para actualizar todos los eventos de un proveedor de calendario de terceros**

1. En el calendario de terceros, agregue o elimine eventos tal como desee que se reflejen en Change Calendar y, a continuación, vuelva a exportar el calendario a un archivo `.ics` nuevo.

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. Elija el nombre del calendario de la lista desde la lista de calendarios.

1. Seleccione **Elegir archivo** y, a continuación, busque y seleccione el archivo `.ics` de reemplazo.

1. En respuesta a la notificación sobre el reemplazo del archivo existente, elija **Confirm** (Confirmar).

# Eliminación de todos los eventos importados de un calendario de terceros
<a name="change-calendar-delete-ics"></a>

Si ya no desea que ninguno de los eventos importados de un proveedor de terceros se incluya en el calendario, puede eliminar el archivo `.ics` importado de iCalendar.

**Para eliminar todos los eventos importados de un calendario de terceros**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. Elija el nombre del calendario de la lista desde la lista de calendarios.

1. En el área **Import calendar** (Importar calendario), bajo **My imported calendars** (Mis calendarios importados), busque el nombre del calendario importado y, a continuación, elija la **X**en la tarjeta.

1. Seleccione **Save**.

# Actualización de un calendario de cambios
<a name="change-calendar-update"></a>

Puede actualizar la descripción de un calendario de cambios, pero no el nombre. Aunque puede cambiar el estado predeterminado de un calendario, tenga en cuenta que esto invierte el comportamiento de las acciones de cambio durante los eventos asociados a la entrada del calendario. Por ejemplo, si cambia el estado de un calendario de **Open by default** (Abierto de forma predeterminada) a **Closed by default** (Cerrado de forma predeterminada), es posible que se realicen cambios no deseados durante los periodos de eventos durante los cuales los usuarios que crearon los eventos asociados no hayan previsto que se produzcan cambios.

Cuando actualiza un calendario de cambios, edita el documento Change Calendar que creó al crear la entrada. Change Calendar es una herramienta de AWS Systems Manager.

**Actualización de un calendario de cambios**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. En la lista de calendarios, elija el nombre del calendario que desee actualizar.

1. En la página de detalles del calendario, elija **Actions, Edit** (Acciones, Editar).

1. En **Description (Descripción)**, puede cambiar el texto de la descripción. No es posible editar el nombre de un calendario de cambios.

1. Para cambiar el estado del calendario, elija un valor diferente en **Calendar type (Tipo de calendario)**. Tenga en cuenta que esto invierte el comportamiento de las acciones de cambio durante los eventos asociados al calendario. Antes de cambiar el tipo de calendario, debe confirmar con los demás usuarios de Change Calendar que cambiar el tipo de calendario no permitirá cambios no deseados durante los eventos que ellos han creado.
   + **Open by default** (Abierto de forma predeterminada): el calendario se abre (las acciones de Automation se pueden ejecutar hasta que se inicie un evento) y, a continuación, se cierra durante el tiempo de un evento asociado.
   + **Closed by default** (Cerrado de forma predeterminada): el calendario se cierra (las acciones de Automation no se pueden ejecutar hasta que se inicie un evento), pero se abre durante el tiempo de un evento asociado.

1. Seleccione **Guardar**.

   El calendario no puede impedir ni permitir ninguna acción hasta que haya agregado al menos un evento. Para obtener información sobre cómo agregar un disco, consulte [Creación de un evento de Change Calendar](change-calendar-create-event.md).

# Uso compartido de un calendario de cambios
<a name="change-calendar-share"></a>

Puede compartir un calendario en Change Calendar, una herramienta de AWS Systems Manager, con otras Cuentas de AWS mediante el uso de la consola de AWS Systems Manager. Cuando se comparte un calendario, el calendario es de solo lectura para los usuarios de la cuenta compartida. Los periodos de mantenimiento, las asociaciones de State Manager y las automatizaciones no se comparten.

**Uso compartido de un calendario de cambios**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. En la lista de calendarios, elija el nombre del calendario que desee compartir.

1. En la página de detalles del calendario, elija la pestaña **Sharing** (Compartir).

1. Elija **Action, Share** (Acciones, Compartir).

1. En **Share Calendar** (Compartir calendario), para **Account ID** (ID de cuenta), ingrese el número de ID de una Cuenta de AWS válida y luego elija **Share** (Compartir).

   Los usuarios de la cuenta compartida pueden leer el calendario de cambios, pero no pueden realizar cambios.

# Eliminación de un calendario de cambios
<a name="change-calendar-delete"></a>

Puede eliminar un calendario en Change Calendar, una herramienta de AWS Systems Manager, mediante la consola de Systems Manager o AWS Command Line Interface (AWS CLI). Al eliminar un calendario de cambios, se eliminan todos los eventos asociados.

**Eliminación de un calendario de cambios**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Calendar**.

1. En la lista de calendarios, elija el nombre del calendario que desee eliminar.

1. En la página de detalles del calendario, seleccione **Actions, Delete** (Acciones, Eliminar). Cuando se le pida la confirmación para eliminar el calendario, elija **Delete** (Eliminar).

# Obtención del estado de un calendario de cambios
<a name="change-calendar-getstate"></a>

Puede obtener el estado general de un calendario o el estado de un calendario en un momento específico en Change Calendar, una herramienta de AWS Systems Manager. También puede mostrar la próxima vez que el estado del calendario va a cambiar de `OPEN` a `CLOSED`, o a la inversa.

**nota**  
Para obtener información sobre la integración de Change Calendar en Amazon EventBridge para la supervisión automática de los cambios de estado del calendario, consulte [Integración de Change Calendar en Amazon Eventbridge](monitoring-systems-manager-event-examples.md#change-calendar-eventbridge-integration). La integración de EventBridge proporciona notificaciones basadas en eventos cuando los estados del calendario cambian, lo que complementa el enfoque basado en sondeos de la acción de la API `GetCalendarState`.

Esta tarea solo se puede realizar mediante la operación `GetCalendarState` de la API. En el procedimiento de esta sección se utiliza la AWS Command Line Interface (AWS CLI).

**Para obtener el estado de un calendario de cambios**
+ Ejecute el siguiente comando para mostrar el estado de uno o más calendarios en un momento específico. El parámetro `--calendar-names` es obligatorio, pero `--at-time` es opcional. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

  ```
  aws ssm get-calendar-state \
      --calendar-names "Calendar_name_or_document_ARN_1" "Calendar_name_or_document_ARN_2" \
      --at-time "ISO_8601_time_format"
  ```

  A continuación se muestra un ejemplo.

  ```
  aws ssm get-calendar-state \
      --calendar-names "arn:aws:ssm:us-east-2:123456789012:document/MyChangeCalendarDocument" "arn:aws:ssm:us-east-2:123456789012:document/SupportOffHours" \
      --at-time "2020-07-30T11:05:14-0700"
  ```

------
#### [ Windows ]

  ```
  aws ssm get-calendar-state ^
      --calendar-names "Calendar_name_or_document_ARN_1" "Calendar_name_or_document_ARN_2" ^
      --at-time "ISO_8601_time_format"
  ```

  A continuación se muestra un ejemplo.

  ```
  aws ssm get-calendar-state ^
      --calendar-names "arn:aws:ssm:us-east-2:123456789012:document/MyChangeCalendarDocument" "arn:aws:ssm:us-east-2:123456789012:document/SupportOffHours" ^
      --at-time "2020-07-30T11:05:14-0700"
  ```

------

  El comando devuelve información similar a la siguiente.

  ```
  {
      "State": "OPEN",
      "AtTime": "2020-07-30T16:18:18Z",
      "NextTransitionTime": "2020-07-31T00:00:00Z"
  }
  ```

  Los resultados muestran el estado del calendario (si el calendario es de tipo `DEFAULT_OPEN` o `DEFAULT_CLOSED`) de las entradas de calendario especificadas que son propiedad de la cuenta o compartidas con ella, en el momento especificado como valor de `--at-time`, así como en el momento de la siguiente transición. Si no agrega el parámetro `--at-time`, se utiliza la hora actual.
**nota**  
Si especifica más de un calendario en una solicitud, el comando regresa el estado `OPEN` solo si todos los calendarios de la solicitud están abiertos. Si se cierran uno o más calendarios de la solicitud, el estado regresado es `CLOSED`.

# Agregado de dependencias de Change Calendar a manuales de procedimientos de Automation
<a name="systems-manager-change-calendar-automations"></a>

Para que las acciones de Automatización se adhieran a Change Calendar, una herramienta de AWS Systems Manager, deberá agregar un paso en un manual de procedimientos de Automatización que utilice la acción [`aws:assertAwsResourceProperty`](automation-action-assertAwsResourceProperty.md). Configure la acción para que ejecute `GetCalendarState`, con el fin de comprobar que una entrada de calendario especificada está en el estado que desea (`OPEN` o `CLOSED`). El manual de procedimientos de Automation solo puede continuar con el siguiente paso si el estado del calendario es `OPEN`. A continuación se muestra un extracto de ejemplo basado en YAML de un manual de procedimientos de Automation que no puede avanzar al siguiente paso, `LaunchInstance`, a menos que el estado del calendario coincida con `OPEN`, que es el estado especificado en `DesiredValues`.

A continuación se muestra un ejemplo.

```
mainSteps:
  - name: MyCheckCalendarStateStep
    action: 'aws:assertAwsResourceProperty'
    inputs:
      Service: ssm
      Api: GetCalendarState
      CalendarNames: ["arn:aws:ssm:us-east-2:123456789012:document/SaleDays"]
      PropertySelector: '$.State'
      DesiredValues:
      - OPEN
    description: "Use GetCalendarState to determine whether a calendar is open or closed."
    nextStep: LaunchInstance
  - name: LaunchInstance
    action: 'aws:executeScript'
    inputs:
      Runtime: python3.11 
...
```

# Resolución de problemas de Change Calendar
<a name="change-calendar-troubleshooting"></a>

Utilice la siguiente información como ayuda para solucionar problemas con Change Calendar, una herramienta de AWS Systems Manager.

**Topics**
+ [Error ‘Error en la importación del calendario’](#change-manager-troubleshooting-1)

## Error ‘Error en la importación del calendario’
<a name="change-manager-troubleshooting-1"></a>

**Problema**: Al importar un archivo de iCalendar (`.ics`), el sistema informa que ocurrió un error en la importación del calendario.
+ **Solución 1**: Asegúrese de importar un archivo que se ha exportado desde un proveedor de calendario de terceros compatible, que incluya lo siguiente:
  + Calendario de Google ([Instrucciones de exportación](https://support.google.com/calendar/answer/37111))
  + Microsoft Outlook ([Instrucciones de exportación](https://support.microsoft.com/en-us/office/export-an-outlook-calendar-to-google-calendar-662fa3bb-0794-4b18-add8-9968b665f4e6))
  + Calendario de iCloud ([Instrucciones de exportación](https://support.apple.com/guide/calendar/import-or-export-calendars-icl1023/mac))
+ **Solución 2**: Si el calendario fuente contiene eventos recurrentes, asegúrese de que no se haya cancelado o eliminado ninguna ocurrencia individual del evento. En la actualidad, Change Calendar no admite la importación de eventos recurrentes con cancelaciones individuales. Para resolver el problema, elimine el evento recurrente del calendario fuente, vuelva a exportar el calendario y vuelva a importarlo en Change Calendar y, a continuación, agregue el evento recurrente mediante la interfaz de Change Calendar. Para obtener más información, consulte [Creación de un evento de Change Calendar](change-calendar-create-event.md).
+ **Solución 3**: Asegúrese de que el calendario fuente contenga al menos un evento. Las cargas de los archivos `.ics` que no contienen eventos no se realizan correctamente.
+ **Solución 4**: Si el sistema informa de que la importación ha fallado porque el `.ics` es demasiado grande, asegúrese de exportar solo detalles básicos sobre las entradas del calendario. Si es necesario, reduzca la duración del período de tiempo que exporta.
+ **Solución 5**: Si Change Calendar no puede determinar la zona horaria del calendario exportado cuando intenta importarlo desde la pestaña **Events** (Eventos), puede que reciba este mensaje: “Falló la importación del calendario. Change Calendar no se ha podido localizar una zona horaria válida. Puede importar el calendario desde el menú Edit (Editar)”. En este caso, seleccione **Accions, Edit** (Acciones, Editar) y, a continuación, intente importar el archivo desde la página **Edit calendar** (Editar calendario).
+ **Solución 6**: No edite el archivo `.ics` antes de importar. Si se intenta modificar el contenido del archivo, se pueden dañar los datos del calendario. Si ha modificado el archivo antes de intentar importar, vuelva a exportar el calendario desde el calendario fuente y, a continuación, vuelva a intentar la carga.

# AWS Systems Manager Change Manager
<a name="change-manager"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Change Manager, una herramienta de AWS Systems Manager, es un marco empresarial de administración de cambios con el que se pueden solicitar, aprobar, implementar e informar los cambios operativos de la configuración y la infraestructura de la aplicación. A partir de una única *cuenta de administrador delegado*, si utiliza AWS Organizations, puede administrar los cambios en varias Cuentas de AWS y Regiones de AWS. De forma alternativa, a través de una *cuenta local*, puede administrar los cambios de una sola Cuenta de AWS. Utilice Change Manager para administrar los cambios tanto en los recursos de AWS como en los recursos locales. Para comenzar a utilizar Change Manager, abra la [consola de Systems Manager](https://console.aws.amazon.com//systems-manager/change-manager). En el panel de navegación, elija **Change Manager**.

Con Change Manager, puede usar *plantillas de cambios* preaprobadas para ayudar a automatizar los procesos de cambio de sus recursos y evitar los resultados no intencionales cuando se efectúan cambios operativos. Cada plantilla de cambios especifica lo siguiente:
+ Se definen uno o más manuales de procedimientos de Automation de los que el usuario puede elegir cuando vaya a crear una solicitud de cambio. Los cambios que se realizan en los recursos se definen en los manuales de procedimientos de Automation. Puede incluir manuales de procedimientos personalizados o [manuales de procedimientos administrados de AWS](automation-documents-reference.md) en las plantillas de cambios que cree. Cuando un usuario crea una solicitud de cambio, puede elegir cuál de los manuales de procedimientos disponibles incluirá en la solicitud. Además, puede crear plantillas de cambios que permitan al usuario que realiza la solicitud especificar cualquier manual de procedimientos en la solicitud de cambio.
+ Se indican los usuarios de la cuenta que deben revisar las solicitudes de cambio que se realizan con esa plantilla de cambios.
+ Se establece el tema de Amazon Simple Notification Service (Amazon SNS) que se utilizará para notificar a los aprobadores designados que una solicitud de cambio está lista para su revisión.
+ Se indica la alarma de Amazon CloudWatch que se utilizará para monitorear el flujo de trabajo del manual de procedimientos.
+ Se define el tema de Amazon SNS que se utilizará para enviar notificaciones acerca de los cambios de estado de las solicitudes de cambio que se creen con la plantilla de cambios.
+ Se indican las etiquetas que se aplicarán a la plantilla de cambios para utilizarlas en la clasificación en categorías y el filtro de las plantillas de cambios.
+ Se establece si las solicitudes de cambio creadas a partir de la plantilla de cambios se pueden ejecutar sin un paso de aprobación (solicitudes de aprobación automática).

A través de su integración a Change Calendar, que es otra herramienta de Systems Manager, Change Manager también lo ayuda a implementar cambios de forma segura a la vez que evita conflictos de programación con los eventos empresariales importantes. La integración de Change Manager a AWS Organizations y AWS IAM Identity Center lo ayuda a administrar los cambios en toda su organización desde una única cuenta con el sistema de administración de identidades existente. Puede monitorear el progreso de los cambios desde Change Manager y auditar los cambios operativos en toda su organización, lo que proporciona visibilidad y rendición de cuentas mejoradas.

Change Manager complementa los controles de seguridad de sus prácticas de [integración continua](https://aws.amazon.com/devops/continuous-integration) (CI) y su metodología de [entrega continua](https://aws.amazon.com/devops/continuous-delivery) (CD). Change Manager no está diseñado para cambios realizados como parte de un proceso de lanzamiento automatizado, como, por ejemplo, una canalización de CI/CD, a menos que se requiera una excepción o una aprobación.

## Cómo funciona Change Manager
<a name="how-change-manager-works"></a>

Cuando se identifica la necesidad de un cambio operativo estándar o de emergencia, alguien de la organización crea una solicitud de cambio basada en una de las plantillas de cambios que se crearon para usarlas en su organización o cuenta.

Si el cambio solicitado requiere aprobaciones manuales, Change Manager notifica a los aprobadores designados mediante una notificación de Amazon SNS que indica que una solicitud de cambio está lista para su revisión. Puede designar aprobadores para las solicitudes de cambio en la plantilla de cambios o permitir que los usuarios designen a los aprobadores de la solicitud de cambio en la misma solicitud. Puede asignar diferentes revisores a diferentes plantillas. Por ejemplo, asigne un usuario, un grupo de usuarios o un rol de AWS Identity and Access Management (IAM) que deba aprobar las solicitudes de cambio en los nodos administrados y otro usuario, grupo o rol de IAM para los cambios en la base de datos. Si la plantilla de cambios permite las aprobaciones automáticas y la política de usuario de un solicitante no las prohíbe, el usuario también puede elegir ejecutar el manual de procedimientos de Automatización para su solicitud sin un paso de revisión (con la excepción de los eventos de congelación de cambios).

Puede agregar hasta cinco niveles de aprobadores a cada plantilla de cambios. Por ejemplo, puede requerir que los revisores técnicos aprueben primero una solicitud de cambio creada a partir de una plantilla de cambios y, a continuación, requiera un segundo nivel de aprobaciones por parte de uno o más administradores.

Change Manager está integrado en [AWS Systems Manager Change Calendar](systems-manager-change-calendar.md). Cuando se aprueba un cambio solicitado, en primer lugar, el sistema determina si la solicitud entra en conflicto con otras actividades empresariales programadas. Si se detecta un conflicto, Change Manager puede bloquear el cambio o requerir aprobaciones adicionales antes de comenzar a ejecutar el flujo de trabajo del manual de procedimientos. Por ejemplo, puede permitir cambios solo durante el horario laborable para asegurarse de que los equipos estén disponibles para resolver cualquier problema inesperado. Para cualquier cambio que se solicite para ejecutarse fuera de ese horario, puede requerir una aprobación administrativa de nivel superior en forma de *aprobadores de congelación de cambios*. Para los cambios de emergencia, Change Manager puede omitir el paso de verificación de Change Calendar para detectar conflictos o eventos de bloqueo después de que se aprueba una solicitud de cambio.

Cuando llegue el momento de implementar un cambio aprobado, Change Manager ejecutará el manual de procedimientos de Automation que se especifica en la solicitud de cambio asociada. Solo se permiten las operaciones definidas en las solicitudes de cambio aprobadas cuando se ejecutan los flujos de trabajo del manual de procedimientos. Este enfoque ayuda a evitar resultados no intencionales mientras se implementan los cambios.

Además de restringir los cambios que se pueden realizar cuando se ejecuta un flujo de trabajo de manual de procedimientos, Change Manager también lo ayuda a controlar los límites de simultaneidad y errores. Puede elegir cuántos recursos puede ejecutar un flujo de trabajo de manual de procedimientos a la vez, en cuántas cuentas puede ejecutarse el cambio a la vez y cuántos errores permitir antes de que el proceso se detenga y (si el manual de procedimientos incluye un script de restauración) se restaure. También puede monitorear el progreso de los cambios que se están realizando mediante las alarmas de CloudWatch.

Una vez finalizado el flujo de trabajo del manual de procedimientos, puede revisar los detalles de los cambios efectuados. Estos detalles incluyen el motivo de una solicitud de cambio, qué plantilla de cambios se utilizó, quién solicitó los cambios, quién los aprobó y cómo se implementaron.

**Más información**  
[Presentación de AWS Systems ManagerChange Manager](https://aws.amazon.com/blogs/aws/introducing-systems-manager-change-manager/) en el *Blog de noticias de AWS*

## ¿Cómo puede Change Manager beneficiar las operaciones de mi organización?
<a name="change-manager-benefits"></a>

Entre los beneficios de Change Manager se incluyen los siguientes:
+ **Reduzca el riesgo de interrupción del servicio y de tiempo de inactividad**

  Change Manager puede hacer que los cambios operativos sean más seguros garantizando que solo se implementen los cambios aprobados cuando se ejecuta un flujo de trabajo de manual de procedimientos. Puede bloquear los cambios no planificados y los no revisados. Change Manager lo ayuda a evitar los tipos de resultados no intencionales causados por errores humanos que requieren costosas horas de investigación y acciones para deshacer dichos resultados.
+ **Obtenga auditorías e informes detallados sobre los historiales de cambios**

  Change Manager proporciona la posibilidad de realizar rendiciones de cuentas con una forma coherente de notificar y auditar los cambios realizados en toda la organización, la intención de los cambios y los detalles sobre quién los aprobó e implementó.
+ **Evite conflictos o infracciones de programación**

  Change Manager puede detectar conflictos de programación, como los eventos festivos o los lanzamientos de nuevos productos, en función del calendario de cambios activo para su organización. Puede permitir que los flujos de trabajo del manual de procedimientos se ejecuten solo durante el horario laborable o permitirlos solo con aprobaciones adicionales.
+ **Adapte los requisitos de cambios a su negocio cambiante**

  Durante los diferentes periodos empresariales, puede implementar distintos requisitos de administración de cambios. Por ejemplo, durante la preparación de informes de fin de mes, el periodo de presentaciones fiscales u otros periodos empresariales críticos, puede bloquear los cambios o requerir la aprobación del nivel de directores para los cambios que podrían generar riesgos operativos innecesarios.
+ **Administre de forma centralizada los cambios en las cuentas**

  Gracias a su integración a Organizations, Change Manager le permite administrar los cambios en todas las unidades organizativas desde una única cuenta de administrador delegado. Puede activar Change Manager para usarlo en toda su organización o solo en algunas de sus unidades organizativas.

## ¿Quién debe utilizar Change Manager?
<a name="change-manager-who"></a>

Change Manager es apropiado para los siguientes clientes y organizaciones de AWS:
+ cualquier cliente de AWS que desee mejorar la seguridad y la gobernanza de los cambios operativos realizados en sus entornos en la nube o en las instalaciones
+ las organizaciones que deseen aumentar la colaboración y la visibilidad entre los equipos, mejorar la disponibilidad de las aplicaciones evitando el tiempo de inactividad y reducir el riesgo asociado a las tareas manuales y repetitivas
+ las organizaciones que deban cumplir prácticas recomendadas para la administración de cambios 
+ clientes que necesiten un historial totalmente auditable de los cambios realizados en la configuración y la infraestructura de sus aplicaciones

## ¿Cuáles son las características principales de Change Manager?
<a name="change-manager-features"></a>

Las características principales de Change Manager incluyen las siguientes:
+ **Soporte integrado para las prácticas recomendadas de administración de cambios**

  Con Change Manager, puede aplicar prácticas recomendadas de administración de cambios selectas a sus operaciones. Puede elegir activar las siguientes opciones:
  + verificar Change Calendar para ver si los eventos están restringidos actualmente, de manera que los cambios se realizan solo durante los periodos abiertos del calendario
  + permitir cambios durante eventos restringidos con aprobaciones adicionales de aprobadores de congelación de cambios
  + requerir que se especifiquen alarmas de CloudWatch para todas las plantillas de cambios
  + requerir que se revisen y aprueben todas las plantillas de cambios creadas en su cuenta antes de poder usarlas para crear solicitudes de cambio
+ **Diferentes rutas de aprobación para periodos cerrados del calendario y solicitudes de cambio de emergencia**

  Puede permitir una opción para verificar Change Calendar para ver los eventos restringidos y bloquear solicitudes de cambio aprobadas hasta que se complete el evento. Sin embargo, también puede designar un segundo grupo de aprobadores, aprobadores de congelación de cambios, que pueden permitir que el cambio se realice incluso si el calendario está cerrado. También puede crear plantillas de cambios de emergencia. Las solicitudes de cambio creadas a partir de una plantilla de cambios de emergencia siguen requiriendo las aprobaciones regulares, pero no están sujetas a las restricciones del calendario ni requieren aprobaciones de congelación de cambios.
+ **Control de cómo y cuándo se inician los flujos de trabajo del manual de procedimientos**

  Los flujos de trabajo del manual de procedimientos se pueden iniciar de acuerdo con una programación o tan pronto como se completen las aprobaciones (sujeto a las reglas de restricción del calendario).
+ **Compatibilidad integrada con notificaciones**

  Especifique quién de su organización debe revisar y aprobar las plantillas y las solicitudes de cambios. Asigne un tema de Amazon SNS a una plantilla de cambios para enviar notificaciones a los suscriptores del tema sobre los cambios de estado de las solicitudes de cambio creadas con esa plantilla de cambios.
+ **Integración de con AWS Systems Manager Change Calendar**

  Change Manager permite a los administradores restringir los cambios de programación durante periodos especificados. Por ejemplo, puede crear una política que permita cambios solo durante el horario laborable para asegurarse de que el equipo esté disponible para resolver cualquier problema. También puede restringir los cambios durante eventos empresariales importantes. Por ejemplo, las empresas minoristas pueden restringir los cambios durante los grandes eventos de ventas. También puede requerir aprobaciones adicionales durante los periodos con restricciones. 
+ **Integración a AWS IAM Identity Center y compatibilidad con Active Directory**

  Con la integración con el Centro de identidades de IAM, los miembros de su organización pueden acceder a las Cuentas de AWS y administrar sus recursos con Systems Manager basándose en una identidad de usuario común. Con el Centro de identidades de IAM, puede asignar a sus usuarios acceso a las AWS.

  La integración a Active Directory permite asignar usuarios a su cuenta de Active Directory como aprobadores de plantillas de cambios creadas para sus operaciones de Change Manager.
+ **Integración con las alarmas de Amazon CloudWatch**

  Change Manager está integrado a las alarmas de CloudWatch. Change Manager escucha las alarmas de CloudWatch durante el flujo de trabajo del manual de procedimientos y lleva a cabo cualquier acción, incluido el envío de notificaciones, que se defina para la alarma.
+ **Integración con AWS CloudTrail Lake**

  Al crear un almacén de datos de eventos en AWS CloudTrail Lake, puede ver información auditable sobre los cambios realizados por las solicitudes de cambio que se ejecutan en su cuenta u organización. La información del evento almacenada incluye detalles como los siguientes:
  + Las acciones de API ejecutadas
  + Los parámetros de solicitud incluidos para esas acciones
  + El usuario que ejecutó la acción
  + Los recursos que se actualizaron durante el proceso
+ **Integración con AWS Organizations**

  Mediante las capacidades entre cuentas proporcionadas por Organizations, puede utilizar una cuenta de administrador delegado para administrar las operaciones de Change Manager en las unidades organizativas de su organización. En su cuenta de administración de Organizations, puede especificar qué cuenta será la cuenta de administrador delegado. También puede controlar en cuáles de sus unidades organizativas se puede utilizar Change Manager.

## ¿Se cobra por usar Change Manager?
<a name="change-manager-cost"></a>

Sí. Change Manager tiene un precio de pago por uso. Solo paga por lo que utiliza. Para más información, consulte [Precios de AWS Systems Manager](https://aws.amazon.com/systems-manager/pricing/).

## ¿Cuáles son los componentes principales de Change Manager?
<a name="change-manager-primary-components"></a>

Change ManagerLos componentes de que se utilizan para administrar el proceso de cambios en su organización o su cuenta incluyen los siguientes:

### Cuenta de administrador delegado
<a name="change-manager-what-is-delegated-account"></a>

Si utiliza Change Manager en una organización, debe utilizar una cuenta de administrador delegado. Esta es la Cuenta de AWS designada como la cuenta para administrar las actividades de operaciones en Systems Manager, incluido Change Manager. La cuenta de administrador delegado se encarga de administrar las actividades de cambio en toda la organización. Cuando se configura la organización para utilizar Change Manager, se debe especificar cuál de sus cuentas llevará a cabo este rol. La cuenta de administrador delegado debe ser el único miembro de la unidad organizativa al que esté asignada la capacidad. La cuenta de administrador delegado no es necesaria si Change Manager se utiliza solo con una única Cuenta de AWS.

**importante**  
Si utiliza Change Manager en toda una organización, se recomienda efectuar siempre los cambios desde la cuenta de administrador delegado. Si bien es posible realizar cambios desde otras cuentas de la organización, esos cambios no se notificarán ni se podrán ver desde la cuenta de administrador delegado.

### Plantilla de cambios
<a name="change-manager-what-is-change-template"></a>

Una plantilla de cambios es una colección de ajustes de configuración en Change Manager que definen aspectos tales como las aprobaciones requeridas, los manuales de procedimientos disponibles y las opciones de notificación para las solicitudes de cambio.

Puede requerir que las plantillas de cambios que creen los usuarios de su organización o cuenta pasen por un proceso de aprobación antes de que puedan utilizarse.

Change Manager admite dos tipos de plantillas de cambios. Para una solicitud de cambio aprobada que se basa en una *plantilla de cambios de emergencia*, el cambio solicitado se puede realizar incluso si existen eventos de bloqueo en Change Calendar. Si se trata de una solicitud de cambio aprobada que se basa en una *plantilla de cambios estándar*, el cambio solicitado no se puede realizar si existen eventos de bloqueo en Change Calendar, a menos que se reciban aprobaciones adicionales por parte de los aprobadores de *eventos de congelación de cambios* designados.

### Solicitud de cambio
<a name="change-manager-what-is-change-request"></a>

Una solicitud de cambio se trata de una solicitud en Change Manager para ejecutar un manual de procedimientos de Automation que actualice uno o más recursos de sus entornos locales o en AWS. Una solicitud de cambio se crea usando una plantilla de cambios.

Cuando se crea una solicitud de cambio, uno o más aprobadores de su organización o cuenta deben revisar y aprobar la solicitud. Sin las aprobaciones necesarias, el flujo de trabajo del manual de procedimientos, que aplica los cambios solicitados, no puede ejecutarse.

En el sistema, las solicitudes de cambio son un tipo de OpsItem en AWS Systems Manager OpsCenter. Sin embargo, los OpsItems del tipo `/aws/changerequest` no se muestran en OpsCenter. Como OpsItems, las solicitudes de cambio están sujetas a las mismas cuotas obligatorias que otros tipos de OpsItems. 

Además, para crear una solicitud de cambio mediante programación, no debe llamar a la operación `CreateOpsItem` de la API. En cambio, debe utilizar la operación `[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html)` de la API. Pero en lugar de ejecutarse inmediatamente, la solicitud de cambio debe aprobarse y, además, no debe haber ningún evento de bloqueo en Change Calendar que evite que el flujo de trabajo se ejecute. La acción `StartChangeRequestExecution` recién se podrá completar cuando se hayan recibido las aprobaciones necesarias y el calendario no esté bloqueado (o se haya concedido permiso para omitir eventos de bloqueo del calendario).

### Flujo de trabajo de manual de procedimientos
<a name="change-manager-what-is-runbook-workflow"></a>

El flujo de trabajo del manual de procedimientos es el proceso de cambios solicitados que se realizan en los recursos de destino de su entorno en la nube o en las instalaciones. Cada solicitud de cambio designa un único manual de procedimientos de Automation que se debe utilizar para llevar a cabo el cambio solicitado. El flujo de trabajo del manual de procedimientos se lleva a cabo después de que se han otorgado todas las aprobaciones necesarias y si no hay eventos de bloqueo en Change Calendar. Si el cambio se ha programado para una fecha y hora específicas, el flujo de trabajo del manual de procedimientos no comienza sino hasta el momento programado, incluso si se han recibido todas las aprobaciones y el calendario no está bloqueado.

**Topics**
+ [Cómo funciona Change Manager](#how-change-manager-works)
+ [¿Cómo puede Change Manager beneficiar las operaciones de mi organización?](#change-manager-benefits)
+ [¿Quién debe utilizar Change Manager?](#change-manager-who)
+ [¿Cuáles son las características principales de Change Manager?](#change-manager-features)
+ [¿Se cobra por usar Change Manager?](#change-manager-cost)
+ [¿Cuáles son los componentes principales de Change Manager?](#change-manager-primary-components)
+ [Cómo configurar Change Manager](change-manager-setting-up.md)
+ [Trabajo con Change Manager](working-with-change-manager.md)
+ [Auditoría y registro de la actividad de Change Manager](change-manager-auditing.md)
+ [Resolución de problemas de Change Manager](change-manager-troubleshooting.md)

# Cómo configurar Change Manager
<a name="change-manager-setting-up"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Puede utilizar Change Manager, una herramienta de AWS Systems Manager, para administrar los cambios de una organización completa, como esté configurada en AWS Organizations, o para una única Cuenta de AWS.

Si utiliza Change Manager con una organización, comience con el tema [Configuración de Change Manager para una organización (cuenta de administración)](change-manager-organization-setup.md) y, luego, continúe con [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md).

Si utiliza Change Manager con una única cuenta, diríjase directamente a [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md).

**nota**  
Si comienza a usar Change Manager con una única cuenta, pero esa cuenta se agrega posteriormente a una unidad organizativa para la cual Change Manager está permitido, no se tendrá en cuenta la configuración de su cuenta única.

**Topics**
+ [Configuración de Change Manager para una organización (cuenta de administración)](change-manager-organization-setup.md)
+ [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md)
+ [Configuración de roles y permisos para Change Manager](change-manager-permissions.md)
+ [Control de acceso a flujos de trabajo de manual de procedimientos de aprobación automática](change-manager-auto-approval-access.md)

# Configuración de Change Manager para una organización (cuenta de administración)
<a name="change-manager-organization-setup"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Las tareas de este tema se aplican si utiliza Change Manager, una herramienta de AWS Systems Manager, en una organización que está configurada en AWS Organizations. Si desea usar Change Manager solo en una única Cuenta de AWS, pase al tema [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md).

Lleve a cabo las tareas de esta sección en una Cuenta de AWS que sirva como la *cuenta de administración* en Organizations. Para obtener más información acerca de la cuenta de administración y otros conceptos de Organizations, consulte [Terminología y conceptos de AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html).

Si necesita activar Organizations y especificar su cuenta como la cuenta de administración antes de continuar, consulte [Creación y administración de una organización](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org.html) en la *Guía del usuario de AWS Organizations*. 

**nota**  
Este proceso de configuración no se puede efectuar en las siguientes Regiones de AWS:  
UE (Milán) (eu-south-1)
Medio Oriente (Baréin) (me-south-1)
África (Ciudad del Cabo) (af-south-1)
Asia-Pacífico (Hong Kong) (ap-east-1)
Asegúrese de trabajar en una región diferente en su cuenta de administración para este procedimiento.

Durante el procedimiento de configuración, debe llevar a cabo las siguientes tareas principales en Quick Setup, una herramienta de AWS Systems Manager.
+ **Tarea 1: registrar la cuenta de administrador delegado para su organización**

  Las tareas relacionadas con el cambio que se llevan a cabo con Change Manager se administran en una de las cuentas miembro, que especifica que es la *cuenta de administrador delegado*. La cuenta de administrador delegado que se registra para Change Manager se convierte en la cuenta de administrador delegado para todas sus operaciones de Systems Manager. (Es posible que tenga cuentas de administrador delegado para otros Servicios de AWS). Su cuenta de administrador delegado para Change Manager, que no es la misma que la cuenta de administración, administra las actividades de cambio en toda la organización, incluidas las plantillas de cambios, las solicitudes de cambio y sus aprobaciones. En la cuenta de administrador delegado, también puede especificar otras opciones de configuración para sus operaciones de Change Manager. 
**importante**  
La cuenta de administrador delegado debe ser el único miembro de la unidad organizativa al que se asigne la capacidad en Organizations.
+ **Tarea 2: definir y especificar las políticas de acceso del manual de procedimientos para los roles del solicitante de cambios o las funciones de trabajo personalizadas que desee utilizar para las operaciones de Change Manager**

  Para crear solicitudes de cambio en Change Manager, los usuarios de sus cuentas miembro deben recibir permisos de AWS Identity and Access Management (IAM) que les permitan acceder solo a los manuales de procedimientos de Automation y las plantillas de cambios que usted elija que estén disponibles para ellos. 
**nota**  
Cuando un usuario crea una solicitud de cambio, primero selecciona una plantilla de cambios. Esta plantilla de cambios puede tener varios manuales de procedimientos disponibles, pero el usuario solo puede seleccionar uno para cada solicitud de cambio. Las plantillas de cambios también se pueden configurar para permitir a los usuarios incluir cualquier manual de procedimientos disponible en sus solicitudes.

  Para otorgar los permisos necesarios, Change Manager utiliza el concepto de *funciones de trabajo*, que también es utilizado por IAM. Sin embargo, a diferencia de las [políticas administradas de AWS para las funciones de trabajo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) en IAM, debe especificar tanto los nombres de las funciones de trabajo de Change Manager como los permisos de IAM para esas funciones de trabajo. 

  Cuando vaya a configurar una función de trabajo, le recomendamos crear una política personalizada y proporcionar solo los permisos necesarios para llevar a cabo tareas de administración de cambios. Por ejemplo, podría especificar permisos que limiten a los usuarios a ese conjunto específico de manuales de procedimientos dependiendo de las *funciones de trabajo* que defina. 

  Por ejemplo, puede crear una función de trabajo con el nombre `DBAdmin`. Para esta función de trabajo, puede conceder solo los permisos necesarios para los manuales de procedimientos relacionados con las bases de datos de Amazon DynamoDB, como `AWS-CreateDynamoDbBackup` y `AWSConfigRemediation-DeleteDynamoDbTable`. 

  Como otro ejemplo, es posible que desee conceder a algunos usuarios solo los permisos necesarios para trabajar con manuales de procedimientos relacionados con los buckets de Amazon Simple Storage Service (Amazon S3), como `AWS-ConfigureS3BucketLogging` y `AWSConfigRemediation-ConfigureS3BucketPublicAccessBlock`. 

  El proceso de configuración en Quick Setup para Change Manager también pone a su disposición un conjunto de permisos administrativos completos de Systems Manager para que pueda aplicarlos a un rol administrativo que cree. 

  Cada configuración de Change Manager en Quick Setup que implemente creará una función de trabajo en su cuenta de administrador delegado con permisos para ejecutar plantillas de Change Manager y manuales de procedimientos de Automation en las unidades organizativas que haya seleccionado. Puede crear hasta 15 configuraciones de Quick Setup para Change Manager. 
+ **Tarea 3: elegir qué cuentas miembro de su organización utilizar con Change Manager**

  Puede utilizar Change Manager con todas las cuentas miembro de todas las unidades organizativas configuradas en Organizations y en todas las Regiones de AWS en las que funcionen. En cambio, si lo prefiere, puede usar Change Manager solo en algunas de sus unidades organizativas.

**importante**  
Antes de comenzar este procedimiento, le recomendamos que lea sus pasos para comprender las opciones de configuración que va a elegir y los permisos que va a conceder. En particular, planifique las funciones de trabajo personalizadas que creará y los permisos que asignará a cada función de trabajo. Esto garantiza que cuando, más adelante, adjunte las políticas de función de trabajo que cree para los usuarios individuales, los grupos de usuarios o los roles de IAM, solo se les concedan los permisos que usted desea que tengan.  
Como práctica recomendada, comience configurando la cuenta de administrador delegado mediante el inicio de sesión para un administrador de Cuenta de AWS. A continuación, configure las funciones de trabajo y sus permisos después de haber creado las plantillas de cambios e identificado los manuales de procedimientos que utilizará cada una.

Para configurar Change Manager para usarlo en una organización, lleve a cabo la siguiente tarea en el área de Quick Setup de la consola de Systems Manager.

Repita esta tarea para cada función de trabajo que desee crear para su organización. Cada función de trabajo que cree puede tener permisos para un conjunto diferente de unidades organizativas.

**Para configurar una organización para Change Manager en la cuenta de administración de Organizations**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta **Change Manager**, seleccione **crear**.

1. En **Delegated administrator account** (Cuenta de administrador delegado), ingrese el ID de la Cuenta de AWS que desea utilizar para administrar las plantillas de cambios, las solicitudes de cambio y los flujos de trabajo del manual de procedimientos en Change Manager. 

   Si con anterioridad ha especificado una cuenta de administrador delegado para Systems Manager, su ID ya se indicará en este campo. 
**importante**  
La cuenta de administrador delegado debe ser el único miembro de la unidad organizativa al que se asigne la capacidad en Organizations.  
Si la cuenta de administrador delegado registrada luego se anula de ese rol, el sistema elimina sus permisos para administrar las operaciones de Systems Manager al mismo tiempo. Tenga en cuenta que será necesario regresar a Quick Setup, designar una cuenta de administrador delegado diferente y volver a especificar todas las funciones de trabajo y los permisos.  
Si utiliza Change Manager en toda una organización, se recomienda efectuar siempre los cambios desde la cuenta de administrador delegado. Si bien es posible realizar cambios desde otras cuentas de la organización, esos cambios no se notificarán ni se podrán ver desde la cuenta de administrador delegado.

1. En la sección **Permissions to request and make changes** (Permisos para solicitar y realizar cambios), haga lo siguiente.
**nota**  
Cada configuración de implementación que cree proporcionará la política de permisos para una sola función de trabajo. Puede regresar a Quick Setup más adelante para crear más funciones de trabajo cuando haya creado plantillas de cambios para utilizarlas en sus operaciones.

   **Para crear un rol administrativo**: para una función de trabajo de administrador que tenga permisos de IAM para todas las acciones de AWS, realice lo siguiente.
**importante**  
El otorgamiento de permisos administrativos completos a los usuarios debe realizarse con moderación y solo si sus roles requieren acceso completo a Systems Manager. Para obtener información importante acerca de los aspectos que deben tenerse en cuenta sobre la seguridad en el acceso a Systems Manager, consulte [Administración de identidades y accesos en AWS Systems Manager](security-iam.md) y [Prácticas recomendadas de seguridad para Systems Manager](security-best-practices.md).

   1. En **Job function** (Función de trabajo), ingrese un nombre para identificar este rol y sus permisos, como **MyAWSAdmin**.

   1. En **Role and permissions option** (Opción de rol y permisos), elija **Administrator permissions** (Permisos de administrador).

   **Para crear otras funciones de trabajo**: para crear un rol no administrativo, haga lo siguiente.

   1. En **Job function** (Función de trabajo), ingrese un nombre para identificar este rol y sugerir sus permisos. El nombre que elija debe representar el alcance de los manuales de procedimientos para los que proporcionará permisos, como `DBAdmin` o `S3Admin`. 

   1. En **Role and permissions option** (Opción de rol y permisos), elija **Custom permissions** (Permisos personalizados).

   1. En **Permissions policy editor** (Editor de políticas de permisos), ingrese los permisos de IAM, en formato JSON, que se concederán a esta función de trabajo.
**sugerencia**  
Le recomendamos utilizar el editor de políticas de IAM para diseñar la política y, luego, pegar la política JSON en el campo **Permissions policy** (Política de permisos).

**Política de muestra: administración de bases de datos de DynamoDB**  
Por ejemplo, puede comenzar con el contenido de la política que proporcione permisos para trabajar con los documentos de Systems Manager (documentos de SSM) a los que necesita acceder la función de trabajo. A continuación, se presenta un contenido de política de muestra que otorga acceso a todos los manuales de procedimientos de Automation administrados por AWS que se relacionen con las bases de datos de DynamoDB y dos plantillas de cambios que se han creado en la Cuenta de AWS `123456789012` de ejemplo, en la región Este de EE. UU. (Ohio) (`us-east-2`). 

   La política también incluye permisos para la operación [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html), que es necesaria para crear una solicitud de cambio en Change Calendar. 
**nota**  
Este ejemplo no es exhaustivo. Es posible que se necesiten permisos adicionales para trabajar con otros recursos de AWS, como las bases de datos y los nodos.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:CreateDocument",
                   "ssm:DescribeDocument",
                   "ssm:DescribeDocumentParameters",
                   "ssm:DescribeDocumentPermission",
                   "ssm:GetDocument",
                   "ssm:ListDocumentVersions",
                   "ssm:ModifyDocumentPermission",
                   "ssm:UpdateDocument",
                   "ssm:UpdateDocumentDefaultVersion"
               ],
               "Resource": [
                   "arn:aws:ssm:us-east-1:*:document/AWS-CreateDynamoDbBackup",
                   "arn:aws:ssm:us-east-1:*:document/AWS-AWS-DeleteDynamoDbBackup",
                   "arn:aws:ssm:us-east-1:*:document/AWS-DeleteDynamoDbTableBackups",
                   "arn:aws:ssm:us-east-1:*:document/AWSConfigRemediation-DeleteDynamoDbTable",
                   "arn:aws:ssm:us-east-1:*:document/AWSConfigRemediation-EnableEncryptionOnDynamoDbTable",
                   "arn:aws:ssm:us-east-1:*:document/AWSConfigRemediation-EnablePITRForDynamoDbTable",
                   "arn:aws:ssm:us-east-1:111122223333:document/MyFirstDBChangeTemplate",
                   "arn:aws:ssm:us-east-1:111122223333:document/MySecondDBChangeTemplate"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "ssm:ListDocuments",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "ssm:StartChangeRequestExecution",
               "Resource": [
                   "arn:aws:ssm:us-east-1:111122223333:document/*",
                   "arn:aws:ssm:us-east-1:111122223333:automation-execution/*"
               ]
           }
       ]
   }
   ```

------

   Para obtener más información acerca de las políticas de IAM, consulte [Administración del acceso a los recursos de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html) y [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM.*

1. En la sección **Targets** (Destinos), elija si desea conceder permisos para la función de trabajo que está creando a toda la organización o solo a algunas de sus unidades organizativas.

   Si elige **Entire organization** (Toda la organización), continúe con el paso 9.

   Si elige **Custom** (Personalizar), continúe con el paso 8.

1. En la sección **Target OUs** (Unidades organizativas de destino), seleccione las casillas de verificación de las unidades organizativas en las que se utilizará Change Manager.

1. Seleccione **Crear**.

Después de que el sistema termine de configurar Change Manager para su organización, mostrará un resumen de las implementaciones. Esta información de resumen incluye el nombre del rol que se creó para la función de trabajo que configuró. Por ejemplo, `AWS-QuickSetup-SSMChangeMgr-DBAdminInvocationRole`.

**nota**  
Quick Setup utiliza StackSets de AWS CloudFormation para implementar las configuraciones. También puede ver información acerca de una configuración de implementación completada en la consola de CloudFormation. Para obtener más información acerca de StackSets, consulte [Uso de StackSets de AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) en la *Guía del usuario de AWS CloudFormation*.

El siguiente paso consiste en configurar opciones de Change Manager adicionales. Puede completar esta tarea en su cuenta de administrador delegado o en cualquier cuenta de una unidad organizativa a la que haya permitido usar Change Manager. Puede configurar opciones, como elegir una opción de administración de identidades de usuarios, especificar qué usuarios pueden revisar y aprobar o rechazar las plantillas y las solicitudes de cambios, y elegir qué opciones de prácticas recomendadas se permitirán para su organización. Para obtener más información, consulte [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md).

# Configuración de opciones y prácticas recomendadas de Change Manager
<a name="change-manager-account-setup"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Las tareas de esta sección se deben llevar a cabo independientemente de si Change Manager, una herramienta de AWS Systems Manager, se utiliza en toda una organización o en una única Cuenta de AWS.

Si utiliza Change Manager para una organización, puede realizar las siguientes tareas en su cuenta de administrador delegado o en cualquier cuenta de una unidad organizativa a la que haya permitido que use Change Manager.

**Topics**
+ [Tarea 1: configurar la administración de identidades de usuarios y los revisores de plantillas de Change Manager](#cm-configure-account-task-1)
+ [Tarea 2: configurar los aprobadores de eventos de congelación de cambios y las prácticas recomendadas de Change Manager](#cm-configure-account-task-2)
+ [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md)

## Tarea 1: configurar la administración de identidades de usuarios y los revisores de plantillas de Change Manager
<a name="cm-configure-account-task-1"></a>

Realice la tarea de este procedimiento la primera vez que acceda a Change Manager. Puede actualizar estos ajustes de configuración más adelante regresando a Change Manager y eligiendo **Edit** (Editar) en la pestaña **Settings** (Configuración).

**Para configurar la administración de identidades de usuarios y los revisores de plantillas de Change Manager**

1. Inicie sesión en Consola de administración de AWS.

   Si utiliza Change Manager en una organización, inicie sesión con las credenciales para su cuenta de administrador delegado. El usuario debe tener los permisos de AWS Identity and Access Management (IAM) necesarios para efectuar actualizaciones en la configuración de Change Manager.

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. En la página de inicio del servicio, en función de las opciones disponibles, lleve a cabo alguna de las siguientes operaciones:
   + Si utiliza Change Manager con AWS Organizations, elija **Set up delegated account** (Configurar una cuenta delegada).
   + Si utiliza Change Manager con una única Cuenta de AWS, elija **Set up Change Manager** (Configurar Change Manager).

     -o bien-

     Seleccione **Create sample change request** (Crear solicitud de cambio de muestra), **Skip** (Omitir) y, luego, la pestaña **Settings** (Configuración).

1. En **User identity management** (Administración de identidades de usuarios), elija alguna de las siguientes opciones.
   + **AWS Identity and Access Management (IAM)**: identifique a los usuarios que realizan y aprueban solicitudes y llevan a cabo otras acciones en Change Manager mediante el uso de usuarios, grupos y roles existentes.
   + **AWS IAM Identity Center (Centro de identidades de IAM)**: permita que el [Centro de identidades de IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/) cree y administre identidades o conéctese a su origen de identidades existente para identificar a los usuarios que llevan a cabo acciones en Change Manager.

1. En la sección **notificación del revisor de plantillas**, especifique los temas de Amazon Simple Notification Service (Amazon SNS) que se utilizarán para notificar a los revisores de plantillas que una nueva plantilla de cambios o versión de plantilla de cambios está lista para revisarse. Asegúrese de que el tema de Amazon SNS que elija esté configurado para enviar notificaciones a los revisores de plantillas. 

   Para obtener más información acerca de cómo crear y configurar temas de Amazon SNS para efectuar notificaciones a los revisores de plantillas de cambios, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md).

   1. Para especificar el tema de Amazon SNS que se utilizará para la notificación a los revisores de plantillas, elija una de las siguientes opciones:
      + **Ingrese un nombre de recurso de Amazon (ARN) de SNS**: en **Topic ARN** (ARN de tema), ingrese el ARN de un tema de Amazon SNS existente. Este tema puede estar en cualquiera de las cuentas de su organización.
      + **Seleccione un tema de SNS existente**: en **Target notification topic** (Tema de notificaciones de destino), seleccione el ARN de un tema de Amazon SNS existente en su Cuenta de AWS actual. (Esta opción no estará disponible si aún no ha creado ningún tema de Amazon SNS en su Cuenta de AWS y Región de AWS actuales).
**nota**  
El tema de Amazon SNS que seleccione debe estar configurado para especificar las notificaciones que envía y los suscriptores a los que se las envía. Su política de acceso también debe conceder permisos a Systems Manager para que Change Manager pueda enviar notificaciones. Para obtener más información, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md). 

   1. Seleccione **Agregar notificación**.

1. En la sección **Change template reviewers** (Revisores de plantillas de cambios), seleccione los usuarios de su organización o cuenta que revisarán las nuevas plantillas de cambios o versiones de plantillas de cambios antes de que se puedan utilizar en sus operaciones. 

   Los revisores de plantillas de cambios son responsables de verificar la idoneidad y la seguridad de las plantillas que otros usuarios han enviado para su uso en los flujos de trabajo del manual de procedimientos de Change Manager.

   Seleccione los revisores de plantillas de cambios haciendo lo siguiente:

   1. Elija **Añadir**.

   1. Seleccione la casilla de verificación situada junto al nombre de cada usuario, grupo o rol de IAM que desee designar como revisor de plantillas de cambios.

   1. Elija **Add approvers** (Agregar aprobadores).

1. Elija **Enviar**.

 Después de completar este proceso de configuración inicial, establezca los ajustes adicionales y las prácticas recomendadas de Change Manager siguiendo los pasos que se indican en [Tarea 2: configurar los aprobadores de eventos de congelación de cambios y las prácticas recomendadas de Change Manager](#cm-configure-account-task-2).

## Tarea 2: configurar los aprobadores de eventos de congelación de cambios y las prácticas recomendadas de Change Manager
<a name="cm-configure-account-task-2"></a>

Luego de completar los pasos que se indican en [Tarea 1: configurar la administración de identidades de usuarios y los revisores de plantillas de Change Manager](#cm-configure-account-task-1), puede designar revisores adicionales para las solicitudes de cambio que se efectúen durante los *eventos de congelación de cambios* y especificar qué prácticas recomendadas disponibles desea permitir para sus operaciones de Change Manager.

Un evento de congelación de cambios significa que existen restricciones en el calendario de cambios actual (el estado del calendario en AWS Systems Manager Change Calendar es `CLOSED`). En estos casos, además de los aprobadores regulares de solicitudes de cambio, o cuando la solicitud de cambio se crea utilizando una plantilla que permite las aprobaciones automáticas, se requiere que los aprobadores de congelación de cambios concedan permiso para que esta solicitud de cambio se ejecute. Si no lo hacen, el cambio no se procesará hasta que el estado del calendario vuelva a ser `OPEN`.

**Para configurar los aprobadores de eventos de congelación de cambios y las prácticas recomendadas de Change Manager**

1. En el panel de navegación, elija **Change Manager**.

1. Elija la pestaña **Settings** (Configuración) y, luego, **Edit** (Editar).

1. En la sección **Approvers for change freeze events** (Aprobadores de eventos de congelación de cambios), seleccione los usuarios de su organización o cuenta que podrán aprobar los cambios para que se ejecuten incluso cuando el calendario en uso de Change Calendar esté CERRADO en ese momento.
**nota**  
Para permitir las revisiones de congelación de cambios, debe activar la opción **Check Change Calendar for restricted change events** (Verificar Change Calendar para detectar eventos de cambios restringidos) en **Best practices** (Prácticas recomendadas).

   Seleccione los aprobadores de los eventos de congelación de cambios haciendo de la siguiente manera:

   1. Elija **Agregar**.

   1. Seleccione la casilla de verificación situada junto al nombre de cada usuario, grupo o rol de IAM que desee designar como aprobador de eventos de congelación de cambios.

   1. Elija **Add approvers** (Agregar aprobadores).

1. En la sección **Best practices** (Prácticas recomendadas) ubicada cerca de la parte inferior de la página, active las prácticas recomendadas que desee aplicar a cada una de las siguientes opciones.
   + Opción: c**heck Change Calendar for restricted change events** (Verificar Change Calendar para detectar eventos de cambios restringidos)

     Para especificar que Change Manager verifique un calendario de Change Calendar para asegurarse de que los cambios no estén bloqueados por eventos programados, primero seleccione la casilla de verificación **Enabled** (Habilitado) y, a continuación, seleccione el calendario para verificar si hay eventos restringidos en la lista **Change Calendar**.

     Para obtener más información acerca de Change Calendar, consulte [AWS Systems Manager Change Calendar](systems-manager-change-calendar.md).
   + Opción: **SNS topic for approvers for closed events** (Tema de SNS para aprobadores de eventos cerrados)

     1. Elija una de las siguientes opciones para especificar el tema de Amazon Simple Notification Service (Amazon SNS) de su cuenta que se utilizará para enviar notificaciones a los aprobadores durante los eventos de congelación de cambios. (Tenga en cuenta que también debe especificar aprobadores en la sección **Approvers for change freeze events** [Aprobadores de eventos de congelación de cambios] anterior a **Best practices** [Prácticas recomendadas]).
        + **Ingrese un nombre de recurso de Amazon (ARN) de SNS**: en **Topic ARN** (ARN de tema), ingrese el ARN de un tema de Amazon SNS existente. Este tema puede estar en cualquiera de las cuentas de su organización.
        + **Seleccione un tema de SNS existente**: en **Target notification topic** (Tema de notificaciones de destino), seleccione el ARN de un tema de Amazon SNS existente en su Cuenta de AWS actual. (Esta opción no estará disponible si aún no ha creado ningún tema de Amazon SNS en su Cuenta de AWS y Región de AWS actuales).
**nota**  
El tema de Amazon SNS que seleccione debe estar configurado para especificar las notificaciones que envía y los suscriptores a los que se las envía. Su política de acceso también debe conceder permisos a Systems Manager para que Change Manager pueda enviar notificaciones. Para obtener más información, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md). 

     1. Seleccione **Agregar notificación**.
   + Opción: **Require monitors for all templates** (Requerir monitores para todas las plantillas)

     Si desea asegurarse de que todas las plantillas de su organización o cuenta especifican una alarma de Amazon CloudWatch para monitorear su operación de cambio, seleccione la casilla de verificación **Enabled** (Habilitado).
   + Opción: **Require template review and approval before use** (Requerir revisión y aprobación de las plantillas antes de usarlas)

     Para asegurarse de que no se creen solicitudes de cambio ni se ejecuten flujos de trabajo de manual de procedimientos sin tener como base una plantilla que se haya revisado y aprobado, seleccione la casilla de verificación **Enabled** (Habilitado).

1. Seleccione **Save**.

# Configuración de temas de Amazon SNS para las notificaciones de Change Manager
<a name="change-manager-sns-setup"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Puede configurar Change Manager, una herramienta de AWS Systems Manager, para que envíe notificaciones a un tema de Amazon Simple Notification Service (Amazon SNS) por los eventos relacionados con las solicitudes y las plantillas de cambios. Lleve a cabo las siguientes tareas para recibir notificaciones por los eventos de Change Manager a los que agregue un tema.

**Topics**
+ [Tarea 1: crear un tema de Amazon SNS y suscribirse a él](#change-manager-sns-setup-create-topic)
+ [Tarea 2: actualizar la política de acceso de Amazon SNS](#change-manager-sns-setup-encryption-policy)
+ [Tarea 3: (Opcional) Actualizar la política de acceso de AWS Key Management Service](#change-manager-sns-setup-KMS-policy)

## Tarea 1: crear un tema de Amazon SNS y suscribirse a él
<a name="change-manager-sns-setup-create-topic"></a>

En primer lugar, debe crear un tema de Amazon SNS y suscribirse a él. Para obtener más información, consulte [Creating a Amazon SNS topic](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) (Creación de un tema de Amazon SNS) y [Subscribing to an Amazon SNS topic](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-subscribe-endpoint-to-topic.html) (Suscripción a un tema de Amazon SNS) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

**nota**  
Para recibir notificaciones, debe especificar el nombre de recurso de Amazon (ARN) de un tema de Amazon SNS que se encuentre en la misma Región de AWS y Cuenta de AWS que la cuenta de administrador delegado. 

## Tarea 2: actualizar la política de acceso de Amazon SNS
<a name="change-manager-sns-setup-encryption-policy"></a>

Utilice el siguiente procedimiento para actualizar la política de acceso de Amazon SNS de modo que Systems Manager pueda publicar las notificaciones de Change Manager en el tema de Amazon SNS que creó en la tarea 1. Si no completa esta tarea, Change Manager no tendrá permiso para enviar las notificaciones de los eventos para los que agrega el tema.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon SNS en [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home).

1. En el panel de navegación, elija **Temas**.

1. Elija el tema que creó en la tarea 1 y, a continuación, elija **Edit** (Editar).

1. Expanda **Política de acceso**.

1. Agregue y actualice el siguiente bloque `Sid` a la política existente y sustituya cada *espacio disponible de entrada del usuario* con su propia información.

   ```
   {
       "Sid": "Allow Change Manager to publish to this topic",
       "Effect": "Allow",
       "Principal": {
           "Service": "ssm.amazonaws.com"
       },
       "Action": "sns:Publish",
       "Resource": "arn:aws:sns:region:account-id:topic-name",
       "Condition": {
           "StringEquals": {
               "aws:SourceAccount": [
                   "account-id"
               ]
           }
       }
   }
   ```

   Ingrese este bloque después del bloque `Sid` existente, y reemplace *region*, *account-id* y *topic-name* con los valores apropiados para el tema que ha creado.

1. Seleccione **Save changes (Guardar cambios)**.

El sistema ahora enviará notificaciones al tema de Amazon SNS cuando se produzca el tipo de evento para el que se agregó el tema.

**importante**  
Si configuró el tema de Amazon SNS con una clave de cifrado de AWS Key Management Service (AWS KMS) del lado del servidor, debe completar la tarea 3.

## Tarea 3: (Opcional) Actualizar la política de acceso de AWS Key Management Service
<a name="change-manager-sns-setup-KMS-policy"></a>

Si activó el cifrado de AWS Key Management Service (AWS KMS) del lado del servidor para el tema de Amazon SNS, también debe actualizar la política de acceso de la AWS KMS key que eligió cuando configuró el tema. Siga el siguiente procedimiento para actualizar la política de acceso de modo que Systems Manager pueda publicar las notificaciones de aprobaciones de Change Manager en el tema de Amazon SNS que creó en la tarea 1.

1. Abra la consola de AWS KMS en [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. En el panel de navegación, elija **Claves administradas por el cliente**.

1. Elija el ID de la clave administrada por el cliente que eligió cuando creó el tema.

1. En la sección **Key policy (Política de claves)**, elija **Switch to policy view (Cambiar a la vista de política)**.

1. Elija **Edit (Edición de)**.

1. Escriba el siguiente bloque `Sid` después de uno de los bloques `Sid` en la política existente. Reemplace cada uno *marcador de posición del usuario* con información propia.

   ```
   {
       "Sid": "Allow Change Manager to decrypt the key",
       "Effect": "Allow",
       "Principal": {
           "Service": "ssm.amazonaws.com"
       },
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey*"
       ],
       "Resource": "arn:aws:kms:region:account-id:key/key-id",
       "Condition": {
           "StringEquals": {
               "aws:SourceAccount": [
                   "account-id"
               ]
           }
       }
   }
   ```

1. Ahora, escriba el siguiente bloque `Sid` después de uno de los bloques `Sid` en la política de recursos para ayudar a evitar el [problema del suplente confuso entre servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). 

   Este bloque utiliza claves de contexto de condición global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) y [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) para limitar los permisos que Systems Manager otorga a otro servicio al recurso.

   Reemplace cada uno *marcador de posición del usuario* con información propia.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Configure confused deputy protection for AWS KMS keys used in Amazon SNS topic when called from Systems Manager",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:topic-name",
               "Condition": {
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:ssm:us-east-1:111122223333:*"
                   },
                   "StringEquals": {
                       "aws:SourceAccount": "111122223333"
                   }
               }
           }
       ]
   }
   ```

------

1. Seleccione **Save changes (Guardar cambios)**.

# Configuración de roles y permisos para Change Manager
<a name="change-manager-permissions"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

De manera predeterminada, Change Manager no tiene permiso para realizar acciones en los recursos. Debe conceder acceso mediante un rol de servicio de AWS Identity and Access Management (IAM), o *rol de asunción*. Este rol permite que Change Manager pueda ejecutar de forma segura los flujos de trabajo de manuales de procedimientos especificados en una solicitud de cambio aprobada en su nombre. El rol concede a AWS Security Token Service (AWS STS) la confianza [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) para Change Manager.

Proporcionando estos permisos a un rol para que actúe en nombre de los usuarios de una organización, ya no es necesario conceder ese conjunto de permisos como tal a los usuarios. Las acciones permitidas por los permisos están limitadas únicamente a las operaciones aprobadas.

Cuando los usuarios de la cuenta u organización crean una solicitud de cambio, pueden seleccionar este rol de asunción para realizar las operaciones de cambio.

Puede crear un nuevo rol de asunción para Change Manager, o bien actualizar un rol existente con los permisos necesarios.

Si necesita crear un rol de servicio para Change Manager, complete las siguientes tareas. 

**Topics**
+ [Tarea 1: Creación de una política de rol de asunción para Change Manager](#change-manager-role-policy)
+ [Tarea 2: Creación de un rol de asunción para Change Manager](#change-manager-role)
+ [Tarea 3: Adición de la política `iam:PassRole` a otros roles](#change-manager-passpolicy)
+ [Tarea 4: Adición de políticas insertadas a un rol de asunción para invocar a otros Servicios de AWS](#change-manager-role-add-inline-policy)
+ [Tarea 5: Configuración del acceso de usuario a Change Manager](#change-manager-passrole)

## Tarea 1: Creación de una política de rol de asunción para Change Manager
<a name="change-manager-role-policy"></a>

Utilice el siguiente procedimiento para crear la política que va a adjuntar al rol de asunción de Change Manager.

**Para crear una política de rol de asunción para Change Manager**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Policies** y, a continuación, seleccione **Create Policy**.

1. En la página **Create policy** (Crear política), elija la pestaña **JSON** y reemplace el contenido predeterminado con el siguiente, que modificará para sus propias operaciones de Change Manager en los siguientes pasos.
**nota**  
Si va a crear una política para utilizarla con una sola Cuenta de AWS, no una organización con varias cuentas y Regiones de AWS, puede omitir el primer bloque de instrucciones. No se requiere el permiso `iam:PassRole` en el caso de una sola cuenta que utiliza Change Manager.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/AWS-SystemsManager-job-functionAdministrationRole",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": "ssm.amazonaws.com"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:DescribeDocument",
                   "ssm:GetDocument",
                   "ssm:StartChangeRequestExecution"
               ],
               "Resource": [
                   "arn:aws:ssm:us-east-1::document/template-name",
                   "arn:aws:ssm:us-east-1:111122223333:automation-execution/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:ListOpsItemEvents",
                   "ssm:GetOpsItem",
                   "ssm:ListDocuments",
                   "ssm:DescribeOpsItems"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Actualice el valor `Resource` de la acción `iam:PassRole` para incluir los ARN de todas las funciones laborales definidas para la organización a las que desee conceder permisos para iniciar flujos de trabajo de manuales de procedimientos.

1. Reemplace los marcadores de posición *region*, *account-id*, *template-name*, *delegated-admin-account-id* y *job-function* con valores para sus operaciones de Change Manager.

1. Modifique la lista de la segunda instrucción `Resource` para incluir todas las plantillas de cambio a las que desee conceder permisos. Como alternativa, puede especificar `"Resource": "*"` para conceder permisos a todas las plantillas de cambio de la organización.

1. Elija **Siguiente: etiquetas**.

1. (Opcional) Agregue uno o varios pares de valor etiqueta-clave para organizar, realizar un seguimiento o controlar el acceso a esta política. 

1. Elija **Siguiente: Revisar**.

1. En la página **Review policy** (Revisar política), ingrese un nombre en el cuadro **Name** (Nombre), como **MyChangeManagerAssumeRole**, y luego ingrese una descripción opcional.

1. Elija **Create policy** (Crear política) y vaya a [Tarea 2: Creación de un rol de asunción para Change Manager](#change-manager-role).

## Tarea 2: Creación de un rol de asunción para Change Manager
<a name="change-manager-role"></a>

Siga este procedimiento para crear un rol de asunción de Change Manager, un tipo de rol de servicio, para Change Manager.

**Para crear un rol de asunción para Change Manager**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Roles** y luego seleccione **Crear rol**.

1. En **Select trusted entity** (Seleccionar entidad de confianza), realice las siguientes elecciones:

   1. En **Trusted entity type** (Tipo de entidad de confianza), elija **AWS service** (Servicio de )

   1. En **Use cases for other Servicios de AWS**, (Casos de uso de otros ), elija **Systems Manager**

   1. Elija **Systems Manager**, como aparece en la siguiente imagen.  
![\[Captura de pantalla que muestra la opción de Systems Manager seleccionada como caso de uso.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/iam_use_cases_for_MWs.png)

1. Elija **Siguiente**.

1. En la página **Attached permissions policy** (Política de permisos adjuntos), busque la política de rol de asunción que haya creado en [Tarea 1: Creación de una política de rol de asunción para Change Manager](#change-manager-role-policy), como, por ejemplo, **MyChangeManagerAssumeRole**. 

1. Seleccione la casilla de verificación situada junto al nombre de la política de rol de asunción, y luego elija **Next: Tags** (Siguiente: Etiquetas).

1. En **Role name** (Nombre del rol), ingrese un nombre para el nuevo perfil de instancias, por ejemplo, **MyChangeManagerAssumeRole**.

1. (Opcional) En **Description** (Descripción), actualice la descripción de este rol de instancia.

1. (Opcional) Agregue uno o varios pares de valor etiqueta-clave para organizar, realizar un seguimiento o controlar el acceso a este rol. 

1. Elija **Siguiente: Revisar**.

1. (Opcional) En **Tags** (Etiquetas), agregue uno o varios pares de valores etiqueta-clave para organizar, seguir o controlar el acceso a este rol, y luego elija **Create role** (Crear rol). El sistema le devuelve a la página **Roles**.

1. Elija **Create role**. El sistema le devuelve a la página **Roles**.

1. En la página **Roles**, elija el rol que acaba de crear para abrir la página **Summary (Resumen)**. 

## Tarea 3: Adición de la política `iam:PassRole` a otros roles
<a name="change-manager-passpolicy"></a>

Utilice el siguiente procedimiento para adjuntar la política `iam:PassRole` a un perfil de instancias de IAM o rol de servicio de IAM. (El servicio Systems Manager utiliza perfiles de instancia de IAM para comunicarse con instancias de EC2. En el caso de los nodos administrados que no son de EC2 en un entorno [híbrido y multinube](operating-systems-and-machine-types.md#supported-machine-types), se utiliza en su lugar un rol de servicio de IAM).

Al adjuntar la política `iam:PassRole`, el servicio Change Manager puede transferir permisos de rol de asunción a otros servicios o herramientas de Systems Manager cuando se ejecutan flujos de trabajo de manuales de procedimientos.

**Para adjuntar la política `iam:PassRole` a un perfil de instancia o rol de servicio de IAM**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. Busque el rol de asunción Change Manager que haya creado, como, por ejemplo, **MyChangeManagerAssumeRole**, y elija su nombre.

1. En la página **Summary** (Resumen) del rol de asunción, elija la pestaña **Permissions** (Permisos).

1. Elija **Add permissions, Create inline policy** (Agregar permisos, Crear política insertada).

1. En la página **Create policy** (Crear política), elija la pestaña **Visual editor** (Editor visual).

1. Elija **Service** (Servicio) y, a continuación, **IAM**.

1. En el cuadro de texto **Filter actions** (Filtrar acciones), ingrese **PassRole**, y luego elija la opción **PassRole**.

1. Expanda **Resources** (Recursos). Compruebe que esté seleccionado **Specific (Específicos)** y elija **Add ARN (Añadir ARN)**.

1. En el campo **Specify ARN for role** (Especificar ARN para el rol), ingrese el ARN del rol de perfil de instancias de IAM o del rol de servicio de IAM al que desee transferir permisos de rol de asunción. El sistema rellena los campos **Account (Cuenta)** y **Role name with path (Nombre del rol con ruta)**. 

1. Elija **Add (Agregar)**.

1. Elija **Review policy** (Revisar política).

1. En **Name** (Nombre), ingrese un nombre para identificar esta política, y luego elija **Create policy** (Crear política).

**Más información**  
+ [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md)
+ [Creación del rol de servicio de IAM requerido para Systems Manager en entornos híbridos y multinube](hybrid-multicloud-service-role.md)

## Tarea 4: Adición de políticas insertadas a un rol de asunción para invocar a otros Servicios de AWS
<a name="change-manager-role-add-inline-policy"></a>

Si una solicitud de cambio invoca otros Servicios de AWS mediante el rol de asunción Change Manager, este debe tener permiso para invocar esos servicios. Este requisito se aplica a todos los manuales de procedimientos de AWS Automation (manuales de procedimientos AWS-\$1) que se puedan utilizar en una solicitud de cambio, como los manuales de procedimientos `AWS-ConfigureS3BucketLogging`, `AWS-CreateDynamoDBBackup` y `AWS-RestartEC2Instance`. Este requisito también se aplica a cualquier manual de procedimientos personalizado que cree para invocar otros Servicios de AWS mediante acciones que llaman a otros servicios. Por ejemplo, si utiliza las acciones `aws:executeAwsApi`, `aws:CreateStack` o `aws:copyImage`, debe configurar el rol de servicio con el permiso necesario para invocar esos servicios. Puede habilitar permisos para otros Servicios de AWS si agrega una política insertada de IAM al rol. 

**Para agregar una política insertada a un rol de asunción para invocar otros Servicios de AWS (consola de IAM)**

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. En la lista, elija el nombre del rol de asunción que desee actualizar, como, por ejemplo, `MyChangeManagerAssumeRole`.

1. Elija la pestaña **Permisos**.

1. Elija **Add permissions, Create inline policy** (Agregar permisos, Crear política insertada).

1. Seleccione la pestaña **JSON**.

1. Ingrese un documento de política JSON para los Servicios de AWS que desee invocar. A continuación se muestran dos documentos de política JSON a modo de ejemplo.

   **Ejemplo de `PutObject` y `GetObject` de Amazon S3**

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

------

   **Ejemplo de `CreateSnapshot` y `DescribeSnapShots` de Amazon EC2**

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":"ec2:CreateSnapshot",
            "Resource":"*"
         },
         {
            "Effect":"Allow",
            "Action":"ec2:DescribeSnapshots",
            "Resource":"*"
         }
      ]
   }
   ```

------

    Para obtener información sobre el lenguaje de las políticas de IAM, consulte [Referencia de políticas JSON de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) en la *Guía del usuario de IAM*.

1. Cuando haya terminado, elija **Review policy (Revisar política)**. El [validador de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html) notifica los errores de sintaxis.

1. En **Name** (Nombre), ingrese un nombre para identificar la política que está creando. Revise el **Summary** (Resumen) de la política para ver los permisos concedidos por su política. A continuación, elija **Create policy** (Crear política) para guardar su trabajo.

1. Una vez que cree una política insertada, se integra de manera automática a su rol.

## Tarea 5: Configuración del acceso de usuario a Change Manager
<a name="change-manager-passrole"></a>

Si el usuario, grupo o rol tiene asignados permisos de administrador, entonces tiene acceso a Change Manager. Si no tiene permisos de administrador, un administrador debe asignar la política administrada `AmazonSSMFullAccess` o una política que proporcione permisos comparables a su usuario, grupo o rol.

Utilice el siguiente procedimiento a fin de configurar un usuario para utilizar Change Manager. El usuario que elija tendrá permiso para configurar y ejecutar Change Manager. 

Según la aplicación de identidad que utilice en su organización, puede seleccionar cualquiera de las tres opciones disponibles para configurar el acceso del usuario. Al configurar el acceso del usuario, asigne o agregue lo siguiente: 

1. Asigne la política `AmazonSSMFullAccess` o una política comparable que proporcione permiso para acceder a Systems Manager.

1. Asigne la política `iam:PassRole`.

1. Agregue el ARN del rol de asunción de Change Manager que copió al final de [Tarea 2: Creación de un rol de asunción para Change Manager](#change-manager-role).

Para dar acceso, agregue permisos a los usuarios, grupos o roles:
+ Usuarios y grupos en AWS IAM Identity Center:

  Cree un conjunto de permisos. Siga las instrucciones de [Creación de un conjunto de permisos](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) en la *Guía del usuario de AWS IAM Identity Center*.
+ Usuarios gestionados en IAM a través de un proveedor de identidades:

  Cree un rol para la federación de identidades. Siga las instrucciones descritas en [Creación de un rol para un proveedor de identidad de terceros (federación)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) en la *Guía del usuario de IAM*.
+ Usuarios de IAM:
  + Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en [Creación de un rol para un usuario de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) en la *Guía del usuario de IAM*.
  + (No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en [Adición de permisos a un usuario (consola)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) de la *Guía del usuario de IAM*.

Ha terminado de configurar los roles requeridos para Change Manager. A partir de ahora, puede utilizar el ARN del rol de asunción Change Manager en las operaciones de Change Manager.

# Control de acceso a flujos de trabajo de manual de procedimientos de aprobación automática
<a name="change-manager-auto-approval-access"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

En cada plantilla de cambios creada para su organización o cuenta, puede especificar si las solicitudes de cambio que se creen a partir de esa plantilla pueden ejecutarse como solicitudes de cambio de aprobación automática, lo que significa que se ejecutan automáticamente sin ningún paso de revisión (con la excepción de los eventos de congelación de cambios).

Sin embargo, es posible que desee evitar que ciertos usuarios, grupos o roles de AWS Identity and Access Management (IAM) ejecuten solicitudes de cambio de aprobación automática, incluso si una plantilla de cambios lo permite. Puede hacerlo mediante el uso de la clave de condición `ssm:AutoApprove` para la operación `StartChangeRequestExecution` en una política de IAM asignada al usuario, al grupo o al rol de IAM. 

Puede agregar la siguiente política como una política insertada, donde la condición se especifica como `false`, para evitar que los usuarios ejecuten solicitudes de cambio de aprobación automática.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
            {
            "Effect": "Allow",
            "Action": "ssm:StartChangeRequestExecution",
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "ssm:AutoApprove": "false"
                }
            }
        }
    ]
}
```

------

Para obtener más información acerca de cómo especificar políticas insertadas, consulte [Políticas insertadas](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) y [Agregado y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

Para obtener más información sobre las claves de condición de las políticas de Systems Manager, consulte[Claves de condición de Systems Manager](security_iam_service-with-iam.md#policy-conditions).

# Trabajo con Change Manager
<a name="working-with-change-manager"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Con Change Manager, una herramienta de AWS Systems Manager, los usuarios de toda la organización o de una única Cuenta de AWS pueden llevar a cabo tareas relacionadas con los cambios para las que se les hayan otorgado los permisos necesarios. Las tareas de Change Manager son las siguientes:
+ Cree, revise y apruebe o rechace las plantillas de cambios. 

  Una plantilla de cambios es una colección de ajustes de configuración en Change Manager que definen aspectos tales como las aprobaciones requeridas, los manuales de procedimientos disponibles y las opciones de notificación para las solicitudes de cambio.
+ Cree, revise y apruebe o rechace las solicitudes de cambios.

  Una solicitud de cambio se trata de una solicitud en Change Manager para ejecutar un manual de procedimientos de Automation que actualice uno o más recursos de sus entornos locales o en AWS. Una solicitud de cambio se crea usando una plantilla de cambios.
+ Especifique qué usuarios de su organización o cuenta se pueden convertir en revisores de las plantillas y las solicitudes de cambios.
+ Edite los ajustes de configuración, como, por ejemplo, cómo se administran las identidades de usuarios en Change Manager y cuáles de las opciones disponibles de *prácticas recomendadas* se aplican a sus operaciones de Change Manager. Para obtener más información acerca de la configuración de estos ajustes, consulte [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md).

**Topics**
+ [Uso de las plantillas de cambios](change-templates.md)
+ [Uso de solicitudes de cambio](change-requests.md)
+ [Revisión de los detalles, las tareas y los plazos de las solicitudes de cambio (consola)](reviewing-changes.md)
+ [Visualización de recuentos agregados de solicitudes de cambio (línea de comandos)](change-requests-review-aggregate-command-line.md)

# Uso de las plantillas de cambios
<a name="change-templates"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Una plantilla de cambios es una colección de ajustes de configuración en Change Manager que definen aspectos tales como las aprobaciones requeridas, los manuales de procedimientos disponibles y las opciones de notificación para las solicitudes de cambio.

**nota**  
AWS proporciona una muestra de la plantilla de cambios [Hello World](change-templates-aws-managed.md) que puede utilizar para probar Change Manager, una herramienta de AWS Systems Manager. Sin embargo, puede crear sus propias plantillas de cambios para definir los cambios que desea permitir en los recursos de su organización o cuenta. 

Los cambios que se realizan cuando se ejecuta un flujo de trabajo de manual de procedimientos se basan en el contenido del manual de procedimientos de Automation. En cada plantilla de cambios que cree, puede incluir uno o más manuales de procedimientos de Automation de los que puede elegir el usuario que realiza una solicitud de cambio para que se ejecute durante la actualización. También puede crear plantillas de cambios que permitan a los solicitantes elegir cualquier manual de procedimientos de Automation que esté disponible para la solicitud de cambio.

Para crear una plantilla de cambios, puede utilizar la opción **Builder** (Generador) en la página **Create template** (Crear plantilla) de la consola. De forma alternativa, mediante la opción **Editor** (Editor), puede crear de forma manual contenido JSON o YAML con la configuración que desee para el flujo de trabajo del manual de procedimientos. También puede utilizar una herramienta de línea de comandos para crear una plantilla de cambios, con contenido JSON para la plantilla de cambios almacenada en un archivo externo.

**Topics**
+ [Prueba de la plantilla de cambios administrada por AWS `Hello World`](change-templates-aws-managed.md)
+ [Creación de plantillas de cambios](change-templates-create.md)
+ [Revisión y aprobación o rechazo de las plantillas de cambios](change-templates-review.md)
+ [Eliminación de plantillas de cambio](change-templates-delete.md)

# Prueba de la plantilla de cambios administrada por AWS `Hello World`
<a name="change-templates-aws-managed"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Puede utilizar la plantilla de cambios de muestra `AWS-HelloWorldChangeTemplate`, que utiliza el manual de procedimientos de Automatización de muestra `AWS-HelloWorld`, para probar el proceso de revisión y aprobación una vez que haya terminado de configurar Change Manager, una herramienta de AWS Systems Manager. Esta plantilla está diseñada para probar o verificar los permisos configurados, las asignaciones de aprobadores y el proceso de aprobación. La aprobación para utilizar esta plantilla de cambios en su organización o cuenta ya ha sido otorgada por AWS. Sin embargo, cualquier solicitud de cambio basada en esta plantilla de cambios aún debe ser aprobada por los revisores de su organización o cuenta.

En lugar de efectuar cambios en un recurso, el resultado del flujo de trabajo del manual de procedimientos asociado a esta plantilla es imprimir un mensaje en la salida de un paso de Automation.

**Antes de empezar**  
Antes de comenzar, asegúrese de haber realizado las siguientes tareas:
+ Si utiliza AWS Organizations para administrar los cambios en toda una organización, lleve a cabo las tareas de configuración de la organización descritas en [Configuración de Change Manager para una organización (cuenta de administración)](change-manager-organization-setup.md).
+ Configure Change Manager para su cuenta de administrador delegado o cuenta única, tal como se describe en [Configuración de opciones y prácticas recomendadas de Change Manager](change-manager-account-setup.md). 
**nota**  
Si activó la opción de práctica recomendada **Require monitors for all templates** (Requerir monitores para todas las plantillas) en la configuración de Change Manager, desactívelo temporalmente mientras prueba la plantilla de cambios Hello World.

**Para probar la plantilla de cambios Hello World administrada por AWS**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. Seleccione **Create request** (Crear solicitud).

1. Elija la plantilla de cambios denominada `AWS-HelloWorldChangeTemplate` y, luego, **Next** (Siguiente).

1. En **Name** (Nombre), ingrese un nombre para la solicitud de cambio que facilite la identificación de su finalidad, como **MyChangeRequestTest**.

1. Para conocer el resto de los pasos para crear la solicitud de cambio, consulte [Creación de solicitudes de cambioCreación de solicitudes de cambio (consola)](change-requests-create.md).

**Siguientes pasos**  
Para obtener más información acerca de cómo aprobar las solicitudes de cambio, consulte [Revisión y aprobación o rechazo de las solicitudes de cambio](change-requests-review.md).

Para ver el estado y los resultados de la solicitud de cambio, elija el nombre en la pestaña **Requests** (Solicitudes) de Change Manager. 

# Creación de plantillas de cambios
<a name="change-templates-create"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Una plantilla de cambios es una colección de ajustes de configuración en Change Manager que definen aspectos tales como las aprobaciones requeridas, los manuales de procedimientos disponibles y las opciones de notificación para las solicitudes de cambio.

Puede crear plantillas de cambios para sus operaciones de Change Manager, una herramienta de AWS Systems Manager, con la consola, que incluye las opciones del Creador y el Editor o las herramientas de línea de comandos.

**Topics**
+ [Acerca de las aprobaciones en las plantillas de cambios](cm-approvals-templates.md)
+ [Creación de plantillas de cambios con el Generador](change-templates-custom-builder.md)
+ [Creación de plantillas de cambios con el Editor](change-templates-custom-editor.md)
+ [Creación de plantillas de cambios con las herramientas de línea de comandos](change-templates-tools.md)

# Acerca de las aprobaciones en las plantillas de cambios
<a name="cm-approvals-templates"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

En cada plantilla de cambios que cree, puede especificar hasta cinco *niveles* de aprobación para las solicitudes de cambio que se creen a partir de ella. Para cada uno de esos niveles, puede designar hasta cinco *aprobadores* potenciales. Un aprobador no se limita a un solo usuario. También puede especificar un grupo de IAM o un rol de IAM como aprobador individual. En el caso de los grupos de IAM y los roles de IAM, uno o más usuarios que pertenezcan al grupo o al rol pueden dar su aprobación a fin de recibir el número total de aprobaciones necesarias para una solicitud de cambio. También puede especificar más aprobadores de los que requiere la plantilla de cambios.

Change Manager admite dos enfoques principales de las aprobaciones: *las aprobaciones por nivel* y las *aprobaciones por línea*. También es posible combinar ambos tipos en algunas situaciones. Le recomendamos que utilice solo aprobaciones por nivel en sus operaciones de Change Manager.

------
#### [ Per-level approvals ]

*Recomendado*. A partir del 23 de enero de 2023, Change Manager admite aprobaciones por nivel. En este modelo, para cada nivel de aprobación de la plantilla de cambios, primero se debe especificar el número de aprobaciones necesarias para ese nivel. A continuación, se especifica al menos ese número de aprobadores para el nivel y se pueden especificar más aprobadores. Sin embargo, solo el número de aprobadores por nivel que se especifique deben aprobar la solicitud de cambio. Por ejemplo, es posible especificar cinco aprobadores, pero se requieren tres aprobaciones.

Para ver ejemplos de la vista en la consola y JSON de este tipo de aprobación, consulte [Ejemplo de configuración de aprobación por nivel](approval-type-samples.md#per-level-approvals).

------
#### [ Per-line approvals ]

*Se admite para la compatibilidad con versiones anteriores*. La versión original de Change Manager solo admitía aprobaciones por línea. En este modelo, cada aprobador especificado para un nivel de aprobación se representa como una línea de aprobación. Cada aprobador tenía que aprobar una solicitud de cambio para que se aprobara en ese nivel. Antes del 23 de enero de 2023, este era el único modelo compatible para las aprobaciones. Las plantillas de cambios creadas antes de esta fecha siguen admitiendo aprobaciones por línea, pero se recomienda utilizar aprobaciones por nivel en su lugar.

Para ver ejemplos de la vista en la consola y JSON de este tipo de aprobación, consulte [Ejemplo de configuración de aprobación por línea](approval-type-samples.md#per-line-approvals).

------
#### [ Combined per-line and per-level approvals ]

*No se recomienda*. En la consola, la pestaña **Editor** ya no permite agregar aprobaciones por línea. Sin embargo, en algunos casos, es posible que consiga aprobaciones tanto por línea como por nivel en una plantilla de cambios. Esto puede ocurrir si actualiza una plantilla de cambios que se creó antes del 23 de enero de 2023 o si crea o actualiza una plantilla de cambios y edita su contenido en YAML manualmente.

Para ver ejemplos de la vista en la consola y JSON de este tipo de aprobación, consulte [Ejemplo de configuración de aprobación combinada por nivel y por línea](approval-type-samples.md#combined-approval-levels).

------

**importante**  
Si bien es posible crear una plantilla de cambios que combine las aprobaciones por línea y por nivel, esta configuración no es recomendable ni necesaria. Prevalecerá el tipo de aprobación que requiera más aprobaciones (aprobaciones por línea o por nivel). Por ejemplo:  
Si una plantilla de cambios especifica tres aprobaciones por nivel pero cinco aprobaciones por línea, se requieren cinco aprobaciones.
Si una plantilla de cambios especifica cuatro aprobaciones por nivel pero dos por línea, se requieren cuatro aprobaciones.

Puede crear un nivel que incluya aprobaciones por línea y por nivel editando el contenido en YAML o JSON manualmente. A continuación, la pestaña **Editor** muestra los controles para especificar el número de aprobaciones requerido tanto para el nivel como para las líneas individuales. Sin embargo, los nuevos niveles que agregue mediante la consola solo admiten configuraciones de aprobación por nivel.

## Notificaciones y rechazos de solicitudes de cambio
<a name="notifications-and-rejections"></a>

Notificaciones de Amazon SNS  
Cuando se crea una solicitud de cambio con su plantilla, las notificaciones se envían a los suscriptores del tema Amazon Simple Notification Service (Amazon SNS) designado para las notificaciones de ese nivel. Puede especificar el tema de la notificación en la plantilla de cambios o permitir que el usuario que crea la solicitud de cambio especifique uno.  
Luego de recibir el número mínimo de aprobaciones necesarias en un nivel, se envían notificaciones a los aprobadores suscritos al tema de Amazon SNS para el siguiente nivel, y así sucesivamente.  
Asegúrese de que los roles, grupos y usuarios de IAM que designe en conjunto proporcionen suficientes aprobadores para cumplir con la cantidad requerida de aprobaciones que especifique. Por ejemplo, si designa solo un grupo de IAM como aprobador que contiene tres usuarios, no puede especificar que cinco aprobaciones sean obligatorias en ese nivel, solo tres o menos.

Rechazos de solicitudes de cambio  
Independientemente del número de niveles de aprobación y aprobadores que especifique, solo se requiere un rechazo a una solicitud de cambio para evitar que se produzca el flujo de trabajo del manual de procedimientos de esa solicitud.

# Ejemplos de tipos de aprobación de Change Manager
<a name="approval-type-samples"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Los siguientes ejemplos muestran la vista de la consola y el contenido en JSON de los tres tipos de aprobación en Change Manager.

**Topics**
+ [Ejemplo de configuración de aprobación por nivel](#per-level-approvals)
+ [Ejemplo de configuración de aprobación por línea](#per-line-approvals)
+ [Ejemplo de configuración de aprobación combinada por nivel y por línea](#combined-approval-levels)

## Ejemplo de configuración de aprobación por nivel
<a name="per-level-approvals"></a>

En la configuración del nivel de aprobación por nivel que se muestra en la siguiente imagen, se requieren tres aprobaciones. Esas aprobaciones pueden provenir de cualquier combinación de usuarios, grupos y roles de IAM que se especifiquen como aprobadores. Los aprobadores especificados incluyen dos usuarios de IAM (John Stiles y Ana Carolina Silva), un grupo de usuarios que contiene tres miembros (`GroupOfThree`) y un rol de usuario que representa a diez usuarios (`RoleOfTen`). 

Si los tres usuarios del grupo `GroupOfThree` aprueban la solicitud de cambio, se aprueba para ese nivel. No es necesario recibir la aprobación de cada usuario, grupo o rol. El número mínimo de aprobaciones puede provenir de cualquier combinación de aprobadores especificados. Le recomendamos que utilice aprobaciones por nivel en sus operaciones de Change Manager.

![\[Nivel de aprobación que muestra que se requieren tres aprobaciones y cuatro aprobadores especificados.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/Add-approval-2.png)


En el siguiente ejemplo, se ilustra parte del código en YAML de esta configuración. 

**nota**  
Esta versión del código en YAML incluye una entrada adicional, `MinRequiredApprovals` (con `M` mayúscula inicial). El valor de esta entrada indica cuántas aprobaciones se requieren de entre todos los revisores disponibles. Tenga en cuenta también que el valor `minRequiredApprovals` (`m` inicial en minúscula) de cada aprobador de la lista `Approvers` es `0` (cero). Esto indica que el aprobador puede contribuir a las aprobaciones generales, pero no está obligado a hacerlo.

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
  - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
      Message: Please approve this change request
      MinRequiredApprovals: 3
      EnhancedApprovals:
        Approvers:
          - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 0
          - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 0
          - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 0
          - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 0
templateInformation: >
  #### What is the purpose of this change?
    //truncated
```

## Ejemplo de configuración de aprobación por línea
<a name="per-line-approvals"></a>

En la configuración del nivel de aprobación que se muestra en la siguiente imagen, se especifican cuatro aprobadores. Estos incluyen dos usuarios de IAM (John Stiles y Ana Carolina Silva), un grupo de usuarios que contiene tres miembros (`GroupOfThree`) y un rol de usuario que representa a diez usuarios (`RoleOfTen`). Se admiten aprobaciones por línea por motivos de compatibilidad con versiones anteriores, pero no se recomiendan.

![\[Nivel de aprobación que muestra los cuatro aprobadores necesarios por línea.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/Add-approval-1.png)


Para que la solicitud de cambio se apruebe en esta configuración de aprobación por línea, deben aprobarla todas las líneas de aprobadores: John Stiles, Ana Carolina Silva, un miembro del grupo `GroupOfThree` y un miembro del rol `RoleOfTen`.

En el siguiente ejemplo, se ilustra parte del código en YAML de esta configuración.

**nota**  
Observe que el valor de cada aprobador `minRequiredApprovals` es `1`. Esto indica que se requiere una aprobación de cada aprobador.

```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
  - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 10000
    inputs:
      Message: Please approve this change request
      EnhancedApprovals:
        Approvers:
          - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 1
          - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 1
          - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 1
          - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 1
executableRunBooks:
  - name: AWS-HelloWorld
    version: $DEFAULT
templateInformation: >
  #### What is the purpose of this change?
    //truncated
```

## Ejemplo de configuración de aprobación combinada por nivel y por línea
<a name="combined-approval-levels"></a>

En la configuración combinada de aprobación por nivel y por línea que se muestra en la siguiente imagen, se especifican tres aprobaciones para el nivel, pero se especifican cuatro aprobaciones por línea. El tipo de aprobación que requiera más aprobaciones tendrá prioridad sobre el otro, por lo que esta configuración requiere cuatro aprobaciones. No se recomienda la aprobación combinada por nivel y por línea.

![\[Nivel de aprobación que muestra tres aprobaciones requeridas para el nivel, pero cuatro requeridas por línea.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/Add-approval-3.png)


```
schemaVersion: "0.3"
emergencyChange: false
autoApprovable: false
mainSteps:
  - name: ApproveAction1
    action: aws:approve
    timeoutSeconds: 604800
    inputs:
      Message: Please approve this change request
      MinRequiredApprovals: 3
      EnhancedApprovals:
        Approvers:
          - approver: John Stiles
            type: IamUser
            minRequiredApprovals: 1
          - approver: Ana Carolina Silva
            type: IamUser
            minRequiredApprovals: 1
          - approver: GroupOfThree
            type: IamGroup
            minRequiredApprovals: 1
          - approver: RoleOfTen
            type: IamRole
            minRequiredApprovals: 1
templateInformation: >
  #### What is the purpose of this change?
    //truncated
```

**Topics**
+ [Acerca de las aprobaciones en las plantillas de cambios](cm-approvals-templates.md)
+ [Creación de plantillas de cambios con el Generador](change-templates-custom-builder.md)
+ [Creación de plantillas de cambios con el Editor](change-templates-custom-editor.md)
+ [Creación de plantillas de cambios con las herramientas de línea de comandos](change-templates-tools.md)

# Creación de plantillas de cambios con el Generador
<a name="change-templates-custom-builder"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Con el Creador de plantillas de cambios de Change Manager, una herramienta de AWS Systems Manager, puede configurar el flujo de trabajo de manual de procedimientos definido en la plantilla de cambios sin tener que utilizar la sintaxis JSON o YAML. Después de que usted especifique las opciones, el sistema convertirá la entrada al formato YAML que Systems Manager puede utilizar para ejecutar los flujos de trabajo del manual de procedimientos.

**Para crear una plantilla de cambios con el Generador**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. Seleccione **Crear plantilla**.

1. En **Name** (Nombre), ingrese un nombre para la plantilla que facilite la identificación de su finalidad, como **UpdateEC2LinuxAMI**.

1. En la sección **Change template details** (Detalles de la plantilla de cambios), realice el siguiente procedimiento:
   + En **Description** (Descripción), proporcione una breve explicación de cómo y cuándo se utilizará la plantilla de cambios que está creando. 

     Esta descripción ayuda a los usuarios que crean solicitudes de cambio a determinar si están utilizando la plantilla de cambios correcta. También ayuda a quienes revisan las solicitudes de cambio a entender si la solicitud debe aprobarse.
   + En **Change template type** (Tipo de plantilla de cambios), especifique si va a crear una plantilla de cambios estándar o una plantilla de cambios de emergencia.

     La plantilla de cambios de emergencia se utiliza para situaciones en las que se debe realizar un cambio aunque los cambios estén bloqueados por un evento del calendario en uso por AWS Systems Manager Change Calendar. Las solicitudes de cambio creadas a partir de una plantilla de cambios de emergencia siguen requiriendo la aprobación de los aprobadores designados, pero los cambios solicitados pueden ejecutarse incluso cuando el calendario está bloqueado.
   + En **Runbook options** (Opciones de manuales de procedimientos), especifique los manuales de procedimientos de los que los usuarios pueden elegir cuando se crea una solicitud de cambio. Puede agregar un único manual de procedimientos o varios. De forma alternativa, puede permitir a los solicitantes especificar el manual de procedimientos que se va a utilizar. En cualquiera de estos casos, solo se puede incluir un manual de procedimientos en la solicitud de cambio.
   + En **Runbook** (Manual de procedimientos), seleccione los nombres de los manuales de procedimientos y las versiones de esos manuales de los cuales los usuarios pueden elegir para sus solicitudes de cambio. Independientemente de la cantidad de manuales de procedimientos que agregue a la plantilla de cambios, solo se puede seleccionar uno por cada solicitud de cambio.

     No se especifica ningún manual de procedimientos si antes se elige **Any runbook can be used** (Se puede utilizar cualquier manual de procedimientos).
**sugerencia**  
Seleccione un manual de procedimientos y una versión de manual de procedimientos y, a continuación, elija **View** (Ver) para examinar el contenido del manual de procedimientos en la interfaz de Systems Manager Documents.

1. En la sección **Template information** (Información de la plantilla), utilice Markdown para ingresar información para los usuarios que creen solicitudes de cambio a partir de esta plantilla de cambios. Hemos proporcionado un conjunto de preguntas que puede incluir para los usuarios que crean solicitudes de cambio, o bien, puede agregar otra información y preguntas en su lugar. 
**nota**  
Markdown es un lenguaje de marcado que le permite agregar descripciones de estilo wiki a documentos y pasos individuales dentro del documento. Para obtener más información acerca del uso de Markdown, consulte [Uso de Markdown en AWS](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html).

   Recomendamos proporcionar preguntas para los usuarios sobre sus solicitudes de cambio para ayudar a los aprobadores a decidir si aprobar o no cada solicitud de cambio, como listar los pasos manuales necesarios para ejecutarse como parte del cambio y un plan de restauración. 
**sugerencia**  
Alterne entre **Hide preview** (Ocultar vista previa) y **Show preview** (Mostrar vista previa) para ver el aspecto del contenido a medida que lo redacta.

1. En la sección **Change request approvals** (Aprobaciones de solicitudes de cambio), realice el siguiente procedimiento:
   + (Opcional) Si desea permitir que las solicitudes de cambio creadas a partir de esta plantilla de cambios se ejecuten automáticamente, sin que los aprobadores las revisen (con la excepción de los eventos de congelación de cambios), seleccione **Enable auto-approval** (Habilitar la aprobación automática).
**nota**  
Habilitar las aprobaciones automáticas en una plantilla de cambios proporciona a los usuarios la *opción* de pasar por alto a los revisores. Sin embargo, los usuarios todavía pueden elegir especificar revisores cuando se crea una solicitud de cambio. Por lo tanto, aún debe especificar las opciones de revisores en la plantilla de cambios.
**importante**  
Si habilita la aprobación automática para una plantilla de cambios, los usuarios pueden enviar solicitudes de cambio utilizando esa plantilla que no requiere revisión por parte de los revisores antes de ejecutarse (con la excepción de los aprobadores de eventos de congelación de cambios). Si desea restringir que un usuario, grupo o rol de IAM determinado envíe solicitudes de aprobación automática, puede utilizar una condición en una política de IAM para este fin. Para obtener más información, consulte [Control de acceso a flujos de trabajo de manual de procedimientos de aprobación automática](change-manager-auto-approval-access.md).
   + En **Número de aprobaciones requeridas en este nivel**, elija el número de aprobaciones que deben recibir las solicitudes de cambio creadas a partir de esta plantilla de cambios para este nivel.
   + Para agregar aprobadores obligatorios de primer nivel, elija **Add approver** (Agregar aprobador) y, luego, elija entre las siguientes opciones:
     + **Template specified approvers** (Aprobadores especificados en la plantilla): elija uno o más usuarios, grupos o roles de AWS Identity and Access Management (IAM) de su cuenta para que aprueben las solicitudes de cambio creadas a partir de esta plantilla de cambios. Todas las solicitudes de cambio que se creen con esta plantilla deben ser revisadas y aprobadas por cada aprobador que usted especifique.
     + **Solicite aprobadores específicos**: el usuario que realiza la solicitud de cambio especifica los revisores cuando efectúa la solicitud y puede elegir entre una lista de usuarios de su cuenta. 

       El número que ingrese en la columna **Required** (Obligatorio) determinará cuántos revisores deben especificarse en una solicitud de cambio que utilice esta plantilla de cambios. 
**importante**  
Antes del 23 de enero de 2023, la pestaña **Editor** permitía especificar solo las aprobaciones por línea. Las nuevas plantillas de cambios y los nuevos niveles que agregue a las plantillas de cambios existentes mediante la pestaña **Editor** solo admiten aprobaciones por nivel. Le recomendamos que utilice solo aprobaciones por nivel en sus operaciones de Change Manager.  
Para obtener más información, consulte [Acerca de las aprobaciones en las plantillas de cambios](cm-approvals-templates.md).
   + En **SNS topic to notify approvers** (Tema de SNS para notificar a los aprobadores), realice el siguiente procedimiento:

     1. Elija una de las siguientes opciones para especificar el tema de Amazon Simple Notification Service (Amazon SNS) de su cuenta que se utilizará para enviar notificaciones a los aprobadores que indiquen que una solicitud de cambio está lista para que la revisen:
        + **Ingrese un nombre de recurso de Amazon (ARN) de SNS**: en **Topic ARN** (ARN de tema), ingrese el ARN de un tema de Amazon SNS existente. Este tema puede estar en cualquiera de las cuentas de su organización.
        + **Seleccione un tema de SNS existente**: en **Target notification topic** (Tema de notificaciones de destino), seleccione el ARN de un tema de Amazon SNS existente en su Cuenta de AWS actual. (Esta opción no estará disponible si aún no ha creado ningún tema de Amazon SNS en su Cuenta de AWS y Región de AWS actuales).
        + **Especifique el tema de SNS cuando se crea la solicitud de cambio**: el usuario que crea una solicitud de cambio puede especificar el tema de Amazon SNS que se utilizará para efectuar las notificaciones.
**nota**  
El tema de Amazon SNS que seleccione debe estar configurado para especificar las notificaciones que envía y los suscriptores a los que se las envía. Su política de acceso también debe conceder permisos a Systems Manager para que Change Manager pueda enviar notificaciones. Para obtener más información, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md). 

     1. Seleccione **Agregar notificación**.

1. (Opcional) Para agregar un nivel adicional de aprobadores, elija **Add approval level** (Agregar nivel de aprobación) y elija entre aprobadores especificados en la plantilla y aprobadores especificados en la solicitud para este nivel. A continuación, elija un tema de SNS para notificar a este nivel de aprobadores.

   Una vez recibidas todas las aprobaciones emitidas por los aprobadores del primer nivel, se notifica a los aprobadores del segundo nivel y así sucesivamente.

   Puede agregar un máximo de cinco niveles de aprobadores en cada plantilla. Por ejemplo, puede requerir aprobaciones de usuarios con roles técnicos para el primer nivel y, luego, la aprobación administrativa para el segundo nivel.

1. En la sección **Monitoring** (Monitoreo), en **CloudWatch alarm to monitor** (Alarma de CloudWatch para monitorear), ingrese el nombre de una alarma de Amazon CloudWatch de la cuenta actual para monitorear el progreso de los flujos de trabajo del manual de procedimientos que se basen en esta plantilla. 
**sugerencia**  
Para crear una nueva alarma o revisar la configuración de una alarma que desea especificar, elija **Open the Amazon CloudWatch console** (Abrir la consola de Amazon CloudWatch). Para obtener más información acerca del uso de las alarmas de CloudWatch, consulte [Using CloudWatch Alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) en la *Guía del usuario de Amazon CloudWatch*.

1. En la sección **notificaciones**, realice el siguiente procedimiento:

   1. Elija una de las siguientes opciones para especificar el tema de Amazon SNS de su cuenta que se utilizará para enviar notificaciones sobre las solicitudes de cambio creadas con esta plantilla de cambios: 
      + **Ingrese un nombre de recurso de Amazon (ARN) de SNS**: en **Topic ARN** (ARN de tema), ingrese el ARN de un tema de Amazon SNS existente. Este tema puede estar en cualquiera de las cuentas de su organización.
      + **Seleccione un tema de SNS existente**: en **Target notification topic** (Tema de notificaciones de destino), seleccione el ARN de un tema de Amazon SNS existente en su Cuenta de AWS actual. (Esta opción no estará disponible si aún no ha creado ningún tema de Amazon SNS en su Cuenta de AWS y Región de AWS actuales).
**nota**  
El tema de Amazon SNS que seleccione debe estar configurado para especificar las notificaciones que envía y los suscriptores a los que se las envía. Su política de acceso también debe conceder permisos a Systems Manager para que Change Manager pueda enviar notificaciones. Para obtener más información, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md). 

   1. Seleccione **Agregar notificación**.

1. (Opcional) En la sección **Tags** (Etiquetas), aplique uno o más pares de nombre y valor de clave de etiqueta en la plantilla de cambios.

   Las etiquetas son metadatos opcionales que usted asigna a un recurso. Con las etiquetas puede clasificar un recurso de diferentes maneras, por ejemplo, según su finalidad, propietario o entorno. Por ejemplo, es posible que desee etiquetar una plantilla de cambios para identificar el tipo de cambios que ella realiza y el entorno en el que se ejecuta. En este caso, puede especificar los siguientes pares de claves nombre-valor:
   + `Key=TaskType,Value=InstanceRepair`
   + `Key=Environment,Value=Production`

1. Seleccione **Save and preview** (Guardar y previsualizar).

1. Revise los detalles de la plantilla de cambios que está creando.

   Si desea modificar la plantilla de cambios antes de enviarla para su revisión, elija **Actions, Edit** (Acciones, Editar).

   Si está satisfecho con el contenido de la plantilla de cambios, elija **Submit for review** (Enviar para revisión). Los usuarios de su organización o cuenta que se hayan especificado como revisores de plantillas en la pestaña **Settings** (Configuración) de Change Manager reciben una notificación que indica que una nueva plantilla de cambios está en espera de su revisión. 

   Si se ha especificado un tema de Amazon SNS para las plantillas de cambios, se envían notificaciones cuando la plantilla de cambios se rechaza o se aprueba. Si no recibe notificaciones relacionadas con esta plantilla de cambios, puede regresar a Change Manager más tarde para verificar su estado.

# Creación de plantillas de cambios con el Editor
<a name="change-templates-custom-editor"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Siga los pasos de este tema para configurar una plantilla de cambios en Change Manager, una herramienta de AWS Systems Manager. Para ello, ingrese JSON o YAML en lugar de usar los controles de la consola.

**Para crear una plantilla de cambios con el Editor**

1. En el panel de navegación, elija **Change Manager**.

1. Seleccione **Crear plantilla**.

1. En **Name** (Nombre), ingrese un nombre para la plantilla que facilite la identificación de su finalidad, como **RestartEC2LinuxInstance**.

1. Arriba de **Change template details** (Detalles de la plantilla de cambios), elija **Editor** (Editor).

1. En la sección **Document editor** (Editor de documentos), elija **Edit** (Editar) y, a continuación, ingrese el contenido JSON o YAML para su plantilla de cambios. 

   A continuación se muestra un ejemplo.
**nota**  
El parámetro `minRequiredApprovals` se utiliza para especificar cuántos revisores de un nivel especificado deben aprobar una solicitud de cambio creada mediante esta plantilla.  
En este ejemplo, se muestran dos niveles de aprobaciones. Puede especificar hasta cinco niveles de aprobaciones, pero solo se requiere un nivel.   
En el primer nivel, el usuario específico “John-Doe” debe aprobar cada solicitud de cambio. Después de eso, tres miembros cualesquiera del rol de IAM `Admin` deben aprobar la solicitud de cambio.  
Para obtener más información acerca de la aprobación de las plantillas de cambios, consulte [Acerca de las aprobaciones en las plantillas de cambios](cm-approvals-templates.md).

------
#### [ YAML ]

   ```
   description: >-
     This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld.
   templateInformation: >
     ### Document Name: HelloWorldChangeTemplate
   
     ## What does this document do?
   
     This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld.
   
     ## Input Parameters
   
     * ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for
     approvers.
   
     * Approver: (Required) The name of the approver to send this request to.
   
     * ApproverType: (Required) The type of reviewer.
       * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser
   
     ## Output Parameters
   
     This document has no outputs
   schemaVersion: '0.3'
   parameters:
     ApproverSnsTopicArn:
       type: String
       description: Amazon Simple Notification Service ARN for approvers.
     Approver:
       type: String
       description: IAM approver
     ApproverType:
       type: String
       description: >-
         Approver types for the request. Allowed values include IamUser, IamGroup,
         IamRole, SSOGroup, and SSOUser.
   executableRunBooks:
     - name: AWS-HelloWorld
       version: '1'
   emergencyChange: false
   autoApprovable: false
   mainSteps:
     - name: ApproveAction1
       action: 'aws:approve'
       timeoutSeconds: 3600
       inputs:
         Message: >-
           A sample change request has been submitted for your review in Change
           Manager. You can approve or reject this request.
         EnhancedApprovals:
           NotificationArn: '{{ ApproverSnsTopicArn }}'
           Approvers:
             - approver: John-Doe
               type: IamUser
               minRequiredApprovals: 1
     - name: ApproveAction2
       action: 'aws:approve'
       timeoutSeconds: 3600
       inputs:
         Message: >-
           A sample change request has been submitted for your review in Change
           Manager. You can approve or reject this request.
         EnhancedApprovals:
           NotificationArn: '{{ ApproverSnsTopicArn }}'
           Approvers:
             - approver: Admin
               type: IamRole
               minRequiredApprovals: 3
   ```

------
#### [ JSON ]

   ```
   {
      "description": "This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld",
      "templateInformation": "### Document Name: HelloWorldChangeTemplate\n\n
       ## What does this document do?\n
       This change template demonstrates the feature set available for creating change templates for Change Manager. 
       This template starts a Runbook workflow for the Automation runbook called AWS-HelloWorld.\n\n
       ## Input Parameters\n* ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for approvers.\n
       * Approver: (Required) The name of the approver to send this request to.\n
       * ApproverType: (Required) The type of reviewer.  * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser\n\n
       ## Output Parameters\nThis document has no outputs\n",
      "schemaVersion": "0.3",
      "parameters": {
         "ApproverSnsTopicArn": {
            "type": "String",
            "description": "Amazon Simple Notification Service ARN for approvers."
         },
         "Approver": {
            "type": "String",
            "description": "IAM approver"
         },
         "ApproverType": {
            "type": "String",
            "description": "Approver types for the request. Allowed values include IamUser, IamGroup, IamRole, SSOGroup, and SSOUser."
         }
      },
      "executableRunBooks": [
         {
            "name": "AWS-HelloWorld",
            "version": "1"
         }
      ],
      "emergencyChange": false,
      "autoApprovable": false,
      "mainSteps": [
         {
            "name": "ApproveAction1",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "John-Doe",
                        "type": "IamUser",
                        "minRequiredApprovals": 1
                     }
                  ]
               }
            }
         },
           {
            "name": "ApproveAction2",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "Admin",
                        "type": "IamRole",
                        "minRequiredApprovals": 3                  
                     }
                  ]
               }
            }
         }
      ]
   }
   ```

------

1. Seleccione **Save and preview** (Guardar y previsualizar).

1. Revise los detalles de la plantilla de cambios que está creando.

   Si desea modificar la plantilla de cambios antes de enviarla para su revisión, elija **Actions, Edit** (Acciones, Editar).

   Si está satisfecho con el contenido de la plantilla de cambios, elija **Submit for review** (Enviar para revisión). Los usuarios de su organización o cuenta que se hayan especificado como revisores de plantillas en la pestaña **Settings** (Configuración) de Change Manager reciben una notificación que indica que una nueva plantilla de cambios está en espera de su revisión. 

   Si se ha especificado un tema de Amazon Simple Notification Service (Amazon SNS) para las plantillas de cambios, las notificaciones se envían cuando se rechaza o se aprueba la plantilla. Si no recibe notificaciones relacionadas con esta plantilla de cambios, puede regresar a Change Manager más tarde para verificar su estado.

# Creación de plantillas de cambios con las herramientas de línea de comandos
<a name="change-templates-tools"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

En los siguientes procedimientos, se describe cómo utilizar la AWS Command Line Interface (AWS CLI) (en Linux, macOS o Windows Server) o la AWS Tools for Windows PowerShell para crear una solicitud de cambio en Change Manager, una herramienta de AWS Systems Manager. 

**Para crear una nueva plantilla de cambios**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o las Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Cree un archivo JSON en su equipo local con un nombre similar a `MyChangeTemplate.json` y, a continuación, péguele el contenido para su plantilla de cambios.
**nota**  
Las plantillas de cambios utilizan una versión del esquema 0.3 que no incluye la misma compatibilidad que para los manuales de procedimientos de Automation.

   A continuación se muestra un ejemplo.
**nota**  
El parámetro `minRequiredApprovals` se utiliza para especificar cuántos revisores de un nivel especificado deben aprobar una solicitud de cambio creada mediante esta plantilla.  
En este ejemplo, se muestran dos niveles de aprobaciones. Puede especificar hasta cinco niveles de aprobaciones, pero solo se requiere un nivel.   
En el primer nivel, el usuario específico “John-Doe” debe aprobar cada solicitud de cambio. Después de eso, tres miembros cualesquiera del rol de IAM `Admin` deben aprobar la solicitud de cambio.  
Para obtener más información acerca de la aprobación de las plantillas de cambios, consulte [Acerca de las aprobaciones en las plantillas de cambios](cm-approvals-templates.md).

   ```
   {
      "description": "This change template demonstrates the feature set available for creating
     change templates for Change Manager. This template starts a Runbook workflow
     for the Automation runbook called AWS-HelloWorld",
      "templateInformation": "### Document Name: HelloWorldChangeTemplate\n\n
       ## What does this document do?\n
       This change template demonstrates the feature set available for creating change templates for Change Manager. 
       This template starts a Runbook workflow for the Automation runbook called AWS-HelloWorld.\n\n
       ## Input Parameters\n* ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for approvers.\n
       * Approver: (Required) The name of the approver to send this request to.\n
       * ApproverType: (Required) The type of reviewer.  * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser\n\n
       ## Output Parameters\nThis document has no outputs\n",
      "schemaVersion": "0.3",
      "parameters": {
         "ApproverSnsTopicArn": {
            "type": "String",
            "description": "Amazon Simple Notification Service ARN for approvers."
         },
         "Approver": {
            "type": "String",
            "description": "IAM approver"
         },
         "ApproverType": {
            "type": "String",
            "description": "Approver types for the request. Allowed values include IamUser, IamGroup, IamRole, SSOGroup, and SSOUser."
         }
      },
      "executableRunBooks": [
         {
            "name": "AWS-HelloWorld",
            "version": "1"
         }
      ],
      "emergencyChange": false,
      "autoApprovable": false,
      "mainSteps": [
         {
            "name": "ApproveAction1",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "John-Doe",
                        "type": "IamUser",
                        "minRequiredApprovals": 1
                     }
                  ]
               }
            }
         },
           {
            "name": "ApproveAction2",
            "action": "aws:approve",
            "timeoutSeconds": 3600,
            "inputs": {
               "Message": "A sample change request has been submitted for your review in Change Manager. You can approve or reject this request.",
               "EnhancedApprovals": {
                  "NotificationArn": "{{ ApproverSnsTopicArn }}",
                  "Approvers": [
                     {
                        "approver": "Admin",
                        "type": "IamRole",
                        "minRequiredApprovals": 3                  
                     }
                  ]
               }
            }
         }
      ]
   }
   ```

1. Ejecute el siguiente comando para crear la plantilla de cambios. 

------
#### [ Linux & macOS ]

   ```
   aws ssm create-document \
       --name MyChangeTemplate \
       --document-format JSON \
       --document-type Automation.ChangeTemplate \
       --content file://MyChangeTemplate.json \
       --tags Key=tag-key,Value=tag-value
   ```

------
#### [ Windows ]

   ```
   aws ssm create-document ^
       --name MyChangeTemplate ^
       --document-format JSON ^
       --document-type Automation.ChangeTemplate ^
       --content file://MyChangeTemplate.json ^
       --tags Key=tag-key,Value=tag-value
   ```

------
#### [ PowerShell ]

   ```
   $json = Get-Content -Path "C:\path\to\file\MyChangeTemplate.json" | Out-String
   New-SSMDocument `
       -Content $json `
       -Name "MyChangeTemplate" `
       -DocumentType "Automation.ChangeTemplate" `
       -Tags "Key=tag-key,Value=tag-value"
   ```

------

   Para obtener más información sobre las opciones que puede especificar, consulte [https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/create-document.html).

   El sistema devuelve información similar a la siguiente.

   ```
   {
      "DocumentDescription":{
         "CreatedDate":1.585061751738E9,
         "DefaultVersion":"1",
         "Description":"Use this template to update an EC2 Linux AMI. Requires one
         approver specified in the template and an approver specified in the request.",
         "DocumentFormat":"JSON",
         "DocumentType":"Automation",
         "DocumentVersion":"1",
         "Hash":"0d3d879b3ca072e03c12638d0255ebd004d2c65bd318f8354fcde820dEXAMPLE",
         "HashType":"Sha256",
         "LatestVersion":"1",
         "Name":"MyChangeTemplate",
         "Owner":"123456789012",
         "Parameters":[
            {
               "DefaultValue":"",
               "Description":"Level one approvers",
               "Name":"LevelOneApprovers",
               "Type":"String"
            },
            {
               "DefaultValue":"",
               "Description":"Level one approver type",
               "Name":"LevelOneApproverType",
               "Type":"String"
            },
      "cloudWatchMonitors": {
         "monitors": [
            "my-cloudwatch-alarm"
         ]
      }
         ],
         "PlatformTypes":[
            "Windows",
            "Linux"
         ],
         "SchemaVersion":"0.3",
         "Status":"Creating",
         "Tags":[
   
         ]
      }
   }
   ```

Los usuarios de su organización o cuenta que se hayan especificado como revisores de plantillas en la pestaña **Settings** (Configuración) de Change Manager reciben una notificación que indica que una nueva plantilla de cambios está en espera de su revisión. 

Si se ha especificado un tema de Amazon Simple Notification Service (Amazon SNS) para las plantillas de cambios, las notificaciones se envían cuando se rechaza o se aprueba la plantilla. Si no recibe notificaciones relacionadas con esta plantilla de cambios, puede regresar a Change Manager más tarde para verificar su estado.

# Revisión y aprobación o rechazo de las plantillas de cambios
<a name="change-templates-review"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Si está especificado como revisor de plantillas de cambios en Change Manager, una herramienta de AWS Systems Manager, se le avisará cuando una nueva plantilla de cambios o una nueva versión de una plantilla de cambios esté a la espera de su revisión. Un tema de Amazon Simple Notification Service (Amazon SNS) envía las notificaciones.

**nota**  
Esta funcionalidad depende de si su cuenta se ha configurado para utilizar un tema de Amazon SNS para enviar notificaciones de la revisión de las plantillas de cambios. Para obtener más información acerca de cómo especificar un tema para las notificaciones a los revisores de plantillas, consulte [Tarea 1: configurar la administración de identidades de usuarios y los revisores de plantillas de Change Manager](change-manager-account-setup.md#cm-configure-account-task-1).

Para revisar la plantilla de cambios, visite el enlace que aparece en la notificación, inicie sesión en la Consola de administración de AWS y siga los pasos descritos en este procedimiento.

**Para revisar y aprobar o rechazar una plantilla de cambios**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. En la sección **Change templates** (Plantillas de cambios) de la parte inferior de la pestaña **Overview** (Información general), elija el número en **Pending review** (Pendiente de revisión).

1. En la lista **Change templates** (Plantillas de cambios), busque y elija el nombre de la plantilla de cambios que va a revisar.

1. En la página de resumen, revise el contenido propuesto de la plantilla de cambios y realice alguna de las siguientes acciones:
   + Para aprobar la plantilla de cambios, lo que permite utilizarla en las solicitudes de cambio, elija **Approve** (Aprobar).
   + Para rechazar la plantilla de cambios, lo que evita que se utilice en solicitudes de cambio, elija **Reject** (Rechazar).

# Eliminación de plantillas de cambio
<a name="change-templates-delete"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

En este tema se describe cómo se eliminan las plantillas que ha creado en Change Manager, una herramienta de Systems Manager. Si utiliza Change Manager para una organización, este procedimiento se lleva a cabo en su cuenta de administrador autorizado.

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. Elija la pestaña **Plantillas**.

1. Elija el nombre de la plantilla que desea eliminar.

1. Elija **Actions, Delete template**. (Actiones, Eliminar plantilla).

1. En el cuadro de diálogo de confirmación, ingrese **DELETE** y, a continuación, elija **Delete** (Eliminar).

# Uso de solicitudes de cambio
<a name="change-requests"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Una solicitud de cambio se trata de una solicitud en Change Manager para ejecutar un manual de procedimientos de Automation que actualice uno o más recursos de sus entornos locales o en AWS. Una solicitud de cambio se crea usando una plantilla de cambios.

Cuando crea una solicitud de cambio en Change Manager, una herramienta de AWS Systems Manager, uno o más aprobadores de su organización o cuenta deben revisar y aprobar la solicitud. Sin las aprobaciones necesarias, el flujo de trabajo del manual de procedimientos, que realiza los cambios solicitados, no tiene permitido ejecutarse.

**Topics**
+ [Creación de solicitudes de cambio](change-requests-create.md)
+ [Revisión y aprobación o rechazo de las solicitudes de cambio](change-requests-review.md)

# Creación de solicitudes de cambio
<a name="change-requests-create"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Cuando crea una solicitud de cambio en Change Manager, una herramienta de AWS Systems Manager, la plantilla de cambios que selecciona suele llevar a cabo los siguientes procedimientos:
+ Designa los aprobadores de la solicitud de cambio o especifica cuántas aprobaciones se requieren.
+ Especifica el tema de Amazon Simple Notification Service (Amazon SNS) que se va a utilizar para notificar a los aprobadores acerca de la solicitud de cambio.
+ Especifica una alarma de Amazon CloudWatch para monitorear el flujo de trabajo del manual de procedimientos para la solicitud de cambio.
+ Identifica qué manuales de procedimientos de Automation puede elegir para realizar el cambio solicitado.

En algunos casos, es posible que una plantilla de cambios se configure para que usted especifique su propio manual de procedimientos de Automation que va a utilizar y, también, quién debe revisar y aprobar la solicitud.

**importante**  
Si utiliza Change Manager en toda una organización, se recomienda efectuar siempre los cambios desde la cuenta de administrador delegado. Si bien es posible realizar cambios desde otras cuentas de la organización, esos cambios no se notificarán ni se podrán ver desde la cuenta de administrador delegado.

**Topics**
+ [Acerca de las aprobaciones de solicitudes de cambio](#cm-approvals-requests)
+ [Creación de solicitudes de cambio (consola)](#change-requests-create-console)
+ [Creación de solicitudes de cambio (AWS CLI)](#change-requests-create-cli)

## Acerca de las aprobaciones de solicitudes de cambio
<a name="cm-approvals-requests"></a>

Según los requisitos especificados en una plantilla de cambios, las solicitudes de cambio que cree a partir de ella pueden requerir la aprobación de hasta cinco *niveles* antes de que pueda realizarse el flujo de trabajo del manual de procedimientos de la solicitud. Para cada uno de esos niveles, el creador de la plantilla puede especificar hasta cinco posibles *aprobadores*. Un aprobador no se limita a un solo usuario. En este sentido, un aprobador también puede ser un grupo de IAM o un rol de IAM. En el caso de los grupos de IAM y los roles de IAM, uno o más usuarios que pertenezcan al grupo o al rol pueden dar su aprobación a fin de recibir el número total de aprobaciones necesarias para una solicitud de cambio. Los creadores de plantillas también pueden especificar más aprobadores de los que requiere la plantilla de cambios.

**Flujos de trabajo de aprobación originales y aprobaciones actualizadas**  
Con las plantillas de cambios creadas antes del 23 de enero de 2023, se debe recibir la aprobación de cada aprobador especificado para que la solicitud de cambio se apruebe en ese nivel. Por ejemplo, en la configuración del nivel de aprobación que se muestra en la siguiente imagen, se especifican cuatro aprobadores. Los aprobadores especificados incluyen dos usuarios (John Stiles y Ana Carolina Silva), un grupo de usuarios que contiene tres miembros (GroupOfThree) y un rol de usuario que representa a diez usuarios (RoleOfTen).

![\[Nivel de aprobación que muestra los cuatro aprobadores necesarios por línea.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/Add-approval-1.png)


Para que la solicitud de cambio se apruebe en este nivel, deben aprobarla John Stiles, Ana Carolina Silva, un miembro del grupo `GroupOfThree` y un miembro del rol `RoleOfTen`.

Con las plantillas de cambios creadas el 23 de enero de 2023 o después, los creadores de plantillas pueden especificar el número total de aprobaciones necesarias para cada nivel de aprobación. Esas aprobaciones pueden provenir de cualquier combinación de usuarios, grupos y roles que se hayan especificado como aprobadores. Una plantilla de cambios puede requerir solo una aprobación para un nivel, pero especificar, por ejemplo, dos usuarios individuales, dos grupos y un rol como posibles aprobadores.

Por ejemplo, en el área de niveles de aprobación que se muestra en la siguiente imagen, se requieren tres aprobaciones. Los aprobadores especificados por la plantilla incluyen dos usuarios (John Stiles y Ana Carolina Silva), un grupo de usuarios que contiene tres miembros (`GroupOfThree`) y un rol de usuario que representa a diez usuarios (`RoleOfTen`).

![\[Nivel de aprobación que muestra que se requieren tres aprobaciones y cuatro aprobadores especificados.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/Add-approval-2.png)


Si los tres usuarios del grupo `GroupOfThree` aprueban la solicitud de cambio, se aprueba para ese nivel. No es necesario recibir la aprobación de cada usuario, grupo o rol. El número mínimo de aprobaciones puede provenir de cualquier combinación de posibles aprobadores.

Cuando se crea la solicitud de cambios, se envían notificaciones a los suscriptores del tema de Amazon SNS que se ha especificado para las notificaciones de aprobación en ese nivel. Es posible que el creador de la plantilla de cambios haya especificado el tema de notificación que se debe utilizar o le haya permitido especificar uno.

Una vez recibido el número mínimo de aprobaciones requeridas en un nivel, se envían notificaciones a los aprobadores que estén suscritos al tema de Amazon SNS para el siguiente nivel, y así sucesivamente.

Independientemente del número de niveles de aprobación y aprobadores que se especifiquen, solo se requiere un rechazo a una solicitud de cambio para evitar que se produzca el flujo de trabajo del manual de procedimientos de esa solicitud.

## Creación de solicitudes de cambio (consola)
<a name="change-requests-create-console"></a>

El siguiente procedimiento describe cómo crear una solicitud de cambio con la consola de Systems Manager.

**Creación de una solicitud de cambio (consola)**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. Seleccione **Create request** (Crear solicitud).

1. Busque y seleccione una plantilla de cambios que desee utilizar para esta solicitud de cambio.

1. Elija **Siguiente**.

1. En **Name** (Nombre), ingrese un nombre para la solicitud de cambio que facilite la identificación de su finalidad, como **UpdateEC2LinuxAMI-us-east-2**.

1. En **Runbook** (Manual de procedimientos), seleccione el manual de procedimientos que desea utilizar para realizar el cambio solicitado.
**nota**  
Si la opción para seleccionar un manual de procedimientos no está disponible, se debe a que el autor de la plantilla de cambios ha especificado qué manual de procedimientos se debe utilizar.

1. En **Change request information** (Información de la solicitud de cambio), utilice Markdown para proporcionar información adicional sobre la solicitud de cambio para ayudar a los revisores a decidir si aprobar o rechazar la solicitud de cambio. Es posible que el autor de la plantilla que utilice haya proporcionado instrucciones o preguntas para que responda.
**nota**  
Markdown es un lenguaje de marcado que le permite agregar descripciones de estilo wiki a documentos y pasos individuales dentro del documento. Para obtener más información acerca del uso de Markdown, consulte [Uso de Markdown en AWS](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html).

1. En la sección **Workflow start time** (Hora de inicio del flujo de trabajo), elija una de las siguientes opciones:
   + **Ejecutar la operación a una hora programada**: en **Requested start time** (Hora de inicio solicitada), ingrese la fecha y la hora que propone para que se ejecute el flujo de trabajo del manual de procedimientos de esta solicitud. En **Estimated end time** (Hora de finalización estimada), ingrese la fecha y la hora en las que espera que se complete el flujo de trabajo del manual de procedimientos. (Esta vez es solo una estimación que usted proporciona a los revisores).
**sugerencia**  
Seleccione **View Change Calendar** (Ver calendario de cambios) para verificar si hay eventos de bloqueo durante el tiempo especificado.
   + **Ejecutar la operación tan pronto como sea posible después de la aprobación**: si se aprueba la solicitud de cambio, el flujo de trabajo del manual de procedimientos se ejecuta tan pronto como haya un periodo sin restricciones en el que se puedan realizar los cambios.

1. En la sección **Change request approvals** (Aprobaciones de solicitudes de cambio), realice el siguiente procedimiento:

   1. Si se presentan las opciones de **Approval type** (Tipo de aprobación), elija alguna de las siguientes opciones:
      + **Apruebe de forma automática**: la plantilla de cambios seleccionada está configurada para permitir que las solicitudes de cambio se ejecuten automáticamente sin que los aprobadores las revisen. Continúe con el paso 11.
**nota**  
Los permisos especificados en las políticas de IAM que rigen el uso de Systems Manager no deben impedir que envíe solicitudes de cambio de aprobación automática para que se ejecuten automáticamente.
      + **Especifique aprobadores**: debe agregar uno o más usuarios, grupos o roles de IAM para que revisen y aprueben esta solicitud de cambio.
**nota**  
Puede elegir especificar revisores incluso si los permisos especificados en las políticas de IAM que rigen el uso de Systems Manager le permiten ejecutar solicitudes de cambio de aprobación automática.

   1. Seleccione **Add approver** (Agregar aprobador) y, a continuación, elija uno o más usuarios, grupos o roles de AWS Identity and Access Management (IAM) de las listas de revisores disponibles.
**nota**  
Es posible que ya se hayan especificado uno o más aprobadores. Esto significa que los aprobadores obligatorios ya están especificados en la plantilla de cambios que seleccionó. Estos aprobadores no se pueden eliminar de la solicitud. Si el botón **Agregar aprobador** no está disponible, significa que la plantilla que ha elegido no permite agregar revisores adicionales a las solicitudes.

      Para obtener más información acerca de cómo aprobar las solicitudes de cambio, consulte [Acerca de las aprobaciones de solicitudes de cambio](#cm-approvals-requests).

   1. En **SNS topic to notify approvers** (Tema de SNS para notificar a los aprobadores), elija una de las siguientes opciones para especificar el tema de Amazon SNS de su cuenta que se utilizará para enviar notificaciones a los aprobadores que agregue a esta solicitud de cambio.
**nota**  
Si la opción para especificar un tema de Amazon SNS no está disponible es porque la plantilla de cambios que seleccionó ya especifica el tema de Amazon SNS que se va a utilizar.
      + **Ingrese un nombre de recurso de Amazon (ARN) de SNS**: en **Topic ARN** (ARN de tema), ingrese el ARN de un tema de Amazon SNS existente. Este tema puede estar en cualquiera de las cuentas de su organización.
      + **Seleccione un tema de SNS existente**: en **Target notification topic** (Tema de notificaciones de destino), seleccione el ARN de un tema de Amazon SNS existente en su cuenta actual. (Esta opción no estará disponible si aún no ha creado ningún tema de Amazon SNS en su Cuenta de AWS y Región de AWS actuales).
**nota**  
El tema de Amazon SNS que seleccione debe estar configurado para especificar las notificaciones que envía y los suscriptores a los que se las envía. Su política de acceso también debe conceder permisos a Systems Manager para que Change Manager pueda enviar notificaciones. Para obtener más información, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md). 

   1. Seleccione **Agregar notificación**.

1. Elija **Siguiente**.

1. En **IAM role** (Rol de IAM), seleccione un rol de IAM *de su cuenta actual* que tenga los permisos necesarios para ejecutar los manuales de procedimientos especificados para esta solicitud de cambio.

   Este rol también se conoce como rol de servicio, o rol de asunción, para Automation. Para obtener más información acerca de este rol, consulte [Configuración de Automation](automation-setup.md).

1. En la sección **Deployment location** (Ubicación de implementación), elija una de las siguientes opciones:
**nota**  
Si utiliza Change Manager con una única Cuenta de AWS y no con una organización configurada en AWS Organizations, no es necesario que especifique una ubicación de implementación.
   + **Aplique el cambio a esta cuenta**: el flujo de trabajo del manual de procedimientos se ejecuta solo en la cuenta actual. Para una organización, esto significa que se ejecuta en la cuenta de administrador delegado.
   + **Aplique el cambio a varias unidades organizativas**: en este caso, realice el siguiente procedimiento: 

     1. En **Accounts and organizational units (OUs)** (Cuentas y unidades organizativas), ingrese el ID de una cuenta miembro de su organización en el formato **123456789012** o el ID de una unidad organizativa en el formato **o-o96EXAMPLE**. 

     1. (Opcional) Para **Execution role name** (Nombre del rol de ejecución), ingrese el nombre del rol de IAM *de la cuenta de destino* o de la OU que tenga los permisos necesarios para ejecutar los manuales de procedimientos especificados para esta solicitud de cambio. Todas las cuentas de cualquier unidad organizativa que especifique deben usar el mismo nombre para este rol.

     1. (Opcional) Elija **Agregar otra ubicación de destino** para cada cuenta o unidad organizativa adicional que desee especificar y repita los pasos a y b. 

     1. En **región de destinoRegión de AWS**, seleccione la región en la que desea realizar el cambio; por ejemplo, `Ohio (us-east-2)` para la región Este de EE. UU. (Ohio).

     1. Amplíe **Rate control** (Control de velocidad). 

        Para **Concurrency** (Simultaneidad), ingrese un número y, a continuación, en la lista, seleccione si representa la cantidad o el porcentaje de cuentas en las que puede ejecutarse el flujo de trabajo del manual de procedimientos al mismo tiempo. 

        En **Error threshold** (Límite de errores), ingrese un número y, a continuación, en la lista, seleccione si representa la cantidad o el porcentaje de cuentas en las que el flujo de trabajo del manual de procedimientos puede producir error antes de que se detenga la operación. 

1. En la sección **Deployment targets** (Destinos de implementación), realice el siguiente procedimiento:

   1. Elija una de las opciones siguientes:
      + **Single resource** (Recurso único): el cambio debe hacerse solo para un recurso. Por ejemplo, un único nodo o una única Amazon Machine Image (AMI), según la operación definida en los manuales de procedimientos para esta solicitud de cambio.
      + **Multiple resources** (Recursos múltiples): en **Parameter** (Parámetro), seleccione uno de los parámetros disponibles de los manuales de procedimientos para esta solicitud de cambio. Esta selección refleja el tipo de recurso que se va a actualizar.

        Por ejemplo, si el manual de procedimientos de esta solicitud de cambio es `AWS-RetartEC2Instance`, puede elegir `InstanceId` y, a continuación, definir qué instancias se actualizan seleccionando una de las siguientes opciones:
        + **Specify tags** (Especificar etiquetas): ingrese un par de clave-valor con el que se etiquetarán todos los recursos que se van a actualizar.
        + **Choose a resource group** (Elegir un grupo de recursos): elija el nombre del grupo de recursos al que pertenecen todos los recursos que se van a actualizar.
        + **Specify parameter values** (Especificar valores de parámetros): identifique los recursos que se van a actualizar en la sección **Runbook parameters** (Parámetros del manual de procedimientos).
        + **Target all instances** (Abarcar todas las instancias): realice el cambio en todos los nodos administrados de las ubicaciones de destino.

   1. Si eligió **Multiple resources** (Recursos múltiples), expanda **Rate control** (Control de velocidad). 

      En **Concurrency** (Simultaneidad), ingrese un número y, a continuación, en la lista, seleccione si representa la cantidad o el porcentaje de destinos que el flujo de trabajo del manual de procedimientos puede actualizar al mismo tiempo. 

      En **Error threshold** (Límite de errores), ingrese un número y, a continuación, en la lista, seleccione si representa la cantidad o el porcentaje de destinos en los que la actualización puede producir error antes de que se detenga la operación. 

1. Si en el paso anterior eligió **Specify parameter values** (Especificar valores de parámetros) para actualizar varios recursos, en la sección **Runbook parameters** (Parámetros del manual de procedimientos), especifique valores para los parámetros de entrada requeridos. Los valores de los parámetros que debe proporcionar se basan en el contenido de los manuales de procedimientos de Automation asociados a la plantilla de cambios que eligió. 

   Por ejemplo, si la plantilla de cambios utiliza el manual de procedimientos `AWS-RetartEC2Instance`, debe ingresar uno o más ID de instancia para el parámetro **InstanceId**. También puede elegir **Show interactive instance picker** (Mostrar selector de instancias interactivo) y seleccionar las instancias disponibles una por una. 

1. Elija **Siguiente**.

1. En la página **Review and submit** (Revisar y enviar), revise minuciosamente los recursos y las opciones que ha especificado para esta solicitud de cambio.

   Elija el botón **Edit** (Editar) en cualquier sección en la que desee realizar cambios.

   Cuando esté satisfecho con los detalles de la solicitud de cambio, elija **Submit for approval** (Enviar para aprobación).

Si se especificó un tema de Amazon SNS en la plantilla de cambios que eligió para la solicitud, las notificaciones se envían cuando la solicitud se rechaza o se aprueba. Si no recibe notificaciones por la solicitud, puede regresar a Change Manager para verificar su estado. 

## Creación de solicitudes de cambio (AWS CLI)
<a name="change-requests-create-cli"></a>

Puede crear una solicitud de cambio mediante AWS Command Line Interface (AWS CLI) con la especificación de opciones y parámetros para la solicitud de cambio en un archivo JSON y con el uso de la opción `--cli-input-json` para incluirlo en su comando.

**Para crear una solicitud de cambio (AWS CLI)**

1. Si aún no lo ha hecho, instale y configure la AWS CLI o Herramientas de AWS para PowerShell.

   Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).

1. Cree un archivo JSON en su equipo local con un nombre similar a `MyChangeRequest.json` y, a continuación, péguele el siguiente contenido.

   Reemplace *espacio disponible* con valores para la solicitud de cambio.
**nota**  
Este ejemplo JSON crea una solicitud de cambio mediante la plantilla de cambio `AWS-HelloWorldChangeTemplate` y el runbook `AWS-HelloWorld`. A fin de ayudarlo a adaptar este ejemplo para sus propias solicitudes de cambio, consulte [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartChangeRequestExecution.html) en la *AWS Systems ManagerReferencia de la API* para obtener información sobre todos los parámetros disponibles  
Para obtener más información acerca de cómo aprobar las solicitudes de cambio, consulte [Acerca de las aprobaciones de solicitudes de cambio](#cm-approvals-requests).

   ```
   {
       "ChangeRequestName": "MyChangeRequest",
       "DocumentName": "AWS-HelloWorldChangeTemplate",
       "DocumentVersion": "$DEFAULT",
       "ScheduledTime": "2021-12-30T03:00:00",
       "ScheduledEndTime": "2021-12-30T03:05:00",
       "Tags": [
           {
               "Key": "Purpose",
               "Value": "Testing"
           }
       ],
       "Parameters": {
           "Approver": [
               "JohnDoe"
           ],
           "ApproverType": [
               "IamUser"
           ],
           "ApproverSnsTopicArn": [
               "arn:aws:sns:us-east-2:123456789012:MyNotificationTopic"
           ]
       },
       "Runbooks": [
           {
               "DocumentName": "AWS-HelloWorld",
               "DocumentVersion": "1",
               "MaxConcurrency": "1",
               "MaxErrors": "1",
               "Parameters": {
                   "AutomationAssumeRole": [
                       "arn:aws:iam::123456789012:role/MyChangeManagerAssumeRole"
                   ]
               }
           }
       ],
       "ChangeDetails": "### Document Name: HelloWorldChangeTemplate\n\n## What does this document do?\nThis change template demonstrates the feature set available for creating change templates for Change Manager. This template starts a Runbook workflow for the Automation document called AWS-HelloWorld.\n\n## Input Parameters\n* ApproverSnsTopicArn: (Required) Amazon Simple Notification Service ARN for approvers.\n* Approver: (Required) The name of the approver to send this request to.\n* ApproverType: (Required) The type of reviewer.\n  * Allowed Values: IamUser, IamGroup, IamRole, SSOGroup, SSOUser\n\n## Output Parameters\nThis document has no outputs \n"
   }
   ```

1. En el directorio en el que creó el archivo JSON, ejecute el siguiente comando.

   ```
   aws ssm start-change-request-execution --cli-input-json file://MyChangeRequest.json
   ```

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "AutomationExecutionId": "b3c1357a-5756-4839-8617-2d2a4EXAMPLE"
   }
   ```

# Revisión y aprobación o rechazo de las solicitudes de cambio
<a name="change-requests-review"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Si está especificado como revisor de una solicitud de cambio en Change Manager, una herramienta de AWS Systems Manager, recibirá una notificación a través de un tema de Amazon Simple Notification Service (Amazon SNS) cuando una nueva solicitud de cambio esté en espera de su revisión. 

**nota**  
Esta funcionalidad depende de si se especificó un tema de Amazon SNS en la plantilla de cambios para enviar notificaciones de revisión. Para obtener más información, consulte [Configuración de temas de Amazon SNS para las notificaciones de Change Manager](change-manager-sns-setup.md). 

Para revisar la solicitud de cambio, puede seguir el enlace que se incluye en la notificación o iniciar sesión en la Consola de administración de AWS directamente y seguir los pasos descritos en este procedimiento.

**nota**  
Si se asigna un tema de Amazon SNS a los revisores de una plantilla de cambios, se enviarán notificaciones a los suscriptores del tema cuando cambie el estado de la solicitud de cambio.  
Para obtener más información acerca de cómo aprobar las solicitudes de cambio, consulte [Acerca de las aprobaciones de solicitudes de cambio](change-requests-create.md#cm-approvals-requests).

## Revisión y aprobación o rechazo de las solicitudes de cambio (consola)
<a name="change-requests-review-console"></a>

Los siguientes procedimientos describen cómo utilizar la consola de Systems Manager para revisar y aprobar o rechazar solicitudes de cambio.

**Para revisar y aprobar o rechazar una solicitud de cambio individual**

1. Abra el enlace que figura en la notificación por email que recibió e inicie sesión en la Consola de administración de AWS, que lo dirigirá a la solicitud de cambio para que la revise.

1. En la página de resumen, revise el contenido propuesto de la solicitud de cambio.

   Para aprobar la solicitud de cambio, elija **Approve** (Aprobar). En el cuadro de diálogo, proporcione los comentarios que desee agregar a esta aprobación y, a continuación, elija **Approve** (Aprobar). El flujo de trabajo del manual de procedimientos representado por esta solicitud comienza a ejecutarse cuando está programado o tan pronto como los cambios no estén bloqueados por ninguna restricción.

   -o bien-

   Para rechazar la solicitud de cambio, elija **Reject** (Rechazar). En el cuadro de diálogo, proporcione los comentarios que desee agregar a este rechazo y, a continuación, elija **Reject** (Rechazar).

**Para revisar y aprobar o rechazar solicitudes de cambio en bloque**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Change Manager**.

1. Elija la pestaña **Approvals** (Aprobaciones).

1. (Opcional) Revise los detalles de las solicitudes pendientes de aprobación eligiendo el nombre de cada solicitud, y luego vuelva a la pestaña **Approvals** (Aprobaciones).

1. Seleccione la casilla de verificación de cada solicitud de cambio que desee aprobar.

   -o bien-

   Seleccione la casilla de verificación de cada solicitud de cambio que desee rechazar.

1. En el cuadro de diálogo, proporcione los comentarios que desee agregar al rechazo o la aprobación.

1. En función de si va a aprobar o rechazar las solicitudes de cambio seleccionadas, elija **Approve** (Aprobar) o**Reject** (Rechazar).

## Revisión y aprobación o rechazo de las solicitudes de cambio (línea de comandos)
<a name="change-requests-review-command-line"></a>

El siguiente procedimiento describe cómo utilizar la AWS Command Line Interface (AWS CLI) (en Linux, macOS o Windows Server) para revisar y aprobar o rechazar una solicitud de cambio.

**Para revisar y aprobar o rechazar una solicitud de cambio**

1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

   Para obtener más información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

1. Cree un archivo JSON en su equipo local que especifique los parámetros para su llamada a la AWS CLI. 

   ```
   {
     "OpsItemFilters": 
     [
       {
         "Key": "OpsItemType",
         "Values": ["/aws/changerequest"],
         "Operator": "Equal"
       }
     ],
     "MaxResults": number
   }
   ```

   Puede filtrar los resultados de un aprobador específico indicando el nombre de recurso de Amazon (ARN) del aprobador en el archivo JSON. A continuación se muestra un ejemplo.

   ```
   {
     "OpsItemFilters": 
     [
       {
         "Key": "OpsItemType",
         "Values": ["/aws/changerequest"],
         "Operator": "Equal"
       },
       {
         "Key": "ChangeRequestByApproverArn",
         "Values": ["arn:aws:iam::account-id:user/user-name"],
         "Operator": "Equal"
       }
     ],
     "MaxResults": number
   }
   ```

1. Ejecute el siguiente comando para ver la cantidad máxima de solicitudes de cambio que especificó en el archivo JSON.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-ops-items \
   --cli-input-json file://filename.json
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-ops-items ^
   --cli-input-json file://filename.json
   ```

------

1. Ejecute el siguiente comando para aprobar o rechazar una solicitud de cambio.

------
#### [ Linux & macOS ]

   ```
   aws ssm send-automation-signal \
       --automation-execution-id ID \
       --signal-type Approve_or_Reject \
       --payload Comment="message"
   ```

------
#### [ Windows ]

   ```
   aws ssm send-automation-signal ^
   --automation-execution-id ID ^
       --signal-type Approve_or_Reject ^
       --payload Comment="message"
   ```

------

   Si se especificó un tema de Amazon SNS en la plantilla de cambios que eligió para la solicitud, las notificaciones se envían cuando la solicitud se rechaza o se aprueba. Si no recibe notificaciones por la solicitud, puede regresar a Change Manager para verificar su estado. Para obtener información acerca de otras opciones cuando utilice este comando, consulte [https://docs.aws.amazon.com/cli/latest/reference/ssm/send-automation-signal.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/send-automation-signal.html), en la sección AWS Systems Manager de la *Referencia de comandos de la AWS CLI*.

# Revisión de los detalles, las tareas y los plazos de las solicitudes de cambio (consola)
<a name="reviewing-changes"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Puede consultar la información acerca de una solicitud de cambio, incluidas las solicitudes para las que ya se han procesado los cambios, en el panel de Change Manager, una herramienta de AWS Systems Manager. Estos detalles incluyen un enlace a la operación de Automation que ejecuta los manuales de procedimientos que efectúan el cambio. Cuando se crea la solicitud, se genera un ID de ejecución de Automation, pero el proceso recién se ejecuta cuando se han otorgado todas las aprobaciones y no hay restricciones que bloqueen el cambio.

**Para revisar los detalles, las tareas y los plazos de las solicitudes de cambio**

1. En el panel de navegación, elija **Change Manager**.

1. Elija la pestaña **Requests** (Solicitudes).

1. En la sección **Change requests** (Solicitudes de cambio), busque la solicitud de cambio que desee revisar. 

   Puede utilizar las opciones de **Create date range** (Crear rango de fechas) para limitar los resultados a un periodo específico.

   Puede filtrar las solicitudes según las siguientes propiedades:
   + `Status`
   + `Request ID`
   + `Approver`
   + `Requester`

   Por ejemplo, para ver los detalles acerca de todas las solicitudes de cambio que se han completado de forma correcta en las últimas 24 horas, realice el siguiente procedimiento:

   1. Para **Create date range** (Crear rango de fechas), elija **1d**.

   1. En el cuadro de búsqueda, seleccione **Status, CompletedWithSuccess** (Estado, Completado de forma correcta). 

   1. En los resultados, elija el nombre de la solicitud de cambio completada correctamente cuyos resultados desea revisar.

1. Vea información acerca de la solicitud de cambio en las siguientes pestañas:
   + **Request details** (Detalles de la solicitud): consulte los detalles básicos de la solicitud de cambio, incluido el solicitante, la plantilla de cambios y los manuales de procedimientos de Automation seleccionados para el cambio. También puede seguir un enlace a los detalles de la operación de Automation y ver la información sobre los parámetros del manual de procedimientos especificado en la solicitud, las alarmas de Amazon CloudWatch asignadas a la solicitud de cambio, las aprobaciones y los comentarios proporcionados para la solicitud.
   + **Task** (Tarea): consulte información acerca de la tarea en el cambio, incluido el estado de la tarea para las solicitudes de cambio completadas, los recursos de destino, los pasos de los manuales de procedimientos de Automation asociados y los detalles del límite de errores y simultaneidad.
   + **Timeline** (Plazo): vea un resumen de todos los eventos asociados a la solicitud de cambio, enumerados por fecha y hora. El resumen indica cuándo se creó la solicitud de cambio, las acciones de los aprobadores asignados, una nota de para cuándo se programa la ejecución de las solicitudes de cambio aprobadas, los detalles del flujo de trabajo del manual de procedimientos y los cambios de estado para el proceso general de cambio y para cada paso del manual de procedimientos.
   + **Associated events** (Eventos asociados): vea los detalles auditables sobre las solicitudes de cambio que se registran en [AWS CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html). Los detalles incluyen qué acciones de la API se ejecutaron, los parámetros de solicitud incluidos para esas acciones, la cuenta de usuario que ejecutó la acción, los recursos actualizados durante el proceso y más.

     Cuando habilita el seguimiento de eventos de CloudTrail Lake, este crea un almacén de datos de eventos para los eventos relacionados con sus solicitudes de cambio. Los detalles del evento están disponibles para la cuenta u organización en la que se ejecutó la solicitud de cambio. Puede activar el seguimiento de eventos de CloudTrail Lake desde cualquier solicitud de cambio en su cuenta u organización. Para obtener información sobre cómo habilitar la integración de CloudTrail Lake y crear un almacén de datos de eventos, consulte [Supervisión de los eventos de las solicitudes de cambio](monitoring-change-request-events.md).
**nota**  
El uso de **CloudTrail Lake** conlleva un cargo. Consulte [Precios de AWS CloudTrail](https://aws.amazon.com/cloudtrail/pricing/) para obtener más información.

# Visualización de recuentos agregados de solicitudes de cambio (línea de comandos)
<a name="change-requests-review-aggregate-command-line"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Puede consultar los recuentos agregados de solicitudes de cambio en Change Manager, una herramienta de AWS Systems Manager, mediante la operación [GetOpsSummary](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetOpsSummary.html) de la API. Esta operación de la API puede regresar recuentos de una única Cuenta de AWS en una única Región de AWS o de varias cuentas y regiones.

**nota**  
Si desea ver recuentos agregados de las solicitudes de cambio para varias Cuentas de AWS y Regiones de AWS, debe establecer y configurar una sincronización de datos de recursos. Para obtener más información, consulte [Cómo crear una sincronización de datos de recursos para Inventory](inventory-create-resource-data-sync.md).

El procedimiento siguiente describe cómo utilizar la AWS Command Line Interface (AWS CLI) (en Linux, macOS o Windows Server) para ver los recuentos agregados de las solicitudes de cambio. 

**Para ver los recuentos agregados de las solicitudes de cambio**

1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

   Para obtener más información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

1. Ejecute uno de los siguientes comandos. 

   **Única cuenta y región**

   Este comando regresa un recuento de todas las solicitudes de cambio de la Cuenta de AWS y la Región de AWS para las cuales la sesión de la AWS CLI está configurada.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
   --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
   --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
   --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
   --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------

   La llamada regresa información similar a la siguiente.

   ```
   {
       "Entities": [
           {
               "Data": {
                   "AWS:OpsItem": {
                       "Content": [
                           {
                               "Count": "38",
                               "Status": "Open"
                           }
                       ]
                   }
               }
           }
       ]
   }
   ```

   **Varias cuentas o regiones**

   Este comando regresa un recuento de todas las solicitudes de cambio para las Cuentas de AWS y las Regiones de AWS especificadas en la sincronización de datos de recursos.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------

   La llamada regresa información similar a la siguiente.

   ```
   {
       "Entities": [
           {
               "Data": {
                   "AWS:OpsItem": {
                       "Content": [
                           {
                               "Count": "43",
                               "Status": "Open"
                           },
                           {
                               "Count": "2",
                               "Status": "Resolved"
                           }
                       ]
                   }
               }
           }
       ]
   }
   ```

   **Varias cuentas y una región específica**

   Este comando regresa un recuento de todas las solicitudes de cambio para las Cuentas de AWS especificadas en la sincronización de datos de recursos. Sin embargo, solo regresa datos de la región especificada en el comando.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.SourceRegion,Values='Region',Type=Equal Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.SourceRegion,Values='Region',Type=Equal Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators AggregatorType=count,AttributeName=Status,TypeName=AWS:OpsItem
   ```

------

   **Varias cuentas y regiones con resultados agrupados por región**

   Este comando regresa un recuento de todas las solicitudes de cambio para las Cuentas de AWS y las Regiones de AWS especificadas en la sincronización de datos de recursos. El resultado muestra información de recuentos por región.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]'
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]'
   ```

------

   La llamada regresa información similar a la siguiente.

   ```
   {
           "Entities": [
               {
                   "Data": {
                       "AWS:OpsItem": {
                           "Content": [
                               {
                                   "Count": "38",
                                   "SourceRegion": "us-east-1",
                                   "Status": "Open"
                               },
                               {
                                   "Count": "4",
                                   "SourceRegion": "us-east-2",
                                   "Status": "Open"
                               },
                               {
                                   "Count": "1",
                                   "SourceRegion": "us-west-1",
                                   "Status": "Open"
                               },
                               {
                                   "Count": "2",
                                   "SourceRegion": "us-east-2",
                                   "Status": "Resolved"
                               }
                           ]
                       }
                   }
               }
           ]
       }
   ```

   **Varias cuentas y regiones con resultados agrupados por cuentas y regiones**

   Este comando regresa un recuento de todas las solicitudes de cambio para las Cuentas de AWS y las Regiones de AWS especificadas en la sincronización de datos de recursos. El resultado agrupa la información de recuentos por cuentas y regiones.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-ops-summary \
       --sync-name resource_data_sync_name \
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal \
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceAccountId","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]}]'
   ```

------
#### [ Windows ]

   ```
   aws ssm get-ops-summary ^
       --sync-name resource_data_sync_name ^
       --filters Key=AWS:OpsItem.OpsItemType,Values="/aws/changerequests",Type=Equal ^
       --aggregators '[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"Status","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceAccountId","Aggregators":[{"AggregatorType":"count","TypeName":"AWS:OpsItem","AttributeName":"SourceRegion"}]}]}]'
   ```

------

   La llamada regresa información similar a la siguiente.

   ```
   {
       "Entities": [
           {
               "Data": {
                   "AWS:OpsItem": {
                       "Content": [
                           {
                               "Count": "38",
                               "SourceAccountId": "123456789012",
                               "SourceRegion": "us-east-1",
                               "Status": "Open"
                           },
                           {
                               "Count": "4",
                               "SourceAccountId": "111122223333",
                               "SourceRegion": "us-east-2",
                               "Status": "Open"
                           },
                           {
                               "Count": "1",
                               "SourceAccountId": "111122223333",
                               "SourceRegion": "us-west-1",
                               "Status": "Open"
                           },
                           {
                               "Count": "2",
                               "SourceAccountId": "444455556666",
                               "SourceRegion": "us-east-2",
                               "Status": "Resolved"
                           },
                           {
                               "Count": "1",
                               "SourceAccountId": "222222222222",
                               "SourceRegion": "us-east-1",
                               "Status": "Open"
                           }
                       ]
                   }
               }
           }
       ]
   }
   ```

# Auditoría y registro de la actividad de Change Manager
<a name="change-manager-auditing"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Puede auditar la actividad de Change Manager, una herramienta de AWS Systems Manager, mediante las alarmas de Amazon CloudWatch y AWS CloudTrail.

Para obtener más información acerca de cómo auditar y registrar las opciones de Systems Manager, consulte [Registro y monitorización en AWS Systems Manager](monitoring.md).

## Auditoría de la actividad de Change Manager con las alarmas de CloudWatch
<a name="change-manager-logging-auditing-alarms"></a>

Puede configurar una alarma de CloudWatch y asignarla a una plantilla de cambios. Si se cumple alguna de las condiciones definidas en la alarma, se llevan a cabo las acciones especificadas para ella. En la configuración de la alarma, puede especificar un tema de Amazon Simple Notification Service (Amazon SNS) para efectuar una notificación cuando se cumple alguna condición de la alarma. 

Para obtener más información acerca de la creación de una plantilla de Change Manager, consulte [Uso de las plantillas de cambios](change-templates.md).

Para obtener más información acerca de la creación de alarmas de CloudWatch, consulte [Using CloudWatch Alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) (Uso de las alarmas de CloudWatch) en la *Guía del usuario de Amazon CloudWatch*.

## Auditoría de la actividad de Change Manager con CloudTrail
<a name="change-manager-logging-auditing-cloudtrail"></a>

CloudTrail registra las llamadas a la API realizadas en la consola de Systems Manager, la AWS Command Line Interface (AWS CLI) y el SDK de Systems Manager. Puede ver la información en la consola de CloudTrail o en un bucket de Amazon Simple Storage Service (Amazon S3), donde se almacena. Se utiliza un bucket para todos los registros de CloudTrail de su cuenta.

Los registros de las acciones de Change Manager muestran la creación de documentos de plantillas de cambios, las aprobaciones y los rechazos de las solicitudes y las plantillas de cambios, la actividad generada por los manuales de procedimientos de Automation y mucho más. Para obtener más información acerca de cómo ver y utilizar los registros de CloudTrail de la actividad de Systems Manager, consulte [Registro de llamadas a la API de AWS Systems Manager con AWS CloudTrail](monitoring-cloudtrail-logs.md).

# Resolución de problemas de Change Manager
<a name="change-manager-troubleshooting"></a>

**Cambio en la disponibilidad de Change Manager**  
Change Manager de AWS Systems Manager dejará de estar disponible para nuevos clientes a partir del 7 de noviembre de 2025. Si desea utilizar Change Manager, regístrese antes de esa fecha. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cambio en la disponibilidad de Change Manager de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html). 

Utilice la siguiente información como ayuda para solucionar problemas con Change Manager, una herramienta de AWS Systems Manager.

**Topics**
+ [Error “Group *\$1GUID\$1* not found” (Grupo \$1GUID\$1 no encontrado) durante las aprobaciones de las solicitudes de cambio cuando se usa Active Directory (grupos)](#change-manager-troubleshooting-sso)

## Error “Group *\$1GUID\$1* not found” (Grupo \$1GUID\$1 no encontrado) durante las aprobaciones de las solicitudes de cambio cuando se usa Active Directory (grupos)
<a name="change-manager-troubleshooting-sso"></a>

**Problema**: cuando AWS IAM Identity Center (Centro de identidades de IAM) se utiliza para la administración de identidades de usuarios, un miembro de un grupo de Active Directory al que se le conceden permisos de aprobación en Change Manager recibe un error de “not authorized” (no autorizado) o “group not found” (grupo no encontrado).
+ **Solución**: cuando selecciona grupos de Active Directory en el Centro de identidades de IAM para acceder a la Consola de administración de AWS, el sistema programa una sincronización periódica que copia la información de esos grupos de Active Directory en el Centro de identidades de IAM. Este proceso debe completarse antes de que los usuarios autorizados a través de la pertenencia a grupos de Active Directory puedan aprobar correctamente una solicitud. Para obtener más información, consulte [Conexión al directorio de Microsoft AD](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-ad.html) en la *Guía del usuario de AWS IAM Identity Center*.

# Documentos de AWS Systems Manager
<a name="documents"></a>

Un documento de AWS Systems Manager (documento de SSM) define las acciones que Systems Manager realiza en las instancias administradas. Systems Manager incluye más de 100 documentos preconfigurados que puede utilizar especificando los parámetros en tiempo de ejecución. Los documentos preconfigurados se pueden encontrar en la consola de documentos de Systems Manager en la pestaña **Owned by Amazon** (Propiedad de Amazon) o si especifica Amazon para el filtro `Owner` (Propietario) al llamar a la operación de la API `ListDocuments`. Los documentos usan JSON (JavaScript Object Notation, notación de objetos de JavaScript) o YAML e incluyen los pasos y los parámetros que especifique. 

Para mejorar la seguridad, a partir del 14 de julio de 2025, los documentos SSM admiten la interpolación de variables de entorno al procesar los parámetros. Esta característica, disponible en la versión 2.2 del esquema y en la versión 3.3.2746.0 o superior de SSM Agent, ayuda a prevenir los ataques de inyección de comandos.

Para comenzar a utilizar documentos de SSM, abra la [consola de Systems Manager](https://console.aws.amazon.com/systems-manager/documents). En el panel de navegación, elija **Documentos**.

**importante**  
En Systems Manager, un documento de SSM *propiedad de Amazon* es un documento creado y administrado por Amazon Web Services. Los documentos que son *propiedad de Amazon* incluyen un prefijo como `AWS-*` en el nombre del documento. Se considera que el propietario del documento es Amazon, no una cuenta de usuario específica de AWS. Estos documentos están a disposición del público para que los utilicen todos los usuarios.

## ¿Cómo puede beneficiar la herramienta Documentos a mi organización?
<a name="ssm-docs-benefits"></a>

Documentos, una herramienta de AWS Systems Manager, ofrece los siguientes beneficios:
+ **Categorías de documentos**

  Para ayudarlo a encontrar los documentos que necesita, elija una categoría según el tipo de documento que esté buscando. Para ampliar la búsqueda, puede elegir varias categorías del mismo tipo de documento. No se admite la selección de categorías de distintos tipos de documento. Las categorías solo se admiten para documentos propiedad de Amazon.
+  **Versiones de los documentos** 

  Puede crear y guardar distintas versiones de los documentos. A continuación, puede especificar una versión predeterminada para cada documento. La versión predeterminada de un documento se puede actualizar a una versión más reciente o revertir a una versión anterior del documento. Cuando cambia el contenido de un documento, Systems Manager incrementa automáticamente la versión del documento. Especifique la versión de un documento en la consola, los comandos de AWS Command Line Interface (AWS CLI) o las llamadas a la API para recuperar o utilizar cualquier versión de un documento.
+  **Personalizar documentos según sus necesidades** 

  Si desea personalizar los pasos y las acciones en un documento, puede crear el suyo propio. El sistema almacena el documento con su Cuenta de AWS en la Región de AWS en la que lo cree. Para obtener más información acerca de cómo crear un documento de SSM, consulte [Crear contenido en el documento de SSM](documents-creating-content.md).
+  **Etiquetar documentos** 

  Puede etiquetar sus documentos para identificar rápidamente uno o varios documentos en función de las etiquetas que les haya asignado. Por ejemplo, puede etiquetar documentos para entornos específicos, departamentos, usuarios, grupos o períodos. También puede restringir el acceso a documentos mediante la creación de una política de AWS Identity and Access Management (IAM) que especifique las etiquetas a las que podrá obtener acceso un usuario o un grupo. 
+  **Compartir documentos** 

  Puede hacer que los documentos sean públicos o compartirlos con determinadas Cuentas de AWS en la misma Región de AWS. Compartir documentos entre cuentas puede resultar útil si, por ejemplo, desea que todas las instancias de Amazon Elastic Compute Cloud (Amazon EC2) que proporcione a los clientes o a los empleados tengan la misma configuración. Además de mantener actualizadas las aplicaciones o las revisiones en las instancias, quizá le interese restringir las instancias de cliente en determinadas actividades. O bien, quizá desee asegurarse de que las instancias utilizadas por las cuentas de los empleados en toda la empresa dispongan de acceso a recursos internos específicos. Para obtener más información, consulte [Uso compartido de documentos de SSM](documents-ssm-sharing.md).

## ¿Quién debería utilizar Documentos?
<a name="documents-who"></a>
+ Todo cliente de AWS que desee utilizar las herramientas de Systems Manager para mejorar su eficiencia operativa a escala, reducir los errores asociados a la intervención manual y reducir el tiempo de resolución de problemas comunes.
+ Expertos en infraestructura que deseen automatizar las tareas de implementación y configuración.
+ Administradores que deseen resolver problemas comunes de forma fiable, mejorar la eficiencia de la solución de problemas y reducir las operaciones repetitivas.
+ Usuarios que deseen automatizar una tarea que normalmente realizan de forma manual.

## ¿Cuáles son los tipos de documentos de SSM?
<a name="what-are-document-types"></a>

En la siguiente tabla, se describen los distintos tipos de documentos de SSM y los usos.


****  

| Tipo | Utilizar con | Details | 
| --- | --- | --- | 
|  ApplicationConfiguration ApplicationConfigurationSchema  |   [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html)   |  AWS AppConfig, una herramienta de AWS Systems Manager, le permite crear, administrar e implementar rápidamente configuraciones de aplicaciones. Para almacenar los datos de configuración en un documento SSM, puede crear un documento que utilice el tipo de documento `ApplicationConfiguration`. Para obtener más información, consulte [Configuración libre](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#free-form-configurations) en la *Guía del usuario de AWS AppConfig*. Si crea una configuración en un documento SSM, debe especificar un esquema JSON correspondiente. El esquema utiliza el tipo de documento `ApplicationConfigurationSchema` y, al igual que un conjunto de reglas, define las propiedades permitidas para cada ajuste de configuración de la aplicación. Para obtener más información, consulte [Acerca de los validadores](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile-validators.html) en la *Guía del usuario de AWS AppConfig*.  | 
|  Manual de procedimientos de Automation  |   [Automation](systems-manager-automation.md)   [State Manager](systems-manager-state.md)   [Maintenance Windows](maintenance-windows.md)   |  Utilice los manuales de procedimientos de Automation a la hora de realizar tareas de implementación y mantenimiento comunes como, por ejemplo, crear o actualizar una Amazon Machine Image (AMI). State Manager utiliza los documentos de automatización para aplicar una configuración. Estas acciones se pueden ejecutar en uno o varios destinos en cualquier momento durante el ciclo de vida de una instancia. Maintenance Windows utiliza manuales de procedimientos de Automation para realizar tareas de implementación y mantenimiento comunes en función de la programación especificada. Todos los documentos de Automation compatibles con sistemas operativos basados en Linux también se admiten en instancias EC2 para macOS.  | 
|  Documento de calendario de cambios  |   [Change Calendar](systems-manager-change-calendar.md)   |  Change Calendar, una herramienta de AWS Systems Manager, usa el tipo de documento `ChangeCalendar`. Un documento de Change Calendar almacena una entrada de calendario y eventos asociados que pueden permitir o impedir que las acciones de Automation cambien el entorno. En Change Calendar, un documento almacena datos de [iCalendar 2.0](https://icalendar.org/) en texto sin formato. Change Calendar no es compatible con instancias EC2 para macOS.  | 
|  AWS CloudFormationPlantilla de   |   [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)   |  AWS CloudFormationEstas plantillas de describen los recursos que desea aprovisionar en sus pilas de CloudFormation. El almacenamiento de plantillas de CloudFormation como documentos de Systems Manager le permite beneficiarse de las características de los documentos de Systems Manager. Estos incluyen crear y comparar varias versiones de su plantilla y compartir su plantilla con otras cuentas en la misma Región de AWS. Puede crear y editar plantillas y pilas de CloudFormation con Application Manager, una herramienta de Systems Manager. Para obtener más información, consulte [Trabajo con plantillas y pilas de CloudFormation en Application Manager](application-manager-working-stacks.md).  | 
|  Documento de comandos  |   [Run Command](run-command.md)   [State Manager](systems-manager-state.md)   [Maintenance Windows](maintenance-windows.md)   |  Run Command, una herramienta de AWS Systems Manager, utiliza documentos de comandos para ejecutar comandos. State Manager, una herramienta de AWS Systems Manager, utiliza documentos de comandos para aplicar una configuración. Estas acciones se pueden ejecutar en uno o más destinos en cualquier momento durante el ciclo de vida de una instancia. Maintenance Windows, una herramienta de AWS Systems Manager, utiliza los documentos de comandos para aplicar una configuración en función de la programación especificada. La mayoría de los documentos de Command son compatibles con todos los sistemas operativos Linux y Windows Server, que, a su vez, son compatibles con Systems Manager. Los siguientes documentos de Command se admiten en instancias EC2 para macOS: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/documents.html)  | 
|  Plantilla de paquete de conformidad de AWS Config  |   [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)   |  Las plantillas de paquetes de conformidad de AWS Config son documentos con formato YAML que se utilizan para crear paquetes de conformidad que contienen la lista de reglas administradas o personalizadas de AWS Config y acciones de corrección. Para obtener más información, consulte [Conformance Packs](https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html) (Paquetes de conformidad).  | 
|  Documento de paquete  |   [Distributor](distributor.md)   |  En Distributor, una herramienta de AWS Systems Manager, un paquete está representado por un documento de SSM. Un documento de paquete incluye archivos de almacenamiento ZIP asociados que contienen software o recursos para instalar en las instancias administradas. La creación de un paquete en Distributor crea el documento del paquete. Distributor no es compatible con Oracle Linux ni con las instancias administradas de macOS.  | 
|  Documento de política  |   [State Manager](systems-manager-state.md)   |  Inventario, una herramienta de AWS Systems Manager, utiliza el documento de política `AWS-GatherSoftwareInventory` con una asociación de State Manager para recopilar datos de inventario de instancias administradas. Cuando crea sus propios documentos de SSM, los manuales de procedimientos de Automation y los documentos de Command son el método preferido para aplicar una política a una instancia administrada. Systems Manager Inventory y el documento de política de `AWS-GatherSoftwareInventory` se admiten en todos los sistemas operativos compatibles con Systems Manager.  | 
|  Plantilla de análisis posterior a incidentes  |   [Análisis posterior a incidentes de Incident Manager](https://docs.aws.amazon.com/incident-manager/latest/userguide/analysis.html)   |  Incident Manager utiliza la plantilla de análisis posterior a incidentes para crear un análisis basado en prácticas recomendadas de administración de operaciones de AWS. Utilice la plantilla para crear un análisis que su equipo pueda utilizar para identificar mejoras en la respuesta a incidentes.   | 
|  Documento de sesión  |   [Session Manager](session-manager.md)   |  Session Manager, una herramienta de AWS Systems Manager, utiliza documentos de sesión para determinar qué tipo de sesión iniciar, como una sesión de reenvío de puertos, una sesión para ejecutar un comando interactivo o una sesión para crear un túnel SSH. Los documentos de sesión son compatibles con todos los sistemas operativos Linux y Windows Server que, a su vez, son compatibles con Systems Manager. Los siguientes documentos de Command se admiten en instancias EC2 para macOS: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/documents.html)  | 

**Cuotas de documentos de SSM**  
Para obtener más información sobre las cuotas de los documentos de SSM, consulte [Service Quotas de Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm) en la *Referencia general de Amazon Web Services*.

**Topics**
+ [¿Cómo puede beneficiar la herramienta Documentos a mi organización?](#ssm-docs-benefits)
+ [¿Quién debería utilizar Documentos?](#documents-who)
+ [¿Cuáles son los tipos de documentos de SSM?](#what-are-document-types)
+ [Componentes del documento](documents-components.md)
+ [Crear contenido en el documento de SSM](documents-creating-content.md)
+ [Trabajo con documentos](documents-using.md)
+ [Solución de problemas de gestión de parámetros](parameter-troubleshooting.md)

# Componentes del documento
<a name="documents-components"></a>

Esta sección incluye información sobre los componentes de los documentos de SSM.

**Topics**
+ [Esquemas, características y ejemplos](documents-schemas-features.md)
+ [Elementos y parámetros de datos](documents-syntax-data-elements-parameters.md)
+ [Referencia de complementos del documento de comandos](documents-command-ssm-plugin-reference.md)

# Esquemas, características y ejemplos
<a name="documents-schemas-features"></a>

AWS Systems ManagerLos documentos de (SSM) utilizan las siguientes versiones de esquema.
+ Los documentos del tipo `Command` pueden utilizar la versión de esquema 1.2, 2.0 y 2.2. Si utiliza documentos de esquema 1.2, le recomendamos que cree documentos que utilicen la versión de esquema 2.2.
+ Los documentos del tipo `Policy` deben utilizar la versión de esquema 2.0 o posterior.
+ Los documentos del tipo `Automation` deben utilizar la versión de esquema 0.3.
+ Los documentos del tipo `Session` deben utilizar la versión de esquema 1.0.
+ Puede crear documentos en JSON o YAML.

Para obtener más información acerca del esquema del documento de `Session`, consulte [Esquema del documento de Session](session-manager-schema.md).

Si utiliza la versión de esquema más reciente para los documentos de tipo `Command` y `Policy`, puede aprovechar las siguientes características.


**Características de los documentos con la versión de esquema 2.2**  

| Característica | Details | 
| --- | --- | 
|  Edición de documentos  |  Ahora los documentos pueden actualizarse. Con la versión 1.2, cualquier actualización de un documento requería guardarlo con otro nombre.  | 
|  Control de versiones automático  |  Cualquier actualización de un documento crea una versión nueva. No es una versión de esquema, sino una versión del documento.  | 
|  Versión predeterminada  |  Si tiene varias versiones de un documento, puede especificar qué versión es el documento predeterminado.  | 
|  Secuenciación  |  Los complementos o los *pasos* de un documento se ejecutan en el orden especificado.  | 
|  Compatibilidad multiplataforma  |  La compatibilidad multiplataforma le permite especificar diferentes sistemas operativos para distintos complementos dentro del mismo documento de SSM. La compatibilidad multiplataforma utiliza el parámetro `precondition` dentro de un paso.   | 
| Interpolación de parámetros | Interpolación significa insertar o sustituir un valor variable en una cadena. Es como rellenar un espacio en blanco con valores reales antes de usar la cadena. En el contexto de los documentos de SSM, la interpolación de parámetros permite interpolar los parámetros de cadena en las variables de entorno antes de la ejecución del comando, lo que proporciona una mayor seguridad contra las inyecciones de comandos. Cuando se establece en `ENV_VAR`, el agente crea una variable de entorno denominada `SSM_parameter-name` que contiene el valor del parámetro. | 

**nota**  
El AWS Systems Manager SSM Agent de las instancias debe mantenerse actualizado con la versión más reciente para poder utilizar las características nuevas de Systems Manager y las características del documento de SSM. Para obtener más información, consulte [Actualización de SSM Agent mediante Run Command](run-command-tutorial-update-software.md#rc-console-agentexample).

La siguiente tabla enumera las diferencias entre las versiones de esquema principales.


****  

| Versión 1.2 | Versión 2.2 (versión más reciente) | Details | 
| --- | --- | --- | 
|  runtimeConfig  |  mainSteps  |  En la versión 2.2, la sección `mainSteps` sustituye a la `runtimeConfig`. La sección `mainSteps` permite a Systems Manager ejecutar los pasos de forma secuencial.  | 
|  propiedades  |  inputs  |  En la versión 2.2, la sección `inputs` sustituye la sección `properties`. La sección `inputs` acepta parámetros en los pasos.  | 
|  comandos  |  runCommand  |  En la versión 2.2, la sección `inputs` toma el parámetro `runCommand` en lugar del parámetro `commands`.  | 
|  id  |  acción  |  En la versión 2.2, `Action` sustituye a `ID`. Se trata tan solo de un cambio de nombre.  | 
|  no se usa  |  name  |  En la versión 2.2, `name` es cualquier nombre definido por el usuario para un paso.  | 

**Uso del parámetro precondition**  
Con la versión de esquema 2.2 o posterior, puede utilizar el parámetro `precondition` para especificar el sistema operativo de destino de cada complemento o para validar los parámetros de entrada que definió en su documento de SSM. El parámetro `precondition` admite hacer referencia a los parámetros de entrada de su documento de SSM, y `platformType` utilizando los valores de `Linux`, `MacOS`, y `Windows`. Solo el operador `StringEquals` es compatible.

En el caso de documentos que utilizan la versión de esquema 2.2 o posterior, si no se especifica `precondition`, cada complemento se ejecuta u omite en función de la compatibilidad del complemento con el sistema operativo. La compatibilidad de los complementos con el sistema operativo se evalúa antes de `precondition`. En el caso de los documentos que utilizan el esquema 2.0 o anterior, los complementos incompatibles generarán un error.

Por ejemplo, en un documento con la versión de esquema 2.2, si no se especifica `precondition` y se incluye el complemento `aws:runShellScript`, el paso se ejecuta en las instancias de Linux, pero el sistema lo omite en las instancias de Windows Server, ya que `aws:runShellScript` no es compatible con las instancias de Windows Server. Sin embargo, en el caso de un documento con versión de esquema 2.0, si especifica el complemento `aws:runShellScript` y, a continuación, ejecuta el documento en una instancia de Windows Server, se produce un error en la ejecución. Puede ver un ejemplo del parámetro de condición previa en un documento de SSM más adelante en esta sección.

## Versión de esquema 2.2
<a name="documents-schema-twox"></a>

**Elementos de nivel superior**  
En el siguiente ejemplo, se muestran los elementos de nivel superior de un documento de SSM que utiliza la versión 2.2 del esquema.

------
#### [ YAML ]

```
---
schemaVersion: "2.2"
description: A description of the document.
parameters:
  parameter 1:
    property 1: "value"
    property 2: "value"
  parameter 2:
    property 1: "value"
    property 2: "value"
mainSteps:
  - action: Plugin name
    name: A name for the step.
    inputs:
      input 1: "value"
      input 2: "value"
      input 3: "{{ parameter 1 }}"
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "A description of the document.",
   "parameters": {
       "parameter 1": {
           "property 1": "value",
           "property 2": "value"
        },
        "parameter 2":{
           "property 1": "value",
           "property 2": "value"
        } 
    },
   "mainSteps": [
      {
         "action": "Plugin name",
         "name": "A name for the step.",
         "inputs": {
            "input 1": "value",
            "input 2": "value",
            "input 3": "{{ parameter 1 }}"
         }
      }
   ]
}
```

------

**Ejemplo de la versión 2.2 del esquema**  
En el ejemplo siguiente, se utiliza el complemento `aws:runPowerShellScript` para ejecutar un comando de PowerShell en las instancias de destino.

------
#### [ YAML ]

```
---
schemaVersion: "2.2"
description: "Example document"
parameters:
  Message:
    type: "String"
    description: "Example parameter"
    default: "Hello World"
    allowedValues: 
    - "Hello World"
mainSteps:
  - action: "aws:runPowerShellScript"
    name: "example"
    inputs:
      timeoutSeconds: '60'
      runCommand:
      - "Write-Output {{Message}}"
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "Example document",
   "parameters": {
      "Message": {
         "type": "String",
         "description": "Example parameter",
         "default": "Hello World",
         "allowedValues": ["Hello World"]
      }
   },
   "mainSteps": [
      {
         "action": "aws:runPowerShellScript",
         "name": "example",
         "inputs": {
            "timeoutSeconds": "60",
            "runCommand": [
               "Write-Output {{Message}}"
            ]
         }
      }
   ]
}
```

------

**Ejemplos del parámetro de condición previa de una versión de esquema 2.2**  
La versión de esquema 2.2 ofrece compatibilidad multiplataforma. Esto significa que dentro de un mismo documento de SSM puede especificar diferentes sistemas operativos para distintos complementos. La compatibilidad multiplataforma utiliza el parámetro `precondition` dentro de un paso, tal y como se muestra en el siguiente ejemplo. También puede utilizar el parámetro `precondition` para validar los parámetros de entrada que haya definido en el documento de SSM. Puede ver esto en el segundo caso de los siguientes ejemplos.

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: cross-platform sample
mainSteps:
- action: aws:runPowerShellScript
  name: PatchWindows
  precondition:
    StringEquals:
    - platformType
    - Windows
  inputs:
    runCommand:
    - cmds
- action: aws:runShellScript
  name: PatchLinux
  precondition:
    StringEquals:
    - platformType
    - Linux
  inputs:
    runCommand:
    - cmds
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "cross-platform sample",
   "mainSteps": [
      {
         "action": "aws:runPowerShellScript",
         "name": "PatchWindows",
         "precondition": {
            "StringEquals": [
               "platformType",
               "Windows"
            ]
         },
         "inputs": {
            "runCommand": [
               "cmds"
            ]
         }
      },
      {
         "action": "aws:runShellScript",
         "name": "PatchLinux",
         "precondition": {
            "StringEquals": [
               "platformType",
               "Linux"
            ]
         },
         "inputs": {
            "runCommand": [
               "cmds"
            ]
         }
      }
   ]
}
```

------

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
parameters:
  action:
    type: String
    allowedValues:
    - Install
    - Uninstall
  confirmed:
    type: String
    allowedValues:
    - True
    - False
mainSteps:
- action: aws:runShellScript
  name: InstallAwsCLI
  precondition:
    StringEquals:
    - "{{ action }}"
    - "Install"
  inputs:
    runCommand:
    - sudo apt install aws-cli
- action: aws:runShellScript
  name: UninstallAwsCLI
  precondition:
    StringEquals:
    - "{{ action }} {{ confirmed }}"
    - "Uninstall True"
  inputs:
    runCommand:
    - sudo apt remove aws-cli
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "parameters": {
      "action": {
         "type": "String",
         "allowedValues": [
            "Install",
            "Uninstall"
         ]
      },
      "confirmed": {
         "type": "String",
         "allowedValues": [
            true,
            false
         ]
      }
   },
   "mainSteps": [
      {
         "action": "aws:runShellScript",
         "name": "InstallAwsCLI",
         "precondition": {
            "StringEquals": [
               "{{ action }}",
               "Install"
            ]
         },
         "inputs": {
            "runCommand": [
               "sudo apt install aws-cli"
            ]
         }
      },
      {
         "action": "aws:runShellScript",
         "name": "UninstallAwsCLI",
         "precondition": {
            "StringEquals": [
               "{{ action }} {{ confirmed }}",
               "Uninstall True"
            ]
         },
         "inputs": {
            "runCommand": [
               "sudo apt remove aws-cli"
            ]
         }
      }
   ]
}
```

------

**Ejemplo de interpolación de la versión 2.2 del esquema con versiones de SSM Agent anteriores a la 3.3.2746.0**  
En las versiones de SSM Agent anteriores a la 3.3.2746.0, el agente ignora el parámetro `interpolationType` y, en su lugar, realiza una sustitución de cadena sin procesar. Si hace referencia a `SSM_parameter-name` de forma explícita, debe configurarlo de forma explícita. En el siguiente ejemplo para Linux, se hace referencia explícita a la variable de entorno `SSM_Message`.

```
{
    "schemaVersion": "2.2",
    "description": "An example document",
    "parameters": {
        "Message": {
            "type": "String",
            "description": "Message to be printed",
            "default": "Hello",
            "interpolationType" : "ENV_VAR",
	     "allowedPattern: "^[^"]*$"

        }
    },
    "mainSteps": [{
        "action": "aws:runShellScript",
        "name": "printMessage",
        "inputs": {
            "runCommand": [
              "if [ -z "${SSM_Message+x}" ]; then",
              "    export SSM_Message=\"{{Message}}\"",
              "fi",
              "",
              "echo $SSM_Message"
            ]
        }
    }
}
```

**nota**  
`allowedPattern` no es técnicamente obligatorio si un documento SSM no utiliza doble llave: `{{ }}`

**Ejemplo de la versión 2.2 del esquema State Manager**  
Puede utilizar el siguiente documento de SSM con State Manager, una herramienta de Systems Manager, para descargar e instalar el software antivirus ClamAV. State Manager aplica una configuración específica, lo que significa que cada vez que se ejecuta la asociación de State Manager, el sistema comprueba si el software ClamAV está instalado. En caso contrario, State Manager vuelve a ejecutar este documento.

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: State Manager Bootstrap Example
parameters: {}
mainSteps:
- action: aws:runShellScript
  name: configureServer
  inputs:
    runCommand:
    - sudo yum install -y httpd24
    - sudo yum --enablerepo=epel install -y clamav
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "State Manager Bootstrap Example",
   "parameters": {},
   "mainSteps": [
      {
         "action": "aws:runShellScript",
         "name": "configureServer",
         "inputs": {
            "runCommand": [
               "sudo yum install -y httpd24",
               "sudo yum --enablerepo=epel install -y clamav"
            ]
         }
      }
   ]
}
```

------

**Ejemplo de inventario con la versión 2.2 del esquema**  
Puede utilizar el siguiente documento de SSM con State Manager para recopilar metadatos de inventario de las instancias.

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: Software Inventory Policy Document.
parameters:
  applications:
    type: String
    default: Enabled
    description: "(Optional) Collect data for installed applications."
    allowedValues:
    - Enabled
    - Disabled
  awsComponents:
    type: String
    default: Enabled
    description: "(Optional) Collect data for AWS Components like amazon-ssm-agent."
    allowedValues:
    - Enabled
    - Disabled
  networkConfig:
    type: String
    default: Enabled
    description: "(Optional) Collect data for Network configurations."
    allowedValues:
    - Enabled
    - Disabled
  windowsUpdates:
    type: String
    default: Enabled
    description: "(Optional) Collect data for all Windows Updates."
    allowedValues:
    - Enabled
    - Disabled
  instanceDetailedInformation:
    type: String
    default: Enabled
    description: "(Optional) Collect additional information about the instance, including
      the CPU model, speed, and the number of cores, to name a few."
    allowedValues:
    - Enabled
    - Disabled
  customInventory:
    type: String
    default: Enabled
    description: "(Optional) Collect data for custom inventory."
    allowedValues:
    - Enabled
    - Disabled
mainSteps:
- action: aws:softwareInventory
  name: collectSoftwareInventoryItems
  inputs:
    applications: "{{ applications }}"
    awsComponents: "{{ awsComponents }}"
    networkConfig: "{{ networkConfig }}"
    windowsUpdates: "{{ windowsUpdates }}"
    instanceDetailedInformation: "{{ instanceDetailedInformation }}"
    customInventory: "{{ customInventory }}"
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "Software Inventory Policy Document.",
   "parameters": {
      "applications": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for installed applications.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "awsComponents": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for AWS Components like amazon-ssm-agent.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "networkConfig": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for Network configurations.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "windowsUpdates": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for all Windows Updates.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "instanceDetailedInformation": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect additional information about the instance, including\nthe CPU model, speed, and the number of cores, to name a few.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      },
      "customInventory": {
         "type": "String",
         "default": "Enabled",
         "description": "(Optional) Collect data for custom inventory.",
         "allowedValues": [
            "Enabled",
            "Disabled"
         ]
      }
   },
   "mainSteps": [
      {
         "action": "aws:softwareInventory",
         "name": "collectSoftwareInventoryItems",
         "inputs": {
            "applications": "{{ applications }}",
            "awsComponents": "{{ awsComponents }}",
            "networkConfig": "{{ networkConfig }}",
            "windowsUpdates": "{{ windowsUpdates }}",
            "instanceDetailedInformation": "{{ instanceDetailedInformation }}",
            "customInventory": "{{ customInventory }}"
         }
      }
   ]
}
```

------

**Ejemplo de la versión 2.2 del esquema `AWS-ConfigureAWSPackage`**  
El siguiente ejemplo muestra el documento de `AWS-ConfigureAWSPackage`. La sección `mainSteps` incluye el complemento `aws:configurePackage` en el paso `action`.

**nota**  
En sistemas operativos Linux, solo son compatibles los paquetes `AmazonCloudWatchAgent` y `AWSSupport-EC2Rescue`.

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: 'Install or uninstall the latest version or specified version of an AWS
  package. Available packages include the following: AWSPVDriver, AwsEnaNetworkDriver,
  AwsVssComponents, and AmazonCloudWatchAgent, and AWSSupport-EC2Rescue.'
parameters:
  action:
    description: "(Required) Specify whether or not to install or uninstall the package."
    type: String
    allowedValues:
    - Install
    - Uninstall
  name:
    description: "(Required) The package to install/uninstall."
    type: String
    allowedPattern: "^arn:[a-z0-9][-.a-z0-9]{0,62}:[a-z0-9][-.a-z0-9]{0,62}:([a-z0-9][-.a-z0-9]{0,62})?:([a-z0-9][-.a-z0-9]{0,62})?:package\\/[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$|^[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$"
  version:
    type: String
    description: "(Optional) A specific version of the package to install or uninstall."
mainSteps:
- action: aws:configurePackage
  name: configurePackage
  inputs:
    name: "{{ name }}"
    action: "{{ action }}"
    version: "{{ version }}"
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "Install or uninstall the latest version or specified version of an AWS package. Available packages include the following: AWSPVDriver, AwsEnaNetworkDriver, AwsVssComponents, and AmazonCloudWatchAgent, and AWSSupport-EC2Rescue.",
   "parameters": {
      "action": {
         "description":"(Required) Specify whether or not to install or uninstall the package.",
         "type":"String",
         "allowedValues":[
            "Install",
            "Uninstall"
         ]
      },
      "name": {
         "description": "(Required) The package to install/uninstall.",
         "type": "String",
         "allowedPattern": "^arn:[a-z0-9][-.a-z0-9]{0,62}:[a-z0-9][-.a-z0-9]{0,62}:([a-z0-9][-.a-z0-9]{0,62})?:([a-z0-9][-.a-z0-9]{0,62})?:package\\/[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$|^[a-zA-Z][a-zA-Z0-9\\-_]{0,39}$"
      },
      "version": {
         "type": "String",
         "description": "(Optional) A specific version of the package to install or uninstall."
      }
   },
   "mainSteps":[
      {
         "action": "aws:configurePackage",
         "name": "configurePackage",
         "inputs": {
            "name": "{{ name }}",
            "action": "{{ action }}",
            "version": "{{ version }}"
         }
      }
   ]
}
```

------

## Versión de esquema 1.2
<a name="documents-schema-onex"></a>

El siguiente ejemplo muestra los elementos de nivel superior de un documento con la versión de esquema 1.2.

```
{
   "schemaVersion":"1.2",
   "description":"A description of the SSM document.",
   "parameters":{
      "parameter 1":{
         "one or more parameter properties"
      },
      "parameter 2":{
         "one or more parameter properties"
      },
      "parameter 3":{
         "one or more parameter properties"
      }
   },
   "runtimeConfig":{
      "plugin 1":{
         "properties":[
            {
               "one or more plugin properties"
            }
         ]
      }
   }
}
```

**Ejemplo de la versión 1.2 del esquema `aws:runShellScript`**  
El siguiente ejemplo muestra el documento de SSM `AWS-RunShellScript`. La sección **runtimeConfig** incluye el complemento `aws:runShellScript`.

```
{
    "schemaVersion":"1.2",
    "description":"Run a shell script or specify the commands to run.",
    "parameters":{
        "commands":{
            "type":"StringList",
            "description":"(Required) Specify a shell script or a command to run.",
            "minItems":1,
            "displayType":"textarea"
        },
        "workingDirectory":{
            "type":"String",
            "default":"",
            "description":"(Optional) The path to the working directory on your instance.",
            "maxChars":4096
        },
        "executionTimeout":{
            "type":"String",
            "default":"3600",
            "description":"(Optional) The time in seconds for a command to complete before it is considered to have failed. Default is 3600 (1 hour). Maximum is 172800 (48 hours).",
            "allowedPattern":"([1-9][0-9]{0,3})|(1[0-9]{1,4})|(2[0-7][0-9]{1,3})|(28[0-7][0-9]{1,2})|(28800)"
        }
    },
    "runtimeConfig":{
        "aws:runShellScript":{
            "properties":[
                {
                    "id":"0.aws:runShellScript",
                    "runCommand":"{{ commands }}",
                    "workingDirectory":"{{ workingDirectory }}",
                    "timeoutSeconds":"{{ executionTimeout }}"
                }
            ]
        }
    }
}
```

## Versión de esquema 0.3
<a name="automation-doc-syntax-examples"></a>

**Elementos de nivel superior**  
El siguiente ejemplo muestra los elementos de nivel superior de un manual de procedimientos de automatización con la versión de esquema 0.3 o posterior en formato JSON.

```
{
    "description": "document-description",
    "schemaVersion": "0.3",
    "assumeRole": "{{assumeRole}}",
    "parameters": {
        "parameter1": {
            "type": "String",
            "description": "parameter-1-description",
            "default": ""
        },
        "parameter2": {
            "type": "String",
            "description": "parameter-2-description",
            "default": ""
        }
    },
    "variables": {
        "variable1": {
            "type": "StringMap",
            "description": "variable-1-description",
            "default": {}
        },
        "variable2": {
            "type": "String",
            "description": "variable-2-description",
            "default": "default-value"
        }
    },
    "mainSteps": [
        {
            "name": "myStepName",
            "action": "action-name",
            "maxAttempts": 1,
            "inputs": {
                "Handler": "python-only-handler-name",
                "Runtime": "runtime-name",
                "Attachment": "script-or-zip-name"
            },
            "outputs": {
                "Name": "output-name",
                "Selector": "selector.value",
                "Type": "data-type"
            }
        }
    ],
    "files": {
        "script-or-zip-name": {
            "checksums": {
                "sha256": "checksum"
            },
            "size": 1234
        }
    }
}
```

**Ejemplo de manual de procedimientos de automatización YAML**  
En el siguiente ejemplo, se muestra el contenido de un manual de procedimientos de automatización en formato YAML. Este ejemplo de trabajo de la versión 0.3 del esquema del documento también demuestra el uso de Markdown para dar formato a las descripciones del documento.

```
description: >-
  ##Title: LaunchInstanceAndCheckState

  -----

  **Purpose**: This Automation runbook first launches an EC2 instance
  using the AMI ID provided in the parameter ```imageId```. The second step of
  this document continuously checks the instance status check value for the
  launched instance until the status ```ok``` is returned.


  ##Parameters:

  -----

  Name | Type | Description | Default Value

  ------------- | ------------- | ------------- | -------------

  assumeRole | String | (Optional) The ARN of the role that allows Automation to
  perform the actions on your behalf. | -

  imageId  | String | (Optional) The AMI ID to use for launching the instance.
  The default value uses the latest Amazon Linux AMI ID available. | {{
  ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 }}
schemaVersion: '0.3'
assumeRole: 'arn:aws:iam::111122223333::role/AutomationServiceRole'
parameters:
  imageId:
    type: String
    default: '{{ ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 }}'
    description: >-
      (Optional) The AMI ID to use for launching the instance. The default value
      uses the latest released Amazon Linux AMI ID.
  tagValue:
    type: String
    default: ' LaunchedBySsmAutomation'
    description: >-
      (Optional) The tag value to add to the instance. The default value is
      LaunchedBySsmAutomation.
  instanceType:
    type: String
    default: t2.micro
    description: >-
      (Optional) The instance type to use for the instance. The default value is
      t2.micro.
mainSteps:
  - name: LaunchEc2Instance
    action: 'aws:executeScript'
    outputs:
      - Name: payload
        Selector: $.Payload
        Type: StringMap
    inputs:
      Runtime: python3.11
      Handler: launch_instance
      Script: ''
      InputPayload:
        image_id: '{{ imageId }}'
        tag_value: '{{ tagValue }}'
        instance_type: '{{ instanceType }}'
      Attachment: launch.py
    description: >-
      **About This Step**


      This step first launches an EC2 instance using the ```aws:executeScript```
      action and the provided python script.
  - name: WaitForInstanceStatusOk
    action: 'aws:executeScript'
    inputs:
      Runtime: python3.11
      Handler: poll_instance
      Script: |-
        def poll_instance(events, context):
          import boto3
          import time

          ec2 = boto3.client('ec2')

          instance_id = events['InstanceId']

          print('[INFO] Waiting for instance status check to report ok', instance_id)

          instance_status = "null"

          while True:
            res = ec2.describe_instance_status(InstanceIds=[instance_id])

            if len(res['InstanceStatuses']) == 0:
              print("Instance status information is not available yet")
              time.sleep(5)
              continue

            instance_status = res['InstanceStatuses'][0]['InstanceStatus']['Status']

            print('[INFO] Polling to get status of the instance', instance_status)

            if instance_status == 'ok':
              break

            time.sleep(10)

          return {'Status': instance_status, 'InstanceId': instance_id}
      InputPayload: '{{ LaunchEc2Instance.payload }}'
    description: >-
      **About This Step**


      The python script continuously polls the instance status check value for
      the instance launched in Step 1 until the ```ok``` status is returned.
files:
  launch.py:
    checksums:
      sha256: 18871b1311b295c43d0f...[truncated]...772da97b67e99d84d342ef4aEXAMPLE
```

## Ejemplos de gestión segura de parámetros
<a name="secure-parameter-examples"></a>

Los siguientes ejemplos demuestran la gestión seguro de parámetros mediante una variable de entorno `interpolationType`.

### Ejecución básica de comandos de forma segura
<a name="basic-secure-command"></a>

En este ejemplo se muestra cómo gestionar de forma segura un parámetro de comando:

**nota**  
`allowedPattern` no es técnicamente obligatorio en los documentos SSM que no utilizan doble llave: `{{ }}` 

------
#### [ YAML ]

```
---

schemaVersion: '2.2'
description: An example document.
parameters:
  Message:
    type: String
    description: "Message to be printed"
    default: Hello
    interpolationType: ENV_VAR
    allowedPattern: "^[^"]*$"
mainSteps:
  - action: aws:runShellScript
    name: printMessage
    precondition:
      StringEquals:
        - platformType
        - Linux
    inputs:
      runCommand:
        - echo {{Message}}
```

------
#### [ JSON ]

```
{
    "schemaVersion": "2.2",
    "description": "An example document.",
    "parameters": {
        "Message": {
            "type": "String",
            "description": "Message to be printed",
            "default": "Hello",
            "interpolationType": "ENV_VAR",
            "allowedPattern": "^[^"]*$"
        }
    },
    "mainSteps": [{
        "action": "aws:runShellScript",
        "name": "printMessage",
        "precondition": {
           "StringEquals": ["platformType", "Linux"]
        },
        "inputs": {
            "runCommand": [
              "echo {{Message}}"
            ]
        }
    }]
}
```

------

### Uso de parámetros en lenguajes interpretados
<a name="interpreted-language-example"></a>

Este ejemplo demuestra la gestión segura de parámetros en Python:

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: 'Secure Python script execution'
parameters:
  inputData:
    type: String
    description: 'Input data for processing'
    interpolationType: 'ENV_VAR'
mainSteps:
  - action: aws:runPowerShellScript
    name: runPython
    inputs:
      runCommand:
        - |
          python3 -c '
          import os
          import json
          
          # Safely access parameter through environment variable
          input_data = os.environ.get("SSM_inputData", "")
          
          # Process the data
          try:
              processed_data = json.loads(input_data)
              print(f"Successfully processed: {processed_data}")
          except json.JSONDecodeError:
              print("Invalid JSON input")
          '
```

------

### Ejemplo de compatibilidad con versiones anteriores
<a name="backwards-compatibility-example"></a>

En este ejemplo se muestra cómo gestionar los parámetros de forma segura y mantener la compatibilidad con versiones anteriores:

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: 'Backwards compatible secure parameter handling'
parameters:
  userInput:
    type: String
    description: 'User input to process'
    interpolationType: 'ENV_VAR'
    allowedPattern: '^[^"]*$'

mainSteps:
  - action: aws:runShellScript
    name: processInput
    inputs:
      runCommand:
        - |
          # Handle both modern and legacy agent versions
          if [ -z "${SSM_userInput+x}" ]; then
              # Legacy agent - fall back to direct parameter reference
              export SSM_userInput="{{userInput}}"
          fi
          
          # Process the input securely
          echo "Processing input: $SSM_userInput"
```

------

**nota**  
`allowedPattern` no es técnicamente obligatorio en los documentos SSM que no utilizan doble llave: `{{ }}` 

## Prácticas recomendadas de seguridad de parámetros
<a name="parameter-security-best-practices"></a>

Siga estas prácticas recomendadas cuando gestione parámetros en documentos SSM:
+ **Utilice la interpolación de variables de entorno**: utilice siempre `interpolationType: "ENV_VAR"` para los parámetros de cadena que se utilizarán en la ejecución de comandos.
+ **Implemente la validación de entradas**: utilice `allowedPattern` para restringir los valores de los parámetros a patrones seguros.
+ **Gestione los sistemas heredados**: incluya una lógica alternativa para las versiones de SSM Agent anteriores que no admitan la interpolación de variables de entorno.
+ **Escape los caracteres especiales**: cuando utilice valores de parámetros en los comandos, escape correctamente los caracteres especiales para evitar que el intérprete de comandos los interprete.
+ **Limite el alcance de los parámetros**: utilice los patrones de parámetros más restrictivos posibles para su caso de uso.

# Elementos y parámetros de datos
<a name="documents-syntax-data-elements-parameters"></a>

En este tema se describen los elementos de datos que se utilizan en los documentos de SSM. La versión del esquema utilizada para crear un documento define la sintaxis y los elementos de datos que el documento acepta. Se recomienda utilizar la versión de esquema 2.2 o una versión posterior para los documentos de Command. Los manuales de procedimientos de Automation utilizan la versión de esquema 0.3. Asimismo, los manuales de procedimientos de Automation admiten el uso de Markdown, un lenguaje de marcado que le permite agregar descripciones de estilo wiki a documentos y pasos individuales dentro del documento. Para obtener más información acerca del uso de Markdown, consulte [Uso de Markdown en la consola](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html) en la *Guía de introducción a la Consola de administración de AWS*.

En la siguiente sección se describen los elementos de datos que puede incluir en un documento de SSM.

## Elementos de datos de nivel superior
<a name="top-level"></a>

**schemaVersion**  
La versión de esquema que utilizar.  
Tipo: versión  
Obligatorio: sí

**description**  
La información que proporciona para describir el propósito del documento. También puede utilizar este campo para determinar si un parámetro requiere un valor para que se ejecute un documento o si es opcional proporcionar un valor para el parámetro. En los ejemplos de este tema, se pueden ver los parámetros obligatorios y opcionales.  
Tipo: cadena  
Requerido: no

**parameters**  
Una estructura que define los parámetros que acepta el documento.   
Para mejorar la seguridad al administrar los parámetros de cadena, puede utilizar la interpolación de variables de entorno si especifica la propiedad `interpolationType`. Cuando se establece en `ENV_VAR`, el sistema crea una variable de entorno denominada `SSM_parameter-name` que contiene el valor del parámetro.  
A continuación se incluye un ejemplo de un parámetro que utiliza una variable de entorno `interpolationType`:  

```
{
    "schemaVersion": "2.2",
    "description": "An example document.",
    "parameters": {
        "Message": {
            "type": "String",
            "description": "Message to be printed",
            "default": "Hello",
            "interpolationType" : "ENV_VAR",
            "allowedPattern": "^[^"]*$"

        }
    },
    "mainSteps": [{
        "action": "aws:runShellScript",
        "name": "printMessage",
        "precondition" : {
           "StringEquals" : ["platformType", "Linux"]
        },
        "inputs": {
            "runCommand": [
              "echo {{Message}}"
            ]
        }
    }
}
```
`allowedPattern` no es técnicamente obligatorio en los documentos SSM que no utilizan doble llave: `{{ }}` 
En el caso de los parámetros que usa con frecuencia, le recomendamos que los almacene en Parameter Store, una herramienta de AWS Systems Manager. A continuación, puede definir parámetros en el documento que hagan referencia a los parámetros de Parameter Store como su valor predeterminado. Para hacer referencia a un parámetro de Parameter Store, utilice la sintaxis siguiente.   

```
{{ssm:parameter-name}}
```
Puede utilizar un parámetro que haga referencia a un parámetro de Parameter Store igual que haría con cualquier otro parámetro de documentos. En el siguiente ejemplo, el valor predeterminado del parámetro `commands` es el parámetro `myShellCommands` de Parameter Store. Al especificar el parámetro `commands` como una cadena `runCommand`, el documento ejecuta los comandos almacenados en el parámetro `myShellCommands`.  

```
---
schemaVersion: '2.2'
description: runShellScript with command strings stored as Parameter Store parameter
parameters:
  commands:
    type: StringList
    description: "(Required) The commands to run on the instance."
    default: ["{{ ssm:myShellCommands }}"],
            interpolationType : 'ENV_VAR'
            allowedPattern: '^[^"]*$'

mainSteps:
- action: aws:runShellScript
  name: runShellScriptDefaultParams
  inputs:
    runCommand:"{{ commands }}"
```

```
{
    "schemaVersion": "2.2",
    "description": "runShellScript with command strings stored as Parameter Store parameter",
    "parameters": {
      "commands": {
        "type": "StringList",
        "description": "(Required) The commands to run on the instance.",
        "default": ["{{ ssm:myShellCommands }}"],
        "interpolationType" : "ENV_VAR"
      }
    },
    "mainSteps": [
      {
        "action": "aws:runShellScript",
        "name": "runShellScriptDefaultParams",
        "inputs": {
            "runCommand": [
              "{{ commands }}"
          ]
        }
      }
    ]
  }
```
Puede hacer referencia a los parámetros de `String` y `StringList` de Parameter Store en la sección `parameters` del documento. No puede hacer referencia a los parámetros `SecureString` de Parameter Store.
Para obtener más información acerca de Parameter Store, consulte [AWS Systems Manager Parameter Store](systems-manager-parameter-store.md).  
Tipo: estructura  
La estructura `parameters` acepta los siguientes campos y valores:  
+ `type`: (Obligatorio) Entre los valores permitidos se incluyen los siguientes: `String`, `StringList`, `Integer` `Boolean`, `MapList` y `StringMap`. Para ver ejemplos de cada tipo, consulte [Ejemplos del parámetro `type` en documentos de SSM](#top-level-properties-type) en la siguiente sección.
**nota**  
Los documentos de tipo comando solo admiten los tipos de parámetros `String` y `StringList`.
+ `description`: (Opcional) Una descripción del parámetro.
+ `default`: (Opcional) El valor predeterminado del parámetro o una referencia a un parámetro en Parameter Store.
+ `allowedValues`: (Opcional) Una matriz de valores permitidos para el parámetro. La definición de valores permitidos para el parámetro valida la entrada del usuario. Si un usuario introduce un valor que no está permitido, la ejecución no se iniciará.

------
#### [ YAML ]

  ```
  DirectoryType:
    type: String
    description: "(Required) The directory type to launch."
    default: AwsMad
    allowedValues:
    - AdConnector
    - AwsMad
    - SimpleAd
  ```

------
#### [ JSON ]

  ```
  "DirectoryType": {
    "type": "String",
    "description": "(Required) The directory type to launch.",
    "default": "AwsMad",
    "allowedValues": [
      "AdConnector",
      "AwsMad",
      "SimpleAd"
    ]
  }
  ```

------
+ `allowedPattern`: (Opcional) Una expresión regular que valida si la entrada del usuario coincide con el patrón definido para el parámetro. Si la entrada del usuario no coincide con el patrón permitido, la ejecución no se iniciará.
**nota**  
Systems Manager realiza dos validaciones para `allowedPattern`. La primera validación se lleva a cabo utilizando la [Biblioteca regex de Java](https://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html) en el nivel de API cuando usa un documento. La segunda validación se lleva a cabo en SSM Agent mediante el uso de la [Biblioteca regex](https://pkg.go.dev/regexp) antes de procesar el documento. 

------
#### [ YAML ]

  ```
  InstanceId:
    type: String
    description: "(Required) The instance ID to target."
    allowedPattern: "^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$"
    default: ''
  ```

------
#### [ JSON ]

  ```
  "InstanceId": {
    "type": "String",
    "description": "(Required) The instance ID to target.",
    "allowedPattern": "^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$",
    "default": ""
  }
  ```

------
+ `displayType`: (Opcional) Se utiliza para mostrar `textfield` o `textarea` en la Consola de administración de AWS. `textfield` es un cuadro de texto de línea única. `textarea` es un área de texto multilínea.
+ `minItems`: (Opcional) El número mínimo de elementos permitidos.
+ `maxItems`: (Opcional) El número máximo de elementos permitidos.
+ `minChars`: (Opcional) El número mínimo de caracteres del parámetro permitidos.
+ `maxChars`: (Opcional) El número máximo de caracteres del parámetro permitidos.
+ `interpolationType`: (Opcional) Define cómo se procesan los valores de los parámetros antes de ejecutar el comando. Cuando se establece en `ENV_VAR`, el valor del parámetro está disponible como una variable de entorno denominada `SSM_parameter-name`. Esta característica ayuda a evitar la inyección de comandos al tratar los valores de los parámetros como cadenas literales.

  Tipo: cadena

  Valores válidos: `ENV_VAR`
Obligatorio: no

**variables**  
(Solo en la versión 0.3 del esquema) Valores a los que puede hacer referencia o actualizar a lo largo de los pasos de un manual de procedimientos de automatización. Las variables son similares a los parámetros, pero difieren de forma muy importante. Los valores de los parámetros son estáticos en el contexto de un manual de procedimientos, pero los valores de las variables se pueden cambiar en el contexto del manual de procedimientos. Al actualizar el valor de una variable, el tipo de datos debe coincidir con el tipo de datos definido. Para obtener información sobre la actualización de los valores de las variables en una automatización, consulte [`aws:updateVariable` — Actualiza el valor de una variable del manual de procedimientos](automation-action-update-variable.md).  
Tipo: Boolean \$1 Integer \$1 MapList \$1 String \$1 StringList \$1 StringMap  
Obligatorio: no  

```
variables:
    payload:
        type: StringMap
        default: "{}"
```

```
{
    "variables": [
        "payload": {
            "type": "StringMap",
            "default": "{}"
        }
    ]
}
```

**runtimeConfig**  
(Versión de esquema 1.2 solamente) La configuración de la instancia aplicada por uno o varios complementos de Systems Manager. No se garantiza que los complementos se ejecuten en secuencia.   
Tipo: diccionario<cadena,PluginConfiguration>  
Obligatorio: no

**mainSteps**  
(Solo versiones de esquema 0.3, 2.0 y 2.2) Un objeto que puede incluir varios pasos (complementos). Los complementos se definen en pasos. Los pasos se ejecutan en orden secuencial según se indica en el documento.   
Tipo: diccionario<cadena,PluginConfiguration>  
Obligatorio: sí

**salidas**  
(Solo versión de esquema 0.3) Datos generados por la ejecución de este documento que puede utilizarse en otros procesos. Por ejemplo, si el documento crea una nueva AMI, puede especificar “CreateImage.ImageId” como valor de salida y, a continuación, utilizar este resultado para crear nuevas instancias en una ejecución de automatización posterior. Para obtener más información acerca de las salidas, consulte [Uso de salidas de acción como entradas](automation-action-outputs-inputs.md).  
Tipo: diccionario<cadena,OutputConfiguration>  
Obligatorio: no

**files**  
(Solo versión de esquema 0.3) Los archivos de script (y sus sumas de comprobación) están asociados al documento y se ejecutan durante una ejecución de automatización. Solo se aplica a los documentos que incluyen la acción `aws:executeScript` y para los que se han especificado datos adjuntos en uno o más pasos.   
Para obtener más información sobre los tiempos de ejecución compatibles con los manuales de procedimientos de Automatización, consulte [`aws:executeScript`: ejecutar un script](automation-action-executeScript.md). Para obtener más información acerca de la inclusión de secuencias de comandos en documentos de Automation, consulte [Uso de scripts en manuales de procedimientos](automation-document-script-considerations.md) y [Experiencia de diseño visual para manuales de procedimientos de automatización](automation-visual-designer.md).  
Cuando se crea un manual de procedimientos de automatización con datos adjuntos, también se deben especificar los archivos de los datos adjuntos mediante la opción `--attachments` (para AWS CLI) o `Attachments` (para API y SDK). Puede especificar la ubicación del archivo para los archivos y los documentos de SSM almacenados en buckets de Amazon Simple Storage Service (Amazon S3). Para obtener más información, consulte [Attachments](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#systemsmanager-CreateDocument-request-Attachments) en la referencia de la API de AWS Systems Manager.  

```
---
files:
  launch.py:
    checksums:
      sha256: 18871b1311b295c43d0f...[truncated]...772da97b67e99d84d342ef4aEXAMPLE
```

```
"files": {
    "launch.py": {
        "checksums": {
            "sha256": "18871b1311b295c43d0f...[truncated]...772da97b67e99d84d342ef4aEXAMPLE"
        }
    }
}
```
Tipo: diccionario<cadena,FilesConfiguration>  
Obligatorio: no

## Ejemplos del parámetro `type` en documentos de SSM
<a name="top-level-properties-type"></a>

Los tipos de parámetros de los documentos de SSM son estáticos. Esto significa que el tipo de parámetro no se puede cambiar después de definirlo. Cuando se utilizan parámetros con complementos de documentos de SSM, el tipo de parámetro no se puede cambiar dinámicamente dentro de la entrada de un complemento. Por ejemplo, no se puede hacer referencia a un parámetro `Integer` dentro de la entrada `runCommand` del complemento `aws:runShellScript` porque esta entrada acepta una cadena o lista de cadenas. Para utilizar un parámetro para una entrada de un complemento, el tipo de parámetro debe coincidir con el tipo aceptado. Por ejemplo, debe especificar un parámetro de tipo `Boolean` para la entrada `allowDowngrade` del complemento `aws:updateSsmAgent`. Si el tipo de parámetro no coincide con el tipo de entrada de un complemento, el documento de SSM no se valida y el sistema no crea el documento. Esto también es cierto cuando se utilizan parámetros posteriores dentro de entradas para otros complementos o acciones de AWS Systems Manager automatización. Por ejemplo, no puede hacer referencia a un parámetro `StringList` dentro de la entrada `documentParameters` del complemento `aws:runDocument`. La entrada `documentParameters` acepta un mapa de cadenas incluso si el tipo de parámetro posterior de documento de SSM es un parámetro `StringList` y coincide con el parámetro al que está haciendo referencia.

Cuando se utilizan parámetros con acciones de Automation, los tipos de parámetros no se validan cuando se crea el documento de SSM en la mayoría de los casos. Solo cuando se utiliza la acción `aws:runCommand` se validan los tipos de parámetros cuando crea el documento de SSM. En todos los demás casos, la validación de parámetros se produce durante la ejecución de la automatización cuando se verifica la entrada de una acción antes de ejecutar la acción. Por ejemplo, si el parámetro de entrada es `String` y hace referencia a él como el valor de la entrada `MaxInstanceCount` de la acción `aws:runInstances`, se crea el documento de SSM. Sin embargo, al ejecutar el documento, la automatización produce un error al validar la acción `aws:runInstances` porque la entrada `MaxInstanceCount` requiere un valor `Integer`.

A continuación, se incluyen ejemplos de cada de parámetro `type`.

Cadena  
Una secuencia de cero o más caracteres Unicode escritos entre comillas. Por ejemplo, "i-1234567890abcdef0". Utilice barras diagonales invertidas para aplicar escape.  
Los parámetros de cadena pueden incluir un campo opcional `interpolationType` con el valor `ENV_VAR` para permitir la interpolación de variables de entorno y mejorar la seguridad.  

```
---
InstanceId:
  type: String
  description: "(Optional) The target EC2 instance ID."
  interpolationType: ENV_VAR
```

```
"InstanceId":{
  "type":"String",
  "description":"(Optional) The target EC2 instance ID.",
  "interpolationType": "ENV_VAR"
}
```

StringList  
Una lista de elementos de cadena separados por comas. Por ejemplo, ["cd \$1", "pwd"].  

```
---
commands:
  type: StringList
  description: "(Required) Specify a shell script or a command to run."
  default: ""
  minItems: 1
  displayType: textarea
```

```
"commands":{
  "type":"StringList",
  "description":"(Required) Specify a shell script or a command to run.",
  "minItems":1,
  "displayType":"textarea"
}
```

Booleano  
Admite solo `true` o `false`. No admite “true” o 0.  

```
---
canRun:
  type: Boolean
  description: ''
  default: true
```

```
"canRun": {
  "type": "Boolean",
  "description": "",
  "default": true
}
```

Entero  
Números enteros. No acepta números decimales, por ejemplo 3,14159 ni números escritos entre comillas, por ejemplo "3".  

```
---
timeout:
  type: Integer
  description: The type of action to perform.
  default: 100
```

```
"timeout": {
  "type": "Integer",
  "description": "The type of action to perform.",
  "default": 100    
}
```

StringMap  
Un mapeo de claves a valores. Las claves y los valores deben ser cadenas. Por ejemplo, \$1"Env": "Prod"\$1.  

```
---
notificationConfig:
  type: StringMap
  description: The configuration for events to be notified about
  default:
    NotificationType: 'Command'
    NotificationEvents:
    - 'Failed'
    NotificationArn: "$dependency.topicArn"
  maxChars: 150
```

```
"notificationConfig" : {
  "type" : "StringMap",
  "description" : "The configuration for events to be notified about",
  "default" : {
    "NotificationType" : "Command",
    "NotificationEvents" : ["Failed"],
    "NotificationArn" : "$dependency.topicArn"
  },
  "maxChars" : 150
}
```

MapList  
Una lista de objetos StringMap.  

```
blockDeviceMappings:
  type: MapList
  description: The mappings for the create image inputs
  default:
  - DeviceName: "/dev/sda1"
    Ebs:
      VolumeSize: "50"
  - DeviceName: "/dev/sdm"
    Ebs:
      VolumeSize: "100"
  maxItems: 2
```

```
"blockDeviceMappings":{
  "type":"MapList",
  "description":"The mappings for the create image inputs",
  "default":[
    {
      "DeviceName":"/dev/sda1",
      "Ebs":{
        "VolumeSize":"50"
      }
    },
    {
      "DeviceName":"/dev/sdm",
      "Ebs":{
        "VolumeSize":"100"
      }
    }
  ],
  "maxItems":2
}
```

## Visualización del contenido del documento de Command de SSM
<a name="viewing-ssm-document-content"></a>

Para tener una vista previa de los parámetros necesarios y opcionales para un documento de AWS Systems Manager (SSM) Command, además de las acciones que ejecuta, puede ver el contenido del documento en la consola de Systems Manager.

**Para ver el contenido del documento de SSM Command**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En el cuadro de búsqueda, seleccione **Tipo de documento** y, a continuación, seleccione **Comando**.

1. Elija el nombre de un documento y, a continuación, la pestaña **Contenido**. 

1. En el campo de contenido, revise los parámetros disponibles y los pasos de acción para el documento.

   Por ejemplo, en la siguiente imagen se muestra que (1) `version` y 2 `allowDowngrade` son parámetros opcionales para el documento `AWS-UpdateSSMAgent` y que la primera acción ejecutada por el documento es (3) `aws:updateSsmAgent`.  
![\[Ver el contenido del documento de SSM en la consola de Systems Manager\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/view-document-content.png)

# Referencia de complementos del documento de comandos
<a name="documents-command-ssm-plugin-reference"></a>

Esta referencia describe los complementos que puede especificar en un documento de tipo de comandos de AWS Systems Manager (SSM). Estos complementos no se pueden utilizar en manuales de procedimientos de Automation, que utilizan acciones de automatización. Para obtener información acerca de las acciones de AWS Systems Manager Automation, consulte [Referencia de acciones de Automatización de Systems Manager](automation-actions.md).

Systems Manager determina las acciones que hay que realizar en una instancia administrada; para ello, lee el contenido de un documento de SSM. Cada documento incluye una sección de ejecución de código. En función de la versión de esquema de su documento, esta sección de ejecución de código puede incluir uno o más complementos o pasos. A efectos de este tema de ayuda, los complementos y los pasos se denominan *complementos*. En esta sección, se incluye información sobre cada uno de los complementos de Systems Manager. Para obtener más información sobre los documentos, incluida la información sobre la creación de documentos y las diferencias entre las versiones de esquema, consulte [Documentos de AWS Systems Manager](documents.md).

En el caso de los complementos que aceptan parámetros de cadena, como `aws:runShellScript` y `aws:runPowerShellScript`, el parámetro `interpolationType` se puede utilizar para mejorar la seguridad al tratar las entradas de los parámetros como cadenas literales en lugar de comandos potencialmente ejecutables. Por ejemplo:

```
{
    "schemaVersion": "2.2",
    "description": "runShellScript with command strings stored as Parameter Store parameter",
    "parameters": {
      "commands": {
        "type": "StringList",
        "description": "(Required) The commands to run on the instance.",
        "default": ["{{ ssm:myShellCommands }}"],
        "interpolationType" : "ENV_VAR"
      }
    },
    //truncated
 }
```

**nota**  
Algunos de los complementos descritos aquí se ejecutan solo en instancias de Windows Server o Linux. Se indican las dependencias de la plataforma para cada complemento.   
Los siguientes complementos de documentos se admiten en instancias Amazon Elastic Compute Cloud (Amazon EC2) para macOS:  
`aws:refreshAssociation`
`aws:runShellScript`
`aws:runPowerShellScript`
`aws:softwareInventory`
`aws:updateSsmAgent`

**Topics**
+ [Entradas compartidas](#shared-inputs)
+ [`aws:applications`](#aws-applications)
+ [`aws:cloudWatch`](#aws-cloudWatch)
+ [`aws:configureDocker`](#aws-configuredocker)
+ [`aws:configurePackage`](#aws-configurepackage)
+ [`aws:domainJoin`](#aws-domainJoin)
+ [`aws:downloadContent`](#aws-downloadContent)
+ [`aws:psModule`](#aws-psModule)
+ [`aws:refreshAssociation`](#aws-refreshassociation)
+ [`aws:runDockerAction`](#aws-rundockeraction)
+ [`aws:runDocument`](#aws-rundocument)
+ [`aws:runPowerShellScript`](#aws-runPowerShellScript)
+ [`aws:runShellScript`](#aws-runShellScript)
+ [`aws:softwareInventory`](#aws-softwareinventory)
+ [`aws:updateAgent`](#aws-updateagent)
+ [`aws:updateSsmAgent`](#aws-updatessmagent)

## Entradas compartidas
<a name="shared-inputs"></a>

Solo con la versión 3.0.502 y las versiones posteriores de SSM Agent, todos los complementos pueden utilizar las siguientes entradas:

**finallyStep**  
El último paso que desea que ejecute el documento. Si esta entrada se define para un paso, tendrá prioridad sobre un valor `exit` especificado en las entradas `onFailure` o `onSuccess`. Para que un paso con esta entrada se ejecute como se espera, el paso debe ser el último definido en los `mainSteps` del documento.  
Tipo: booleano  
Valores válidos: `true` \$1 `false`  
Obligatorio: no

**onFailure**  
Si especifica esta entrada para un complemento con el valor `exit` y el paso falla, el estado del paso refleja el error, y el documento no ejecuta los pasos restantes a menos que se haya definido un `finallyStep`. Si especifica esta entrada para un complemento con el valor `successAndExit` y el paso falla, el estado del paso aparece como realizado correctamente y el documento no ejecuta los pasos restantes a menos que se haya definido un `finallyStep`.  
Tipo: cadena  
Valores válidos: `exit` \$1 `successAndExit`  
Obligatorio: no

**onSuccess**  
Si especifica esta entrada para un complemento y el paso se ejecuta correctamente, el documento no ejecutará los pasos restantes a menos que se haya definido un `finallyStep`.  
Tipo: cadena  
Valores válidos: `exit`  
Obligatorio: no

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: Shared inputs example
parameters:
  customDocumentParameter:
    type: String
    description: Example parameter for a custom Command-type document.
mainSteps:
- action: aws:runDocument
  name: runCustomConfiguration
  inputs:
    documentType: SSMDocument
    documentPath: "yourCustomDocument"
    documentParameters: '"documentParameter":{{customDocumentParameter}}'
    onSuccess: exit
- action: aws:runDocument
  name: ifConfigurationFailure
  inputs:
    documentType: SSMDocument
    documentPath: "yourCustomRepairDocument"
    onFailure: exit
- action: aws:runDocument
  name: finalConfiguration
  inputs:
    documentType: SSMDocument
    documentPath: "yourCustomFinalDocument"
    finallyStep: true
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "Shared inputs example",
   "parameters": {
      "customDocumentParameter": {
         "type": "String",
         "description": "Example parameter for a custom Command-type document."
      }
   },
   "mainSteps":[
      {
         "action": "aws:runDocument",
         "name": "runCustomConfiguration",
         "inputs": {
            "documentType": "SSMDocument",
            "documentPath": "yourCustomDocument",
            "documentParameters": "\"documentParameter\":{{customDocumentParameter}}",
            "onSuccess": "exit"
         }
      },
      {
         "action": "aws:runDocument",
         "name": "ifConfigurationFailure",
         "inputs": {
            "documentType": "SSMDocument",
            "documentPath": "yourCustomRepairDocument",
            "onFailure": "exit"
         }
      },
      {
         "action": "aws:runDocument",
         "name":"finalConfiguration",
         "inputs": {
            "documentType": "SSMDocument",
            "documentPath": "yourCustomFinalDocument",
            "finallyStep": true
         }
      }
   ]
}
```

------

## `aws:applications`
<a name="aws-applications"></a>

Instalar, reparar o desinstalar aplicaciones en una instancia de EC2. Este complemento solo se ejecuta en los sistemas operativos Windows Server.

### Sintaxis
<a name="applications-syntax"></a>

#### Esquema 2.2
<a name="applications-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:applications plugin
parameters:
  source:
    description: "(Required) Source of msi."
    type: String
mainSteps:
- action: aws:applications
  name: example
  inputs:
    action: Install
    source: "{{ source }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion":"2.2",
  "description":"aws:applications",
  "parameters":{
    "source":{
    "description":"(Required) Source of msi.",
    "type":"String"
    }
  },
  "mainSteps":[
    {
      "action":"aws:applications",
      "name":"example",
      "inputs":{
        "action":"Install",
        "source":"{{ source }}"
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="applications-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:applications:
    properties:
    - id: 0.aws:applications
      action: "{{ action }}"
      parameters: "{{ parameters }}"
      source: "{{ source }}"
      sourceHash: "{{ sourceHash }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:applications":{
         "properties":[
            {
               "id":"0.aws:applications",
               "action":"{{ action }}",
               "parameters":"{{ parameters }}",
               "source":"{{ source }}",
               "sourceHash":"{{ sourceHash }}"
            }
         ]
      }
   }
}
```

------

### Propiedades
<a name="applications-properties"></a>

**acción**  
La acción que hay que realizar.  
Tipo: enumeración  
Valores válidos: `Install` \$1 `Repair` \$1 `Uninstall`  
Obligatorio: sí

**parameters**  
Los parámetros para el instalador.  
Tipo: cadena  
Requerido: no

**origen**  
La URL del archivo `.msi` para la aplicación.  
Tipo: cadena  
Obligatorio: sí

**sourceHash**  
Hash SHA256 del archivo `.msi`.  
Tipo: cadena  
Requerido: no

## `aws:cloudWatch`
<a name="aws-cloudWatch"></a>

Exportar datos desde Windows Server a Amazon CloudWatch o los Registros de Amazon CloudWatch y monitorear los datos mediante las métricas de CloudWatch. Este complemento solo se ejecuta en los sistemas operativos Windows Server. Para obtener más información sobre cómo configurar la integración de CloudWatch con Amazon Elastic Compute Cloud (Amazon EC2), consulte [Recopilación de métricas, registros y seguimientos con el agente de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) en la *Guía del usuario de Amazon CloudWatch*.

**importante**  
El agente unificado de CloudWatch ha sustituido a SSM Agent como herramienta para enviar datos de registro a los Registros de Amazon CloudWatch. El complemento aws:cloudWatch del SSM Agent no es compatible. Recomendamos utilizar solo el agente de CloudWatch unificado para sus procesos de recopilación de registros. Para obtener más información, consulte los temas siguientes:  
[Envío de registros de nodos a los Registros de CloudWatch (agente de CloudWatch) unificado](monitoring-cloudwatch-agent.md)
[Migrar la recopilación de registros del nodo de Windows Server al agente de CloudWatch](monitoring-cloudwatch-agent.md#monitoring-cloudwatch-agent-migrate)
[Recopilación de métricas, registros y seguimientos con el agente de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) en la *Guía del usuario de Amazon CloudWatch*.

Puede exportar y monitorizar los siguientes tipos de datos:

**ApplicationEventLog**  
Envía datos de registro de eventos de aplicación a los Registros de CloudWatch.

**CustomLogs**  
Envía cualquier archivo de registro basado en texto a los Registros de Amazon CloudWatch. El complemento de CloudWatch crea una huella digital para archivos de registro. El sistema asocia, a continuación, un desplazamiento de datos con cada huella digital. El complemento carga archivos cuando hay cambios, registra el desplazamiento y asocia el desplazamiento con una huella digital. Este método se utiliza para evitar una situación en la que un usuario activa el complemento, asocia el servicio con un directorio que contiene un gran número de archivos y el sistema carga todos los archivos.  
Tenga en cuenta que si la aplicación trunca o intenta limpiar registros durante el sondeo, cualquier registro especificado para `LogDirectoryPath` pueden perder entradas. Si, por ejemplo, desea limitar el tamaño de los archivos de registro, cree un nuevo archivo de registro cuando se alcance el límite y, a continuación, continúe escribiendo datos en el nuevo archivo.

**ETW**  
Envía datos de Seguimiento de eventos para Windows (ETW) a los Registros de CloudWatch.

**IIS**  
Envía datos de registro de IIS a los Registros de CloudWatch.

**PerformanceCounter**  
Envía contadores de rendimiento de Windows a CloudWatch. Puede seleccionar diferentes categorías para cargar a CloudWatch como métricas. Para cada contador de rendimiento que desee cargar, cree una sección **PerformanceCounter** con un ID único (por ejemplo, "PerformanceCounter2", "PerformanceCounter3", etc.) y configure sus propiedades.  
Si se detiene el SSM Agent de AWS Systems Manager o el complemento de CloudWatch, los datos del contador de rendimiento no se registran en CloudWatch. Este comportamiento es distinto de los registros personalizados o de los registros de eventos de Windows. Estos registros mantienen los datos de contador de rendimiento y los cargan a CloudWatch después de que el SSM Agent o el complemento de CloudWatch estén disponibles.

**SecurityEventLog**  
Envía datos de registro de eventos de seguridad a los Registros de CloudWatch.

**SystemEventLog**  
Envía datos de registro de eventos de sistema a los Registros de CloudWatch.

Puede definir los siguientes destinos para los datos:

**CloudWatch**  
El destino al que se envían los datos de las métricas del contador de rendimiento. Puede añadir más secciones con ID únicos (por ejemplo, "CloudWatch2", "CloudWatch3", etc.) y especificar una región diferente para cada ID nuevo para enviar los mismos datos a diferentes ubicaciones.

**CloudWatchLogs**  
El destino al que se envían los datos de registro. Puede añadir más secciones con ID únicos (por ejemplo, "CloudWatchLogs2", "CloudWatchLogs3", etc.) y especificar una región diferente para cada ID nuevo para enviar los mismos datos a diferentes ubicaciones.

### Sintaxis
<a name="cloudWatch-syntax"></a>

```
"runtimeConfig":{
        "aws:cloudWatch":{
            "settings":{
                "startType":"{{ status }}"
            },
            "properties":"{{ properties }}"
        }
    }
```

### Configuración y propiedades
<a name="cloudWatch-properties"></a>

**AccessKey**  
ID de clave de acceso. Esta propiedad es necesaria a menos que lanzara su instancia utilizando un rol de IAM. Esta propiedad no se puede utilizar con SSM.  
Tipo: cadena  
Requerido: no

**CategoryName**  
La categoría de contador de rendimiento de Performance Monitor.  
Tipo: cadena  
Obligatorio: sí

**CounterName**  
El nombre del contador de rendimiento de Performance Monitor.  
Tipo: cadena  
Obligatorio: sí

**CultureName**  
La configuración regional en la que se registra la marca temporal. Si **CultureName** está en blanco, se usa de forma predeterminada la misma configuración regional que utiliza su instancia de Windows Server.  
Tipo: cadena  
Valores válidos: para obtener una lista de los valores admitidos, consulte el tema [National Language Support (NLS) API Reference [Referencia de la API de compatibilidad con el idioma nacional (NLS)]](https://msdn.microsoft.com/en-us/library/cc233982.aspx) en el sitio web de Microsoft. No se admiten los valores **div**, **div-MV**, **hu** ni **hu-HU**.  
Obligatorio: no

**DimensionName**  
Una dimensión para la métrica de Amazon CloudWatch. Si especifica `DimensionName`, también debe especificar `DimensionValue`. Estos parámetros ofrecen otra vista al enumerar las métricas. Puede utilizar la misma dimensión para varias métricas, lo que le permite ver todas las métricas que pertenezcan a una dimensión concreta.  
Tipo: cadena  
Requerido: no

**DimensionValue**  
Un valor de dimensión para la métrica de Amazon CloudWatch.  
Tipo: cadena  
Requerido: no

**Codificación**  
La codificación del archivo que se va a utilizar (por ejemplo, UTF-8). Utilice el nombre de codificación, no el nombre de visualización.  
Tipo: cadena  
Valores válidos: para obtener una lista de los valores admitidos, consulte [Clase Encoding](https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding?view=net-7.0) en la biblioteca de Microsoft Learn.  
Obligatorio: sí

**Filtro**  
El prefijo de los nombres de registro. Deje en blanco este parámetro para monitorear todos los archivos.  
Tipo: cadena  
Valores válidos: para obtener una lista de los valores admitidos, consulte el tema [Propiedad FileSystemWatcherFilter](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter.aspx) en la biblioteca de MSDN.  
Obligatorio: no

**Flujos**  
Cada tipo de datos que se va a cargar, junto con el destino de los datos (CloudWatch o Registros de CloudWatch). Por ejemplo, para enviar un contador de rendimiento definido bajo `"Id": "PerformanceCounter"` al destino de CloudWatch definido bajo `"Id": "CloudWatch"`, escriba **“PerformanceCounter,CloudWatch”**. Del mismo modo, para enviar el registro personalizado, el registro de ETW y el registro del sistema al destino de los Registros de CloudWatch definido bajo `"Id": "ETW"`, escriba **“(ETW),CloudWatchLogs”**. Además, puede enviar el mismo contador de rendimiento o archivo de registro a más de un destino. Por ejemplo, para enviar el registro de la aplicación a dos destinos diferentes definidos bajo `"Id": "CloudWatchLogs"` y `"Id": "CloudWatchLogs2"`, escriba **"ApplicationEventLog,(CloudWatchLogs, CloudWatchLogs2)"**.  
Tipo: cadena  
Valores válidos (origen): `ApplicationEventLog` \$1 `CustomLogs` \$1 `ETW` \$1 `PerformanceCounter` \$1 `SystemEventLog` \$1 `SecurityEventLog`   
Los valores válidos (destino): `CloudWatch` \$1 `CloudWatchLogs` \$1 `CloudWatch`*n* \$1 `CloudWatchLogs`*n*   
Obligatorio: sí

**FullName**  
El nombre completo del componente.  
Tipo: cadena  
Obligatorio: sí

**Id**  
Identifica el origen o el destino de los datos. Este identificador deberá ser único dentro del archivo de configuración.  
Tipo: cadena  
Obligatorio: sí

**InstanceName**  
El nombre de la instancia del contador de rendimiento. No utilice un asterisco (\$1) para indicar todas las instancias, porque cada componente de contador de rendimiento solo admite una métrica. Puede, sin embargo utilizar **\$1Total**.  
Tipo: cadena  
Obligatorio: sí

**Niveles**  
Tipos de mensajes para enviar a Amazon CloudWatch.  
Tipo: cadena  
Valores válidos:   
+ **1** - solo los mensajes de error cargados.
+ **2** - solo los mensajes de advertencia cargados.
+ **4** - solo los mensajes de información cargados.
Puede agregar valores juntos para incluir más de un tipo de mensaje. Por ejemplo, **3** significa que se incluyen mensajes de error (**1**) y mensajes de advertencia (**2**). El valor **7** significa que se incluyen mensajes de error (**1**), mensajes de advertencia (**2**) y mensajes informativos (**4**).  
Obligatorio: sí  
Los registros de seguridad de Windows deben establecer los niveles en 7.

**LineCount**  
El número de líneas del encabezado para identificar el archivo de registro. Por ejemplo, los archivos de registros de IIS tienen encabezados prácticamente idénticos. Puede especificar **3**, que leería las tres primeras líneas del encabezado del archivo de registro para identificarlo. En los archivos de registro de IIS, la tercera línea es la marca de fecha y hora, que es distinta entre los archivos de registro.  
Tipo: entero  
Obligatorio: no

**LogDirectoryPath**  
Para CustomLogs, escriba la ruta donde se almacenan registros en la instancia de EC2. Para los registros de IIS, la carpeta en la que se almacenan los registros de IIS para un sitio individual (por ejemplo, **C:\$1\$1inetpub\$1\$1logs\$1\$1LogFiles\$1\$1W3SVC*n***). Para los registros de IIS, solo se admite el formato de registro W3C. No se admiten los formatos IIS, NCSA y personalizados.   
Tipo: cadena  
Obligatorio: sí

**LogGroup**  
El nombre de su grupo de registro. Este nombre se muestra en la pantalla **Grupos de registros** en la consola de CloudWatch.  
Tipo: cadena  
Obligatorio: sí

**LogName**  
El nombre del archivo de registro.  

1. Para encontrar el nombre del registro, en Visor de eventos, en el panel de navegación, seleccione **Registros de aplicaciones y servicios**.

1. En la lista de registros, haga clic con el botón derecho en el registro que desea cargar (por ejemplo, `Microsoft` > `Windows` > `Backup` > `Operational`) y, a continuación, seleccione **Crear vista personalizada**.

1. En el cuadro de diálogo **Create Custom View**, seleccione la pestaña **XML**. **LogName** se encuentra en la etiqueta <Select Path=> (por ejemplo, `Microsoft-Windows-Backup`). Copie este texto en el parámetro **LogName**.
Tipo: cadena  
Valores válidos: `Application` \$1 `Security` \$1 `System` \$1 `Microsoft-Windows-WinINet/Analytic`  
Obligatorio: sí

**LogStream**  
El flujo de registros de destino. Si utiliza **\$1instance\$1id\$1**, se utiliza el ID de la instancia predeterminado de esta instancia como el nombre de registro de destino.  
Tipo: cadena  
Valores válidos: `{instance_id}` \$1 `{hostname}` \$1 `{ip_address}`*<log\$1stream\$1name>*  
Si ingresa un nombre de flujo de registro que no existe, los Registros de CloudWatch lo crea automáticamente. Puede utilizar una cadena literal o variables predefinidas (**\$1instance\$1id\$1**, **\$1hostname\$1**, **\$1ip\$1address\$1**), o una combinación de las tres para definir el nombre del flujo de registro.  
El nombre del flujo de registro especificado en este parámetro aparece en la pantalla **Log Groups > Streams for *<YourLogStream>*** en la consola de CloudWatch.  
Obligatorio: sí

**MetricName**  
La métrica de CloudWatch bajo la que desea que se incluyan los datos de rendimiento.  
No utilice caracteres especiales en el nombre. Si lo hace, es posible que la métrica y las alarmas asociadas no funcionen.
Tipo: cadena  
Obligatorio: sí

**NameSpace**  
El espacio de nombres de métrica en el que desea que se escriban los datos de contadores de rendimiento.  
Tipo: cadena  
Obligatorio: sí

**PollInterval**  
¿Cuántos segundos deben transcurrir antes de que se carguen nuevos datos de registro y de contador de rendimiento?  
Tipo: número entero  
Valores válidos: establecer este en 5 o más segundos. Se recomiendan quince segundos (00:00:15).  
Obligatorio: sí

**Región**  
La Región de AWS a la que desea enviar los datos de registro. Aunque puede enviar contadores de rendimiento a una región distinta de la que envía los datos de registro, le recomendamos que ajuste este parámetro a la misma región en la que se ejecuta la instancia.  
Tipo: cadena  
Valores válidos: ID de regiones de las Regiones de AWS compatibles con Systems Manager y los Registros de CloudWatch, como `us-east-2`, `eu-west-1`, y `ap-southeast-1`. Para las listas de Regiones de AWS compatibles con cada servicio, consulte [Puntos de conexión de Registros de Amazon CloudWatch](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html#cwl_region) y [Puntos de conexión de servicio de Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) en la *Referencia general de Amazon Web Services*.   
Obligatorio: sí

**SecretKey**  
Clave de acceso secreta. Esta propiedad es necesaria a menos que lanzara su instancia utilizando un rol de IAM.  
Tipo: cadena  
Requerido: no

**startType**  
Active o desactive CloudWatch en la instancia.  
Tipo: cadena  
Valores válidos: `Enabled` \$1 `Disabled`  
Obligatorio: sí

**TimestampFormat**  
El formato de marca temporal que desea utilizar. Para obtener una lista de los valores admitidos, consulte el tema [Custom Date and Time Format Strings](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx) en la biblioteca de MSDN.  
Tipo: cadena  
Obligatorio: sí

**TimeZoneKind**  
Proporciona información sobre la zona horaria cuando no se incluye ninguna información sobre la zona horaria en la marca temporal del registro. Si este parámetro se deja en blanco y su marca temporal no incluye información sobre la zona horaria, los Registros de CloudWatch utilizan de forma predeterminada la zona horaria local. Se hace caso omiso a este parámetro si la marca temporal ya contiene información sobre la zona horaria.  
Tipo: cadena  
Valores válidos: `Local` \$1 `UTC`  
Obligatorio: no

**Unidad**  
La unidad de medida adecuada para la métrica.  
Tipo: cadena  
Valores válidos: segundos \$1 microsegundos \$1 milisegundos \$1 bytes \$1 kilobytes \$1 megabytes \$1 gigabytes \$1 terabytes \$1 bits \$1 kilobits \$1 megabits \$1 gigabits \$1 terabits \$1 porcentaje \$1 recuento \$1 bytes/segundo \$1 kilobytes/segundo \$1 megabytes/segundo \$1 gigabytes/segundo \$1 terabytes/segundo \$1 bits/segundo \$1 kilobits/segundo \$1 megabits/segundo \$1 gigabits/segundo \$1 terabits/segundo \$1 recuento/segundo o ninguno  
Obligatorio: sí

## `aws:configureDocker`
<a name="aws-configuredocker"></a>

(Versión de esquema 2.0 o posterior) Configure una instancia para trabajar con contenedores y Docker. Este complemento es compatible con la mayoría de las variantes y los sistemas operativos Linux y Windows Server.

### Sintaxis
<a name="configuredocker-syntax"></a>

#### Esquema 2.2
<a name="configuredocker-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:configureDocker
parameters:
  action:
    description: "(Required) The type of action to perform."
    type: String
    default: Install
    allowedValues:
    - Install
    - Uninstall
mainSteps:
- action: aws:configureDocker
  name: configureDocker
  inputs:
    action: "{{ action }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:configureDocker plugin",
  "parameters": {
    "action": {
      "description": "(Required) The type of action to perform.",
      "type": "String",
      "default": "Install",
      "allowedValues": [
        "Install",
        "Uninstall"
      ]
    }
  },
  "mainSteps": [
    {
      "action": "aws:configureDocker",
      "name": "configureDocker",
      "inputs": {
        "action": "{{ action }}"
      }
    }
  ]
}
```

------

### Entradas
<a name="configuredocker-properties"></a>

**acción**  
El tipo de acción que se va a realizar.  
Tipo: enumeración  
Valores válidos: `Install` \$1 `Uninstall`  
Obligatorio: sí

## `aws:configurePackage`
<a name="aws-configurepackage"></a>

(Versión de esquema 2.0 o posterior) Instale o desinstale un paquete Distributor de AWS Systems Manager. Puede instalar la versión más reciente, la versión predeterminada o una versión del paquete que especifique. Los paquetes proporcionados por AWS también son compatibles. Este complemento se ejecuta en los sistemas operativos Windows Server y Linux, pero no todos los paquetes disponibles se admiten en sistemas operativos Linux.

Los paquetes de AWS disponibles para Windows Server, incluyen lo siguiente: `AWSPVDriver`, `AWSNVMe`, `AwsEnaNetworkDriver`, `AwsVssComponents`, `AmazonCloudWatchAgent`, `CodeDeployAgent`, y `AWSSupport-EC2Rescue.`

Los paquetes AWS disponibles para los sistemas operativos Linux incluyen los siguientes: `AmazonCloudWatchAgent`, `CodeDeployAgent`, y `AWSSupport-EC2Rescue`.

### Sintaxis
<a name="configurepackage-syntax"></a>

#### Esquema 2.2
<a name="configurepackage-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:configurePackage
parameters:
  name:
    description: "(Required) The name of the AWS package to install or uninstall."
    type: String
  action:
    description: "(Required) The type of action to perform."
    type: String
    default: Install
    allowedValues:
    - Install
    - Uninstall
  ssmParameter:
    description: "(Required) Argument stored in Parameter Store."
    type: String
    default: "{{ ssm:parameter_store_arg }}"
mainSteps:
- action: aws:configurePackage
  name: configurePackage
  inputs:
    name: "{{ name }}"
    action: "{{ action }}"
    additionalArguments: 
      "{\"SSM_parameter_store_arg\": \"{{ ssmParameter }}\", \"SSM_custom_arg\": \"myValue\"}"
```

------
#### [ JSON ]

```
{
   "schemaVersion": "2.2",
   "description": "aws:configurePackage",
   "parameters": {
      "name": {
         "description": "(Required) The name of the AWS package to install or uninstall.",
         "type": "String"
      },
      "action": {
         "description": "(Required) The type of action to perform.",
         "type": "String",
         "default": "Install",
         "allowedValues": [
            "Install",
            "Uninstall"
         ]
      },
      "ssmParameter": {
         "description": "(Required) Argument stored in Parameter Store.",
         "type": "String",
         "default": "{{ ssm:parameter_store_arg }}"
      }
   },
   "mainSteps": [
      {
         "action": "aws:configurePackage",
         "name": "configurePackage",
         "inputs": {
            "name": "{{ name }}",
            "action": "{{ action }}",
            "additionalArguments": "{\"SSM_parameter_store_arg\": \"{{ ssmParameter }}\", \"SSM_custom_arg\": \"myValue\"}"
         }
      }
   ]
}
```

------

### Entradas
<a name="configurepackage-properties"></a>

**name**  
El nombre del paquete de AWS que se va a instalar o desinstalar. Los paquetes disponible incluyen lo siguiente: `AWSPVDriver`, `AwsEnaNetworkDriver`, `AwsVssComponents`, y `AmazonCloudWatchAgent`.  
Tipo: cadena  
Obligatorio: sí

**acción**  
Instalar o desinstalar un paquete.  
Tipo: enumeración  
Valores válidos: `Install` \$1 `Uninstall`  
Obligatorio: sí

**installationType**  
El tipo de instalación que se va a realizar. Si especifica `Uninstall and reinstall`, el paquete se desinstala por completo y, a continuación, se vuelve a instalar. La aplicación no estará disponible hasta que se complete la reinstalación. Si especifica `In-place update`, solo se agregan archivos nuevos o modificados a la instalación existente según las instrucciones que proporcione en un script de actualización. La aplicación permanece disponible durante todo el proceso de actualización. La opción `In-place update` no es compatible con paquetes publicados de AWS. `Uninstall and reinstall` es el valor predeterminado.  
Tipo: enumeración  
Valores válidos: `Uninstall and reinstall` \$1 `In-place update`  
Obligatorio: no

**additionalArguments**  
Una cadena JSON con los parámetros adicionales que se deben proporcionar a los scripts de instalación, desinstalación o actualización. Cada parámetro debe tener el prefijo `SSM_`. Puede hacer referencia a un parámetro Parameter Store en sus argumentos adicionales mediante el uso de la convención `{{ssm:parameter-name}}`. Para utilizar el parámetro adicional en el script de instalación, desinstalación o actualización, debe hacer referencia al parámetro como una variable de entorno utilizando la sintaxis adecuada para el sistema operativo. Por ejemplo, en PowerShell, se hace referencia al argumento `SSM_arg` como `$Env:SSM_arg`. No hay límite en el número de argumentos que define, pero la entrada de argumento adicional tiene un límite de 4096 caracteres. Este límite incluye todas las claves y los valores que defina.  
Tipo: StringMap  
Obligatorio: no

**versión**  
Una versión específica del paquete que se va a instalar o desinstalar. Si se va a instalar, el sistema instala la versión más reciente publicada, de forma predeterminada. Si se va a desinstalar, el sistema desinstala la versión instalada, de forma predeterminada. Si no se encuentra ninguna versión instalada, se descarga la versión más reciente publicada y se ejecuta la acción de desintalación.  
Tipo: cadena  
Requerido: no

## `aws:domainJoin`
<a name="aws-domainJoin"></a>

Unir una instancia de EC2 a un dominio. Este complemento se ejecuta en los sistemas operativos Linux y Windows Server. Este complemento cambia el nombre de host de las instancias de Linux al formato EC2AMAZ-*XXXXXXX*. Para obtener más información acerca de cómo unir instancias de EC2, consulte [Cómo unir una instancia de EC2 al Directorio de Microsoft AD administrado de AWS](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_join_instance.html) en la *Guía de administración de AWS Directory Service*.

### Sintaxis
<a name="domainJoin-syntax"></a>

#### Esquema 2.2
<a name="domainJoin-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:domainJoin
parameters:
  directoryId:
    description: "(Required) The ID of the directory."
    type: String
  directoryName:
    description: "(Required) The name of the domain."
    type: String
  directoryOU:
    description: "(Optional) The organizational unit to assign the computer object to."
    type: String
  dnsIpAddresses:
    description: "(Required) The IP addresses of the DNS servers for your directory."
    type: StringList
  hostname:
    description: "(Optional) The hostname you want to assign to the node."
    type: String
mainSteps:
- action: aws:domainJoin
  name: domainJoin
  inputs:
    directoryId: "{{ directoryId }}"
    directoryName: "{{ directoryName }}"
    directoryOU: "{{ directoryOU }}"
    dnsIpAddresses: "{{ dnsIpAddresses }}"
    hostname: "{{ hostname }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:domainJoin",
  "parameters": {
    "directoryId": {
      "description": "(Required) The ID of the directory.",
      "type": "String"
    },
    "directoryName": {
      "description": "(Required) The name of the domain.",
      "type": "String"
    },
    "directoryOU": {
        "description": "(Optional) The organizational unit to assign the computer object to.",
        "type": "String"
      },
    "dnsIpAddresses": {
      "description": "(Required) The IP addresses of the DNS servers for your directory.",
      "type": "StringList"
    },
    "hostname": {
        "description": "(Optional) The hostname you want to assign to the node.",
        "type": "String"
      }
  },
  "mainSteps": [
    {
      "action": "aws:domainJoin",
      "name": "domainJoin",
      "inputs": {
        "directoryId": "{{ directoryId }}",
        "directoryName": "{{ directoryName }}",
        "directoryOU":"{{ directoryOU }}",
        "dnsIpAddresses":"{{ dnsIpAddresses }}",
        "hostname":"{{ hostname }}"
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="domainJoin-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:domainJoin:
    properties:
      directoryId: "{{ directoryId }}"
      directoryName: "{{ directoryName }}"
      directoryOU: "{{ directoryOU }}"
      dnsIpAddresses: "{{ dnsIpAddresses }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:domainJoin":{
         "properties":{
            "directoryId":"{{ directoryId }}",
            "directoryName":"{{ directoryName }}",
            "directoryOU":"{{ directoryOU }}",
            "dnsIpAddresses":"{{ dnsIpAddresses }}"
         }
      }
   }
}
```

------

### Propiedades
<a name="domainJoin-properties"></a>

**directoryId**  
El ID del directorio.  
Tipo: cadena  
Obligatorio: sí  
Ejemplo: "directoryId": "d-1234567890"

**directoryName**  
El nombre del dominio.  
Tipo: cadena  
Obligatorio: sí  
Ejemplo: "directoryName": "example.com"

**directoryOU**  
La unidad organizativa.  
Tipo: cadena  
Requerido: no  
Ejemplo: "directoryOU": "OU=test,DC=example,DC=com"

**dnsIpAddresses**  
Las direcciones IP de los servidores DNS.  
Tipo: StringList  
Obligatorio: sí  
Ejemplo: "dnsIpAddresses": ["198.51.100.1"," 198.51.100.2"]

**hostname**  
El nombre de host que desea asignar al nodo. Si no se proporciona, no se cambiará el nombre de las instancias de Windows Server, mientras que las instancias de Linux utilizarán el patrón de nomenclatura predeterminado. Si se proporciona, las instancias de Windows Server usarán el valor exacto proporcionado, mientras que, para las instancias de Linux, este servirá como prefijo (a menos que `keepHostName` se establezca como “true”).  
Tipo: cadena  
Requerido: no

**keepHostName**  
Determina si se cambia el nombre de host de las instancias de Linux cuando se unen al dominio. Este es un parámetro exclusivo de Linux. Los nombres de los hosts de Linux se cambiarán de forma predeterminada (sin entradas para `hostname`, `hostnameNumAppendDigits` y con `keepHostName` como “false”) siguiendo el patrón EC2AMAZ-XXXXXX. Cuando se establece como “true”, mantiene el nombre de host original e ignora las entradas para `hostname` y `hostnameNumAppendDigits`.  
Tipo: Booleano  
Obligatorio: no

**hostnameNumAppendDigits**  
Define el número de dígitos numéricos aleatorios que se añadirán después del valor del nombre de host. Este es un parámetro exclusivo de Linux y se utiliza junto con el parámetro `hostname`. Se ignora si no se proporciona el `hostname`.  
Tipo: cadena  
Valores permitidos: de 1 a 5  
Obligatorio: no

### Ejemplos
<a name="domainJoin-examples"></a>

Para ver ejemplos, consulte [Join an Amazon EC2 Instance to your AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ec2-join-aws-domain.html) en la *Guía de administración de AWS Directory Service*.

## `aws:downloadContent`
<a name="aws-downloadContent"></a>

(Versión de esquema 2.0 o posterior) Descargue documentos y scripts de SSM de ubicaciones remotas. Los repositorios GitHub Enterprise no son compatibles. Este complemento es compatible con los sistemas operativos Linux y Microsoft Windows Server.

### Sintaxis
<a name="downloadContent-syntax"></a>

#### Esquema 2.2
<a name="downloadContent-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:downloadContent
parameters:
  sourceType:
    description: "(Required) The download source."
    type: String
  sourceInfo:
    description: "(Required) The information required to retrieve the content from
      the required source."
    type: StringMap
mainSteps:
- action: aws:downloadContent
  name: downloadContent
  inputs:
    sourceType: "{{ sourceType }}"
    sourceInfo: "{{ sourceInfo }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:downloadContent",
  "parameters": {
    "sourceType": {
    "description": "(Required) The download source.",
    "type": "String"
  },
  "sourceInfo": {
    "description": "(Required) The information required to retrieve the content from the required source.",
    "type": "StringMap"
    }
  },
  "mainSteps": [
    {
      "action": "aws:downloadContent",
      "name": "downloadContent",
      "inputs": {
        "sourceType":"{{ sourceType }}",
        "sourceInfo":"{{ sourceInfo }}"
      }
    }
  ]
}
```

------

### Entradas
<a name="downloadContent-inputs"></a>

**sourceType**  
La fuente de descarga. Systems Manager admite los siguientes tipos de fuente para la descarga de scripts y documentos de SSM: `GitHub`, `Git`, `HTTP`, `S3`, y `SSMDocument`.  
Tipo: cadena  
Obligatorio: sí

**sourceInfo**  
La información necesaria para recuperar el contenido del origen necesario.  
Tipo: StringMap  
Obligatorio: sí  
 **Para sourceType `GitHub,`, especifique lo siguiente:**   
+ propietario: el propietario del repositorio.
+ repositorio: el nombre del repositorio.
+ ruta: la ruta del archivo o directorio que desea descargar.
+ getOptions: opciones adicionales para recuperar contenido de una rama que no sea maestra o de una confirmación específica en el repositorio. getOptions se pueden omitir si está utilizando la última confirmación en la rama maestra. Si su repositorio se creó después del 1 de octubre de 2020, la rama predeterminada podría llamarse principal en lugar de maestra. En este caso, deberá especificar valores para el parámetro getOptions.

  Este parámetro utiliza el siguiente formato:
  + branch:refs/heads/*branch\$1name*

    El valor predeterminado es `master`.

    Para especificar una ramificación no predeterminada, utilice el siguiente formato:

    branch:refs/heads/*branch\$1name*
  + commitID:*commitID*

    El valor predeterminado es `head`.

    Para utilizar la versión del documento SSM en una confirmación que no sea la última, especifique el ID de confirmación completo. Por ejemplo:

    ```
    "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
    ```
+ tokenInfo: el parámetro de Systems Manager (un parámetro SecureString) donde almacena su información del token de acceso GitHub, en el formato `{{ssm-secure:secure-string-token-name}}`.
**nota**  
Este campo `tokenInfo` es el único campo del complemento de documentos de SSM que admite un parámetro SecureString. Los parámetros SecureString no se admiten para ningún otro campo ni para ningún otro complemento de documentos de SSM.

```
{
    "owner":"TestUser",
    "repository":"GitHubTest",
    "path":"scripts/python/test-script",
    "getOptions":"branch:master",
    "tokenInfo":"{{ssm-secure:secure-string-token}}"
}
```
 **Para sourceType `Git`, debe especificar lo siguiente:**   
+ repositorio

  La URL del repositorio de Git al archivo o directorio que desea descargar.

  Tipo: cadena
Además, puede especificar los siguientes parámetros opcionales:  
+ getOptions

  Opciones adicionales para recuperar contenido de una rama que no sea maestra o de una confirmación específica en el repositorio. getOptions se pueden omitir si está utilizando la última confirmación en la rama maestra.

  Tipo: cadena

  Este parámetro utiliza el siguiente formato:
  + branch:refs/heads/*branch\$1name*

    El valor predeterminado es `master`.

    `"branch"` Solo se requiere si el documento SSM se almacena en una sucursal que no sea `master`. Por ejemplo:

    ```
    "getOptions": "branch:refs/heads/main"
    ```
  + commitID:*commitID*

    El valor predeterminado es `head`.

    Para utilizar la versión del documento SSM en una confirmación que no sea la última, especifique el ID de confirmación completo. Por ejemplo:

    ```
    "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
    ```
+ privateSSHKey

  La clave SSH que se utilizará cuando se conecte al `repository` que especifique. Puede utilizar el siguiente formato para hacer referencia a un parámetro `SecureString` para el valor de su clave SSH: `{{ssm-secure:your-secure-string-parameter}}`.

  Tipo: cadena
+ skipHostKeyChecking

  Determina el valor de la opción StrictHostKeyChecking cuando se conecta al `repository` que especifique. El valor predeterminado es `false`.

  Tipo: booleano
+ nombre de usuario

  El nombre de usuario que se utilizará cuando se conecte al `repository` que especifique mediante HTTP. Puede utilizar el siguiente formato para hacer referencia a un parámetro `SecureString` para el valor de su nombre de usuario: `{{ssm-secure:your-secure-string-parameter}}`.

  Tipo: cadena
+ contraseña

  La contraseña que se utilizará cuando se conecte al `repository` que especifique mediante HTTP. Puede utilizar el siguiente formato para hacer referencia a un parámetro `SecureString` para el valor de su contraseña: `{{ssm-secure:your-secure-string-parameter}}`.

  Tipo: cadena
 **Para sourceType `HTTP`, debe especificar lo siguiente:**   
+ url

  La URL al archivo o directorio que desea descargar.

  Tipo: cadena
Además, puede especificar los siguientes parámetros opcionales:  
+ allowInsecureDownload

  Determina si una descarga se puede realizar a través de una conexión que no está cifrada con Capa de conexión segura (SSL) o Transport Layer Security (TLS). El valor predeterminado es `false`. No le recomendamos realizar descargas sin cifrado. Si decide hacerlo, deberá asumir todos los riesgos asociados. La seguridad es una responsabilidad compartida entre AWS y usted. Se describe como el modelo de responsabilidad compartida. Para obtener más información, consulte el [Modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/).

  Tipo: booleano
+ authMethod

  Determina si un nombre de usuario y una contraseña se utilizan para la autenticación cuando se conecta a la `url` que especifique. Si especifica `Basic` o `Digest`, debe proporcionar valores para los parámetros `username` y `password`. Para utilizar el método `Digest`, el SSM Agent versión 3.0.1181.0 o posterior debe estar instalada en la instancia. El método `Digest` admite el cifrado MD5 y SHA256.

  Tipo: cadena

  Valores válidos: `None` \$1 `Basic` \$1 `Digest`
+ nombre de usuario

  El nombre de usuario que se utilizará cuando se conecte al `url` que especifique mediante autenticación `Basic`. Puede utilizar el siguiente formato para hacer referencia a un parámetro `SecureString` para el valor de su nombre de usuario: `{{ssm-secure:your-secure-string-parameter}}`.

  Tipo: cadena
+ contraseña

  La contraseña que se utilizará cuando se conecte al `url` que especifique mediante autenticación `Basic`. Puede utilizar el siguiente formato para hacer referencia a un parámetro `SecureString` para el valor de su contraseña: `{{ssm-secure:your-secure-string-parameter}}`.

  Tipo: cadena
 **Para sourceType `S3`, especifique lo siguiente:**   
+ path: la URL al archivo o directorio que desea descargar de Amazon S3.
Cuando se descarga un archivo de un bucket de S3, se generan los archivos .etag en el directorio de descargas.

```
{
    "path": "https://s3.amazonaws.com/amzn-s3-demo-bucket/powershell/helloPowershell.ps1" 
}
```
 **Para sourceType `SSMDocument`, especifique *uno* de los siguientes:**   
+ nombre: el nombre y la versión del documento en el siguiente formato: `name:version`. La versión es opcional. 

  ```
  {
      "name": "Example-RunPowerShellScript:3" 
  }
  ```
+ name: el ARN del documento en el siguiente formato: `arn:aws:ssm:region:account_id:document/document_name`

  ```
  {
     "name":"arn:aws:ssm:us-east-2:3344556677:document/MySharedDoc"
  }
  ```

**destinationPath**  
Una ruta local opcional en la instancia en la que se desea descargar el archivo. Si no se especifica una ruta, el contenido se descarga en una ruta relativa al ID de comando.  
Tipo: cadena  
Requerido: no

## `aws:psModule`
<a name="aws-psModule"></a>

Instalar módulos de PowerShell en una instancia Amazon EC2. Este complemento solo se ejecuta en los sistemas operativos Windows Server.

### Sintaxis
<a name="psModule-syntax"></a>

#### Esquema 2.2
<a name="psModule-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:psModule
parameters:
  source:
    description: "(Required) The URL or local path on the instance to the application
      .zip file."
    type: String
mainSteps:
- action: aws:psModule
  name: psModule
  inputs:
    source: "{{ source }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:psModule",
  "parameters": {
    "source": {
      "description": "(Required) The URL or local path on the instance to the application .zip file.",
      "type": "String"
    }
  },
  "mainSteps": [
    {
      "action": "aws:psModule",
      "name": "psModule",
      "inputs": {
        "source": "{{ source }}"
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="domainJoin-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:psModule:
    properties:
    - runCommand: "{{ commands }}"
      source: "{{ source }}"
      sourceHash: "{{ sourceHash }}"
      workingDirectory: "{{ workingDirectory }}"
      timeoutSeconds: "{{ executionTimeout }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:psModule":{
         "properties":[
            {
               "runCommand":"{{ commands }}",
               "source":"{{ source }}",
               "sourceHash":"{{ sourceHash }}",
               "workingDirectory":"{{ workingDirectory }}",
               "timeoutSeconds":"{{ executionTimeout }}"
            }
         ]
      }
   }
}
```

------

### Propiedades
<a name="psModule-properties"></a>

**runCommand**  
El comando de PowerShell que se va a ejecutar tras la instalación del módulo.  
Tipo: StringList  
Obligatorio: no

**origen**  
La dirección URL o ruta local en la instancia al archivo `.zip` de la aplicación.  
Tipo: cadena  
Obligatorio: sí

**sourceHash**  
Hash SHA256 del archivo `.zip`.  
Tipo: cadena  
Requerido: no

**timeoutSeconds**  
El tiempo en segundos para que un comando se complete antes de considerar que se ha producido un error.  
Tipo: cadena  
Requerido: no

**workingDirectory**  
La ruta al directorio de trabajo en la instancia.  
Tipo: cadena  
Requerido: no

## `aws:refreshAssociation`
<a name="aws-refreshassociation"></a>

(Versión de esquema 2.0 o posterior) Actualice (fuerce aplicación) una asociación bajo demanda. Esta acción cambiará el estado del sistema en función de lo que se define en la asociación seleccionada o todas las asociaciones vinculadas a los destinos. Este complemento se ejecuta en los sistemas operativos Linux y Microsoft Windows Server.

### Sintaxis
<a name="refreshassociation-syntax"></a>

#### Esquema 2.2
<a name="refreshassociation-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:refreshAssociation
parameters:
  associationIds:
    description: "(Optional) List of association IDs. If empty, all associations bound
      to the specified target are applied."
    type: StringList
mainSteps:
- action: aws:refreshAssociation
  name: refreshAssociation
  inputs:
    associationIds:
    - "{{ associationIds }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:refreshAssociation",
  "parameters": {
    "associationIds": {
      "description": "(Optional) List of association IDs. If empty, all associations bound to the specified target are applied.",
      "type": "StringList"
    }
  },
  "mainSteps": [
    {
      "action": "aws:refreshAssociation",
      "name": "refreshAssociation",
      "inputs": {
        "associationIds": [
          "{{ associationIds }}"
        ]
      }
    }
  ]
}
```

------

### Entradas
<a name="refreshassociation-properties"></a>

**associationIds**  
Lista de ID de asociación. Si está vacía, se aplican todas las asociaciones vinculadas al destino especificado.  
Tipo: StringList  
Obligatorio: no

## `aws:runDockerAction`
<a name="aws-rundockeraction"></a>

(Versión de esquema 2.0 o posterior) Ejecute acciones de Docker en contenedores. Este complemento se ejecuta en los sistemas operativos Linux y Microsoft Windows Server.

### Sintaxis
<a name="rundockeraction-syntax"></a>

#### Esquema 2.2
<a name="rundockeraction-syntax-2.2"></a>

------
#### [ YAML ]

```
---
mainSteps:
- action: aws:runDockerAction
  name: RunDockerAction
  inputs:
    action: "{{ action }}"
    container: "{{ container }}"
    image: "{{ image }}"
    memory: "{{ memory }}"
    cpuShares: "{{ cpuShares }}"
    volume: "{{ volume }}"
    cmd: "{{ cmd }}"
    env: "{{ env }}"
    user: "{{ user }}"
    publish: "{{ publish }}"
    workingDirectory: "{{ workingDirectory }}"
    timeoutSeconds: "{{ timeoutSeconds }}"
```

------
#### [ JSON ]

```
{
   "mainSteps":[
      {
         "action":"aws:runDockerAction",
         "name":"RunDockerAction",
         "inputs":{
            "action":"{{ action }}",
            "container":"{{ container }}",
            "image":"{{ image }}",
            "memory":"{{ memory }}",
            "cpuShares":"{{ cpuShares }}",
            "volume":"{{ volume }}",
            "cmd":"{{ cmd }}",
            "env":"{{ env }}",
            "user":"{{ user }}",
            "publish":"{{ publish }}",
            "workingDirectory": "{{ workingDirectory }}",
            "timeoutSeconds": "{{ timeoutSeconds }}"
         }
      }
   ]
}
```

------

### Entradas
<a name="rundockeraction-properties"></a>

**acción**  
El tipo de acción que se va a realizar.  
Tipo: cadena  
Obligatorio: sí

**contenedor**  
El ID del contenedor de Docker.  
Tipo: cadena  
Requerido: no

**imagen**  
El nombre de la imagen de Docker.  
Tipo: cadena  
Requerido: no

**cmd**  
El comando del contenedor.  
Tipo: cadena  
Requerido: no

**memoria**  
El límite de memoria del contenedor.  
Tipo: cadena  
Requerido: no

**cpuShares**  
El contenedor que comparte la CPU (peso relativo).  
Tipo: cadena  
Requerido: no

**volume**  
El volumen que el contenedor monta.  
Tipo: StringList  
Obligatorio: no

**env**  
Las variables del entorno del contenedor.  
Tipo: cadena  
Requerido: no

**usuario**  
El nombre de usuario de un contenedor.  
Tipo: cadena  
Requerido: no

**publish**  
Los puertos publicados del contenedor.  
Tipo: cadena  
Requerido: no

**workingDirectory**  
La ruta al directorio de trabajo en el nodo administrado.  
Tipo: cadena  
Requerido: no

**timeoutSeconds**  
El tiempo en segundos para que un comando se complete antes de considerar que se ha producido un error.  
Tipo: cadena  
Requerido: no

## `aws:runDocument`
<a name="aws-rundocument"></a>

(Versión de esquema 2.0 o posterior) Ejecuta documentos de SSM almacenados en Systems Manager o en un recurso compartido local. Puede utilizar este complemento con el complemento [`aws:downloadContent`](#aws-downloadContent) para descargar un documento de SSM a un recurso compartido local y, a continuación, ejecutarlo. Este complemento es compatible con los sistemas operativos Linux y Microsoft Windows Server. Este complemento no admite la ejecución del documento `AWS-UpdateSSMAgent` o cualquier documento que utilice el complemento `aws:updateSsmAgent`.

### Sintaxis
<a name="rundocument-syntax"></a>

#### Esquema 2.2
<a name="aws-rundocument-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:runDocument
parameters:
  documentType:
    description: "(Required) The document type to run."
    type: String
    allowedValues:
    - LocalPath
    - SSMDocument
mainSteps:
- action: aws:runDocument
  name: runDocument
  inputs:
    documentType: "{{ documentType }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:runDocument",
  "parameters": {
    "documentType": {
      "description": "(Required) The document type to run.",
      "type": "String",
      "allowedValues": [
        "LocalPath",
        "SSMDocument"
      ]
    }
  },
  "mainSteps": [
    {
      "action": "aws:runDocument",
      "name": "runDocument",
      "inputs": {
        "documentType": "{{ documentType }}"
      }
    }
  ]
}
```

------

### Entradas
<a name="rundocument-properties"></a>

**documentType**  
El tipo de documento que se va a ejecutar. Puede ejecutar documentos locales (`LocalPath`) o documentos almacenados en Systems Manager (`SSMDocument`).  
Tipo: cadena  
Obligatorio: sí

**documentPath**  
La ruta al documento. Si `documentType` es `LocalPath`, entonces especifique la ruta al documento en el recurso compartido local. Si `documentType` es `SSMDocument`, entonces especifique el nombre del documento.  
Tipo: cadena  
Requerido: no

**documentParameters**  
Parámetros para el documento.  
Tipo: StringMap  
Obligatorio: no

## `aws:runPowerShellScript`
<a name="aws-runPowerShellScript"></a>

Ejecute scripts de PowerShell o especifique la ruta a un script para su ejecución. Este complemento se ejecuta en los sistemas operativos Microsoft Windows Server y Linux.

### Sintaxis
<a name="runPowerShellScript-syntax"></a>

#### Esquema 2.2
<a name="runPowerShellScript-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:runPowerShellScript
parameters:
  commands:
    type: String
    description: "(Required) The commands to run or the path to an existing script
      on the instance."
    default: Write-Host "Hello World"
mainSteps:
- action: aws:runPowerShellScript
  name: runPowerShellScript
  inputs:
    timeoutSeconds: '60'
    runCommand:
    - "{{ commands }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:runPowerShellScript",
  "parameters": {
    "commands": {
      "type": "String",
      "description": "(Required) The commands to run or the path to an existing script on the instance.",
      "default": "Write-Host \"Hello World\""
    }
  },
  "mainSteps": [
    {
      "action": "aws:runPowerShellScript",
      "name": "runPowerShellScript",
      "inputs": {
        "timeoutSeconds": "60",
        "runCommand": [
          "{{ commands }}"
        ]
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="runPowerShellScript-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:runPowerShellScript:
    properties:
    - id: 0.aws:runPowerShellScript
      runCommand: "{{ commands }}"
      workingDirectory: "{{ workingDirectory }}"
      timeoutSeconds: "{{ executionTimeout }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:runPowerShellScript":{
         "properties":[
            {
               "id":"0.aws:runPowerShellScript",
               "runCommand":"{{ commands }}",
               "workingDirectory":"{{ workingDirectory }}",
               "timeoutSeconds":"{{ executionTimeout }}"
            }
         ]
      }
   }
}
```

------

### Propiedades
<a name="runPowerShellScript-properties"></a>

**runCommand**  
Especifique los comandos que se deben ejecutar o la ruta a un script existente en la instancia.  
Tipo: StringList  
Obligatorio: sí

**timeoutSeconds**  
El tiempo en segundos para que un comando se complete antes de considerar que se ha producido un error. Cuando se alcanza el tiempo de espera, Systems Manager detiene la ejecución del comando.  
Tipo: cadena  
Requerido: no

**workingDirectory**  
La ruta al directorio de trabajo en la instancia.  
Tipo: cadena  
Requerido: no

## `aws:runShellScript`
<a name="aws-runShellScript"></a>

Ejecute scripts de shell de Linux o especifique la ruta a un script para su ejecución. Este complemento solo se ejecuta en los sistemas operativos Linux.

### Sintaxis
<a name="runShellScript-syntax"></a>

#### Esquema 2.2
<a name="runShellScript-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:runShellScript
parameters:
  commands:
    type: String
    description: "(Required) The commands to run or the path to an existing script
      on the instance."
    default: echo Hello World
mainSteps:
- action: aws:runShellScript
  name: runShellScript
  inputs:
    timeoutSeconds: '60'
    runCommand:
    - "{{ commands }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:runShellScript",
  "parameters": {
    "commands": {
      "type": "String",
      "description": "(Required) The commands to run or the path to an existing script on the instance.",
      "default": "echo Hello World"
    }
  },
  "mainSteps": [
    {
      "action": "aws:runShellScript",
      "name": "runShellScript",
      "inputs": {
        "timeoutSeconds": "60",
        "runCommand": [
          "{{ commands }}"
        ]
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="runShellScript-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:runShellScript:
    properties:
    - runCommand: "{{ commands }}"
      workingDirectory: "{{ workingDirectory }}"
      timeoutSeconds: "{{ executionTimeout }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:runShellScript":{
         "properties":[
            {
               "runCommand":"{{ commands }}",
               "workingDirectory":"{{ workingDirectory }}",
               "timeoutSeconds":"{{ executionTimeout }}"
            }
         ]
      }
   }
}
```

------

### Propiedades
<a name="runShellScript-properties"></a>

**runCommand**  
Especifique los comandos que se deben ejecutar o la ruta a un script existente en la instancia.  
Tipo: StringList  
Obligatorio: sí

**timeoutSeconds**  
El tiempo en segundos para que un comando se complete antes de considerar que se ha producido un error. Cuando se alcanza el tiempo de espera, Systems Manager detiene la ejecución del comando.  
Tipo: cadena  
Requerido: no

**workingDirectory**  
La ruta al directorio de trabajo en la instancia.  
Tipo: cadena  
Requerido: no

## `aws:softwareInventory`
<a name="aws-softwareinventory"></a>

(Versión de esquema 2.0 o posterior) Recopilar metadatos de aplicaciones, archivos y configuraciones de sus instancias administradas. Este complemento se ejecuta en los sistemas operativos Linux y Microsoft Windows Server. Cuando configure la recopilación de inventario, comience por crear una asociación de AWS Systems Manager State Manager. Systems Manager recopila los datos de inventario cuando se ejecuta la asociación. Si no crea la asociación en primer lugar e intenta invocar el complemento `aws:softwareInventory`, el sistema devolverá el siguiente error:

```
The aws:softwareInventory plugin can only be invoked via ssm-associate.
```

Una instancia solo puede tener una única asociación a inventario configurada a la vez. Si configura una instancia con dos o más asociaciones, la asociación de inventario no funciona y no se recopilan los datos de inventario. Para obtener más información acerca de la recopilación de inventario, consulte [Inventario de AWS Systems Manager](systems-manager-inventory.md).

### Sintaxis
<a name="softwareinventory-syntax"></a>

#### Esquema 2.2
<a name="softwareinventory-syntax-2.2"></a>

------
#### [ YAML ]

```
---
mainSteps:
- action: aws:softwareInventory
  name: collectSoftwareInventoryItems
  inputs:
    applications: "{{ applications }}"
    awsComponents: "{{ awsComponents }}"
    networkConfig: "{{ networkConfig }}"
    files: "{{ files }}"
    services: "{{ services }}"
    windowsRoles: "{{ windowsRoles }}"
    windowsRegistry: "{{ windowsRegistry}}"
    windowsUpdates: "{{ windowsUpdates }}"
    instanceDetailedInformation: "{{ instanceDetailedInformation }}"
    customInventory: "{{ customInventory }}"
```

------
#### [ JSON ]

```
{
   "mainSteps":[
      {
         "action":"aws:softwareInventory",
         "name":"collectSoftwareInventoryItems",
         "inputs":{
            "applications":"{{ applications }}",
            "awsComponents":"{{ awsComponents }}",
            "networkConfig":"{{ networkConfig }}",
            "files":"{{ files }}",
            "services":"{{ services }}",
            "windowsRoles":"{{ windowsRoles }}",
            "windowsRegistry":"{{ windowsRegistry}}",
            "windowsUpdates":"{{ windowsUpdates }}",
            "instanceDetailedInformation":"{{ instanceDetailedInformation }}",
            "customInventory":"{{ customInventory }}"
         }
      }
   ]
}
```

------

### Entradas
<a name="softwareinventory-properties"></a>

**aplicaciones**  
(Opcional) Recopilar metadatos para las aplicaciones instaladas.  
Tipo: cadena  
Requerido: no

**awsComponents**  
(Opcional) Recopilar metadatos para componentes de AWS como amazon-ssm-agent.  
Tipo: cadena  
Requerido: no

**files**  
(Opcional, requiere SSM Agent versión 2.2.64.0 o posterior) Recopilar metadatos de archivos, incluidos los nombres de archivos, la hora en que se crearon los archivos, la hora en que se modificaron y se accedió por última vez a los archivos y los tamaños de los archivos, por citar algunos. Para obtener más información acerca de la recopilación de inventario de archivos, consulte [Uso del inventario de archivos y del registro de Windows](inventory-file-and-registry.md).  
Tipo: cadena  
Requerido: no

**networkConfig**  
(Opcional) Recopilar metadatos para las configuraciones de red.  
Tipo: cadena  
Requerido: no

**billingInfo**  
(Opcional) Recopile metadatos para los detalles de la plataforma asociados con el código de facturación de la AMI.  
Tipo: cadena  
Requerido: no

**windowsUpdates**  
(Opcional) Recopilar metadatos de todas las actualizaciones de Windows.  
Tipo: cadena  
Requerido: no

**InstanceDetailedInformation**  
(Opcional) Recopilar más información de instancia de la que proporciona el complemento de inventario predeterminado (`aws:instanceInformation`), incluido el modelo de CPU, la velocidad y el número de núcleos, entre otros.  
Tipo: cadena  
Requerido: no

**servicios**  
(Opcional, solo para SO Windows, requiere SSM Agent versión 2.2.64.0 o posterior) Recopilar metadatos para configuraciones de servicio.  
Tipo: cadena  
Requerido: no

**windowsRegistry**  
(Opcional, solo para SO Windows, requiere SSM Agent versión 2.2.64.0 o posterior) Recopilar claves y valores de Windows Registry. Puede elegir una ruta de clave y recopilar todas las claves y valores recursivamente. También puede recopilar una clave de registro específica y su valor para una ruta específica. El inventario recopila la ruta de clave, el nombre, el tipo y el valor. Para obtener más información acerca de cómo recopilar el inventario de Windows Registry, consulte [Uso del inventario de archivos y del registro de Windows](inventory-file-and-registry.md).  
Tipo: cadena  
Requerido: no

**windowsRoles**  
(Opcional, solo para SO Windows, requiere SSM Agent versión 2.2.64.0 o posterior) Recopilar metadatos para configuraciones de roles de Microsoft Windows.  
Tipo: cadena  
Requerido: no

**customInventory**  
(Opcional) Recopilar datos de inventario personalizados. Para obtener más información acerca del inventario personalizado, consulte . [Uso del inventario personalizado](inventory-custom.md)  
Tipo: cadena  
Requerido: no

**customInventoryDirectory**  
(Opcional) Recopile datos de inventario personalizados desde el directorio especificado. Para obtener más información acerca del inventario personalizado, consulte . [Uso del inventario personalizado](inventory-custom.md)  
Tipo: cadena  
Requerido: no

## `aws:updateAgent`
<a name="aws-updateagent"></a>

Actualice el servicio EC2Config a la versión más reciente o especifique una versión más antigua. Este complemento solo se ejecuta en los sistemas operativos Microsoft Windows Server. Para obtener más información sobre el servicio EC2Config, consulte [Configuración de una instancia de Windows mediante el servicio EC2Config (heredado)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2config-service.html) en la *Guía del usuario de Amazon EC2*.

### Sintaxis
<a name="updateagent-syntax"></a>

#### Esquema 2.2
<a name="updateagent-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:updateAgent
mainSteps:
- action: aws:updateAgent
  name: updateAgent
  inputs:
    agentName: Ec2Config
    source: https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:updateAgent",
  "mainSteps": [
    {
      "action": "aws:updateAgent",
      "name": "updateAgent",
      "inputs": {
        "agentName": "Ec2Config",
        "source": "https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json"
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="updateagent-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:updateAgent:
    properties:
      agentName: Ec2Config
      source: https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json
      allowDowngrade: "{{ allowDowngrade }}"
      targetVersion: "{{ version }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:updateAgent":{
         "properties":{
            "agentName":"Ec2Config",
            "source":"https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json",
            "allowDowngrade":"{{ allowDowngrade }}",
            "targetVersion":"{{ version }}"
         }
      }
   }
}
```

------

### Propiedades
<a name="updateagent-properties"></a>

**agentName**  
EC2Config. Este es el nombre del agente que ejecuta el servicio EC2Config.  
Tipo: cadena  
Obligatorio: sí

**allowDowngrade**  
Permita el cambio del servicio EC2Config a una versión anterior. Si se establece en "false", el servicio solo se puede actualizar a versiones más recientes (predeterminado). Si se establece en "true", especifique la versión anterior.   
Tipo: Booleano  
Obligatorio: no

**origen**  
La ubicación donde Systems Manager copia la versión de EC2Config que se va a instalar. No se puede cambiar esta ubicación.  
Tipo: cadena  
Obligatorio: sí

**targetVersion**  
Una versión específica del servicio EC2Config que se va a instalar. Si no se especifica, el servicio se actualizará a la versión más reciente.  
Tipo: cadena  
Requerido: no

## `aws:updateSsmAgent`
<a name="aws-updatessmagent"></a>

Actualice el SSM Agent a la versión más reciente o especifique una versión más antigua. Este complemento se ejecuta en los sistemas operativos Linux y Windows Server. Para obtener más información, consulte [Uso de SSM Agent](ssm-agent.md). 

### Sintaxis
<a name="updateSSMagent-syntax"></a>

#### Esquema 2.2
<a name="updateaSSMgent-syntax-2.2"></a>

------
#### [ YAML ]

```
---
schemaVersion: '2.2'
description: aws:updateSsmAgent
parameters:
  allowDowngrade:
    default: 'false'
    description: "(Optional) Allow the Amazon SSM Agent service to be downgraded to
      an earlier version. If set to false, the service can be upgraded to newer versions
      only (default). If set to true, specify the earlier version."
    type: String
    allowedValues:
    - 'true'
    - 'false'
mainSteps:
- action: aws:updateSsmAgent
  name: updateSSMAgent
  inputs:
    agentName: amazon-ssm-agent
    source: https://s3.{Region}.amazonaws.com/amazon-ssm-{Region}/ssm-agent-manifest.json
    allowDowngrade: "{{ allowDowngrade }}"
```

------
#### [ JSON ]

```
{
  "schemaVersion": "2.2",
  "description": "aws:updateSsmAgent",
  "parameters": {
    "allowDowngrade": {
      "default": "false",
      "description": "(Required) Allow the Amazon SSM Agent service to be downgraded to an earlier version. If set to false, the service can be upgraded to newer versions only (default). If set to true, specify the earlier version.",
      "type": "String",
      "allowedValues": [
        "true",
        "false"
      ]
    }
  },
  "mainSteps": [
    {
      "action": "aws:updateSsmAgent",
      "name": "awsupdateSsmAgent",
      "inputs": {
        "agentName": "amazon-ssm-agent",
        "source": "https://s3.{Region}.amazonaws.com/amazon-ssm-{Region}/ssm-agent-manifest.json",
        "allowDowngrade": "{{ allowDowngrade }}"
      }
    }
  ]
}
```

------

#### Esquema 1.2
<a name="updateaSSMgent-syntax-1.2"></a>

------
#### [ YAML ]

```
---
runtimeConfig:
  aws:updateSsmAgent:
    properties:
    - agentName: amazon-ssm-agent
      source: https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json
      allowDowngrade: "{{ allowDowngrade }}"
```

------
#### [ JSON ]

```
{
   "runtimeConfig":{
      "aws:updateSsmAgent":{
         "properties":[
            {
               "agentName":"amazon-ssm-agent",
               "source":"https://s3.{Region}.amazonaws.com/aws-ssm-{Region}/manifest.json",
               "allowDowngrade":"{{ allowDowngrade }}"
            }
         ]
      }
   }
}
```

------

### Propiedades
<a name="updateSSMagent-properties"></a>

**agentName**  
amazon-ssm-agent. Este es el nombre del agente de Systems Manager que procesa las solicitudes y ejecuta los comandos en la instancia.  
Tipo: cadena  
Obligatorio: sí

**allowDowngrade**  
Permita el cambio del SSM Agent a una versión anterior. Si se establece en "false", el agente solo se puede actualizar a versiones más recientes (predeterminado). Si se establece en "true", especifique la versión anterior.   
Tipo: booleano  
Obligatorio: sí

**origen**  
La ubicación donde Systems Manager copia la versión del SSM Agent que se va a instalar. No se puede cambiar esta ubicación.  
Tipo: cadena  
Obligatorio: sí

**targetVersion**  
Versión concreta del SSM Agent que se va a instalar. Si no se especifica, el agente se actualizará a la versión más reciente.  
Tipo: cadena  
Obligatorio: no

# Crear contenido en el documento de SSM
<a name="documents-creating-content"></a>

Si los documentos públicos de AWS Systems Manager no llevan a cabo todas las acciones que desea realizar en sus recursos de AWS, puede crear sus propios documentos de SSM. También puede clonar documentos de SSM mediante la consola. La clonación de documentos copia el contenido de un documento existente a un documento nuevo que se puede modificar. Al crear o clonar un documento, el contenido del documento no debe superar los 64 KB. Esta cuota también incluye el contenido especificado para los parámetros de entrada en tiempo de ejecución. Cuando cree un nuevo documento `Command` o `Policy`, es recomendable que utilice la versión de esquema 2.2 o posterior para poder aprovechar las características más recientes, como la edición de documentos, el control automático de versiones, la secuenciación, etc.

## Escribir contenido en el documento de SSM
<a name="writing-ssm-doc-content"></a>

Para crear su propio contenido del documento de SSM, es importante que conozca los diferentes esquemas, características, complementos y sintaxis disponibles para los documentos de SSM. Le recomendamos que se familiarice con los siguientes recursos.
+  [Writing your own AWS Systems Manager documents](https://aws.amazon.com/blogs//mt/writing-your-own-aws-systems-manager-documents/) 
+  [Elementos y parámetros de datos](documents-syntax-data-elements-parameters.md) 
+  [Esquemas, características y ejemplos](documents-schemas-features.md) 
+  [Referencia de complementos del documento de comandos](documents-command-ssm-plugin-reference.md) 
+  [Referencia de acciones de Automatización de Systems Manager](automation-actions.md) 
+  [Variables del sistema de Automation](automation-variables.md) 
+  [Ejemplos adicionales de manuales de procedimientos](automation-document-examples.md) 
+  [Trabajar con manuales de procedimientos de Automatización de Systems Manager](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/systems-manager-automation-docs.html) mediante AWS Toolkit for Visual Studio Code 
+  [Experiencia de diseño visual para manuales de procedimientos de automatización](automation-visual-designer.md) 
+  [Uso de scripts en manuales de procedimientos](automation-document-script-considerations.md) 

AWSLos documentos de SSM predefinidos de pueden realizar algunas de las acciones que necesita. Puede llamar a estos documentos utilizando los complementos , `aws:runDocument`, `aws:runCommand` o `aws:executeAutomation` dentro del documento de SSM personalizado, en función del tipo de documento. También puede copiar partes de esos documentos en un documento de SSM personalizado y editar el contenido de acuerdo con sus necesidades.

**sugerencia**  
Cuando crea contenido del documento de SSM, puede cambiar el contenido y actualizar el documento de SSM varias veces mientras lo prueba. Los siguientes comandos actualizan el documento de SSM con el contenido más reciente y actualizan la versión predeterminada del documento a la versión más reciente del documento.  
Los comandos de Linux y Windows utilizan la herramienta de línea de comandos `jq` para filtrar los datos de respuesta JSON.

```
latestDocVersion=$(aws ssm update-document \
    --content file://path/to/file/documentContent.json \
    --name "ExampleDocument" \
    --document-format JSON \
    --document-version '$LATEST' \
    | jq -r '.DocumentDescription.LatestVersion')

aws ssm update-document-default-version \
    --name "ExampleDocument" \
    --document-version $latestDocVersion
```

```
latestDocVersion=$(aws ssm update-document ^
    --content file://C:\path\to\file\documentContent.json ^
    --name "ExampleDocument" ^
    --document-format JSON ^
    --document-version "$LATEST" ^
    | jq -r '.DocumentDescription.LatestVersion')

aws ssm update-document-default-version ^
    --name "ExampleDocument" ^
    --document-version $latestDocVersion
```

```
$content = Get-Content -Path "C:\path\to\file\documentContent.json" | Out-String
$latestDocVersion = Update-SSMDocument `
    -Content $content `
    -Name "ExampleDocument" `
    -DocumentFormat "JSON" `
    -DocumentVersion '$LATEST' `
    | Select-Object -ExpandProperty LatestVersion

Update-SSMDocumentDefaultVersion `
    -Name "ExampleDocument" `
    -DocumentVersion $latestDocVersion
```

### Prácticas recomendadas de seguridad para documentos de SSM
<a name="ssm-document-security-practices"></a>

Al crear documentos SSM, siga estas prácticas recomendadas de seguridad para evitar la inyección de comandos y garantizar una gestión segura de los parámetros:
+ Utilice la interpolación de variables de entorno para los parámetros de cadena que se utilizarán en comandos o scripts. Agregue la propiedad `interpolationType` con el valor `ENV_VAR` a los parámetros de cadena:

  ```
  {
      "command": {
          "type": "String",
          "description": "Command to execute",
          "interpolationType": "ENV_VAR"
      }
  }
  ```

  Puede mejorar aún más la seguridad de sus documentos SSM si especifica que no se acepten comillas dobles en los valores proporcionados por interpolación:

  ```
  {
      "command": {
          "type": "String",
          "description": "Command to execute",
          "interpolationType": "ENV_VAR",
              "allowedPattern": "^[^"]*$"
      }
  }
  ```
+ Cuando utilice lenguajes interpretados como Python, Ruby o Node.js, haga referencia a los parámetros mediante la sintaxis de variables de entorno adecuada:

  ```
  # Python example
  import os
  command = os.environ['SSM_Message']
  ```
+ A fin de garantizar la compatibilidad con versiones anteriores de SSM Agent (anteriores a la versión 3.3.2746.0), incluya una lógica alternativa para las variables de entorno:

  ```
  if [ -z "${SSM_command+x}" ]; then
      export SSM_command="{{command}}"
  fi
  ```
+ Combine la interpolación de variables de entorno con `allowedPattern` para una validación de entrada adicional. En el siguiente ejemplo, el valor `allowedPattern` `^[^"]*$` evita específicamente las comillas dobles en el valor de la cadena:

  ```
  {
      "command": {
          "type": "String",
          "interpolationType": "ENV_VAR",
          "allowedPattern": "^[a-zA-Z0-9_-]+$"
      }
  }
  ```
+ Antes de implementar el documento SSM, compruebe las siguientes consideraciones de seguridad:
  + Todos los parámetros de cadena que aceptan la entrada del usuario utilizan la interpolación de variables de entorno cuando es necesario.
  + La validación de las entradas se implementa mediante el uso de `allowedPattern` siempre que sea posible.
  + El documento incluye una gestión de errores adecuada para el procesamiento de los parámetros.
  + Se mantiene la compatibilidad con versiones anteriores para los entornos que utilizan versiones de SSM Agent más antiguas.

Para obtener información acerca de los recursos propiedad del servicio de AWS a los que accede Systems Manager y descubrir cómo configurar las políticas de perímetro de datos, consulte [Perímetros de datos en AWS Systems Manager](data-perimeters.md).

## Clonar un documento de SSM
<a name="cloning-ssm-document"></a>

Puede clonar documentos AWS Systems Manager mediante la consola de documentos de Systems Manager para crear documentos de SSM. La clonación de documentos de SSM copia el contenido de un documento existente a un documento nuevo que se puede modificar. No puede clonar un documento que supere los 64 KB.

**Para clonar un documento de SSM**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En el cuadro de búsqueda, ingrese el nombre del documento que desea clonar.

1. Elija el nombre del documento que desea clonar y, a continuación, elija **Clone document** (Clonar documento) en el menú desplegable **Actions** (Acciones). 

1. Modifique el documento como prefiera y, a continuación, elija **Create document** (Crear documento) para guardar el documento. 

Después de escribir el contenido del documento de SSM, puede utilizarlo para crear un documento de SSM mediante uno de los métodos siguientes.

**Topics**
+ [Escribir contenido en el documento de SSM](#writing-ssm-doc-content)
+ [Clonar un documento de SSM](#cloning-ssm-document)
+ [Creación de documentos compuestos](#documents-creating-composite)

## Creación de documentos compuestos
<a name="documents-creating-composite"></a>

Un documento de AWS Systems Manager (SSM) *compuesto* es un documento personalizado que realiza una serie de acciones mediante la ejecución de uno o varios documentos de SSM secundarios. Los documentos compuestos promueven la *infraestructura como código* permitiéndole crear un conjunto estándar de documentos de SSM para tareas comunes como software de proceso de arranque o instancias que se unen a dominios. A continuación, puede compartir estos documentos en Cuentas de AWS en la misma Región de AWS para reducir el mantenimiento de documentos de SSM y garantizar la coherencia.

Por ejemplo, puede crear un documento compuesto que realiza las siguientes acciones:

1. Instala todos los parches de la lista de permisos.

1. Instala software antivirus.

1. Descarga scripts de GitHub y los ejecuta.

En este ejemplo, el documento de SSM personalizado incluye los siguientes complementos para llevar a cabo estas acciones:

1. El complemento `aws:runDocument` para ejecutar el documento `AWS-RunPatchBaseline`, que instala todas las revisiones permitidas que se enumeran.

1. El complemento `aws:runDocument` para ejecutar el documento `AWS-InstallApplication`, que instala el software antivirus.

1. El complemento `aws:downloadContent` para descargar scripts de GitHub y ejecutarlos.

Los documentos compuestos y secundarios se pueden almacenar en Systems Manager, GitHub (repositorios públicos y privados) o Amazon S3. Los documentos compuestos y secundarios se pueden crear en JSON o YAML. 

**nota**  
Los documentos compuestos solo se pueden ejecutar hasta una profundidad máxima de tres documentos. Esto significa que un documento compuesto puede llamar a un documento secundario; y que un documento secundario puede llamar a un último documento.

Para crear un documento compuesto, agregue el complemento [`aws:runDocument`](documents-command-ssm-plugin-reference.md#aws-rundocument) en un documento de SSM personalizado y especifique la información de entrada necesaria. Se muestra a continuación un ejemplo de un documento compuesto que realiza las siguientes acciones:

1. Ejecuta el complemento [`aws:downloadContent`](documents-command-ssm-plugin-reference.md#aws-downloadContent) para descargar un documento de SSM de un repositorio público GitHub a un directorio local llamado bootstrap. El documento de SSM se denomina StateManagerBootstrap.yml (un documento YAML).

1. Ejecuta el complemento `aws:runDocument` para ejecutar el documento StateManagerBootstrap.yml. No se especifican parámetros.

1. Ejecuta el complemento `aws:runDocument` para ejecutar el documento de SSM `AWS-ConfigureDocker pre-defined`. Los parámetros especificados instalan Docker en la instancia.

```
{
  "schemaVersion": "2.2",
  "description": "My composite document for bootstrapping software and installing Docker.",
  "parameters": {
  },
  "mainSteps": [
    {
      "action": "aws:downloadContent",
      "name": "downloadContent",
      "inputs": {
        "sourceType": "GitHub",
        "sourceInfo": "{\"owner\":\"TestUser1\",\"repository\":\"TestPublic\", \"path\":\"documents/bootstrap/StateManagerBootstrap.yml\"}",
        "destinationPath": "bootstrap"
      }
    },
    {
      "action": "aws:runDocument",
      "name": "runDocument",
      "inputs": {
        "documentType": "LocalPath",
        "documentPath": "bootstrap",
        "documentParameters": "{}"
      }
    },
    {
      "action": "aws:runDocument",
      "name": "configureDocker",
      "inputs": {
        "documentType": "SSMDocument",
        "documentPath": "AWS-ConfigureDocker",
        "documentParameters": "{\"action\":\"Install\"}"
      }
    }
  ]
}
```

**Más información**  
+ Para obtener información acerca de cómo reiniciar los servidores y las instancias cuando se utiliza Run Command para llamar a scripts, consulte [Gestión de reinicios al ejecutar comandos](send-commands-reboot.md).
+ Para obtener más información acerca de los complementos que puede agregar a un documento de SSM personalizado, consulte [Referencia de complementos del documento de comandos](documents-command-ssm-plugin-reference.md).
+ Si solo desea ejecutar un documento desde una ubicación remota (sin crear un documento compuesto), consulte [Ejecución de documentos de desde ubicaciones remotas](documents-running-remote-github-s3.md).

# Trabajo con documentos
<a name="documents-using"></a>

Esta sección incluye información sobre cómo usar y trabajar con documentos de SSM.

**Topics**
+ [Comparar versiones de documentos de SSM](comparing-versions.md)
+ [Crear un documento de SSM](create-ssm-console.md)
+ [Eliminación de documentos de SSM personalizados](deleting-documents.md)
+ [Ejecución de documentos de desde ubicaciones remotas](documents-running-remote-github-s3.md)
+ [Uso compartido de documentos de SSM](documents-ssm-sharing.md)
+ [Búsqueda de documentos de SSM](ssm-documents-searching.md)

# Comparar versiones de documentos de SSM
<a name="comparing-versions"></a>

Puede comparar las diferencias de contenido entre las versiones de documentos AWS Systems Manager (SSM) en la consola de documentos de Systems Manager. Cuando compara versiones de un documento de SSM, se resaltan las diferencias entre el contenido de las versiones.

**Para comparar el contenido del documento de SSM (consola)**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En la lista de documentos, elija el documento cuyo contenido desea comparar.

1. En la pestaña **Content** (Contenido), seleccione **Compare versions** (Comparar versiones) y elija la versión del documento con la que desee comparar el contenido.

# Crear un documento de SSM
<a name="create-ssm-console"></a>

Después de crear el contenido del documento de SSM personalizado, como se describe en [Escribir contenido en el documento de SSM](documents-creating-content.md#writing-ssm-doc-content), puede utilizar la consola de Systems Manager para crear un documento de SSM con el contenido.

**Para crear un documento de SSM**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Elija **Create command or session (Crear comando o sesión)**.

1. Ingrese un nombre descriptivo para asignar al documento

1. (Opcional) En **Tipo de destino**, especifique el tipo de recursos en los que se puede ejecutar el documento.

1. En la lista **Document Type**, seleccione el tipo de documento que desee crear.

1. Elimine los corchetes del campo **Content (Contenido)** y, a continuación, pegue el contenido del documento creado previamente.

1. (Opcional) En la sección **Etiquetas de documento**, aplique uno o más pares de nombre y valor de clave de etiqueta al documento.

   Las etiquetas son metadatos opcionales que usted asigna a un recurso. Las etiquetas permiten clasificar los recursos de diversas maneras, por ejemplo, según la finalidad, el propietario o el entorno. Por ejemplo, es posible que desee etiquetar un documento para identificar el tipo de tareas que ejecuta, el tipo de sistemas operativos al que se dirige y el entorno en el que se ejecuta. En este caso, puede especificar los siguientes pares de claves nombre-valor:
   + `Key=TaskType,Value=MyConfigurationUpdate`
   + `Key=OS,Value=AMAZON_LINUX_2`
   + `Key=Environment,Value=Production`

1. Elija **Create document** para guardar el documento.

# Eliminación de documentos de SSM personalizados
<a name="deleting-documents"></a>

Si ya no desea utilizar un documento personalizado de SSM, puede utilizar la consola de AWS Systems Manager para eliminarlo. 

**Para eliminar un documento de SSM**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Seleccione el documento que desea eliminar.

1. Seleccione **Delete** (Eliminar). Cuando se le pida confirmación para eliminar el documento, seleccione **Delete** (Eliminar).

Para consultar ejemplos de cómo utilizar herramientas de línea de comandos o SDK para eliminar documentos de SSM, consulte [Uso de `DeleteDocument` con un AWS SDK o la CLI](example_ssm_DeleteDocument_section.md).

# Ejecución de documentos de desde ubicaciones remotas
<a name="documents-running-remote-github-s3"></a>

Puede ejecutar documentos de AWS Systems Manager (SSM) desde ubicaciones remotas mediante el documento `AWS-RunDocument` de SSM predefinido. Este documento admite la ejecución de documentos de SSM almacenados en las siguientes ubicaciones:
+ Repositorios GitHub públicos y privados (no se admite GitHub Enterprise)
+ Buckets de Amazon S3 
+ Systems Manager

Si bien también puede ejecutar documentos remotos con State Manager o Automatización, herramientas de AWS Systems Manager, el siguiente procedimiento describe solo cómo ejecutar documentos de SSM remotos con AWS Systems Manager Run Command en la consola de Systems Manager. 

**nota**  
`AWS-RunDocument` se puede emplear para ejecutar solo documentos de SSM de tipo comando, no otros tipos, como manuales de procedimientos de Automation. `AWS-RunDocument` utiliza el complemento `aws:downloadContent`. Para obtener más información acerca del complemento `aws:downloadContent`, consulte [`aws:downloadContent`](documents-command-ssm-plugin-reference.md#aws-downloadContent).

**aviso**  
`AWS-RunDocument` puede ejecutar contenido de documentos de varios orígenes (documentos SSM, GitHub, S3, URL). Al ejecutar documentos remotos, los permisos de IAM evaluados son `ssm:GetDocument` sobre el documento remoto y `ssm:SendCommand` sobre `AWS-RunDocument`. Si tiene políticas de IAM que deniegan el acceso a documentos SSM específicos, los usuarios con permisos `AWS-RunDocument` pueden seguir ejecutando esos documentos denegados al transferir el contenido del documento como parámetros, que pueden no estar sujetos a las mismas restricciones de IAM específicas del documento.  
Para restringir de forma adecuada la ejecución de los documentos, utilice uno de estos enfoques:  
**Use una lista de orígenes autorizados**: si necesita utilizar la ejecución de documentos anidados, restrinja el acceso únicamente a los orígenes aprobados mediante los controles adecuados para cada tipo de origen: políticas de IAM `ssm:GetDocument` para controlar los orígenes de los documentos SSM, políticas de bucket de IAM y Amazon S3 para los orígenes de Amazon S3 y configuraciones de red (como puntos de conexión VPC o grupos de seguridad) para orígenes públicos de Internet.
**Restrinja el acceso a AWS-RunDocument**: deniegue `ssm:SendCommand` en `AWS-RunDocument` y cualquier otro documento que utilice el complemento `aws:runDocument` en sus políticas de IAM para evitar la ejecución de documentos anidados.
**Use límites de permisos**: implemente límites de permisos de IAM para establecer el máximo de permisos para los usuarios y evitar que ejecuten documentos no autorizados, independientemente del método de ejecución.
Para obtener más información sobre las prácticas recomendadas de IAM y los límites de permisos, consulte [Límites de permisos para las entidades de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) en la *Guía del usuario de AWS Identity and Access Management*.

**Antes de empezar**  
Antes de ejecutar un documento remoto, debe realizar las siguientes tareas.
+ Crear un documento de SSM Command y guardarlo en una ubicación remota. Para obtener más información, consulte [Crear contenido en el documento de SSM](documents-creating-content.md)
+ Si tiene previsto ejecutar un documento remoto almacenado en un repositorio GitHub privado, debe crear un parámetro `SecureString` de Systems Manager para su token de acceso de seguridad GitHub. No puede obtener acceso a un documento remoto en un repositorio GitHub privado pasando manualmente su token por SSH. El token de acceso debe pasarse como parámetro `SecureString` de Systems Manager. Para obtener más información acerca de cómo crear un parámetro `SecureString`, consulte [Creación de parámetros de Parameter Store en Systems Manager](sysman-paramstore-su-create.md).

## Ejecutar un documento remoto (consola)
<a name="documents-running-remote-github-s3-console"></a>

**Para ejecutar un documento remoto**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Run Command**.

1. Elija **Run command (Ejecutar comando)**.

1. En la lista **Document** (Documento), elija **`AWS-RunDocument`**.

1. En **Command parameters (Parámetros de comando)**, para **Source type (Tipo de origen)**, elija una opción. 
   + Si elige **GitHub**, especifique la información correspondiente a **Información del origen** en el siguiente formato:

     ```
     {
         "owner": "owner_name",
         "repository": "repository_name",
         "path": "path_to_document",
         "getOptions":"branch:branch_name",
         "tokenInfo": "{{ssm-secure:secure-string-token}}"
     }
     ```

     Por ejemplo:

     ```
     {
         "owner":"TestUser",
         "repository":"GitHubTestExamples",
         "path":"scripts/python/test-script",
         "getOptions":"branch:exampleBranch",
         "tokenInfo":"{{ssm-secure:my-secure-string-token}}"
     }
     ```
**nota**  
`getOptions` son opciones adicionales para recuperar contenido de una plataforma que no sea maestra o de una confirmación específica en el repositorio. `getOptions` se pueden omitir si está utilizando la última confirmación en la rama maestra. Solo se requiere el parámetro `branch` si el documento de SSM se almacena en una sucursal que no sea `master`.  
Para utilizar la versión de su documento SSM en una *confirmación* concreta del repositorio, use `commitID` con `getOptions` en lugar de `branch`. Por ejemplo:  

     ```
     "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
     ```
   + Si elige **S3**, especifique la información correspondiente a **Source Info** en el siguiente formato:

     ```
     {"path":"URL_to_document_in_S3"}
     ```

     Por ejemplo:

     ```
     {"path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/scripts/ruby/mySSMdoc.json"}
     ```
   + Si elige **SSMDocument**, especifique la información correspondiente a **Source Info** en el siguiente formato:

     ```
     {"name": "document_name"}
     ```

     Por ejemplo:

     ```
     {"name": "mySSMdoc"}
     ```

1. En el campo **Document parameters** (Parámetros del documento), ingrese parámetros para el documento de SSM remoto. Por ejemplo, si ejecuta el documento `AWS-RunPowerShell`, podría especificar:

   ```
   {"commands": ["date", "echo \"Hello World\""]}
   ```

   Si ejecuta el documento `AWS-ConfigureAWSPack`, podría especificar:

   ```
   {
      "action":"Install",
      "name":"AWSPVDriver"
   }
   ```

1. En la sección **Targets** (Destinos), para elegir los nodos administrados en los que desea ejecutar esta operación, especifique las etiquetas, seleccione las instancias o los dispositivos de borde manualmente o especifique un grupo de recursos.
**sugerencia**  
Si un nodo administrado que espera ver no aparece en la lista, consulte [Solución de problemas de disponibilidad de nodos administrados](fleet-manager-troubleshooting-managed-nodes.md) para obtener consejos de solución de problemas.

1. En **Otros parámetros**:
   + En **Comentario**, ingrese la información acerca de este comando.
   + En **Tiempo de espera (segundos)**, especifique el número de segundos que tiene que esperar el sistema antes de indicar que se ha producido un error en la ejecución del comando general. 

1. En **Rate control** (Control de velocidad):
   + En **Concurrency** (Simultaneidad), especifique un número o un porcentaje de los nodos administrados en los que desea ejecutar el comando al mismo tiempo.
**nota**  
Si seleccionó los destinos mediante la especificación de etiquetas aplicadas a nodos administrados o de grupos de recursos de AWS y no está seguro de cuántos nodos administrados tienen destino, limite el número de destinos que puede ejecutar el documento al mismo tiempo. Para ello, especifique un porcentaje.
   + En **Error threshold** (Umbral de errores), especifique cuándo desea parar la ejecución del comando en los demás nodos administrados después de que haya fallado en un número o un porcentaje de los nodos. Por ejemplo, si especifica tres errores, Systems Manager dejará de enviar el comando cuando se reciba el cuarto error. Los nodos administrados que estén procesando el comando todavía pueden enviar errores.

1. (Opcional) En **Opciones de salida**, para guardar la salida del comando en un archivo, seleccione el cuadro **Write command output to an S3 bucket**. Ingrese los nombres del bucket y del prefijo (carpeta) en los cuadros.
**nota**  
Los permisos de S3 que conceden la capacidad de escribir datos en un bucket de S3 son los del perfil de instancia (para instancias de EC2) o rol de servicio de IAM (máquinas activadas de manera híbrida) asignados a la instancia, no los del usuario de IAM que realiza esta tarea. Para obtener más información, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md) o [Creación de un rol de servicio de IAM para un entorno híbrido](hybrid-multicloud-service-role.md). Además, si el bucket de S3 especificado se encuentra en una Cuenta de AWS diferente, asegúrese de que el perfil de instancias o el rol de servicio de IAM asociado al nodo administrado tenga los permisos necesarios para escribir en ese bucket.

1. En la sección **Notificaciones de SNS**, seleccione la casilla de verificación **Habilitar notificaciones de SNS** si desea recibir notificaciones sobre el estado de ejecución de los comandos.

   Para obtener más información acerca de la configuración de las notificaciones de Amazon SNS para Run Command, consulte [Cómo monitorear los cambios de estado de Systems Manager mediante las notificaciones de Amazon SNS](monitoring-sns-notifications.md).

1. Seleccione **Ejecutar**.

**nota**  
Para obtener información acerca de cómo reiniciar los servidores y las instancias cuando se utiliza Run Command para llamar a scripts, consulte [Gestión de reinicios al ejecutar comandos](send-commands-reboot.md).

# Uso compartido de documentos de SSM
<a name="documents-ssm-sharing"></a>

Puede compartir documentos de AWS Systems Manager (SSM) de forma privada o pública con cuentas en la misma Región de AWS. Para compartir un documento de forma privada, modifique los permisos del documento y permita que personas específicas obtengan acceso a él conforme a sus ID de Cuenta de AWS. Para compartir un documento de SSM de forma pública, modifique los permisos del documento y especifique `All`. Los documentos no se pueden compartir simultáneamente de forma pública y privada.

**aviso**  
Utilice solo documentos de SSM compartidos procedentes de fuentes de confianza. Cuando utilice cualquier documento compartido, analice detenidamente el contenido del documento antes de utilizarlo para poder comprender la forma en que este cambiará la configuración de la instancia. Para obtener más información sobre las prácticas recomendadas para documentos compartidos, consulte [Prácticas recomendadas para documentos de SSM compartidos](#best-practices-shared). 

**Limitaciones**  
Cuando empiece a trabajar con documentos de SSM, debe tener en cuenta las siguientes limitaciones.
+ Solo el propietario puede compartir un documento.
+ Debe dejar de compartir un documento para poder eliminarlo. Para obtener más información, consulte [Modificar los permisos para un documento de SSM compartido](#modify-permissions-shared).
+ Puede compartir un documento con un máximo de 1000 Cuentas de AWS. Puede solicitar un aumento de este límite en el [Centro de Soporte](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase). En **Tipo de límite**, elija *EC2 Systems Manager* y describa el motivo de la solicitud.
+ Puede compartir públicamente un máximo de cinco documentos de SSM. Puede solicitar un aumento de este límite en el [Centro de Soporte](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase). En **Tipo de límite**, elija *EC2 Systems Manager* y describa el motivo de la solicitud.
+ Los documentos solo se pueden compartir con otras cuentas en la misma Región de AWS. No se admite el uso compartido entre regiones.

**importante**  
En Systems Manager, un documento de SSM *propiedad de Amazon* es un documento creado y administrado por Amazon Web Services. Los documentos que son *propiedad de Amazon* incluyen un prefijo como `AWS-*` en el nombre del documento. Se considera que el propietario del documento es Amazon, no una cuenta de usuario específica de AWS. Estos documentos están a disposición del público para que los utilicen todos los usuarios.

Para obtener más información acerca de las Service Quotas de Systems Manager, consulte [Service Quotas de AWS Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm).

**Topics**
+ [Prácticas recomendadas para documentos de SSM compartidos](#best-practices-shared)
+ [Bloquear el uso compartido público de documentos de SSM](#block-public-access)
+ [Compartir un documento de SSM](#ssm-how-to-share)
+ [Modificar los permisos para un documento de SSM compartido](#modify-permissions-shared)
+ [Uso de documentos de SSM compartidos](#using-shared-documents)

## Prácticas recomendadas para documentos de SSM compartidos
<a name="best-practices-shared"></a>

Revise las siguientes directrices antes de compartir o utilizar un documento compartido. 

**Eliminar información confidencial**  
Revise el documento de AWS Systems Manager (SSM) detenidamente y elimine cualquier información confidencial. Por ejemplo, compruebe que el documento no incluya sus credenciales de AWS. Si comparte un documento con personas específicas, esos usuarios podrán ver la información del documento. Si comparte un documento públicamente, cualquiera podrá ver la información del documento.

**Bloquear el uso compartido público de documentos**  
Revise todos los documentos SSM compartidos públicamente en su cuenta y confirme si quiere seguir compartiéndolos. Para dejar de compartir un documento con el público, debe modificar la configuración de permisos del documento tal y como se describe en la sección [Modificar los permisos para un documento de SSM compartido](#modify-permissions-shared) de este tópico. Si activa la opción de bloquear el uso compartido con el público, no se verá afectado ningún documento que esté compartiendo con el público en ese momento. A menos que su caso de uso requiera que se permita el uso compartido público, le recomendamos que active la configuración de bloqueo de uso compartido público para sus documentos de SSM en la sección **Preferencias** en la consola de documentos de Systems Manager. Si se activa esta configuración, se evita el acceso no deseado a los documentos de SSM. La configuración de bloqueo de uso compartido público es una configuración a nivel de cuenta que puede diferir para cada Región de AWS.

**Restringir las acciones de Run Command mediante una política de confianza de IAM**  
Cree una política de AWS Identity and Access Management (IAM) restrictiva para los usuarios que tendrán acceso al documento. La política de IAM determina los documentos de SSM que el usuario puede ver en la consola de Amazon Elastic Compute Cloud (Amazon EC2) o llamando a `ListDocuments` mediante la AWS Command Line Interface (AWS CLI) o AWS Tools for Windows PowerShell. La política también restringe las acciones que puede realizar el usuario con el documento de SSM. Puede crear una política restrictiva, de modo que el usuario solo pueda utilizar documentos específicos. Para obtener más información, consulte [Ejemplos de políticas administradas por el cliente](security_iam_id-based-policy-examples.md#customer-managed-policies).

**Actuar con precaución a la hora de utilizar documentos de SSM compartidos**  
Revise el contenido de cada documento compartido, en particular los documentos públicos, para comprender los comandos que se ejecutarán en sus instancias. Un documento podría tener repercusiones negativas después de haberlo ejecutado, ya sea de forma intencionada o no. Si el documento hace referencia a una red externa, revise la fuente externa antes de utilizar el documento. 

**Enviar comandos mediante el hash del documento**  
Al compartir un documento, el sistema crea el hash Sha-256 y lo asigna al documento. El sistema también guarda una instantánea del contenido del documento. Al enviar un comando utilizando un documento compartido, puede especificar el hash en el comando para asegurarse de que las siguientes condiciones sean verdaderas:  
+ Está ejecutando un comando desde el documento de Systems Manager correcto
+ El contenido del documento no ha cambiado desde que se compartió con usted.
Si el hash no coincide con el documento especificado o si el contenido del documento compartido ha cambiado, el comando devuelve la excepción `InvalidDocument`. El hash no puede verificar el contenido de documentos de ubicaciones externas.

**Uso del parámetro de interpolación para mejorar la seguridad**  
Para los parámetros de tipo `String` en sus documentos SSM, utilice el parámetro y el valor `interpolationType": "ENV_VAR` para mejorar la seguridad frente a los ataques de inyección de comandos. Esto se logra al tratar las entradas de los parámetros como cadenas literales en lugar de comandos potencialmente ejecutables. En este caso, el agente crea una variable de entorno denominada `SSM_parameter-name` con el valor del parámetro. Le recomendamos que actualice todos sus documentos SSM existentes que incluyan parámetros de tipo `String` para que incluyan `"interpolationType": "ENV_VAR"`. Para obtener más información, consulte [Escribir contenido en el documento de SSM](documents-creating-content.md#writing-ssm-doc-content).

## Bloquear el uso compartido público de documentos de SSM
<a name="block-public-access"></a>

Antes de empezar, revise todos los documentos SSM compartidos públicamente que tenga en su Cuenta de AWS y confirme si quiere seguir compartiéndolos. Para dejar de compartir un documento SSM con el público, debe modificar la configuración de permisos del documento tal y como se describe en la sección [Modificar los permisos para un documento de SSM compartido](#modify-permissions-shared) de este tópico. Si activa la opción de bloquear el uso compartido con el público, no se verá afectado ningún documento SSM que esté compartiendo con el público en ese momento. Si habilita la opción para bloquear el uso compartido con el público de, no podrá compartir ningún documento SSM adicional con el público.

A menos que su caso de uso requiera que el uso compartido público esté activado, le recomendamos que active la configuración de bloqueo de uso compartido con el público para sus documentos SSM. Si se activa esta configuración, se evita el acceso no deseado a los documentos de SSM. La configuración de bloqueo de uso compartido público es una configuración a nivel de cuenta que puede diferir para cada Región de AWS. Complete las siguientes tareas para bloquear el uso compartido con el público de cualquier documento de SSM que no esté compartiendo en este momento.

### Bloquear el uso compartido público (consola)
<a name="block-public-access-console"></a>

**Para bloquear el uso compartido público de sus documentos de SSM**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Elija **Preferencias**, luego elija **Edit** (Editar) en la sección **Bloquear el uso compartido público**.

1. Seleccione la casilla de verificación **Bloquear el uso compartido público** y, a continuación, elija **Guardar**. 

### Bloquear el uso compartido público (línea de comandos)
<a name="block-public-access-cli"></a>

Abra el AWS Command Line Interface (AWS CLI) o AWS Tools for Windows PowerShell en el ordenador local y ejecute el siguiente comando para bloquear el uso compartido público de sus documentos de SSM.

------
#### [ Linux & macOS ]

```
aws ssm update-service-setting  \
    --setting-id /ssm/documents/console/public-sharing-permission \
    --setting-value Disable \
    --region 'The Región de AWS you want to block public sharing in'
```

------
#### [ Windows ]

```
aws ssm update-service-setting ^
    --setting-id /ssm/documents/console/public-sharing-permission ^
    --setting-value Disable ^
    --region "The Región de AWS you want to block public sharing in"
```

------
#### [ PowerShell ]

```
Update-SSMServiceSetting `
    -SettingId /ssm/documents/console/public-sharing-permission `
    -SettingValue Disable `
    –Region The Región de AWS you want to block public sharing in
```

------

Confirme que el valor de configuración se ha actualizado mediante el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm get-service-setting   \
    --setting-id /ssm/documents/console/public-sharing-permission \
    --region The Región de AWS you blocked public sharing in
```

------
#### [ Windows ]

```
aws ssm get-service-setting  ^
    --setting-id /ssm/documents/console/public-sharing-permission ^
    --region "The Región de AWS you blocked public sharing in"
```

------
#### [ PowerShell ]

```
Get-SSMServiceSetting `
    -SettingId /ssm/documents/console/public-sharing-permission `
    -Region The Región de AWS you blocked public sharing in
```

------

### Restringir el acceso para bloquear el uso compartido público con IAM
<a name="block-public-access-changes-iam"></a>

Puede crear políticas AWS Identity and Access Management (IAM) que restringen a los usuarios de modificar la configuración de bloqueo de uso compartido público. Esto evita que los usuarios permitan el acceso no deseado a los documentos de SSM. 

A continuación, se muestra un ejemplo de una política de IAM que impide que los usuarios actualicen la configuración de bloqueo de uso compartido público. Para utilizar este ejemplo, debe reemplazar el ejemplo ID de cuenta de Amazon Web Services por su propio ID de cuenta.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "ssm:UpdateServiceSetting",
            "Resource": "arn:aws:ssm:*:444455556666:servicesetting/ssm/documents/console/public-sharing-permission"
        }
    ]
}
```

------

## Compartir un documento de SSM
<a name="ssm-how-to-share"></a>

Puede compartir documentos AWS Systems Manager (SSM) mediante la consola de Systems Manager. Cuando se comparten documentos desde la consola, solo se puede compartir la versión predeterminada del documento. También puede compartir documentos de SSM mediante programación llamando a la operación de la API `ModifyDocumentPermission` con la AWS Command Line Interface (AWS CLI), AWS Tools for Windows PowerShell o el AWS SDK. Antes de compartir un documento, obtenga los ID de Cuenta de AWS de las personas con las que desea compartir. Especificará esos ID de cuentas cuando comparta el documento.

### Compartir un documento (consola)
<a name="share-using-console"></a>

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En la lista de documentos, elija el documento que desea compartir y, a continuación, elija **Ver detalles**. En la pestaña **Permisos**, verifique que es usted el propietario del documento. Solo el propietario del documento puede compartirlo.

1. Elija **Edit (Edición de)**.

1. Para compartir el comando públicamente, seleccione **Public** y, a continuación, **Guardar**. Para compartir el comando de forma privada, elija **Privado**, ingrese el ID de Cuenta de AWS, elija **Añadir permiso** y, a continuación, elija **Guardar**. 

### Compartir un documento (línea de comandos)
<a name="share-using-cli"></a>

El siguiente procedimiento requiere que especifique una Región de AWS para su sesión de línea de comandos.

1. Abra la AWS CLI o AWS Tools for Windows PowerShell en el equipo local y ejecute el siguiente comando para especificar sus credenciales. 

   En el siguiente comando, reemplace *region* con su propia información. Para ver una lista de los valores de *regiones* admitidos, consulte la columna **Región** en [Puntos de conexión de servicio de Systems Manager](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) en la *Referencia general de Amazon Web Services*.

------
#### [ Linux & macOS ]

   ```
   aws config
   
   AWS Access Key ID: [your key]
   AWS Secret Access Key: [your key]
   Default region name: region
   Default output format [None]:
   ```

------
#### [ Windows ]

   ```
   aws config
   
   AWS Access Key ID: [your key]
   AWS Secret Access Key: [your key]
   Default region name: region
   Default output format [None]:
   ```

------
#### [ PowerShell ]

   ```
   Set-AWSCredentials –AccessKey your key –SecretKey your key
   Set-DefaultAWSRegion -Region region
   ```

------

1. Utilice el siguiente comando para enumerar todos los documentos de SSM que tiene disponibles. La lista incluye documentos que ha creado y documentos que han sido compartidos con usted.

------
#### [ Linux & macOS ]

   ```
   aws ssm list-documents
   ```

------
#### [ Windows ]

   ```
   aws ssm list-documents
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentList
   ```

------

1. Utilice el siguiente comando para obtener un documento específico.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-document \
       --name document name
   ```

------
#### [ Windows ]

   ```
   aws ssm get-document ^
       --name document name
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocument `
       –Name document name
   ```

------

1. Utilice el siguiente comando para obtener una descripción del documento.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document \
       --name document name
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-document ^
       --name document name
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentDescription `
       –Name document name
   ```

------

1. Utilice el siguiente comando para ver los permisos para el documento.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-document-permission \
       --name document name \
       --permission-type Share
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-document-permission ^
       --name document name ^
       --permission-type Share
   ```

------
#### [ PowerShell ]

   ```
   Get-SSMDocumentPermission `
       –Name document name `
       -PermissionType Share
   ```

------

1. Utilice el siguiente comando para modificar los permisos para el documento y compartirlo. Debe ser el propietario del documento para editar los permisos. Si lo desea, en el caso de los documentos compartidos con ID de la Cuenta de AWS específicos, puede especificar la versión del documento que quiere compartir con el parámetro `--shared-document-version`. Si no especifica una versión, el sistema comparte la versión `Default` del documento. Si comparte un documento de manera pública (con `all`), todas las versiones del documento especificado se comparten de forma predeterminada. El siguiente comando de ejemplo comparte el documento de forma privada con una persona específica en función de su ID de Cuenta de AWS.

------
#### [ Linux & macOS ]

   ```
   aws ssm modify-document-permission \
       --name document name \
       --permission-type Share \
       --account-ids-to-add Cuenta de AWS ID
   ```

------
#### [ Windows ]

   ```
   aws ssm modify-document-permission ^
       --name document name ^
       --permission-type Share ^
       --account-ids-to-add Cuenta de AWS ID
   ```

------
#### [ PowerShell ]

   ```
   Edit-SSMDocumentPermission `
       –Name document name `
       -PermissionType Share `
       -AccountIdsToAdd Cuenta de AWS ID
   ```

------

1. Utilice el siguiente comando para compartir un documento públicamente.
**nota**  
Si comparte un documento de manera pública (con `all`), todas las versiones del documento especificado se comparten de forma predeterminada. 

------
#### [ Linux & macOS ]

   ```
   aws ssm modify-document-permission \
       --name document name \
       --permission-type Share \
       --account-ids-to-add 'all'
   ```

------
#### [ Windows ]

   ```
   aws ssm modify-document-permission ^
       --name document name ^
       --permission-type Share ^
       --account-ids-to-add "all"
   ```

------
#### [ PowerShell ]

   ```
   Edit-SSMDocumentPermission `
       -Name document name `
       -PermissionType Share `
       -AccountIdsToAdd ('all')
   ```

------

## Modificar los permisos para un documento de SSM compartido
<a name="modify-permissions-shared"></a>

Si comparte un comando, los usuarios pueden ver y utilizar el comando hasta que usted quite el acceso al documento de AWS Systems Manager (SSM) o elimine el documento de SSM. Sin embargo, no puede eliminar un documento mientras esté compartido. Primero debe dejar de compartirlo y, a continuación, eliminarlo.

### Detener el uso compartido de un documento (consola)
<a name="unshare-using-console"></a>

**Detener el uso compartido de un documento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. En la lista de documentos, elija el documento que desea dejar de compartir y, a continuación, elija **Detalles**. En la sección **Permisos**, verifique que es usted el propietario del documento. Solo el propietario del documento puede dejar de compartirlo.

1. Elija **Edit (Edición de)**.

1. Elija **X** para eliminar el ID de Cuenta de AWS que ya no deberá tener acceso al comando y, a continuación, elija **Guardar**. 

### Dejar de compartir un documento (línea de comandos)
<a name="unshare-using-cli"></a>

Abra la AWS CLI o AWS Tools for Windows PowerShell en el equipo local y ejecute el siguiente comando para dejar de compartir un comando.

------
#### [ Linux & macOS ]

```
aws ssm modify-document-permission \
    --name document name \
    --permission-type Share \
    --account-ids-to-remove 'Cuenta de AWS ID'
```

------
#### [ Windows ]

```
aws ssm modify-document-permission ^
    --name document name ^
    --permission-type Share ^
    --account-ids-to-remove "Cuenta de AWS ID"
```

------
#### [ PowerShell ]

```
Edit-SSMDocumentPermission `
    -Name document name `
    -PermissionType Share `
    –AccountIdsToRemove Cuenta de AWS ID
```

------

## Uso de documentos de SSM compartidos
<a name="using-shared-documents"></a>

Cuando comparte un documento de AWS Systems Manager (SSM), el sistema genera un nombre de recurso de Amazon (ARN) y lo asigna al comando. Si selecciona y ejecuta un documento compartido desde la consola de Systems Manager, no verá el ARN. Sin embargo, si desea ejecutar un documento de SSM compartido utilizando un método distinto de la consola de Systems Manager, debe especificar el ARN completo del documento para el parámetro de solicitud de `DocumentName`. Cuando ejecuta el comando para enumerar los documentos verá el ARN completo de un documento de SSM. 

**nota**  
No es necesario especificar los ARN para documentos públicos de AWS (documentos que comienzan por `AWS-*`) o para documentos de su propiedad.

### Uso de un documento de SSM compartido (línea de comandos)
<a name="using-shared-documents-cli"></a>

 **Para enumerar todos los documentos de SSM públicos** 

------
#### [ Linux & macOS ]

```
aws ssm list-documents \
    --filters Key=Owner,Values=Public
```

------
#### [ Windows ]

```
aws ssm list-documents ^
    --filters Key=Owner,Values=Public
```

------
#### [ PowerShell ]

```
$filter = New-Object Amazon.SimpleSystemsManagement.Model.DocumentKeyValuesFilter
$filter.Key = "Owner"
$filter.Values = "Public"

Get-SSMDocumentList `
    -Filters @($filter)
```

------

 **Para enumerar los documentos de SSM privados que se han compartido con usted** 

------
#### [ Linux & macOS ]

```
aws ssm list-documents \
    --filters Key=Owner,Values=Private
```

------
#### [ Windows ]

```
aws ssm list-documents ^
    --filters Key=Owner,Values=Private
```

------
#### [ PowerShell ]

```
$filter = New-Object Amazon.SimpleSystemsManagement.Model.DocumentKeyValuesFilter
$filter.Key = "Owner"
$filter.Values = "Private"

Get-SSMDocumentList `
    -Filters @($filter)
```

------

 **Para enumerar todos los documentos de SSM que tiene disponibles** 

------
#### [ Linux & macOS ]

```
aws ssm list-documents
```

------
#### [ Windows ]

```
aws ssm list-documents
```

------
#### [ PowerShell ]

```
Get-SSMDocumentList
```

------

 **Para obtener información acerca de un documento de SSM que se ha compartido con usted** 

------
#### [ Linux & macOS ]

```
aws ssm describe-document \
    --name arn:aws:ssm:us-east-2:12345678912:document/documentName
```

------
#### [ Windows ]

```
aws ssm describe-document ^
    --name arn:aws:ssm:us-east-2:12345678912:document/documentName
```

------
#### [ PowerShell ]

```
Get-SSMDocumentDescription `
    –Name arn:aws:ssm:us-east-2:12345678912:document/documentName
```

------

 **Para ejecutar un documento de SSM compartido** 

------
#### [ Linux & macOS ]

```
aws ssm send-command \
    --document-name arn:aws:ssm:us-east-2:12345678912:document/documentName \
    --instance-ids ID
```

------
#### [ Windows ]

```
aws ssm send-command ^
    --document-name arn:aws:ssm:us-east-2:12345678912:document/documentName ^
    --instance-ids ID
```

------
#### [ PowerShell ]

```
Send-SSMCommand `
    –DocumentName arn:aws:ssm:us-east-2:12345678912:document/documentName `
    –InstanceIds ID
```

------

# Búsqueda de documentos de SSM
<a name="ssm-documents-searching"></a>

Puede buscar documentos de SSM en el almacén de documentos AWS Systems Manager (SSM) mediante la búsqueda de texto libre o una búsqueda basada en filtros. También puede marcar documentos como favoritos para ayudarlo a encontrar documentos de SSM usados con frecuencia. En las siguientes secciones, se describe cómo utilizar estas características.

## Uso de la búsqueda de texto libre
<a name="ssm-documents-searching-free-text"></a>

El cuadro de búsqueda en la página **Documents** (Documentos) de Systems Manager admite las búsquedas de texto libre. La búsqueda de texto libre compara el término o los términos de búsqueda que introduce con el nombre del documento en cada documento de SSM. Si introduce un solo término de búsqueda, por ejemplo **ansible**, Systems Manager devuelve todos los documentos de SSM donde se encontró este término. Si introduce varios términos de búsqueda, Systems Manager buscará mediante una instrucción `OR`. Por ejemplo, si especifica **ansible** y **linux**, a continuación, la búsqueda devuelve todos los documentos con *cualquier* palabra clave en su nombre.

Si ingresa un término de búsqueda de texto libre y elige una opción de búsqueda, como **Platform type** (Tipo de plataforma), a continuación, la búsqueda utiliza una instrucción `AND` y devuelve todos los documentos con la palabra clave en su nombre y el tipo de plataforma especificado.

**nota**  
Tenga en cuenta los siguientes detalles sobre la búsqueda de texto libre.  
La búsqueda de texto libre *no* distingue entre mayúsculas y minúsculas.
Los términos de búsqueda deben tener tres caracteres como mínimo y 20 caracteres como máximo.
La búsqueda de texto libre acepta hasta cinco términos de búsqueda.
Si ingresa un espacio entre los términos de búsqueda, el sistema incluye el espacio al realizar la búsqueda.
Puede combinar la búsqueda de texto libre con otras opciones de búsqueda, como **Document type** (Tipo de documento) o **Platform type** (Tipo de plataforma).
El filtro **Document name prefix** (Prefijo de nombre del documento) y la búsqueda de texto libre no se pueden utilizar juntos. Son mutuamente excluyentes.

**Para buscar un documento de SSM**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Escriba los términos de búsqueda en el cuadro de búsqueda y presione “Enter” (Ingresar).

### Realizar la búsqueda de documentos de texto libre mediante la AWS CLI
<a name="ssm-documents-searching-free-text-cli"></a>

**Para realizar la búsqueda de documentos de texto libre mediante la CLI**

1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

   Para obtener más información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

1. Para realizar búsquedas de documentos de texto libre con un solo término, ejecute el siguiente comando. En este comando, sustituya *search\$1term* con su propia información.

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="search_term"
   ```

   A continuación se muestra un ejemplo.

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="aws-asg" --region us-east-2
   ```

   Para realizar una búsqueda con varios términos que crean una instrucción `AND` ejecute el siguiente comando. En este comando, sustituya *search\$1term\$11* y *search\$1term\$12* con su propia información.

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="search_term_1","search_term_2","search_term_3" --region us-east-2
   ```

   A continuación se muestra un ejemplo.

   ```
   aws ssm list-documents --filters Key="SearchKeyword",Values="aws-asg","aws-ec2","restart" --region us-east-2
   ```

## Uso de filtros
<a name="ssm-documents-searching-filters"></a>

La página **Documents** (Documentos) de Systems Manager muestra automáticamente los siguientes filtros cuando elije el cuadro de búsqueda. 
+ Prefijo de nombre del documento
+ Tipos de plataformas
+ Tipo de documento
+ Clave de etiqueta

![\[Opciones de filtrado en la página documentos de SSM.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/ssm-documents-filters-1.png)


Puede buscar documentos de SSM mediante un único filtro. Si desea volver un conjunto más específico de documentos de SSM, puede aplicar varios filtros. A continuación, se muestra un ejemplo de una búsqueda que utiliza los filtros **Platform types** (Tipos de plataforma) y **Document name prefix** (Prefijo de nombre del documento).

![\[Aplicación de varias opciones de filtro en la página Documentos de SSM.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/ssm-documents-filters-2.png)


Si aplica varios filtros, Systems Manager crea instrucciones de búsqueda diferentes basadas en los filtros que elija: 
+ Si aplica el *mismo* filtro varias veces, por ejemplo **Document name prefix** (Prefijo de nombre del documento), a continuación, Systems Manager busca mediante una instrucción `OR`. Por ejemplo, si especifica un filtro **Prefijo de nombre del documento**=**AWS** y un segundo filtro **Prefijo de nombre del documento**=**Lambda**, a continuación, la búsqueda devuelve todos los documentos con el prefijo “`AWS`” y todos los documentos con el prefijo “`Lambda`”.
+ Si aplica filtros *diferentes*, por ejemplo **Prefijo del nombre del documento** y **Tipos de plataformas**, Systems Manager realiza la búsqueda mediante el uso de una instrucción `AND`. Por ejemplo, si especifica un filtro **Prefijo del nombre del documento**=**AWS** y un filtro **Tipos de plataformas**=**Linux**, la búsqueda devuelve todos los documentos con el prefijo “`AWS`” específicos de la plataforma Linux.

**nota**  
Las búsquedas que utilizan filtros distinguen entre mayúsculas y minúsculas. 

## Adición de documentos a favoritos
<a name="favorite-documents"></a>

Para ayudarlo a encontrar los documentos de SSM que usa con frecuencia, agregue documentos a sus favoritos. Puede marcar como favoritos hasta 20 documentos por tipo de documento, por Cuenta de AWS y Región de AWS. Puede elegir, modificar y ver sus favoritos desde la Consola de administración de AWS de documentos. En los siguientes procedimientos, se describe cómo seleccionar, modificar y ver los favoritos.

**Para agregar un documento de SSM a favoritos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Seleccione el icono de estrella situado junto al nombre del documento que desea marcar como favorito.

**Para eliminar un documento de SSM de favoritos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Anule la selección del icono de estrella junto al nombre del documento que desea eliminar de sus favoritos.

**Para ver los favoritos desde la Consola de administración de AWS de documentos**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Documentos**.

1. Seleccione la pestaña **Favoritos**.

# Solución de problemas de gestión de parámetros
<a name="parameter-troubleshooting"></a>

## Problemas comunes de gestión de parámetros
<a name="common-parameter-issues"></a>

**Las variables de entorno no están disponibles durante la ejecución**  
**Problema:** los comandos fallan porque no se encuentran las variables de entorno (`SSM_parameter-name`).  
**Causas posibles:**  
+ La versión de SSM Agent no admite la interpolación de variables de entorno
+ `interpolationType` no está configurado como `ENV_VAR`
+ El nombre del parámetro no coincide con el nombre de la variable de entorno esperada
**Solución:**  
+ Compruebe que la versión de SSM Agent sea 3.3.2746.0 o posterior
+ Agregue una lógica alternativa para las versiones anteriores del agente:

  ```
  if [ -z "${SSM_parameterName+x}" ]; then
      export SSM_parameterName="{{parameterName}}"
  fi
  ```

**Valores de parámetro que contienen caracteres especiales**  
**Problema:** los comandos fallan cuando los valores de los parámetros contienen espacios, comillas u otros caracteres especiales.  
**Solución:**  
+ Utilice las comillas adecuadas al hacer referencia a las variables de entorno:

  ```
  # Correct
  echo "$SSM_parameter-name"
  
  # Incorrect
  echo $SSM_parameter-name
  ```
+ Agregue la validación de entrada mediante `allowedPattern` para restringir los caracteres especiales

**Comportamiento incoherente en todas las plataformas**  
**Problema:** la gestión de parámetros funciona de manera diferente en Linux y en los sistemas Windows Server.  
**Solución:**  
+ Utilice la sintaxis de variables de entorno específica de la plataforma:

  ```
  # PowerShell
  $env:SSM_parameter-name
  
  # Bash
  $SSM_parameter-name
  ```
+ Utilice en su documento comprobaciones de condiciones previas específicas de la plataforma

**Los valores de los parámetros no se han filtrado correctamente**  
**Problema:** hay vulnerabilidades en la inyección de comandos a pesar de utilizar la interpolación de variables de entorno.  
**Solución:**  
+ Utilice siempre el método de escape adecuado al incluir valores de parámetros en los comandos:

  ```
  # Correct
  mysql_command="mysql -u \"$SSM_username\" -p\"$SSM_password\""
  
  # Incorrect
  mysql_command="mysql -u $SSM_username -p$SSM_password"
  ```

## Consejos de validación de parámetros
<a name="parameter-validation"></a>

Utilice estas técnicas para validar su gestión de parámetros:

1. Pruebe la disponibilidad de las variables del entorno:

   ```
   #!/bin/bash
   # Print all SSM_ environment variables
   env | grep ^SSM_
   
   # Test specific parameter
   if [ -n "$SSM_parameter" ]; then
       echo "Parameter is available"
   else
       echo "Parameter is not available"
   fi
   ```

1. Verifique los patrones de los parámetros:

   ```
   parameters:
     myParameter:
       type: String
       allowedPattern: "^[a-zA-Z0-9_-]+$"
       description: "Test this pattern with sample inputs"
   ```

1. Incluya la gestión de errores:

   ```
   if [[ ! "$SSM_parameter" =~ ^[a-zA-Z0-9_-]+$ ]]; then
       echo "Parameter validation failed"
       exit 1
   fi
   ```

# AWS Systems Manager Maintenance Windows
<a name="maintenance-windows"></a>

Maintenance Windows, una herramienta de AWS Systems Manager, permite definir una programación en el momento de llevar a cabo acciones potencialmente disruptivas en los nodos, como la aplicación de revisiones en un sistema operativo, la actualización de controladores o la instalación de software o revisiones.

**nota**  
State Manager y Maintenance Windows pueden realizar algunos tipos similares de actualizaciones en los nodos administrados. La opción que elija dependerá de si necesita automatizar la conformidad del sistema o realizar tareas de alta prioridad y urgencia durante los periodos que especifique.  
Para obtener más información, consulte [Elección entre State Manager y Maintenance Windows](state-manager-vs-maintenance-windows.md).

Gracias a Maintenance Windows, puede programar acciones en muchos otros recursos de AWS, como los buckets de Amazon Simple Storage Service (Amazon S3), las colas de Amazon Simple Queue Service (Amazon SQS), las claves de AWS Key Management Service (AWS KMS) y muchos más. 

Para obtener una lista completa de tipos de recursos admitidos que puede incluir en un destino de periodo de mantenimiento, consulte [Recursos que puede utilizar con Grupos de recursos de AWS y Tag Editor](https://docs.aws.amazon.com/ARG/latest/userguide/supported-resources.html#supported-resources-console) en la *Guía del usuario de Grupos de recursos de AWS*. Para comenzar a utilizar Maintenance Windows, abra la [consola de Systems Manager](https://console.aws.amazon.com//systems-manager/maintenance-windows). En el panel de navegación, elija **Maintenance Windows**.

Cada periodo de mantenimiento tiene una programación, una duración máxima, un conjunto de destinos registrados (los nodos administrados u otros recursos de AWS sobre los que se actúa) y un conjunto de tareas registradas. Puede agregar etiquetas a sus periodos de mantenimiento en el momento de crearlos o actualizarlos. (Las etiquetas son claves que ayudan a identificar y ordenar los recursos de la organización). También puede especificar fechas en las que un periodo de mantenimiento no debe ejecutarse antes ni después, y puede especificar la zona horaria internacional en la que basar la programación del periodo de mantenimiento. 

Para ver una explicación de cómo se relacionan entre sí las distintas opciones relacionadas con la programación de los periodos de mantenimiento, consulte [Programación de la ventana de mantenimiento y opciones de periodo activo](maintenance-windows-schedule-options.md).

Para obtener más información acerca del uso de la opción `--schedule`, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

**Tipos de tareas admitidas**  
Con los periodos de mantenimiento puede ejecutar cuatro tipos de tareas:
+ Comandos en Run Command, una herramienta de Systems Manager

  Para obtener más información acerca de Run Command, consulte [AWS Systems Manager Run Command](run-command.md).
+ Flujos de trabajo de Automatización, una herramienta de Systems Manager

  Para obtener más información acerca de los flujos de trabajo de Automation, consulte [AWS Systems Manager Automation](systems-manager-automation.md).
+ Funciones de AWS Lambda

  Para obtener más información acerca de las funciones de Lambda, consulte [Introducción a Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Tareas de AWS Step Functions
**nota**  
Las tareas de los periodos de mantenimiento solo admiten los flujos de trabajo de máquinas de estado estándar de Step Functions. No son compatibles con los flujos de trabajo de máquinas de estado rápidas. Para obtener información sobre los tipos de flujos de trabajo de máquinas de estado, consulte [Flujos de trabajo estándar en comparación con flujos de trabajo rápidos](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html) en la *Guía para desarrolladores de AWS Step Functions*.

  Para obtener más información acerca de Step Functions, consulte la *[Guía para desarrolladores de AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/)*.

Esto significa que puede utilizar los periodos de mantenimiento para realizar tareas tales como las siguientes en los destinos seleccionados.
+ Instalar o actualizar aplicaciones.
+ Aplicar revisiones.
+ Instalación o actualización de SSM Agent.
+ Ejecutar comandos de PowerShell y scripts de shell de Linux mediante una tarea de Systems Manager Run Command.
+ Crear Amazon Machine Images (AMIs), arrancar software y configurar instancias mediante una tarea de Automatización de Systems Manager.
+ Ejecutar funciones de AWS Lambda que invocan acciones adicionales, como el análisis de nodos para actualizar las revisiones.
+ Ejecutar máquinas de estado de AWS Step Functions para realizar ciertas tareas, como quitar un nodo de un entorno de Elastic Load Balancing, aplicar revisiones a ese nodo y agregarlo de nuevo al entorno de Elastic Load Balancing.
+ Dirigirse a los nodos sin conexión mediante la especificación de un grupo de recursos de AWS como destino.

**nota**  
Se deben especificar uno o más destinos para las tareas de tipo Run Command del periodo de mantenimiento. Según la tarea, los destinos son opcionales para otros tipos de tarea de periodo de mantenimiento (Automation, AWS Lambda y AWS Step Functions). Para obtener más información acerca de la ejecución de tareas que no especifican destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).

**Compatibilidad con EventBridge**  
Esta herramienta de Systems Manager se admite como un tipo de *evento* en las reglas de Amazon EventBridge. Para obtener más información, consulte [Cómo monitorear eventos de Systems Manager con Amazon EventBridge](monitoring-eventbridge-events.md) y [Referencia: patrones y tipos de eventos de Amazon EventBridge para Systems Manager](reference-eventbridge-events.md).

**Topics**
+ [Configuración de Maintenance Windows](setting-up-maintenance-windows.md)
+ [Crear y administrar periodos de mantenimiento mediante la consola](sysman-maintenance-working.md)
+ [Tutoriales](maintenance-windows-tutorials.md)
+ [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md)
+ [Programación de la ventana de mantenimiento y opciones de periodo activo](maintenance-windows-schedule-options.md)
+ [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md)
+ [Solución de problemas de periodos de mantenimiento](troubleshooting-maintenance-windows.md)

# Configuración de Maintenance Windows
<a name="setting-up-maintenance-windows"></a>

Para que los usuarios de su Cuenta de AWS puedan crear y programar tareas de periodo de mantenimiento mediante Maintenance Windows, una herramienta de AWS Systems Manager, es preciso que antes se les concedan los permisos necesarios. Además, debe crear un rol de servicio de IAM para los periodos de mantenimiento y la política de IAM que se le asocie.

**Antes de empezar**  
Además de los permisos que configure en esta sección, las entidades de IAM (usuarios, roles o grupos que funcionarán con los periodos de mantenimiento ya deberían tener permisos de periodos de mantenimiento generales. Puede conceder estos permisos al asignar la política de IAM `AmazonSSMFullAccess` a las entidades, o asignar una política de IAM personalizada que proporcione un conjunto más pequeño de permisos de acceso a Systems Manager que abarque las tareas de periodos de mantenimiento.

**Topics**
+ [Cómo controlar el acceso a periodos de mantenimiento mediante la consola](configuring-maintenance-window-permissions-console.md)
+ [Control del acceso a los periodos de mantenimiento mediante la AWS CLI](configuring-maintenance-window-permissions-cli.md)

# Cómo controlar el acceso a periodos de mantenimiento mediante la consola
<a name="configuring-maintenance-window-permissions-console"></a>

Los siguientes procedimientos describen cómo usar la consola de AWS Systems Manager para crear los permisos y los roles necesarios para periodos de mantenimiento.

**Topics**
+ [Tarea 1: cree una política personalizada para el rol de servicio de periodo de mantenimiento mediante la consola](#create-custom-policy-console)
+ [Tarea 2: cree un rol de servicio personalizado para periodos de mantenimiento mediante la consola](#create-custom-role-console)
+ [Tarea 3: conceda permisos a usuarios específicos para registrar tareas de periodos de mantenimiento mediante la consola](#allow-maintenance-window-access-console)
+ [Tarea 4: impida que usuarios específicos registren las tareas de periodos de mantenimiento mediante la consola](#deny-maintenance-window-access-console)

## Tarea 1: cree una política personalizada para el rol de servicio de periodo de mantenimiento mediante la consola
<a name="create-custom-policy-console"></a>

Las tareas de periodo de mantenimiento requieren un rol de IAM para proporcionar los permisos necesarios para su ejecución en los recursos de destino. Los permisos se conceden mediante una política de IAM asociada al rol. El contenido de esta política lo determinan los tipos de tareas que se ejecutan y el resto de requisitos operativos. Proporcionamos una política básica que se puede adaptar a sus necesidades. En función de las tareas y los tipos de tareas que ejecuten los periodos de mantenimiento, es posible que no necesite todos los permisos de esta política, o que tenga que incluir permisos adicionales. Más tarde adjuntará esta política al rol que cree en [Tarea 2: cree un rol de servicio personalizado para periodos de mantenimiento mediante la consola](#create-custom-role-console).

**Cómo crear una política personalizada mediante la consola**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Policies (Políticas)** y, a continuación, seleccione **Create policy (Crear política)**.

1. En el área del **Editor de políticas**, elija **JSON**.

1. Reemplace el contenido predeterminado con lo siguiente:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:DescribeInstanceInformation",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/maintenance-window-role-name",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. Modifique el contenido JSON de acuerdo con lo que necesiten las tareas de mantenimiento que ejecute en la cuenta. Los cambios que realice son específicos de las operaciones planificadas. 

   Por ejemplo:
   + Puede proporcionar nombres de recursos de Amazon (ARN) para funciones y máquinas de estado específicas en lugar de utilizar calificadores comodín (\$1).
   + Si no tiene previsto ejecutar tareas de AWS Step Functions, puede quitar los permisos y ARN de `states`.
   + Si no tiene previsto ejecutar tareas de AWS Lambda, puede quitar los permisos y ARN de `lambda`.
   + Si no tiene previsto ejecutar tareas de automatización, puede quitar los permisos `ssm:GetAutomationExecution` y `ssm:StartAutomationExecution`.
   + Agregue permisos adicionales que puedan ser necesarios para que se ejecuten las tareas. Por ejemplo, algunas acciones de Automation trabajan con pilas de AWS CloudFormation. Por lo tanto, los permisos `cloudformation:CreateStack`, `cloudformation:DescribeStacks` y `cloudformation:DeleteStack` son obligatorios. 

     Otro ejemplo es el manual de procedimientos de Automation `AWS-CopySnapshot`, que requiere permisos para crear una instantánea de Amazon Elastic Block Store (Amazon EBS). Por lo tanto, el rol de servicio necesita los permisos `ec2:CreateSnapshot`. 

     Para obtener información acerca de los permisos de rol que necesitan los manuales de procedimientos de automatización, consulte las descripciones de documentos en la [Referencia de manuales de procedimientos de Automatización de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html).

1. Cuando haya completado las revisiones de la política, elija **Siguiente**.

1. En **Nombre de la política**, ingrese un nombre que identifique esta como la política asociada al rol de servicio de que cree. Por ejemplo: **my-maintenance-window-role-policy**.

1. (Opcional) En el área de **Agregar etiquetas**, agregue uno o varios pares de valor etiqueta-clave para organizar, realizar un seguimiento o controlar el acceso a esta política. 

1. Elija **Crear política**.

   Anote el nombre que haya especificado para la política. Hará referencia a él en el siguiente procedimiento, [Tarea 2: cree un rol de servicio personalizado para periodos de mantenimiento mediante la consola](#create-custom-role-console).

## Tarea 2: cree un rol de servicio personalizado para periodos de mantenimiento mediante la consola
<a name="create-custom-role-console"></a>

La política que se crea en la tarea anterior se asocia al rol de servicio del periodo de mantenimiento que se crea en esta tarea. Cuando los usuarios registran una tarea de periodo de mantenimiento, especifican este rol de IAM como parte de la configuración de la tarea. Los permisos de este rol autorizan a Systems Manager a ejecutar tareas en periodos de mantenimiento en su nombre.

**importante**  
Antes, la consola de Systems Manager ofrecía la posibilidad de elegir el rol vinculado a servicio de IAM `AWSServiceRoleForAmazonSSM` administrado de AWS que utilizar como rol de mantenimiento para las tareas. Ya no se recomienda utilizar este rol y su política asociada, `AmazonSSMServiceRolePolicy`, para tareas de periodo de mantenimiento. Si está utilizando actualmente este rol para tareas de periodo de mantenimiento, le recomendamos que deje de hacerlo. En su lugar, cree su propio rol de IAM que permita la comunicación entre Systems Manager y otros Servicios de AWS cuando se ejecuten las tareas de periodo de mantenimiento.

Utilice el siguiente procedimiento para crear un rol de servicio personalizado para Maintenance Windows, de modo que Systems Manager pueda ejecutar tareas de Maintenance Windows en su nombre. Asocie la política que ha creado en la tarea anterior al rol de servicio personalizado que cree.

**Cómo crear un rol de servicio personalizado para periodos de mantenimiento mediante la consola**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Roles** y luego seleccione **Crear rol**.

1. En **Select trusted entity** (Seleccionar entidad de confianza), realice las siguientes elecciones:

   1. En **Tipo de entidad de confianza**, elija **Servicio de AWS**.

   1. En **Caso de uso**, elija **Systems Manager**

   1. Elija **Configurar Systems Manager**.

      La siguiente imagen resalta la ubicación de la opción Systems Manager.  
![\[Systems Manager es una de las opciones de Caso de uso.\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/images/iam_use_cases_for_MWs.png)

1. Elija **Siguiente**. 

1. En el área de **Políticas de permisos**, en el cuadro de búsqueda, ingrese el nombre de la política que ha creado en [Tarea 1: cree una política personalizada para el rol de servicio de periodo de mantenimiento mediante la consola](#create-custom-policy-console), seleccione la casilla situada junto a su nombre y, a continuación, elija **Siguiente**.

1. En el campo **Role name** (Nombre del rol), ingrese un nombre que identifique a este rol como un rol de Maintenance Windows. Por ejemplo: **my-maintenance-window-role**.

1. (Opcional) Puede cambiar la descripción predeterminada del rol para que refleje su finalidad. Por ejemplo: **Performs maintenance window tasks on your behalf**.

1. Para el **Paso 1: selección de entidades de confianza**, compruebe que la siguiente política aparezca en el cuadro **Política de confianza**.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "ssm.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. En el **Paso 2: agregado de permisos**, compruebe que la política que creó en [Tarea 1: cree una política personalizada para el rol de servicio de periodo de mantenimiento mediante la consola](#create-custom-policy-console) esté presente.

1. (Opcional) En el **Paso 3: agregado de etiquetas**, agregue uno o varios pares de valor etiqueta-clave para organizar, realizar un seguimiento o controlar el acceso a este rol. 

1. Elija **Create role**. El sistema le devuelve a la página **Roles**.

1. Elija el nombre del rol de IAM que acaba de crear.

1. Copie o anote el nombre del rol y el valor del **ARN** del área **Summary** (Resumen). Los usuarios de la cuenta tendrán que especificar esta información cuando creen periodos de mantenimiento.

## Tarea 3: conceda permisos a usuarios específicos para registrar tareas de periodos de mantenimiento mediante la consola
<a name="allow-maintenance-window-access-console"></a>

Conceder a los usuarios permisos para acceder al rol de servicio del periodo de mantenimiento personalizado les permite utilizarlo con sus tareas de periodos de mantenimiento. Esto se suma a los permisos que ya se les haya concedido para utilizar los comandos de la API de Systems Manager para la herramienta de Maintenance Windows. Este rol de IAM transmite los permisos necesarios para ejecutar una tarea de periodo de mantenimiento. Como resultado, un usuario no puede registrar tareas con un periodo de mantenimiento mediante el rol de servicio personalizado sin la posibilidad de transferir esos permisos de IAM.

Cuando registra una tarea en un periodo de mantenimiento, debe especificar un rol de servicio para ejecutar las operaciones de la tarea real. Este es el rol que el servicio asume cuando ejecuta las tareas en su nombre. Antes de eso, para registrar la tarea en sí, asigne la política de IAM `PassRole` a una entidad de IAM (como un usuario o un grupo). Esto permite que la entidad de IAM especifique, como parte del registro de esas tareas con el periodo de mantenimiento, el rol que se debe usar al ejecutar tareas. Para obtener más información, consulte [Concesión de permisos a un usuario para transferir un rol a un Servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) en la *Guía del usuario de IAM*.

**Cómo configurar permisos para que los usuarios puedan registrar tareas de periodos de mantenimiento**

Si una entidad de IAM (usuario, rol o grupo) está configurada con permisos de administrador, el usuario de IAM o el rol tendrá acceso a los periodos de mantenimiento. Para las entidades de IAM sin permisos de administrador, el administrador debe conceder los siguientes permisos a la entidad de IAM. Estos son los permisos mínimos necesarios para registrar tareas con un periodo de mantenimiento:
+ La política administrada `AmazonSSMFullAccess`, o una política que proporcione permisos comparables.
+ Los siguientes permisos `iam:PassRole` y `iam:ListRoles`.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
          },
          {
              "Effect": "Allow",
              "Action": "iam:ListRoles",
              "Resource": "arn:aws:iam::111122223333:role/"
          },
          {
              "Effect": "Allow",
              "Action": "iam:ListRoles",
              "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
          }
      ]
  }
  ```

------

  *my-maintenance-window-role* representa el nombre del rol de servicio del periodo de mantenimiento personalizado que ha creado antes.

  *account-id* representa el ID de su Cuenta de AWS. Al agregar este permiso para el recurso `arn:aws:iam::account-id:role/` se permite al usuario ver y elegir entre los roles de cliente en la consola cuando crea una tarea del periodo de mantenimiento. La adición de este permiso para `arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` permite al usuario elegir el rol vinculado al servicio de Systems Manager en la consola cuando se crea una tarea del periodo de mantenimiento. 

  Para dar acceso, agregue permisos a los usuarios, grupos o roles:
  + Usuarios y grupos en AWS IAM Identity Center:

    Cree un conjunto de permisos. Siga las instrucciones de [Creación de un conjunto de permisos](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) en la *Guía del usuario de AWS IAM Identity Center*.
  + Usuarios gestionados en IAM a través de un proveedor de identidades:

    Cree un rol para la federación de identidades. Siga las instrucciones descritas en [Creación de un rol para un proveedor de identidad de terceros (federación)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) en la *Guía del usuario de IAM*.
  + Usuarios de IAM:
    + Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en [Creación de un rol para un usuario de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) en la *Guía del usuario de IAM*.
    + (No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en [Adición de permisos a un usuario (consola)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) de la *Guía del usuario de IAM*.

**Cómo configurar permisos para grupos con autorización para registrar tareas de periodos de mantenimiento mediante la consola**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, elija **User groups** (Grupos de usuarios).

1. En la lista de grupos, seleccione el nombre del grupo al que desea asignar el permiso `iam:PassRole` o primero cree un nuevo grupo si es necesario 

1. En la pestaña **Permissions** (Permisos), elija **Add permissions, Create Inline Policy** (Agregar permisos, Crear política insertada).

1. En el área del **Editor de la política**, elija **JSON** y reemplace los contenidos predeterminados del cuadro con lo siguiente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   *my-maintenance-window-role* representa el nombre del rol de la ventana de mantenimiento personalizada que ha creado antes.

   *account-id* representa el ID de su Cuenta de AWS. Al agregar este permiso para el recurso `arn:aws:iam::account-id:role/` se permite al usuario ver y elegir entre los roles de cliente en la consola cuando crea una tarea del periodo de mantenimiento. La adición de este permiso para `arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` permite al usuario elegir el rol vinculado al servicio de Systems Manager en la consola cuando se crea una tarea del periodo de mantenimiento. 

1. Elija **Siguiente**.

1. En la página **Revisar política**, ingrese un nombre en el cuadro **Nombre de la política** para identificar esta política `PassRole`, como por ejemplo **my-group-iam-passrole-policy**, y luego, elija **Crear política**.

## Tarea 4: impida que usuarios específicos registren las tareas de periodos de mantenimiento mediante la consola
<a name="deny-maintenance-window-access-console"></a>

Puede denegar el permiso `ssm:RegisterTaskWithMaintenanceWindow` a los usuarios de la Cuenta de AWS que no desee que registren tareas en periodos de mantenimiento. Esto proporciona una capa adicional de protección frente a usuarios que no deban registrar tareas de periodo de mantenimiento.

**Cómo configurar permisos para grupos que no pueden asignar tareas de periodos de mantenimiento mediante la consola**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, elija **User groups** (Grupos de usuarios).

1. En la lista de grupos, seleccione el nombre del grupo al que desea denegar el formulario de permiso `ssm:RegisterTaskWithMaintenanceWindow`, o primero cree un nuevo grupo si es necesario.

1. En la pestaña **Permissions** (Permisos), elija **Add permissions, Create Inline Policy** (Agregar permisos, Crear política insertada).

1. En el área del **Editor de la política**, elija **JSON** y, luego, reemplace los contenidos predeterminados del cuadro con lo siguiente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, ingrese un nombre en **Nombre de la política** para identificar esta política, como por ejemplo **my-groups-deny-mw-tasks-policy** y, luego, elija **Crear política**.

# Control del acceso a los periodos de mantenimiento mediante la AWS CLI
<a name="configuring-maintenance-window-permissions-cli"></a>

En los procedimientos siguientes, se explica cómo se usa la AWS Command Line Interface (AWS CLI) para crear los roles y los permisos necesarios para Maintenance Windows, una herramienta de AWS Systems Manager.

**Topics**
+ [Tarea 1: crear archivos de política de confianza y política administrada por el cliente en formato JSON](#create-custom-policy-json-files-cli)
+ [Tarea 2: crear y verificar un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI](#create-custom-role-cli)
+ [Tarea 3: conceder permisos a usuarios específicos para que registren tareas del periodo de mantenimiento mediante la AWS CLI](#allow-maintenance-window-access-cli)
+ [Tarea 4: impida que usuarios específicos registren las tareas de periodos de mantenimiento mediante la AWS CLI](#deny-maintenance-window-access-cli)

## Tarea 1: crear archivos de política de confianza y política administrada por el cliente en formato JSON
<a name="create-custom-policy-json-files-cli"></a>

Las tareas de periodo de mantenimiento requieren un rol de IAM para proporcionar los permisos necesarios para su ejecución en los recursos de destino. Los permisos se conceden mediante una política de IAM asociada al rol. El contenido de esta política lo determinan los tipos de tareas que se ejecutan y el resto de requisitos operativos. Proporcionamos una política básica que se puede adaptar a sus necesidades. En función de las tareas y los tipos de tareas que ejecuten los periodos de mantenimiento, es posible que no necesite todos los permisos de esta política, o que tenga que incluir permisos adicionales. 

En esta tarea, debe especificar los permisos necesarios para el rol del periodo de mantenimiento personalizado en un par de archivos JSON. Más tarde adjuntará esta política al rol que cree en [Tarea 2: crear y verificar un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI](#create-custom-role-cli). 

**Para crear archivos de política de confianza y política administrada por el cliente**

1. Copie y pegue la siguiente política de confianza en un archivo de texto. Guarde este archivo con el siguiente nombre y extensión de archivo: **mw-role-trust-policy.json**.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. Copie y pegue la siguiente política de JSON en un archivo de texto diferente. En el mismo directorio en el que creó el primer archivo, guárdelo con el siguiente nombre y extensión de archivo: **mw-role-custom-policy.json**.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/maintenance-window-role-name",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. Modifique el contenido de `mw-role-custom-policy.json` de acuerdo con las necesidades de las tareas de mantenimiento que ejecute en la cuenta. Los cambios que realice son específicos de las operaciones planificadas. 

   Por ejemplo:
   + Puede proporcionar nombres de recursos de Amazon (ARN) para funciones y máquinas de estado específicas en lugar de utilizar calificadores comodín (\$1).
   + Si no tiene previsto ejecutar tareas de AWS Step Functions, puede quitar los permisos y ARN de `states`.
   + Si no tiene previsto ejecutar tareas de AWS Lambda, puede quitar los permisos y ARN de `lambda`.
   + Si no tiene previsto ejecutar tareas de automatización, puede quitar los permisos `ssm:GetAutomationExecution` y `ssm:StartAutomationExecution`.
   + Agregue permisos adicionales que puedan ser necesarios para que se ejecuten las tareas. Por ejemplo, algunas acciones de Automation trabajan con pilas de AWS CloudFormation. Por lo tanto, los permisos `cloudformation:CreateStack`, `cloudformation:DescribeStacks` y `cloudformation:DeleteStack` son obligatorios. 

     Otro ejemplo es el manual de procedimientos de Automation `AWS-CopySnapshot`, que requiere permisos para crear una instantánea de Amazon Elastic Block Store (Amazon EBS). Por lo tanto, el rol de servicio necesita los permisos `ec2:CreateSnapshot`. 

     Para obtener información acerca de los permisos de rol que necesitan los manuales de procedimientos de automatización, consulte las descripciones de documentos en la [Referencia de manuales de procedimientos de Automatización de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html).

   Guarde el archivo de nuevo después de realizar los cambios necesarios.

## Tarea 2: crear y verificar un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI
<a name="create-custom-role-cli"></a>

La política que se crea en la tarea anterior se asocia al rol de servicio del periodo de mantenimiento que se crea en esta tarea. Cuando los usuarios registran una tarea de periodo de mantenimiento, especifican este rol de IAM como parte de la configuración de la tarea. Los permisos de este rol autorizan a Systems Manager a ejecutar tareas en periodos de mantenimiento en su nombre.

**importante**  
Antes, la consola de Systems Manager ofrecía la posibilidad de elegir el rol vinculado a servicio de IAM `AWSServiceRoleForAmazonSSM` administrado de AWS que utilizar como rol de mantenimiento para las tareas. Ya no se recomienda utilizar este rol y su política asociada, `AmazonSSMServiceRolePolicy`, para tareas de periodo de mantenimiento. Si está utilizando actualmente este rol para tareas de periodo de mantenimiento, le recomendamos que deje de hacerlo. En su lugar, cree su propio rol de IAM que permita la comunicación entre Systems Manager y otros Servicios de AWS cuando se ejecuten las tareas de periodo de mantenimiento.

En esta tarea, ejecute comandos de la CLI para crear su rol de servicio del periodo de mantenimiento mediante la adición del contenido de la política de los archivos JSON que creó. 

**Cree un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI**

1. Abra la AWS CLI y ejecute el siguiente comando en el directorio en el que guardó `mw-role-custom-policy.json` y `mw-role-trust-policy.json`. El comando crea un rol de servicio del periodo de mantenimiento llamado `my-maintenance-window-role` y le asocia la *política de confianza*.

------
#### [ Linux & macOS ]

   ```
   aws iam create-role \
       --role-name "my-maintenance-window-role" \
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------
#### [ Windows ]

   ```
   aws iam create-role ^
       --role-name "my-maintenance-window-role" ^
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Action": "sts:AssumeRole",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       }
                   }
               ]
           },
           "RoleId": "AROAIIZKPBKS2LEXAMPLE",
           "CreateDate": "2024-08-19T03:40:17.373Z",
           "RoleName": "my-maintenance-window-role",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role"
       }
   }
   ```
**nota**  
Anote los valores de `RoleName` y `Arn`. Los incluirá en el siguiente comando.

1. Ejecute el siguiente comando para asociar la *política administrada por el cliente* al rol. Reemplace el marcador de posición *account-id* con su propio ID de la Cuenta de AWS

------
#### [ Linux & macOS ]

   ```
   aws iam attach-role-policy \
       --role-name "my-maintenance-window-role" \
       --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
   ```

------
#### [ Windows ]

   ```
   aws iam attach-role-policy ^
       --role-name "my-maintenance-window-role" ^
       --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
   ```

------

1. Ejecute el siguiente comando para comprobar que el rol se ha creado y que la política de confianza se ha asociado.

   ```
   aws iam get-role --role-name my-maintenance-window-role
   ```

   El comando devuelve información similar a la siguiente:

   ```
   {
       "Role": {
           "Path": "/",
           "RoleName": "my-maintenance-window-role",
           "RoleId": "AROA123456789EXAMPLE",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role",
           "CreateDate": "2024-08-19T14:13:32+00:00",
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           },
           "MaxSessionDuration": 3600,
           "RoleLastUsed": {
               "LastUsedDate": "2024-08-19T14:30:44+00:00",
               "Region": "us-east-2"
           }
       }
   }
   ```

1. Ejecute el siguiente comando para comprobar que la política administrada por el cliente se ha asociado al rol.

   ```
   aws iam list-attached-role-policies --role-name my-maintenance-window-role
   ```

   El comando devuelve información similar a la siguiente:

   ```
   {
       "AttachedPolicies": [
           {
               "PolicyName": "mw-role-custom-policy",
               "PolicyArn": "arn:aws:iam::123456789012:policy/mw-role-custom-policy"
           }
       ]
   }
   ```

## Tarea 3: conceder permisos a usuarios específicos para que registren tareas del periodo de mantenimiento mediante la AWS CLI
<a name="allow-maintenance-window-access-cli"></a>

Conceder a los usuarios permisos para acceder al rol de servicio del periodo de mantenimiento personalizado les permite utilizarlo con sus tareas de periodos de mantenimiento. Esto se suma a los permisos que ya se les haya concedido para utilizar los comandos de la API de Systems Manager para la herramienta de Maintenance Windows. Este rol de IAM transmite los permisos necesarios para ejecutar una tarea de periodo de mantenimiento. Como resultado, un usuario no puede registrar tareas con un periodo de mantenimiento mediante el rol de servicio personalizado sin la posibilidad de transferir esos permisos de IAM.

Cuando registra una tarea en un periodo de mantenimiento, debe especificar un rol de servicio para ejecutar las operaciones de la tarea real. Este es el rol que el servicio asume cuando ejecuta las tareas en su nombre. Antes de eso, para registrar la tarea en sí, asigne la política de IAM `PassRole` a una entidad de IAM (como un usuario o un grupo). Esto permite que la entidad de IAM especifique, como parte del registro de esas tareas con el periodo de mantenimiento, el rol que se debe usar al ejecutar tareas. Para obtener más información, consulte [Concesión de permisos a un usuario para transferir un rol a un Servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) en la *Guía del usuario de IAM*.

**Para configurar los permisos para usuarios con autorización para registrar tareas de periodos de mantenimiento mediante la AWS CLI**

1. Copie y pegue la siguiente política de AWS Identity and Access Management (IAM) en un editor de texto y guárdela con el nombre y la extensión de archivo siguientes: `mw-passrole-policy.json`.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::111122223333:role/my-maintenance-window-role"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::111122223333:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   Reemplace *my-maintenance-window-role* con el nombre del rol de la ventana de mantenimiento personalizada que ha creado antes.

   Reemplace *account-id* por el ID de su Cuenta de AWS. Al agregar este permiso para el recurso `arn:aws:iam::account-id:role/` se permite a los usuarios del grupo ver y elegir entre los roles de cliente en la consola cuando crean una tarea del periodo de mantenimiento. La adición de este permiso para `arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/` permite a los usuarios del grupo elegir el rol vinculado al servicio de Systems Manager en la consola cuando crean una tarea del periodo de mantenimiento. 

1. Abra la AWS CLI.

1. En función de si el permiso se está asignando a una entidad de IAM (usuario o grupo), ejecute uno de los siguientes comandos.
   + **Para una entidad de IAM:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "user-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "user-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     En *user-name*, especifique el usuario que asigna tareas a periodos de mantenimiento. En *policy-name*, especifique el nombre que desea utilizar para identificar la política, por ejemplo **my-iam-passrole-policy**. En *path-to-document* (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: `file://C:\Temp\mw-passrole-policy.json`
**nota**  
Para conceder acceso a un usuario para que registre tareas en periodos de mantenimiento mediante la consola de Systems Manager, también debe asignar la política `AmazonSSMFullAccess` a su usuario (o una política de IAM que proporcione un pequeño conjunto de permisos de acceso para Systems Manager que cubra las tareas de periodos de mantenimiento). Ejecute el siguiente comando para asignar la política `AmazonSSMFullAccess` a su usuario.  

     ```
     aws iam attach-user-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --user-name "user-name"
     ```

     ```
     aws iam attach-user-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --user-name "user-name"
     ```
   + **Para un grupo de IAM:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "group-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "group-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     En *group-name*, especifique el grupo cuyos miembros asignarán tareas de periodos de mantenimiento. En *policy-name*, especifique el nombre que desea utilizar para identificar la política, por ejemplo **my-iam-passrole-policy**. En *path-to-document* (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: `file://C:\Temp\mw-passrole-policy.json`
**nota**  
Para conceder acceso a los miembros de un grupo de modo que puedan registrar tareas de periodos de mantenimiento mediante la consola de Systems Manager, también debe asignar la política `AmazonSSMFullAccess` al grupo. Ejecute el siguiente comando para asignar esta política al grupo.  

     ```
     aws iam attach-group-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --group-name "group-name"
     ```

     ```
     aws iam attach-group-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --group-name "group-name"
     ```

1. Ejecute el siguiente comando para verificar que la política se haya asignado al grupo.

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "group-name"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "group-name"
   ```

------

## Tarea 4: impida que usuarios específicos registren las tareas de periodos de mantenimiento mediante la AWS CLI
<a name="deny-maintenance-window-access-cli"></a>

Puede denegar el permiso `ssm:RegisterTaskWithMaintenanceWindow` a los usuarios de la Cuenta de AWS que no desee que registren tareas en periodos de mantenimiento. Esto proporciona una capa adicional de protección frente a usuarios que no deban registrar tareas de periodo de mantenimiento.

En función de si el permiso `ssm:RegisterTaskWithMaintenanceWindow` se deniega a un usuario individual o a un grupo, utilice uno de los siguientes procedimientos para evitar que los usuarios registren tareas con un periodo de mantenimiento. 

**Para configurar permisos para usuarios que no pueden registrar tareas de periodos de mantenimiento mediante la AWS CLI**

1. Copie y pegue la siguiente política de IAM en un editor de texto y guárdela con el nombre y la extensión de archivo .: **deny-mw-tasks-policy.json**.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Abra la AWS CLI.

1. En función de si el permiso se está asignando a una entidad de IAM (usuario o grupo), ejecute uno de los siguientes comandos.
   + **Para un usuario:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "user-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "user-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     En *user-name*, especifique el usuario para que no pueda asignar tareas de periodos de mantenimiento. En *policy-name*, especifique el nombre que desea utilizar para identificar la política, por ejemplo **my-deny-mw-tasks-policy**. En *path-to-document* (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: `file://C:\Temp\deny-mw-tasks-policy.json`
   + **Para un grupo:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "group-name" \
         --policy-name "policy-name" \
         --policy-document file://path-to-document
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "group-name" ^
         --policy-name "policy-name" ^
         --policy-document file://path-to-document
     ```

------

     En *group-name*, especifique el grupo para que sus miembros no puedan asignar tareas de periodos de mantenimiento. En *policy-name*, especifique el nombre que desea utilizar para identificar la política, por ejemplo **my-deny-mw-tasks-policy**. En *path-to-document* (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: `file://C:\Temp\deny-mw-tasks-policy.json`

1. Ejecute el siguiente comando para verificar que la política se haya asignado al grupo.

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "group-name"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "group-name"
   ```

------

# Crear y administrar periodos de mantenimiento mediante la consola
<a name="sysman-maintenance-working"></a>

En esta sección se describe cómo crear, configurar, actualizar y eliminar periodos de mantenimiento con la consola de AWS Systems Manager. En esta sección también se ofrece información sobre la administración de los destinos y las tareas de un periodo de mantenimiento.

**importante**  
Le recomendamos que inicialmente cree y configure períodos de mantenimiento en un entorno de pruebas. 

**Antes de empezar**  
Antes de crear un periodo de mantenimiento, debe configurar el acceso a Maintenance Windows, una herramienta de AWS Systems Manager. Para obtener más información, consulte [Configuración de Maintenance Windows](setting-up-maintenance-windows.md).

**Topics**
+ [Crear y configurar un periodo de mantenimiento mediante la consola](sysman-maintenance-create-mw.md)
+ [Asignar destinos a un periodo de mantenimiento mediante la consola](sysman-maintenance-assign-targets.md)
+ [Asignar tareas a un periodo de mantenimiento mediante la consola](sysman-maintenance-assign-tasks.md)
+ [Activar o desactivar un periodo de mantenimiento mediante la consola](sysman-maintenance-disable.md)
+ [Actualizar o eliminar recursos de un periodo de mantenimiento mediante la consola](sysman-maintenance-update.md)

# Crear y configurar un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-create-mw"></a>

En este procedimiento, creará un periodo de mantenimiento en Maintenance Windows, una herramienta de AWS Systems Manager. Puede especificar las opciones básicas, como el nombre, la programación y la duración. Más adelante, puede elegir los destinos, o los recursos, que se actualizan y las tareas que se llevan a cabo cuando se ejecuta el periodo de mantenimiento.

**nota**  
Para ver una explicación de cómo se relacionan entre sí las distintas opciones relacionadas con la programación de los periodos de mantenimiento, consulte [Programación de la ventana de mantenimiento y opciones de periodo activo](maintenance-windows-schedule-options.md).  
Para obtener más información acerca del uso de la opción `--schedule`, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

**Para crear un periodo de mantenimiento mediante la consola**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. Elija **Create maintenance window (Crear periodo de mantenimiento)**.

1. En el campo **Name** (Nombre), ingrese un nombre descriptivo que lo ayude a identificar este periodo de mantenimiento.

1. (Opcional) En **Description** (Descripción), ingrese una descripción para identificar cómo se utilizará este periodo de mantenimiento.

1. (Opcional) Si desea permitir que se ejecute una tarea del periodo de mantenimiento en los nodos administrados, incluso si no ha registrado esos nodos como destinos, elija **Allow unregistered targets** (Permitir destinos no registrados). 

   Si elige esta opción, podrá elegir los nodos no registrados (por ID de nodo) al registrar una tarea con el periodo de mantenimiento. 

   Si no elige esta opción, deberá elegir los destinos registrados anteriormente cuando registre una tarea con el periodo de mantenimiento.

1. Especifique una programación para el período de mantenimiento usando una de las tres opciones de programación.

   Para obtener información acerca de cómo crear expresiones Cron y Rate, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

1. En **Duration (Duración)**, escriba el número de horas que se ejecutará el periodo de mantenimiento. El valor que especifique determina la hora de finalización específica del periodo de mantenimiento en función de la hora de inicio. No se permite que las tareas del período de mantenimiento comiencen después de la hora de enlace resultante menos el número de horas que especifique para **Stop initiating tasks (Dejar de iniciar tareas)** en el siguiente paso.

   Por ejemplo, si el período de mantenimiento comienza a las 15:00 h, la duración es de tres horas y el valor de **Stop initiating tasks (Dejar de iniciar tareas)** es de una hora, no se pueden iniciar tareas del período de mantenimiento después de las 17:00 h.

1. En el campo **Stop initiating tasks (Dejar de iniciar tareas)**, escriba el número de horas que el sistema debe considerar antes de que finalice el período de mantenimiento para dejar de programar nuevas tareas por ejecutar.

1. (Opcional) En **Window start date** (Fecha de inicio del periodo), especifique una fecha y un horario en formato extendido ISO-8601 para cuando desee que se active el periodo de mantenimiento. Esto le permite retrasar la activación del periodo de mantenimiento hasta la fecha futura especificada.
**nota**  
No puede especificar una fecha y hora de inicio que se produzcan en el pasado.

1. (Opcional) En **Fecha de finalización del periodo**, especifique una fecha y un horario en formato extendido ISO-8601 para cuando desee que se desactive el periodo de mantenimiento. Esto le permite establecer una fecha y hora en el futuro después de la cual el periodo de mantenimiento dejará de ejecutarse.

1. (Opcional) En **Schedule timezone** (Programar zona horaria), especifique la zona horaria que se utilizará como base para ejecutar los periodos de mantenimiento programados, en formato Internet Assigned Numbers Authority (IANA). Por ejemplo: "America/Los\$1Angeles", "etc/UTC" o "Asia/Seoul".

   Para obtener más información sobre los formatos válidos, consulte [Time Zone Database](https://www.iana.org/time-zones) en el sitio web de IANA.

1. (Opcional) En **Schedule offset** (Programar offset), ingrese la cantidad de días que se debe esperar después de la fecha y hora especificadas por una expresión cron o rate antes de ejecutar el periodo de mantenimiento. Puede especificar entre uno y seis días.
**nota**  
Esta opción solo está disponible si ha especificado una programación mediante el ingreso manual de una expresión cron o rate.

1. (Opcional) En el área **Manage tags (Administrar etiquetas)**, aplique uno o varios pares de claves nombre/valor al periodo de mantenimiento.

   Las etiquetas son metadatos opcionales que usted asigna a un recurso. Las etiquetas permiten clasificar los recursos de diversas maneras, por ejemplo, según la finalidad, el propietario o el entorno. Por ejemplo, es posible que desee etiquetar un periodo de mantenimiento para identificar el tipo de tareas que ejecuta, los tipos de destinos y el entorno en el que se ejecuta. En este caso, puede especificar los siguientes pares de claves nombre-valor:
   + `Key=TaskType,Value=AgentUpdate`
   + `Key=OS,Value=Windows`
   + `Key=Environment,Value=Production`

1. Elija **Create maintenance window (Crear periodo de mantenimiento)**. El sistema le devuelve a la página de periodo de mantenimiento. El estado del período de mantenimiento que acaba de crear es **Enabled (Habilitado)**.

# Asignar destinos a un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-assign-targets"></a>

En este procedimiento, se registra un destino con un período de mantenimiento. En otras palabras, debe especificar los recursos en los que el periodo de mantenimiento realiza acciones.

**nota**  
Si se registra una sola tarea del periodo de mantenimiento con varios destinos, las invocaciones de la tarea se producen de forma secuencial y no en paralelo. Si la tarea debe ejecutarse en varios destinos al mismo tiempo, registre una tarea para cada destino de forma individual y asigne a cada tarea el mismo nivel de prioridad.

**Para asignar destinos a un periodo de mantenimiento mediante la consola**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. En la lista de periodos de mantenimiento, elija el período de mantenimiento al que desee añadir destinos.

1. Elija **Actions (Acciones)** y, a continuación, elija **Register targets (Registrar destinos)**.

1. (Opcional) Para **Target Name (Nombre de destino)**, escriba un nombre para los destinos.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. (Opcional) En **Owner information** (Información del propietario), especifique información para incluir en cualquier evento de Amazon EventBridge que se genere mientras se ejecutan las tareas para estos destinos en este periodo de mantenimiento.

   Para obtener información acerca de cómo utilizar EventBridge para monitorear los eventos de Systems Manager, consulte [Cómo monitorear eventos de Systems Manager con Amazon EventBridge](monitoring-eventbridge-events.md).

1. En el área de** Destinos** , elija una de las opciones que se describen en la siguiente tabla.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/sysman-maintenance-assign-targets.html)

1. Elija **Register target (Registrar destino)**.

Si desea asignar más destinos a este período, elija la pestaña **Destinos ** y, a continuación, elija **Registrar nuevos destinos**. Con esta opción, puede elegir una manera diferente de dirigirse a los destinos. Por ejemplo, si anteriormente se dirigía a los nodos por el ID de nodo, puede registrar nuevos destinos y dirigirse a los nodos especificando etiquetas aplicadas a los nodos administrados o la elección de tipos de recursos a partir de un grupo de recursos.

# Asignar tareas a un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-assign-tasks"></a>

En este procedimiento, añada una tarea a un período de mantenimiento. Las tareas son las acciones que se realizan cuando se ejecuta un periodo de mantenimiento.

Se pueden añadir a un periodo de mantenimiento los siguientes cuatro tipos de tareas:
+ Comandos AWS Systems Manager de Run Command
+ Flujos de trabajo de Systems Manager Automation
+ AWS Step FunctionsTareas de 
+ Funciones de AWS Lambda
**importante**  
La política de IAM para Maintenance Windows requiere que se agregue el prefijo `SSM` a los nombres de la función (o alias) de Lambda. Antes de continuar con el registro de este tipo de tareas, actualice el nombre en AWS Lambda para incluir `SSM`. Por ejemplo, si el nombre de la función de Lambda es `MyLambdaFunction`, cámbielo a `SSMMyLambdaFunction`.

**Para asignar tareas a un período de mantenimiento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. En la lista de periodos de mantenimiento, elija un periodo de mantenimiento.

1. Elija **Actions** (Acciones) y, luego, elija la opción para el tipo de tarea que desea registrar con el periodo de mantenimiento.
   + **Registrar tarea de Run Command**
   + **Registrar tarea de Automation**
   + **Registrar tarea de Lambda**
   + **Registrar tarea de Step Functions**
**nota**  
Las tareas de los periodos de mantenimiento solo admiten los flujos de trabajo de máquinas de estado estándar de Step Functions. No son compatibles con los flujos de trabajo de máquinas de estado rápidas. Para obtener información sobre los tipos de flujos de trabajo de máquinas de estado, consulte [Flujos de trabajo estándar en comparación con flujos de trabajo rápidos](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html) en la *Guía para desarrolladores de AWS Step Functions*.

1. (Opcional) En **Name** (Nombre), ingrese el nombre de la tarea.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. Para **New task invocation cutoff** (Nuevo límite de invocación de tareas), si no desea que se inicie ninguna invocación de tareas nueva después de que se haya alcanzado el tiempo límite de la ventana de mantenimiento, elija **Enabled** (Habilitado).

   Cuando esta opción está *des* activada, la tarea continúa ejecutándose cuando se alcanza el tiempo límite e inicia invocaciones de tareas nuevas hasta que se completan. 
**nota**  
El estado de las tareas que no se han completado al habilitar esta opción es `TIMED_OUT`. 

1. Para este paso, elija la pestaña del tipo de tarea seleccionado.

------
#### [ Run Command ]

   1. En la lista de **Documento de comando**, elija el documento de comandos de Systems Manager (documento de SSM) que define las tareas que se ejecutan.

   1. En **Document version (Versión de documento)**, seleccione la versión de documento que se utilizará.

   1. En **Task priority (Prioridad de tarea)**, especifique una prioridad para esta tarea. Cero (`0`) es la prioridad más alta. Las tareas de un período de mantenimiento se programan por orden de prioridad; las tareas que tengan la misma prioridad se programan en paralelo.

------
#### [ Automation ]

   1.  En la lista **Documento de Automatización**, elija el manual de procedimientos de Automatización que defina las tareas que se ejecutarán.

   1. En **Document version** (Versión de documento), elija la versión del manual de procedimientos que se utilizará.

   1. En **Task priority (Prioridad de tarea)**, especifique una prioridad para esta tarea. Cero (`0`) es la prioridad más alta. Las tareas de un período de mantenimiento se programan por orden de prioridad; las tareas que tengan la misma prioridad se programan en paralelo.

------
#### [ Lambda ]

   1. En el área **Parámetros de Lambda**, elija una función de Lambda de la lista.

   1. (Opcional) En **Payload** (Carga), **Client Context** (Contexto de cliente) o **Qualifier** (Calificador) proporcione el contenido que desee incluir.
**nota**  
En algunos casos, puede usar un *pseudoparámetro* como parte de su valor `Payload`. Luego, al ejecutarse la tarea del periodo de mantenimiento, esta pasa los valores correctos en lugar de los marcadores de posición del pseudoparámetro. Para obtener más información, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md).

   1. En **Task priority (Prioridad de tarea)**, especifique una prioridad para esta tarea. Cero (`0`) es la prioridad más alta. Las tareas de un período de mantenimiento se programan por orden de prioridad; las tareas que tengan la misma prioridad se programan en paralelo.

------
#### [ Step Functions ]

   1. En el área **Parámetros de Step Functions**, elija una máquina de estado de la lista.

   1. (Opcional) Proporcione un nombre para la ejecución de la máquina de estado y cualquier contenido que desee incluir para **Input** (Entrada).
**nota**  
En algunos casos, puede usar un *pseudoparámetro* como parte de su valor `Input`. Luego, al ejecutarse la tarea del periodo de mantenimiento, esta pasa los valores correctos en lugar de los marcadores de posición del pseudoparámetro. Para obtener más información, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md).

   1. En **Task priority (Prioridad de tarea)**, especifique una prioridad para esta tarea. Cero (`0`) es la prioridad más alta. Las tareas de un período de mantenimiento se programan por orden de prioridad; las tareas que tengan la misma prioridad se programan en paralelo.

------

1. En el área **Targets** (Destinos), elija una de las siguientes opciones:
   + **Selecting registered target groups** (Selección de grupos de destino registrados): seleccione uno o más destinos del periodo de mantenimiento que haya registrado con el periodo de mantenimiento actual.
   + **Selecting unregistered targets** (Selección de destinos no registrados): elija los recursos disponibles uno por uno como destinos para la tarea.

     Si un nodo administrado que espera ver no aparece en la lista, consulte [Solución de problemas de disponibilidad de nodos administrados](fleet-manager-troubleshooting-managed-nodes.md) para obtener consejos de solución de problemas.
   + **Task target not required** (Destino de tarea no requerido): los destinos para la tarea pueden ya estar especificados en otras funciones para todas las tareas, excepto para las tareas de tipo Run Command.

     Especifique uno o más destinos para las tareas de tipo Run Command del periodo de mantenimiento. Según la tarea, los destinos son opcionales para otros tipos de tarea de periodo de mantenimiento (Automation, AWS Lambda y AWS Step Functions). Para obtener más información acerca de la ejecución de tareas que no especifican destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).
**nota**  
En muchos casos, no es necesario especificar de forma explícita un destino para una tarea de automatización. Por ejemplo, suponga que crea una tarea de tipo Automation para actualizar una Amazon Machine Image (AMI) para Linux mediante el manual de procedimientos `AWS-UpdateLinuxAmi`. Cuando se ejecuta la tarea, la AMI se actualiza con los paquetes de distribución de Linux y el software de Amazon disponibles más recientes. Las instancias nuevas que se crearon a partir de la AMI ya tienen estas actualizaciones instaladas. Como el ID de la AMI que se actualizará se especifica en los parámetros de entrada del manual de procedimientos, no es necesario volver a especificar un destino en la tarea del periodo de mantenimiento.

1. *Solo tareas de Automatización:*

   En el área **Input parameters** (Parámetros de entrada), proporcione valores para cualquier parámetro obligatorio u opcional necesario para ejecutar la tarea.
**nota**  
En algunos casos, puede utilizar un *pseudoparámetro* para determinados valores de parámetros de entrada. Luego, al ejecutarse la tarea del periodo de mantenimiento, esta pasa los valores correctos en lugar de los marcadores de posición del pseudoparámetro. Para obtener más información, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md).

1. En **Rate control** (Control de velocidad):
   + En **Concurrency** (Simultaneidad), especifique un número o un porcentaje de los nodos administrados en los que desea ejecutar el comando al mismo tiempo.
**nota**  
Si seleccionó los destinos mediante la especificación de etiquetas aplicadas a nodos administrados o de grupos de recursos de AWS y no está seguro de cuántos nodos administrados tienen destino, limite el número de destinos que puede ejecutar el documento al mismo tiempo. Para ello, especifique un porcentaje.
   + En **Error threshold** (Umbral de errores), especifique cuándo desea parar la ejecución del comando en los demás nodos administrados después de que haya fallado en un número o un porcentaje de los nodos. Por ejemplo, si especifica tres errores, Systems Manager dejará de enviar el comando cuando se reciba el cuarto error. Los nodos administrados que estén procesando el comando todavía pueden enviar errores.

1. (Opcional) En **Rol de servicio de IAM**, seleccione un rol que proporcione permisos para que los asuma Systems Manager al ejecutar una tarea del periodo de mantenimiento.

   Si no especifica el ARN de un rol de servicio, Systems Manager usa un rol vinculado al servicio de su cuenta. Este rol no aparece en el menú desplegable. Si en su cuenta no existe ningún rol vinculado al servicio adecuado para Systems Manager, se crea cuando la tarea se registra correctamente. 
**nota**  
Para mejorar la seguridad, le recomendamos encarecidamente que cree una política y un rol de servicio personalizados para ejecutar las tareas del periodo de mantenimiento. La política se puede diseñar para proporcionar solo los permisos necesarios para las tareas específicas del periodo de mantenimiento. Para obtener más información, consulte [Configuración de Maintenance Windows](setting-up-maintenance-windows.md).

1. *Run Command Solo tareas de:*

   (Opcional) En **Output options** (Opciones de salida), realice las siguientes acciones:
   + Seleccione la casilla de verificación **Enable writing to S3** (Habilitar escritura en S3) para guardar la salida del comando en un archivo. Ingrese los nombres del bucket y del prefijo (carpeta) en los cuadros.
   + Seleccione la casilla de verificación **CloudWatch output** (Salida de CloudWatch) para escribir la salida completa en los Registros de Amazon CloudWatch. Ingrese el nombre de un grupo de registro de los Registros de CloudWatch.
**nota**  
Los permisos que conceden la capacidad de escribir datos en un bucket de S3 o en Registros de CloudWatch son los del perfil de instancia asignado al nodo, no los del usuario de IAM que realiza esta tarea. Para obtener más información, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md). Además, si el bucket de S3 o el grupo de registro especificado se encuentra en una Cuenta de AWS diferente, verifique que el perfil de instancia asociado al nodo tenga los permisos necesarios para escribir en ese bucket.

1. *Run Command Solo tareas de:*

   En la sección **Notificaciones de SNS**, seleccione la casilla de verificación **Habilitar notificaciones de SNS** si desea recibir notificaciones sobre el estado de ejecución de los comandos.

   Para obtener más información acerca de la configuración de las notificaciones de Amazon SNS para Run Command, consulte [Cómo monitorear los cambios de estado de Systems Manager mediante las notificaciones de Amazon SNS](monitoring-sns-notifications.md).

1. *Run Command Solo tareas de:*

   En el área **Parameters** (Parámetros), especifique los parámetros para el documento. 
**nota**  
En algunos casos, puede utilizar un *pseudoparámetro* para determinados valores de parámetros de entrada. Luego, al ejecutarse la tarea del periodo de mantenimiento, esta pasa los valores correctos en lugar de los marcadores de posición del pseudoparámetro. Para obtener más información, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md).

1. * Run Command Solo tareas de Automatización y:*

   (Opcional) En el área de **alarma de CloudWatch**, en **Nombre de alarma**, elija una alarma de CloudWatch existente para aplicarla a su tarea de monitoreo. 

   Tenga en cuenta que si la alarma se activa, la tarea se detiene.
**nota**  
Para adjuntar una alarma de CloudWatch a la tarea, la entidad principal de IAM que ejecuta esta última debe tener permiso para la acción `iam:createServiceLinkedRole`. Para obtener más información sobre las alarmas de CloudWatch, consulte [Uso de alarmas de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html).

1. Elija uno de los siguientes tipos de trabajo según su tipo de tarea:
   + **Registrar tarea de Run Command**
   + **Registrar tarea de Automation**
   + **Registrar tarea de Lambda**
   + **Registrar tarea de Step Functions**

# Activar o desactivar un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-disable"></a>

Puede habilitar o deshabilitar un periodo de mantenimiento en Maintenance Windows, una herramienta de AWS Systems Manager. Puede seleccionar un periodo de mantenimiento a la vez para desactivar o activar el período de mantenimiento para que no se ejecute. También puede seleccionar varios o todos los periodos de mantenimiento para activarlos o desactivarlos.

Esta sección describe cómo actualizar o eliminar un periodo de mantenimiento, los destinos y las tareas con la consola de Systems Manager. Para obtener ejemplos de cómo hacerlo mediante la AWS Command Line Interface (AWS CLI), consulte [Tutorial actualización de un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-update.md). 

**Topics**
+ [Desactivar un periodo de mantenimiento mediante la consola](#sysman-maintenance-disable-mw)
+ [Activar un periodo de mantenimiento mediante la consola](#sysman-maintenance-enable-mw)

## Desactivar un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-disable-mw"></a>

Puede desactivar un periodo de mantenimiento para pausar una tarea durante un período específico, y permanecerá disponible para volver a activarse más adelante.

**Desactivación de un periodo de mantenimiento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. Seleccione uno o más periodos de mantenimiento mediante la casilla de verificación situada junto al periodo de mantenimiento que desea desactivar.

1. En el menú **Acciones**, elija **Desactivar un periodo de mantenimiento**. El sistema le pedirá que confirme sus acciones. 

## Activar un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-enable-mw"></a>

Puede activar un periodo de mantenimiento para reanudar una tarea.

**nota**  
Si el periodo de mantenimiento utiliza un programa de frecuencias y la fecha de inicio está establecida actualmente en una fecha y hora anteriores, se utilizan la fecha y hora actuales como fecha de inicio del periodo de mantenimiento. Puede cambiar la fecha de inicio del periodo de mantenimiento antes o después de activarla. Para obtener más información, consulte [Actualizar o eliminar recursos de un periodo de mantenimiento mediante la consola](sysman-maintenance-update.md).

**Activación de un periodo de mantenimiento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. Marque la casilla de verificación situada junto al periodo de mantenimiento para activarla.

1. Seleccione **Acciones, Habilitar periodo de mantenimiento**. El sistema le pedirá que confirme sus acciones. 

# Actualizar o eliminar recursos de un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-update"></a>

Puede actualizar o eliminar un periodo de mantenimiento Maintenance Windows, una herramienta de AWS Systems Manager. También puede actualizar o eliminar los destinos o las tareas de un período de mantenimiento. Si edita los detalles de un período de mantenimiento, podrá cambiar la programación, los destinos y las tareas. También puede especificar los nombres y las descripciones de los periodos, los destinos y las tareas, lo que le ayuda a entender mejor sus propósitos y hace que sea más sencillo administrar la cola de períodos.

Esta sección describe cómo actualizar o eliminar un periodo de mantenimiento, los destinos y las tareas con la consola de Systems Manager. Para obtener ejemplos de cómo hacerlo mediante la AWS Command Line Interface (AWS CLI), consulte [Tutorial actualización de un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-update.md). 

**Topics**
+ [Actualizar o eliminar un periodo de mantenimiento mediante la consola](#sysman-maintenance-update-mw)
+ [Actualizar o eliminar destinos de un periodo de mantenimiento mediante la consola](#sysman-maintenance-update-target)
+ [Actualizar o eliminar tareas de un periodo de mantenimiento mediante la consola](#sysman-maintenance-update-tasks)

## Actualizar o eliminar un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-update-mw"></a>

Puede actualizar un periodo de mantenimiento para cambiar su nombre, la descripción y la programación y si el periodo de mantenimiento debe permitir destinos no registrados.

**Para actualizar o eliminar un período de mantenimiento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. Seleccione el botón junto al periodo de mantenimiento que desea actualizar o eliminar y, luego, lleve a cabo alguna de las siguientes operaciones:
   + Elija **Eliminar**. El sistema le pedirá que confirme sus acciones. 
   + Elija **Edit (Edición de)**. En la página **Edit maintenance window** (Editar periodo de mantenimiento), cambie los valores y las opciones que desee y, a continuación, elija **Save changes** (Guardar cambios).

     Para obtener más información acerca de las opciones de configuración que puede realizar, consulte [Crear y configurar un periodo de mantenimiento mediante la consola](sysman-maintenance-create-mw.md).

## Actualizar o eliminar destinos de un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-update-target"></a>

Puede actualizar o eliminar los destinos de un periodo de mantenimiento. Si decide actualizar un destino del período de mantenimiento, podrá especificar un nombre de destino, una descripción y un propietario nuevos. También puede elegir destinos diferentes. 

**Para actualizar o eliminar los destinos de un período de mantenimiento**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. Elija el nombre del periodo de mantenimiento que desea actualizar, elija la pestaña **Targets** (Destinos) y, a continuación, realice las siguientes acciones:
   + Para actualizar los destinos, seleccione el botón que aparece junto al destino que desea actualizar y, a continuación, elija **Edit** (Editar).
   + Para anular el registro de destinos, seleccione el botón junto al destino que desea eliminar y, luego, elija **Deregister target** (Anular registro de destinos). En el cuadro de diálogo **Deregister maintenance windows target** (Anular registro de destinos de periodos de mantenimiento), elija **Deregister** (Anular registro).

## Actualizar o eliminar tareas de un periodo de mantenimiento mediante la consola
<a name="sysman-maintenance-update-tasks"></a>

Puede actualizar o eliminar los destinos de un periodo de mantenimiento. Si decide actualizar, podrá especificar un nombre de tarea, una descripción y un propietario nuevos. En las tareas de Run Command y de Automation, puede elegir un documento de SSM diferente para las tareas. No puede, sin embargo, editar una tarea para cambiar su tipo. Por ejemplo, si creó una tarea de Automation, no puede editar dicha tarea y cambiarla a una tarea de Run Command. 

**Para actualizar o eliminar tareas de un periodo de mantenimiento mediante la consola**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**. 

1. Elija el nombre del periodo de mantenimiento que desea actualizar.

1. Elija la pestaña **Tasks** (Tareas) y, a continuación, seleccione el botón que aparece junto a la tarea que desea actualizar.

1. Realice una de las siguientes acciones:
   + Para anular el registro de una tarea, elija **Deregister task** (Anular registro de tarea).
   + Elija **Edit** (Editar) para editar la tarea. Cambie los valores y las opciones que desee y, a continuación, elija **Edit task** (Editar tarea).

# Tutoriales
<a name="maintenance-windows-tutorials"></a>

En los tutoriales en esta sección aprenderá a realizar tareas comunes al trabajar con periodos de mantenimiento.

**Completar los requisitos previos**  
Antes de intentar realizar estos tutoriales, complete los siguientes requisitos previos:
+ **Configure la AWS CLI en su equipo local**: para poder ejecutar comandos de la AWS CLI, antes debe instalar y configurar la CLI en su equipo local. Para obtener información, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [Instalación de Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html).
+ **Verifique los roles y los permisos del periodo de mantenimiento**: un administrador de AWS de su cuenta debe concederle los permisos de AWS Identity and Access Management (IAM) que necesita para administrar los periodos de mantenimiento con la CLI. Para obtener más información, consulta [Configuración de Maintenance Windows](setting-up-maintenance-windows.md).
+ **Cree o configure una instancia compatible con Systems Manager**: para completar los tutoriales, necesita al menos una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que esté configurada para utilizarse con Systems Manager. Esto significa que el SSM Agent está instalado en la instancia y que hay un perfil de instancias de IAM para Systems Manager adjuntado a la instancia. 

  Se recomienda lanzar una instancia desde una Amazon Machine Image (AMI) administrada de AWS con el agente preinstalado. Para obtener más información, consulte [Búsqueda de AMIs con SSM Agent preinstalado](ami-preinstalled-agent.md).

  Para obtener más información sobre cómo instalar el SSM Agent en una instancia, consulte los siguientes temas:
  + [Cómo instalar y desinstalar de forma manual SSM Agent en instancias de EC2 para Windows Server](manually-install-ssm-agent-windows.md)
  + [Instalación y desinstalación manual de SSM Agent en instancias de EC2 para Linux](manually-install-ssm-agent-linux.md)

  Para obtener información sobre cómo configurar permisos de IAM para Systems Manager en su instancia, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md).
+ **Cree recursos adicionales según sea necesario**: Run Command, una herramienta de Systems Manager, incluye muchas tareas que no requieren la creación de otros recursos además de los enumerados en este tema de requisitos previos. Por este motivo, proporcionamos una tarea Run Command sencilla para que pueda utilizarla la primera vez en los tutoriales. También necesita una instancia de EC2 que esté configurada para utilizarse con Systems Manager, como se describió antes en este tema. Después de configurar dicha instancia, puede registrar una tarea de Run Command sencilla. 

  La herramienta Maintenance Windows de Systems Manager admite la ejecución de los siguientes cuatro tipos de tareas: 
  + Comandos de la Run Command
  + Flujos de trabajo de Systems Manager Automation
  + Funciones de AWS Lambda
  + Tareas de AWS Step Functions

  En general, si una tarea de periodo de mantenimiento que desee ejecutar requiere recursos adicionales, debe crearlos antes. Por ejemplo, si desea un periodo de mantenimiento que ejecute una función AWS Lambda, cree la función de Lambda antes de comenzar; para una tarea de Run Command, cree el bucket de S3 en el que puede guardar la salida del comando (si planea hacerlo); y así sucesivamente.

**Topics**
+ [Tutoriales: creación y administración de periodos de mantenimiento mediante la AWS CLI](maintenance-window-tutorial-cli.md)
+ [Tutorial: creación de un periodo de mantenimiento para la aplicación de revisiones mediante la consola](maintenance-window-tutorial-patching.md)

# Tutoriales: creación y administración de periodos de mantenimiento mediante la AWS CLI
<a name="maintenance-window-tutorial-cli"></a>

En esta sección se incluyen varios tutoriales para aprender a utilizar la AWS Command Line Interface (AWS CLI) para hacer lo siguiente:
+ Crear y configurar un periodo de mantenimiento
+ Ver información sobre un periodo de mantenimiento
+ Ver información sobre las tareas y las ejecuciones de tareas de periodos de mantenimiento
+ Actualizar un periodo de mantenimiento
+ Eliminar un periodo de mantenimiento

**Realizar un seguimiento de los ID de los recursos**  
A medida que complete las tareas en estos tutoriales de la AWS CLI, realice un seguimiento de los ID de recurso generados por los comandos que ejecuta. Puede utilizar muchos de estos como entrada de comandos posteriores. Por ejemplo, al crear el periodo de mantenimiento, el sistema le proporciona un ID de periodo de mantenimiento en el siguiente formato:

```
{
   "WindowId":"mw-0c50858d01EXAMPLE"
}
```

Anote los siguientes ID generados por el sistema, ya que los tutoriales de esta sección los utilizan:
+ `WindowId`
+ `WindowTargetId`
+ `WindowTaskId`
+ `WindowExecutionId`
+ `TaskExecutionId`
+ `InvocationId`
+ `ExecutionId`

También necesita el ID de la instancia de EC2 que planea usar en los tutoriales. Por ejemplo: `i-02573cafcfEXAMPLE`

**Topics**
+ [Tutorial: cree y configure un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-create.md)
+ [Tutorial: vea información sobre periodos de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-describe.md)
+ [Tutorial: visualización de información sobre tareas y ejecuciones de tareas mediante la AWS CLI](mw-cli-tutorial-task-info.md)
+ [Tutorial actualización de un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-update.md)
+ [Tutorial: eliminación de un periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-delete-mw.md)

# Tutorial: cree y configure un periodo de mantenimiento mediante la AWS CLI
<a name="maintenance-windows-cli-tutorials-create"></a>

En este tutorial se muestra cómo utilizar la AWS Command Line Interface (AWS CLI) para crear y configurar un periodo de mantenimiento, sus destinos y sus tareas. La ruta principal del tutorial se compone de pasos sencillos. Cree un único periodo de mantenimiento, identifique un solo destino y configure una tarea simple para ejecutar en el periodo de mantenimiento. Durante el proceso, proporcionamos información que puede utilizar para probar situaciones más complicadas.

A medida que siga los pasos que se indican en este tutorial, reemplace los valores en *rojo* y cursiva por sus propias opciones y sus ID. Por ejemplo, reemplace el ID del periodo de mantenimiento *mw-0c50858d01EJEMPLO* y el ID de la instancia *i-02573cafcfEJEMPLO* por los ID de los recursos que usted cree.

**Topics**
+ [Paso 1: cree el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-create-mw.md)
+ [Paso 2: registre un nodo de destino con el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-targets.md)
+ [Paso 3: registre una tarea con el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-tasks.md)

# Paso 1: cree el periodo de mantenimiento mediante la AWS CLI
<a name="mw-cli-tutorial-create-mw"></a>

En este paso va a crear un periodo de mantenimiento y va a especificar sus opciones básicas, como, por ejemplo, el nombre, la programación y la duración. Más adelante puede seleccionar la instancia que actualizará y la tarea que ejecutará.

En el ejemplo, se crea un periodo de mantenimiento que se ejecuta cada cinco minutos. Normalmente, un periodo de mantenimiento no se ejecutaría con esta frecuencia. Sin embargo, con esta frecuencia puede ver los resultados del tutorial rápidamente. Mostraremos cómo cambiar a una frecuencia inferior una vez que la tarea se haya ejecutado de forma correcta.

**nota**  
Para ver una explicación de cómo se relacionan entre sí las distintas opciones relacionadas con la programación de los periodos de mantenimiento, consulte [Programación de la ventana de mantenimiento y opciones de periodo activo](maintenance-windows-schedule-options.md).  
Para obtener más información acerca del uso de la opción `--schedule`, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

**Creación de un periodo de mantenimiento mediante la AWS CLI**

1. Abra la AWS Command Line Interface (AWS CLI) y ejecute el siguiente comando en su máquina local para crear un periodo de mantenimiento que haga lo siguiente:
   + Se ejecuta cada cinco minutos durante un máximo de dos horas (según sea necesario).
   + Impide que se inicien nuevas tareas en el plazo de una hora desde la finalización de la operación del periodo de mantenimiento.
   + Permite destinos no asociados (instancias que no ha registrado en el periodo de mantenimiento).
   + Indica mediante el uso de etiquetas personalizadas que su creador piensa utilizarlo en un tutorial.

------
#### [ Linux & macOS ]

   ```
   aws ssm create-maintenance-window \
       --name "My-First-Maintenance-Window" \
       --schedule "rate(5 minutes)" \
       --duration 2 \
       --cutoff 1 \
       --allow-unassociated-targets \
       --tags "Key=Purpose,Value=Tutorial"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-maintenance-window ^
       --name "My-First-Maintenance-Window" ^
       --schedule "rate(5 minutes)" ^
       --duration 2 ^
       --cutoff 1 ^
       --allow-unassociated-targets ^
       --tags "Key"="Purpose","Value"="Tutorial"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
      "WindowId":"mw-0c50858d01EXAMPLE"
   }
   ```

1. A continuación, ejecute el siguiente comando para ver los detalles de esto y cualquier otro periodo de mantenimiento ya en su cuenta.

   ```
   aws ssm describe-maintenance-windows
   ```

   El sistema devuelve información similar a la siguiente.

   ```
   {
      "WindowIdentities":[
         {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "Name": "My-First-Maintenance-Window",
               "Enabled": true,
               "Duration": 2,
               "Cutoff": 1,
               "NextExecutionTime": "2019-05-11T16:46:16.991Z"
         }
      ]
   }
   ```

Continuar con [Paso 2: registre un nodo de destino con el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-targets.md).

# Paso 2: registre un nodo de destino con el periodo de mantenimiento mediante la AWS CLI
<a name="mw-cli-tutorial-targets"></a>

En este paso, debe registrar un destino con el nuevo periodo de mantenimiento. En este caso, debe especificar qué nodo actualizar cuando se ejecuta el periodo de mantenimiento. 

Para ver un ejemplo de registrar más de un nodo al mismo tiempo con ID de nodos, ejemplos de uso de etiquetas para identificar varios nodos, y ejemplos de especificar los grupos de recursos como destinos, consulte [Ejemplos: registrar destinos con un periodo de mantenimiento](mw-cli-tutorial-targets-examples.md).

**nota**  
Ya debería haber creado una instancia de Amazon Elastic Compute Cloud (Amazon EC2) para utilizarla en este paso, como se describe en los [requisitos previos para el tutorial de Maintenance Windows](maintenance-windows-tutorials.md).

**Para registrar un nodo de destino con el periodo de mantenimiento mediante la AWS CLI**

1. Ejecute el siguiente comando en el equipo local. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

   ```
   aws ssm register-target-with-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --resource-type "INSTANCE" \
       --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm register-target-with-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --resource-type "INSTANCE" ^
       --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
      "WindowTargetId":"e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
   }
   ```

1. Ahora, ejecute el siguiente comando en su máquina local para ver información detallada sobre el periodo de mantenimiento de destino.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-targets \
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-targets ^
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "Targets": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
               "ResourceType": "INSTANCE",
               "Targets": [
                   {
                       "Key": "InstanceIds",
                       "Values": [
                           "i-02573cafcfEXAMPLE"
                       ]
                   }
               ]
           }
       ]
   }
   ```

Continuar con [Paso 3: registre una tarea con el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-tasks.md). 

# Ejemplos: registrar destinos con un periodo de mantenimiento
<a name="mw-cli-tutorial-targets-examples"></a>

Puede registrar un solo nodo como destino utilizando su ID de nodo, tal y como se indica en [Paso 2: registre un nodo de destino con el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-targets.md). También puede registrar uno o varios nodos como destinos utilizando los formatos de comandos de esta página.

En general, hay dos métodos para identificar los nodos que desea utilizar como destinos de periodo de mantenimiento: especificar nodos individuales y utilizar etiquetas de recursos. El método de etiquetas de recursos proporciona más opciones, tal y como se muestra en ejemplos 2-3. 

También puede especificar uno o varios grupos de recursos como el destino de un periodo de mantenimiento. Un grupo de recursos puede incluir nodos y muchos otros tipos de recursos de AWS compatibles. Ejemplos 4 y 5, a continuación, muestran cómo agregar los grupos de recursos para el periodo de mantenimiento de los destinos.

**nota**  
Si se registra una sola tarea del periodo de mantenimiento con varios destinos, las invocaciones de la tarea se producen de forma secuencial y no en paralelo. Si la tarea debe ejecutarse en varios destinos al mismo tiempo, registre una tarea para cada destino de forma individual y asigne a cada tarea el mismo nivel de prioridad.

Para obtener más información acerca de cómo se crean y administran los grupos de recursos, consulte [¿Qué son los grupos de recurso?](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html) en la *Guía del usuario de Grupos de recursos de AWS* y [Resource Groups y etiquetado para AWS](https://aws.amazon.com/blogs/aws/resource-groups-and-tagging/) en el *Blog de noticias de AWS*.

Para obtener información sobre las cuotas de Maintenance Windows, una herramienta de AWS Systems Manager, además de las especificadas en los siguientes ejemplos, consulte [Systems Manager service quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm) en la *Referencia general de Amazon Web Services*.

## Ejemplo 1: registrar varios destinos utilizando ID de nodos
<a name="mw-target-example-1"></a>

Ejecute el siguiente comando en el formato de su equipo local para registrar varios nodos como destinos mediante sus ID de nodos. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "INSTANCE" \
    --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE ^
    --resource-type "INSTANCE" ^
    --target "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE
```

------

**Uso recomendado**: de máxima utilidad al registrar un grupo de nodos único con cualquier periodo de mantenimiento por primera vez y que *no* comparten una etiqueta de nodo común.

**Cuotas:** puede especificar hasta 50 nodos en total para el destino de cada periodo de mantenimiento.

## Ejemplo 2: registrar destinos con etiquetas de recursos aplicadas a nodos
<a name="mw-target-example-2"></a>

Ejecute el siguiente comando en su equipo local para registrar nodos que ya están etiquetados con un par de valor de clave que usted adjuntó. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "INSTANCE" \
    --target "Key=tag:Region,Values=East"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "INSTANCE" ^
    --target "Key=tag:Region,Values=East"
```

------

**Uso recomendado**: de máxima utilidad al registrar un grupo de nodos único con cualquier periodo de mantenimiento por primera vez y que *sí* comparten una etiqueta de nodo común.

**Cuotas:** puede especificar un total de hasta cinco pares clave-valor en cada destino. Si especifica varios pares de valor de clave, será necesario etiquetar un nodo con *todos* los valores y las claves de etiqueta especificados para que se incluyan en el grupo de destino.

**nota**  
Puede etiquetar un grupo de instancias con la etiqueta-clave `Patch Group` o `PatchGroup` y asignar a las instancias un valor de clave común, como `my-patch-group`. (Debe utilizar `PatchGroup`, sin espacio, si ha [permitido las etiquetas en los metadatos de las instancias de EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#allow-access-to-tags-in-IMDS)). Patch Manager, una herramienta de Systems Manager, evalúa la clave `Patch Group` o `PatchGroup` en los nodos para ayudar a determinar qué línea de base de revisiones se aplica a ellos. Si su tarea va a ejecutar el documento de SSM `AWS-RunPatchBaseline` (o el documento de SSM antiguo `AWS-ApplyPatchBaseline`), puede especificar el mismo par de clave-valor `Patch Group` o `PatchGroup` al registrar destinos con un periodo de mantenimiento. Por ejemplo: `--target "Key=tag:PatchGroup,Values=my-patch-group`. Esto permite utilizar un periodo de mantenimiento para actualizar revisiones en un grupo de nodos que ya están asociados a la misma base de referencia de revisiones. Para obtener más información, consulte [Grupos de revisiones](patch-manager-patch-groups.md).

## Ejemplo 3: registrar destinos usando un grupo de claves de etiquetas (sin valores de etiqueta)
<a name="mw-target-example-3"></a>

Ejecute el siguiente comando en su máquina local para registrar nodos que tienen una o más claves asignadas, independientemente de los valores de la clave. Reemplace cada *example resource placeholder* con su propia información.

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "INSTANCE" \
    --target "Key=tag-key,Values=Name,Instance-Type,CostCenter"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "INSTANCE" ^
    --target "Key=tag-key,Values=Name,Instance-Type,CostCenter"
```

------

**Uso recomendado**: de máxima utilidad cuando se desea registrar nodos de destino especificando varias *claves* de etiqueta (sin sus valores) en lugar de solo un par etiqueta-clave o un par clave-valor.

**Cuotas**: puede especificar un total de hasta cinco pares etiqueta-clave para cada destino. Si especifica más de una clave de etiqueta, será necesario etiquetar un nodo con *todas* las claves de etiqueta especificadas para que se incluyan en el grupo de destino.

## Ejemplo 4: registro de destinos con un nombre de grupo de recursos
<a name="mw-target-example-4"></a>

Ejecute el siguiente comando en su máquina local para registrar un grupo de recursos especificado, independientemente del tipo de recursos que contiene. Reemplace *mw-0c50858d01EXAMPLE* con su propia información. Si las tareas que se asignan al periodo de mantenimiento no actúan en un tipo de recurso incluido en este grupo de recursos, el sistema podría informar un error. Las tareas para las que se encuentra un tipo de recurso compatible siguen ejecutándose a pesar de estos errores.

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "RESOURCE_GROUP" \
    --target "Key=resource-groups:Name,Values=MyResourceGroup"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "RESOURCE_GROUP" ^
    --target "Key=resource-groups:Name,Values=MyResourceGroup"
```

------

**Uso recomendado**: Útil cuando desea especificar rápidamente un grupo de recursos como destino sin evaluar si todos sus tipos de recursos se destinará por un periodo de mantenimiento, o cuando se sabe que el grupo de recursos contiene únicamente los tipos de recursos que realizar acciones en sus tareas.

**Cuotas:** puede especificar un único grupo de recursos como destino.

## Ejemplo 5: registro de destinos mediante el filtrado de tipos de recursos en un grupo de recursos
<a name="mw-target-example-5"></a>

Ejecute el siguiente comando en su máquina local para registrar únicamente determinados tipos de recursos que pertenecen a un grupo de recursos que especifique. Reemplace *mw-0c50858d01EXAMPLE* con su propia información. Con esta opción, incluso si añade una tarea para un tipo de recurso que pertenece al grupo de recursos, la tarea no se ejecutará si no lo ha añadido explícitamente el tipo de recurso para el filtro.

------
#### [ Linux & macOS ]

```
aws ssm register-target-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --resource-type "RESOURCE_GROUP" \
    --target "Key=resource-groups:Name,Values=MyResourceGroup" \
    "Key=resource-groups:ResourceTypeFilters,Values=AWS::EC2::Instance,AWS::ECS::Cluster"
```

------
#### [ Windows ]

```
aws ssm register-target-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --resource-type "RESOURCE_GROUP" ^
    --target "Key=resource-groups:Name,Values=MyResourceGroup" ^
    "Key=resource-groups:ResourceTypeFilters,Values=AWS::EC2::Instance,AWS::ECS::Cluster"
```

------

**Uso recomendado**: útil cuando desea mantener un control estricto sobre los tipos de recursos de AWS en los que el periodo de mantenimiento puede ejecutar acciones, o cuando el grupo de recursos contiene un gran número de tipos de recursos y desea evitar los informes de error innecesarios en los registros del periodo de mantenimiento.

**Cuotas:** puede especificar un único grupo de recursos como destino.

# Paso 3: registre una tarea con el periodo de mantenimiento mediante la AWS CLI
<a name="mw-cli-tutorial-tasks"></a>

En este paso del tutorial, registrará una tarea de AWS Systems Manager Run Command que ejecuta el comando `df` en su instancia de Amazon Elastic Compute Cloud (Amazon EC2) para Linux. Los resultados de este comando de Linux estándar muestran la cantidad de espacio libre y de espacio que se utiliza en el sistema de archivos de disco de la instancia.

-o bien-

Si tiene una instancia de Amazon EC2 para Windows Server en lugar de Linux, reemplace **df** en el siguiente comando por **ipconfig**. La salida de este comando muestra los detalles de la dirección IP, la máscara de subred y la gateway predeterminada para los adaptadores en la instancia de destino.

Cuando esté listo para registrar otros tipos de tareas o utilizar otras opciones disponibles de Systems Manager Run Command, consulte [Ejemplos: registrar tareas en un periodo de mantenimiento](mw-cli-register-tasks-examples.md). En este apartado se proporciona más información sobre los cuatro tipos de tarea y algunas de sus opciones más importantes, con el fin de ayudarle a planificar escenarios más extensos y reales. 

**Para registrar una tarea en un periodo de mantenimiento**

1. Ejecute el siguiente comando en el equipo local. Reemplace cada *example resource placeholder* con su propia información. La versión para ejecutar desde un equipo local con Windows incluye los caracteres de escape ("/") necesarios para ejecutar el comando desde la herramienta de línea de comandos.

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
       --window-id mw-0c50858d01EXAMPLE \
       --task-arn "AWS-RunShellScript" \
       --max-concurrency 1 --max-errors 1 \
       --priority 10 \
       --targets "Key=InstanceIds,Values=i-0471e04240EXAMPLE" \
       --task-type "RUN_COMMAND" \
       --task-invocation-parameters '{"RunCommand":{"Parameters":{"commands":["df"]}}}'
   ```

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
       --window-id mw-0c50858d01EXAMPLE ^
       --task-arn "AWS-RunShellScript" ^
       --max-concurrency 1 --max-errors 1 ^
       --priority 10 ^
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" ^
       --task-type "RUN_COMMAND" ^
       --task-invocation-parameters={\"RunCommand\":{\"Parameters\":{\"commands\":[\"df\"]}}}
   ```

------

   El sistema devuelve información similar a la siguiente:

   ```
   {
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
   }
   ```

1. Ahora ejecute el siguiente comando para ver información detallada sobre la tarea del periodo de mantenimiento que ha creado. 

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-tasks \
       --window-id mw-0c50858d01EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-tasks ^
       --window-id mw-0c50858d01EXAMPLE
   ```

------

1. El sistema devuelve información similar a la siguiente.

   ```
   {
       "Tasks": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
               "TaskArn": "AWS-RunShellScript",
               "Type": "RUN_COMMAND",
               "Targets": [
                   {
                       "Key": "InstanceIds",
                       "Values": [
                           "i-02573cafcfEXAMPLE"
                       ]
                   }
               ],
               "TaskParameters": {},
               "Priority": 10,
               "ServiceRoleArn": "arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole",
               "MaxConcurrency": "1",
               "MaxErrors": "1"
           }
       ]
   }
   ```

1. Espere hasta que la tarea haya tenido tiempo de ejecutarse, según la programación que especificó en [Paso 1: cree el periodo de mantenimiento mediante la AWS CLI](mw-cli-tutorial-create-mw.md). Por ejemplo, si especificó **--schedule "rate(5 minutes)"**, espere cinco minutos. A continuación, ejecute el siguiente comando para ver información sobre las ejecuciones que han tenido lugar para esta tarea. 

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-executions \
       --window-id mw-0c50858d01EXAMPLE
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-executions ^
       --window-id mw-0c50858d01EXAMPLE
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowExecutions": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593493.096,
               "EndTime": 1557593498.611
           }
       ]
   }
   ```

**sugerencia**  
Una vez que la tarea se ejecuta correctamente, puede reducir la frecuencia de ejecución del periodo de mantenimiento. Por ejemplo, ejecute el siguiente comando para reducir la frecuencia a una vez a la semana. Reemplace *mw-0c50858d01EXAMPLE* con su propia información.  

```
aws ssm update-maintenance-window \
    --window-id mw-0c50858d01EXAMPLE \
    --schedule "rate(7 days)"
```

```
aws ssm update-maintenance-window ^
    --window-id mw-0c50858d01EXAMPLE ^
    --schedule "rate(7 days)"
```
Para obtener información sobre cómo administrar las programaciones de los periodos de mantenimiento, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md) y [Programación de la ventana de mantenimiento y opciones de periodo activo](maintenance-windows-schedule-options.md).  
Para obtener información acerca de cómo utilizar la AWS Command Line Interface (AWS CLI) para modificar un periodo de mantenimiento, consulte [Tutorial actualización de un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-update.md).

Para practicar la ejecución de comandos de la AWS CLI a fin de ver más detalles sobre la tarea del periodo de mantenimiento y sus ejecuciones, vaya a [Tutorial: visualización de información sobre tareas y ejecuciones de tareas mediante la AWS CLI](mw-cli-tutorial-task-info.md).

**Acceder al resultado del comando del tutorial**  
Está fuera del alcance de este tutorial utilizar la AWS CLI para ver el *resultado* del comando de Run Command asociado a las ejecuciones de la tarea del periodo de mantenimiento.

No obstante, puede ver estos datos mediante la AWS CLI. (También puede ver la salida en la consola de Systems Manager o en un archivo de registros almacenado en un bucket de Amazon Simple Storage Service (Amazon S3), en caso de haber configurado el periodo de mantenimiento para almacenar las salidas de los comandos allí). Descubrirá que la salida del comando **df** en una instancia de EC2 para Linux es similar a lo siguiente.

```
Filesystem 1K-blocks Used Available Use% Mounted on

devtmpfs 485716 0 485716 0% /dev

tmpfs 503624 0 503624 0% /dev/shm

tmpfs 503624 328 503296 1% /run

tmpfs 503624 0 503624 0% /sys/fs/cgroup

/dev/xvda1 8376300 1464160 6912140 18% /
```

El resultado del comando **ipconfig** en una instancia de EC2 para Windows Server es similar al siguiente:

```
Windows IP Configuration


Ethernet adapter Ethernet 2:

   Connection-specific DNS Suffix  . : example.com
   IPv4 Address. . . . . . . . . . . : 10.24.34.0/23
   Subnet Mask . . . . . . . . . . . : 255.255.255.255
   Default Gateway . . . . . . . . . : 0.0.0.0

Ethernet adapter Ethernet:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : abc1.wa.example.net

Wireless LAN adapter Local Area Connection* 1:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::100b:c234:66d6:d24f%4
   IPv4 Address. . . . . . . . . . . : 192.0.2.0
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.0.2.0

Ethernet adapter Bluetooth Network Connection:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
```

# Ejemplos: registrar tareas en un periodo de mantenimiento
<a name="mw-cli-register-tasks-examples"></a>

Puede registrar una tarea en Run Command, una herramienta de AWS Systems Manager, con un periodo de mantenimiento mediante la AWS Command Line Interface (AWS CLI), como se muestra en [Registrar tareas en un periodo de mantenimiento](mw-cli-tutorial-tasks.md). También puede registrar tareas para flujos de trabajo de Systems Manager Automation, funciones de AWS Lambda y tareas de AWS Step Functions, como se muestra más adelante en este tema.

**nota**  
Especifique uno o más destinos para las tareas de tipo Run Command del periodo de mantenimiento. Según la tarea, los destinos son opcionales para otros tipos de tarea de periodo de mantenimiento (Automation, AWS Lambda y AWS Step Functions). Para obtener más información acerca de la ejecución de tareas que no especifican destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md).

En este tema, se proporcionan ejemplos de cómo utilizar el comando `register-task-with-maintenance-window` de la AWS Command Line Interface (AWS CLI) para registrar cada uno de los cuatro tipos de tareas compatibles en un periodo de mantenimiento. Los ejemplos solo tienen fines de demostración, pero puede modificarlos para crear los comandos de registro de las tareas en uso. 

**Uso de la opción --cli-input-json**  
Para administrar mejor las opciones de la tarea, puede utilizar la opción de comando `--cli-input-json`, con valores de opción a los que se hace referencia en un archivo JSON. 

Para utilizar el contenido del archivo JSON de ejemplo que proporcionamos en los siguientes ejemplos, haga lo siguiente en su equipo local:

1. Cree un archivo con un nombre como, por ejemplo, `MyRunCommandTask.json`, `MyAutomationTask.json` o cualquier otro nombre de su preferencia.

1. Copie el contenido de la muestra de JSON en el archivo.

1. Modifique el contenido del archivo para el registro de la tarea y, a continuación, guarde el archivo.

1. En el mismo directorio en el que almacenó el archivo, ejecute el comando siguiente. Sustituya el nombre de archivo por *MiArchivo.json*. 

------
#### [ Linux & macOS ]

   ```
   aws ssm register-task-with-maintenance-window \
       --cli-input-json file://MyFile.json
   ```

------
#### [ Windows ]

   ```
   aws ssm register-task-with-maintenance-window ^
       --cli-input-json file://MyFile.json
   ```

------

**Pseudoparámetros en las tareas de periodos de mantenimiento**  
En algunos ejemplos, utilizamos los *pseudoparámetros* como método para transferir información del ID a sus tareas. Por ejemplo, `{{TARGET_ID}}` y `{{RESOURCE_ID}}` se pueden utilizar para pasar los ID de los recursos de AWS a tareas de Automation, Lambda y Step Functions. Para obtener más información sobre los pseudoparámetros en el contenido `--task-invocation-parameters`, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md). 

**Más información**  
+ [Opciones de parámetros para el comando register-task-with-maintenance-windows](mw-cli-task-options.md).
+ [https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html) en la *Referencia de comandos de la AWS CLI*
+ [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_RegisterTaskWithMaintenanceWindow.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_RegisterTaskWithMaintenanceWindow.html) en la *Referencia de la API de AWS Systems Manager*

## Ejemplos de registro de tareas
<a name="task-examples"></a>

En las secciones siguientes se proporciona un comando de la AWS CLI de ejemplo para registrar un tipo de tarea admitido y una muestra de JSON que se puede utilizar con la opción `--cli-input-json`.

### Registrar una tarea de Run Command de Systems Manager
<a name="register-tasks-tutorial-run-command"></a>

Los siguientes ejemplos muestran cómo registrar tareas de Systems Manager Run Command con un periodo de mantenimiento mediante la AWS CLI.

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id mw-0c50858d01EXAMPLE \
    --task-arn "AWS-RunShellScript" \
    --max-concurrency 1 --max-errors 1 --priority 10 \
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" \
    --task-type "RUN_COMMAND" \
    --task-invocation-parameters '{"RunCommand":{"Parameters":{"commands":["df"]}}}'
```

------
#### [ Windows ]

```
aws ssm register-task-with-maintenance-window ^
    --window-id mw-0c50858d01EXAMPLE ^
    --task-arn "AWS-RunShellScript" ^
    --max-concurrency 1 --max-errors 1 --priority 10 ^
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" ^
    --task-type "RUN_COMMAND" ^
    --task-invocation-parameters "{\"RunCommand\":{\"Parameters\":{\"commands\":[\"df\"]}}}"
```

------

**Contenido JSON para usar con la opción de archivo `--cli-input-json`:**

```
{
    "TaskType": "RUN_COMMAND",
    "WindowId": "mw-0c50858d01EXAMPLE",
    "Description": "My Run Command task to update SSM Agent on an instance",
    "MaxConcurrency": "1",
    "MaxErrors": "1",
    "Name": "My-Run-Command-Task",
    "Priority": 10,
    "Targets": [
        {
            "Key": "WindowTargetIds",
            "Values": [
                "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
            ]
        }
    ],
    "TaskArn": "AWS-UpdateSSMAgent",
    "TaskInvocationParameters": {
        "RunCommand": {
            "Comment": "A TaskInvocationParameters test comment",
            "NotificationConfig": {
                "NotificationArn": "arn:aws:sns:region:123456789012:my-sns-topic-name",
                "NotificationEvents": [
                    "All"
                ],
                "NotificationType": "Invocation"
            },
            "OutputS3BucketName": "amzn-s3-demo-bucket",
            "OutputS3KeyPrefix": "S3-PREFIX",
            "TimeoutSeconds": 3600
        }
    }
}
```

### Registrar una tarea de Systems Manager Automation
<a name="register-tasks-tutorial-automation"></a>

Los siguientes ejemplos muestran cómo registrar tareas de Systems Manager Automation con un periodo de mantenimiento mediante la AWS CLI: 

**AWS CLI comando:**

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --task-arn "AWS-RestartEC2Instance" \
    --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole \
    --task-type AUTOMATION \
    --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{RESOURCE_ID}}'}}" \
    --priority 0 --name "My-Restart-EC2-Instances-Automation-Task" \
    --description "Automation task to restart EC2 instances"
```

------
#### [ Windows ]

```
aws ssm register-task-with-maintenance-window ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --task-arn "AWS-RestartEC2Instance" ^
    --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole ^
    --task-type AUTOMATION ^
    --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{TARGET_ID}}'}}" ^
    --priority 0 --name "My-Restart-EC2-Instances-Automation-Task" ^
    --description "Automation task to restart EC2 instances"
```

------

**Contenido JSON para usar con la opción de archivo `--cli-input-json`:**

```
{
    "WindowId": "mw-0c50858d01EXAMPLE",
        "TaskArn": "AWS-PatchInstanceWithRollback",
    "TaskType": "AUTOMATION","TaskInvocationParameters": {
        "Automation": {
            "DocumentVersion": "1",
            "Parameters": {
                "instanceId": [
                    "{{RESOURCE_ID}}"
                ]
            }
        }
    }
}
```

### Registrar una tarea de AWS Lambda
<a name="register-tasks-tutorial-lambda"></a>

Los siguientes ejemplos muestran cómo registrar las tareas de la función de Lambda con un periodo de mantenimiento mediante la AWS CLI. 

En estos ejemplos, el usuario que creó la función de Lambda la nombró `SSMrestart-my-instances` y creó dos parámetros denominados `instanceId` y `targetType`.

**importante**  
La política de IAM para Maintenance Windows requiere que se agregue el prefijo `SSM` a los nombres de la función (o alias) de Lambda. Antes de continuar con el registro de este tipo de tareas, actualice el nombre en AWS Lambda para incluir `SSM`. Por ejemplo, si el nombre de la función de Lambda es `MyLambdaFunction`, cámbielo a `SSMMyLambdaFunction`.

**AWS CLI comando:**

------
#### [ Linux & macOS ]

**importante**  
Si está utilizando la versión 2 de la AWS CLI, debe incluir la opción `--cli-binary-format raw-in-base64-out` en el siguiente comando si la carga de Lambda no está codificada en base64. La opción `cli_binary_format` solo está disponible en la versión 2. Para obtener información acerca de esta y otras configuraciones del archivo `config` de la AWS CLI, consulte [Configuraciones del archivo `config` admitidas](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings) en la *Guía del usuario de AWS Command Line Interface*.

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
    --priority 2 --max-concurrency 10 --max-errors 5 --name "My-Lambda-Example" \
    --description "A description for my LAMBDA example task" --task-type "LAMBDA" \
    --task-arn "arn:aws:lambda:region:123456789012:function:serverlessrepo-SSMrestart-my-instances-C4JF9EXAMPLE" \
    --task-invocation-parameters '{"Lambda":{"Payload":"{\"InstanceId\":\"{{RESOURCE_ID}}\",\"targetType\":\"{{TARGET_TYPE}}\"}","Qualifier": "$LATEST"}}'
```

------
#### [ PowerShell ]

**importante**  
Si está utilizando la versión 2 de la AWS CLI, debe incluir la opción `--cli-binary-format raw-in-base64-out` en el siguiente comando si la carga de Lambda no está codificada en base64. La opción `cli_binary_format` solo está disponible en la versión 2. Para obtener información acerca de esta y otras configuraciones del archivo `config` de la AWS CLI, consulte [Configuraciones del archivo `config` admitidas](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings) en la *Guía del usuario de AWS Command Line Interface*.

```
aws ssm register-task-with-maintenance-window `
    --window-id "mw-0c50858d01EXAMPLE" `
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" `
    --priority 2 --max-concurrency 10 --max-errors 5 --name "My-Lambda-Example" `
    --description "A description for my LAMBDA example task" --task-type "LAMBDA" `
    --task-arn "arn:aws:lambda:region:123456789012:function:serverlessrepo-SSMrestart-my-instances-C4JF9EXAMPLE" `
    --task-invocation-parameters '{\"Lambda\":{\"Payload\":\"{\\\"InstanceId\\\":\\\"{{RESOURCE_ID}}\\\",\\\"targetType\\\":\\\"{{TARGET_TYPE}}\\\"}\",\"Qualifier\": \"$LATEST\"}}'
```

------

**Contenido JSON para usar con la opción de archivo `--cli-input-json`:**

```
{
    "WindowId": "mw-0c50858d01EXAMPLE",
    "Targets": [
        {
            "Key": "WindowTargetIds",
            "Values": [
                "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
            ]
        }
    ],
    "TaskArn": "SSM_RestartMyInstances",
    "TaskType": "LAMBDA",
    "MaxConcurrency": "10",
    "MaxErrors": "10",
    "TaskInvocationParameters": {
        "Lambda": {
            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",
            "Payload": "{ \"instanceId\": \"{{RESOURCE_ID}}\", \"targetType\": \"{{TARGET_TYPE}}\" }",
            "Qualifier": "$LATEST"
        }
    },
    "Name": "My-Lambda-Task",
    "Description": "A description for my LAMBDA task",
    "Priority": 5
}
```

### Registrar una tarea de Step Functions
<a name="register-tasks-tutorial-step-functions"></a>

Los siguientes ejemplos muestran cómo registrar tareas de máquina de estado de Step Functions con un periodo de mantenimiento mediante la AWS CLI.

**nota**  
Las tareas de los periodos de mantenimiento solo admiten los flujos de trabajo de máquinas de estado estándar de Step Functions. No son compatibles con los flujos de trabajo de máquinas de estado rápidas. Para obtener información sobre los tipos de flujos de trabajo de máquinas de estado, consulte [Flujos de trabajo estándar en comparación con flujos de trabajo rápidos](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-standard-vs-express.html) en la *Guía para desarrolladores de AWS Step Functions*.

En estos ejemplos, el usuario que creó la máquina de estado de Step Functions, creó una máquina de estado llamada `SSMMyStateMachine` con un parámetro denominado `instanceId`.

**importante**  
La política de AWS Identity and Access Management (IAM) para Maintenance Windows requiere que se agregue el prefijo `SSM` a los nombres de máquina de estado de Step Functions. Antes de proceder al registro de este tipo de tarea, debe actualizar su nombre en AWS Step Functions para que incluya `SSM`. Por ejemplo, si el nombre de la máquina de estado es `MyStateMachine`, cámbielo a `SSMMyStateMachine`.

**AWS CLI comando:**

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-0c50858d01EXAMPLE" \
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
    --task-arn arn:aws:states:region:123456789012:stateMachine:SSMMyStateMachine-MggiqEXAMPLE \
    --task-type STEP_FUNCTIONS \
    --task-invocation-parameters '{"StepFunctions":{"Input":"{\"InstanceId\":\"{{RESOURCE_ID}}\"}", "Name":"{{INVOCATION_ID}}"}}' \
    --priority 0 --max-concurrency 10 --max-errors 5 \
    --name "My-Step-Functions-Task" --description "A description for my Step Functions task"
```

------
#### [ PowerShell ]

```
aws ssm register-task-with-maintenance-window `
    --window-id "mw-0c50858d01EXAMPLE" `
    --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" `
    --task-arn arn:aws:states:region:123456789012:stateMachine:SSMMyStateMachine-MggiqEXAMPLE `
    --task-type STEP_FUNCTIONS `
    --task-invocation-parameters '{\"StepFunctions\":{\"Input\":\"{\\\"InstanceId\\\":\\\"{{RESOURCE_ID}}\\\"}\", \"Name\":\"{{INVOCATION_ID}}\"}}' `
    --priority 0 --max-concurrency 10 --max-errors 5 `
    --name "My-Step-Functions-Task" --description "A description for my Step Functions task"
```

------

**Contenido JSON para usar con la opción de archivo `--cli-input-json`:**

```
{
    "WindowId": "mw-0c50858d01EXAMPLE",
    "Targets": [
        {
            "Key": "WindowTargetIds",
            "Values": [
                "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
            ]
        }
    ],
    "TaskArn": "SSM_MyStateMachine",
    "TaskType": "STEP_FUNCTIONS",
    "MaxConcurrency": "10",
    "MaxErrors": "10",
    "TaskInvocationParameters": {
        "StepFunctions": {
            "Input": "{ \"instanceId\": \"{{TARGET_ID}}\" }",
            "Name": "{{INVOCATION_ID}}"
        }
    },
    "Name": "My-Step-Functions-Task",
    "Description": "A description for my Step Functions task",
    "Priority": 5
}
```

# Opciones de parámetros para el comando register-task-with-maintenance-windows
<a name="mw-cli-task-options"></a>

El comando **register-task-with-maintenance-window** proporciona varias opciones para configurar una tarea en función de sus necesidades. Algunas son obligatorias, otras opcionales y otras solo se aplican a un único tipo de tarea de ventana de mantenimiento.

En este tema se proporciona información sobre algunas de estas opciones para ayudarlo a trabajar con los ejemplos de esta sección del tutorial. Para obtener información acerca de todas las opciones de comandos, consulte **[https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html)** en la *Referencia de comando de la AWS CLI*.

**Opción de comando: `--task-arn`**  
La opción `--task-arn` se usa para especificar el recurso en el que opera la tarea. El valor que se especifica depende del tipo de tarea que se registra, como se describe en la siguiente tabla.


**Formatos de TaskArn para tareas del periodo de mantenimiento**  

| Tipo de tarea de la ventana de mantenimiento | Valor TaskArn | 
| --- | --- | 
|  **`RUN_COMMAND`** y ** `AUTOMATION`**  |  `TaskArn` es el nombre del documento de SSM o el nombre de recurso de Amazon (ARN). Por ejemplo:  `AWS-RunBatchShellScript`  -o bien- `arn:aws:ssm:region:111122223333:document/My-Document`.  | 
|  **`LAMBDA`**  |  `TaskArn` es el nombre de la función o ARN. Por ejemplo:  `SSMMy-Lambda-Function` -o bien- `arn:aws:lambda:region:111122223333:function:SSMMyLambdaFunction`.  La política de IAM para Maintenance Windows requiere que se agregue el prefijo `SSM` a los nombres de la función (o alias) de Lambda. Antes de continuar con el registro de este tipo de tareas, actualice el nombre en AWS Lambda para incluir `SSM`. Por ejemplo, si el nombre de la función de Lambda es `MyLambdaFunction`, cámbielo a `SSMMyLambdaFunction`.   | 
|  **`STEP_FUNCTIONS`**  |  `TaskArn` es el ARN de la máquina de estado. Por ejemplo:  `arn:aws:states:us-east-2:111122223333:stateMachine:SSMMyStateMachine`.  La política de IAM para periodos de mantenimiento requiere que se agregue el prefijo a los nombres de máquina de estado de Step Functions `SSM`. Antes de registrar este tipo de tarea, debe actualizar su nombre en AWS Step Functions para que incluya `SSM`. Por ejemplo, si el nombre de la máquina de estado es `MyStateMachine`, cámbielo a `SSMMyStateMachine`.   | 

**Opción de comando: `--service-role-arn`**  
El rol que AWS Systems Manager debe asumir cuando se ejecuta la tarea del periodo de mantenimiento. 

Para obtener más información, consulte [Configuración de Maintenance Windows](setting-up-maintenance-windows.md)

**Opción de comando: `--task-invocation-parameters`**  
La opción `--task-invocation-parameters` se utiliza para especificar los parámetros que son exclusivos de cada uno de los cuatro tipos de tarea. Los parámetros admitidos para cada uno de estos cuatro tipos se describen en la tabla siguiente.

**nota**  
Para obtener información acerca de cómo utilizar los pseudoparámetros en contenido `--task-invocation-parameters`, como \$1\$1TARGET\$1ID\$1\$1, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md). 

Opciones de los parámetros de invocación de tareas de periodos de mantenimiento


| Tipo de tarea de la ventana de mantenimiento | Parámetros disponibles  | Ejemplo | 
| --- | --- | --- | 
|  **`RUN_COMMAND`**  |  `Comment` `DocumentHash` `DocumentHashType` `NotificationConfig` `OutputS3BucketName` `OutPutS3KeyPrefix` `Parameters` `ServiceRoleArn` `TimeoutSeconds`  |  <pre>"TaskInvocationParameters": {<br />        "RunCommand": {<br />            "Comment": "My Run Command task comment",<br />            "DocumentHash": "6554ed3d--truncated--5EXAMPLE",<br />            "DocumentHashType": "Sha256",<br />            "NotificationConfig": {<br />                "NotificationArn": "arn:aws:sns:region:123456789012:my-sns-topic-name",<br />                "NotificationEvents": [<br />                    "FAILURE"<br />                ],<br />                "NotificationType": "Invocation"<br />            },<br />            "OutputS3BucketName": "amzn-s3-demo-bucket",<br />            "OutputS3KeyPrefix": "S3-PREFIX",<br />            "Parameters": {<br />                "commands": [<br />                    "Get-ChildItem$env: temp-Recurse|Remove-Item-Recurse-force"<br />                ]<br />            },<br />            "ServiceRoleArn": "arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole",<br />            "TimeoutSeconds": 3600<br />        }<br />    }</pre>  | 
|  **`AUTOMATION`**  |  `DocumentVersion` `Parameters`  |  <pre>"TaskInvocationParameters": {<br />        "Automation": {<br />            "DocumentVersion": "3",<br />            "Parameters": {<br />                "instanceid": [<br />                    "{{TARGET_ID}}"<br />                ]<br />            }<br />        }<br />    }</pre>  | 
|  **`LAMBDA`**  |  `ClientContext` `Payload` `Qualifier`  |  <pre>"TaskInvocationParameters": {<br />        "Lambda": {<br />            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",<br />            "Payload": "{ \"targetId\": \"{{TARGET_ID}}\", \"targetType\": \"{{TARGET_TYPE}}\" }",<br />            "Qualifier": "$LATEST"<br />        }<br />    }</pre>  | 
|  **`STEP_FUNCTIONS`**  |  `Input` `Name`  |  <pre>"TaskInvocationParameters": {<br />        "StepFunctions": {<br />            "Input": "{ \"targetId\": \"{{TARGET_ID}}\" }",<br />            "Name": "{{INVOCATION_ID}}"<br />        }<br />    }</pre>  | 

# Tutorial: vea información sobre periodos de mantenimiento mediante la AWS CLI
<a name="maintenance-windows-cli-tutorials-describe"></a>

Este tutorial incluye comandos para ayudarle a actualizar u obtener información sobre sus periodos de mantenimiento, tareas, ejecuciones e invocaciones. Los ejemplos están organizados por comando para mostrar cómo utilizar las opciones de comando para filtrar el tipo de detalle que desea ver.

A medida que siga los pasos que se indican en este tutorial, reemplace los valores en *rojo* y cursiva por sus propias opciones y sus ID. Por ejemplo, reemplace el ID del periodo de mantenimiento *mw-0c50858d01EJEMPLO* y el ID de la instancia *i-02573cafcfEJEMPLO* por los ID de los recursos que usted cree.

Para obtener información acerca de la instalación y configuración de AWS Command Line Interface (AWS CLI), consulte [Instalación, actualización y desinstalación de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) y [Configuración de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

**Topics**
+ [Ejemplos de “describe-maintenance-windows”](#mw-cli-tutorials-describe-maintenance-windows)
+ [Ejemplos de “describe-maintenance-window-targets”](#mw-cli-tutorials-describe-maintenance-window-targets)
+ [Ejemplos de “describe-maintenance-window-tasks”](#mw-cli-tutorials-describe-maintenance-window-tasks)
+ [Ejemplos de “describe-maintenance-windows-for-target”](#mw-cli-tutorials-describe-maintenance-windows-for-target)
+ [Ejemplos de “describe-maintenance-window-executions”](#mw-cli-tutorials-describe-maintenance-window-executions)
+ [Ejemplos de “describe-maintenance-window-schedule”](#mw-cli-tutorials-describe-maintenance-window-schedule)

## Ejemplos de “describe-maintenance-windows”
<a name="mw-cli-tutorials-describe-maintenance-windows"></a>

**Enumerar todos los periodos de mantenimiento de su Cuenta de AWS**  
Ejecute el siguiente comando.

```
aws ssm describe-maintenance-windows
```

El sistema devuelve información similar a la siguiente.

```
{
   "WindowIdentities":[
      {
         "WindowId":"mw-0c50858d01EXAMPLE",
         "Name":"My-First-Maintenance-Window",
         "Enabled":true,
         "Duration":2,
         "Cutoff":0,
         "NextExecutionTime": "2019-05-18T17:01:01.137Z"        
      },
      {
         "WindowId":"mw-9a8b7c6d5eEXAMPLE",
         "Name":"My-Second-Maintenance-Window",
         "Enabled":true,
         "Duration":4,
         "Cutoff":1,
         "NextExecutionTime": "2019-05-30T03:30:00.137Z"        
      },
   ]
}
```

**Enumerar todos los períodos de mantenimiento habilitados**  
Ejecute el siguiente comando.

```
aws ssm describe-maintenance-windows --filters "Key=Enabled,Values=true"
```

El sistema devuelve información similar a la siguiente.

```
{
   "WindowIdentities":[
      {
         "WindowId":"mw-0c50858d01EXAMPLE",
         "Name":"My-First-Maintenance-Window",
         "Enabled":true,
         "Duration":2,
         "Cutoff":0,
         "NextExecutionTime": "2019-05-18T17:01:01.137Z"        
      },
      {
         "WindowId":"mw-9a8b7c6d5eEXAMPLE",
         "Name":"My-Second-Maintenance-Window",
         "Enabled":true,
         "Duration":4,
         "Cutoff":1,
         "NextExecutionTime": "2019-05-30T03:30:00.137Z"        
      },
   ]
}
```

**Enumerar todos los períodos de mantenimiento deshabilitados**  
Ejecute el siguiente comando.

```
aws ssm describe-maintenance-windows --filters "Key=Enabled,Values=false"
```

El sistema devuelve información similar a la siguiente.

```
{
    "WindowIdentities": [
        {
            "WindowId": "mw-6e5c9d4b7cEXAMPLE",
            "Name": "My-Disabled-Maintenance-Window",
            "Enabled": false,
            "Duration": 2,
            "Cutoff": 1
        }
    ]
}
```

**Enumerar todos los periodos de mantenimiento que tienen nombres que comienzan por un prefijo determinado**  
Ejecute el siguiente comando.

```
aws ssm describe-maintenance-windows --filters "Key=Name,Values=My"
```

El sistema devuelve información similar a la siguiente.

```
{
    "WindowIdentities": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "Enabled": true,
            "Duration": 2,
            "Cutoff": 0,
            "NextExecutionTime": "2019-05-18T17:01:01.137Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "Enabled": true,
            "Duration": 4,
            "Cutoff": 1,
            "NextExecutionTime": "2019-05-30T03:30:00.137Z"
        },
        {
            "WindowId": "mw-6e5c9d4b7cEXAMPLE",
            "Name": "My-Disabled-Maintenance-Window",
            "Enabled": false,
            "Duration": 2,
            "Cutoff": 1
        }
    ]
}
```

## Ejemplos de “describe-maintenance-window-targets”
<a name="mw-cli-tutorials-describe-maintenance-window-targets"></a>

**Mostrar los destinos de un período de mantenimiento que coincida con un valor específico de información del propietario**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-targets \
    --window-id "mw-6e5c9d4b7cEXAMPLE" \
    --filters "Key=OwnerInformation,Values=CostCenter1"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-targets ^
    --window-id "mw-6e5c9d4b7cEXAMPLE" ^
    --filters "Key=OwnerInformation,Values=CostCenter1"
```

------

**nota**  
Las claves de filtro admitidas son `Type`, `WindowTargetId` y `OwnerInformation`.

El sistema devuelve información similar a la siguiente.

```
{
    "Targets": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
            "ResourceType": "INSTANCE",
            "Targets": [
                {
                    "Key": "tag:Name",
                    "Values": [
                        "Production"
                    ]
                }
            ],
            "OwnerInformation": "CostCenter1",
            "Name": "Target1"
        }
    ]
}
```

## Ejemplos de “describe-maintenance-window-tasks”
<a name="mw-cli-tutorials-describe-maintenance-window-tasks"></a>

**Mostrar todas las tareas registradas que invoquen el documento de Command de SSM `AWS-RunPowerShellScript`**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-tasks \
    --window-id "mw-0c50858d01EXAMPLE" \
    --filters "Key=TaskArn,Values=AWS-RunPowerShellScript"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-tasks ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --filters "Key=TaskArn,Values=AWS-RunPowerShellScript"
```

------

El sistema devuelve información similar a la siguiente.

```
{
   "Tasks":[
      {
         "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
         "MaxErrors":"1",
         "TaskArn":"AWS-RunPowerShellScript",
         "MaxConcurrency":"1",
         "WindowTaskId":"4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
         "TaskParameters":{
            "commands":{
               "Values":[
                  "driverquery.exe"
               ]
            }
         },
         "Priority":3,
         "Type":"RUN_COMMAND",
         "Targets":[
            {
               "TaskTargetId":"i-02573cafcfEXAMPLE",
               "TaskTargetType":"INSTANCE"
            }
         ]
      },
      {
         "ServiceRoleArn":"arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
         "MaxErrors":"1",
         "TaskArn":"AWS-RunPowerShellScript",
         "MaxConcurrency":"1",
         "WindowTaskId":"4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
         "TaskParameters":{
            "commands":{
               "Values":[
                  "ipconfig"
               ]
            }
         },
         "Priority":1,
         "Type":"RUN_COMMAND",
         "Targets":[
            {
               "TaskTargetId":"i-02573cafcfEXAMPLE",
               "TaskTargetType":"WINDOW_TARGET"
            }
         ]
      }
   ]
}
```

**Visualización de todas las tareas registradas que tengan una prioridad de "3"**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-tasks \
    --window-id "mw-9a8b7c6d5eEXAMPLE" \
    --filters "Key=Priority,Values=3"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-tasks ^
    --window-id "mw-9a8b7c6d5eEXAMPLE" ^
    --filters "Key=Priority,Values=3"
```

------

El sistema devuelve información similar a la siguiente.

```
{
   "Tasks":[
      {
         "ServiceRoleArn":"arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
         "MaxErrors":"1",
         "TaskArn":"AWS-RunPowerShellScript",
         "MaxConcurrency":"1",
         "WindowTaskId":"4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
         "TaskParameters":{
            "commands":{
               "Values":[
                  "driverquery.exe"
               ]
            }
         },
         "Priority":3,
         "Type":"RUN_COMMAND",
         "Targets":[
            {
               "TaskTargetId":"i-02573cafcfEXAMPLE",
               "TaskTargetType":"INSTANCE"
            }
         ]
      }
   ]
}
```

**Mostrar todas las tareas registradas que tengan una prioridad de "1" y usar Run Command**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-tasks \
    --window-id "mw-0c50858d01EXAMPLE" \
    --filters "Key=Priority,Values=1" "Key=TaskType,Values=RUN_COMMAND"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-tasks ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --filters "Key=Priority,Values=1" "Key=TaskType,Values=RUN_COMMAND"
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "Tasks": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
            "TaskArn": "AWS-RunShellScript",
            "Type": "RUN_COMMAND",
            "Targets": [
                {
                    "Key": "InstanceIds",
                    "Values": [
                        "i-02573cafcfEXAMPLE"
                    ]
                }
            ],
            "TaskParameters": {},
            "Priority": 1,
            "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
            "MaxConcurrency": "1",
            "MaxErrors": "1"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowTaskId": "8a5c4629-31b0-4edd-8aea-33698EXAMPLE",
            "TaskArn": "AWS-UpdateSSMAgent",
            "Type": "RUN_COMMAND",
            "Targets": [
                {
                    "Key": "InstanceIds",
                    "Values": [
                        "i-0471e04240EXAMPLE"
                    ]
                }
            ],
            "TaskParameters": {},
            "Priority": 1,
            "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
            "MaxConcurrency": "1",
            "MaxErrors": "1",
            "Name": "My-Run-Command-Task",
            "Description": "My Run Command task to update SSM Agent on an instance"
        }
    ]
}
```

## Ejemplos de “describe-maintenance-windows-for-target”
<a name="mw-cli-tutorials-describe-maintenance-windows-for-target"></a>

**Mostrar información acerca de los destinos de periodo de mantenimiento o las tareas asociadas con un nodo específico**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-windows-for-target \
    --resource-type INSTANCE \
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" \
    --max-results 10
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-windows-for-target ^
    --resource-type INSTANCE ^
    --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE" ^
    --max-results 10
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "WindowIdentities": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window"
        }
    ]
}
```

## Ejemplos de “describe-maintenance-window-executions”
<a name="mw-cli-tutorials-describe-maintenance-window-executions"></a>

**Enumerar todas las tareas ejecutadas antes de una fecha determinada**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-executions \
    --window-id "mw-9a8b7c6d5eEXAMPLE" \
    --filters "Key=ExecutedBefore,Values=2019-05-12T05:00:00Z"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-executions ^
    --window-id "mw-9a8b7c6d5eEXAMPLE" ^
    --filters "Key=ExecutedBefore,Values=2019-05-12T05:00:00Z"
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "WindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
            "Status": "FAILED",
            "StatusDetails": "The following SSM parameters are invalid: LevelUp",
            "StartTime": 1557617747.993,
            "EndTime": 1557617748.101
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "WindowExecutionId": "791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557594085.428,
            "EndTime": 1557594090.978
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557593793.483,
            "EndTime": 1557593798.978
        }
    ]
}
```

**Enumerar todas las tareas ejecutadas después de una fecha determinada**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-executions \
    --window-id "mw-9a8b7c6d5eEXAMPLE" \
    --filters "Key=ExecutedAfter,Values=2018-12-31T17:00:00Z"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-executions ^
    --window-id "mw-9a8b7c6d5eEXAMPLE" ^
    --filters "Key=ExecutedAfter,Values=2018-12-31T17:00:00Z"
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "WindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
            "Status": "FAILED",
            "StatusDetails": "The following SSM parameters are invalid: LevelUp",
            "StartTime": 1557617747.993,
            "EndTime": 1557617748.101
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "WindowExecutionId": "791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557594085.428,
            "EndTime": 1557594090.978
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "WindowExecutionId": "ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
            "Status": "SUCCESS",
            "StartTime": 1557593793.483,
            "EndTime": 1557593798.978
        }
    ]
}
```

## Ejemplos de “describe-maintenance-window-schedule”
<a name="mw-cli-tutorials-describe-maintenance-window-schedule"></a>

**Mostrar las próximas diez ejecuciones programadas de periodo de mantenimiento para un nodo determinado**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-schedule \
    --resource-type INSTANCE \
    --targets "Key=InstanceIds,Values=i-07782c72faEXAMPLE" \
    --max-results 10
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-schedule ^
    --resource-type INSTANCE ^
    --targets "Key=InstanceIds,Values=i-07782c72faEXAMPLE" ^
    --max-results 10
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "ScheduledWindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-05-18T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-05-25T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-06-01T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-06-08T23:35:24.902Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "ExecutionTime": "2019-06-15T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-06-22T23:35:24.902Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "ExecutionTime": "2019-06-29T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-07-06T23:35:24.902Z"
        },
        {
            "WindowId": "mw-9a8b7c6d5eEXAMPLE",
            "Name": "My-Second-Maintenance-Window",
            "ExecutionTime": "2019-07-13T23:35:24.902Z"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "My-First-Maintenance-Window",
            "ExecutionTime": "2019-07-20T23:35:24.902Z"
        }
    ],
    "NextToken": "AAEABUXdceT92FvtKld/dGHELj5Mi+GKW/EXAMPLE"
}
```

**Mostrar el programa de periodo de mantenimiento para los nodos etiquetados con un determinado par clave-valor**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-schedule \
    --resource-type INSTANCE \
    --targets "Key=tag:prod,Values=rhel7"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-schedule ^
    --resource-type INSTANCE ^
    --targets "Key=tag:prod,Values=rhel7"
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "ScheduledWindowExecutions": [
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-20T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-21T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-22T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-23T05:34:56-07:00"
        },
        {
            "WindowId": "mw-0c50858d01EXAMPLE",
            "Name": "DemoRateStartDate",
            "ExecutionTime": "2019-10-24T05:34:56-07:00"
        }
    ],
    "NextToken": "AAEABccwSXqQRGKiTZ1yzGELR6cxW4W/EXAMPLE"
}
```

**Mostrar las horas de inicio para las cuatro siguientes ejecuciones de un periodo de mantenimiento**  
Ejecute el siguiente comando.

------
#### [ Linux & macOS ]

```
aws ssm describe-maintenance-window-schedule \
    --window-id "mw-0c50858d01EXAMPLE" \
    --max-results "4"
```

------
#### [ Windows ]

```
aws ssm describe-maintenance-window-schedule ^
    --window-id "mw-0c50858d01EXAMPLE" ^
    --max-results "4"
```

------

El sistema devuelve información similar a la siguiente.

```
{
    "WindowSchedule": [
        {
            "ScheduledWindowExecutions": [
                {
                    "ExecutionTime": "2019-10-04T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                },
                {
                    "ExecutionTime": "2019-10-11T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                },
                {
                    "ExecutionTime": "2019-10-18T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                },
                {
                    "ExecutionTime": "2019-10-25T10:10:10Z",
                    "Name": "My-First-Maintenance-Window",
                    "WindowId": "mw-0c50858d01EXAMPLE"
                }
            ]
        }
    ]
}
```

# Tutorial: visualización de información sobre tareas y ejecuciones de tareas mediante la AWS CLI
<a name="mw-cli-tutorial-task-info"></a>

En este tutorial, se muestra cómo utilizar la AWS Command Line Interface (AWS CLI) para ver los detalles de las tareas completadas del periodo de mantenimiento. 

Si continua directamente desde [Tutorial: cree y configure un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-create.md), asegúrese de haber dejado suficiente tiempo para que se ejecute el periodo de mantenimiento al menos una vez para ver los resultados de la ejecución.

A medida que siga los pasos que se indican en este tutorial, reemplace los valores en *rojo* y cursiva por sus propias opciones y sus ID. Por ejemplo, reemplace el ID del periodo de mantenimiento *mw-0c50858d01EJEMPLO* y el ID de la instancia *i-02573cafcfEJEMPLO* por los ID de los recursos que usted cree.

**Para visualizar información sobre tareas y ejecuciones de tareas mediante la AWS CLI**

1. Ejecute el siguiente comando para ver una lista de las ejecuciones de las tareas de un periodo de mantenimiento determinado.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-executions \
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-executions ^
       --window-id "mw-0c50858d01EXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowExecutions": [
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593793.483,
               "EndTime": 1557593798.978
           },
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "791b72e0-f0da-4021-8b35-f95dfEXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593493.096,
               "EndTime": 1557593498.611
           },
           {
               "WindowId": "mw-0c50858d01EXAMPLE",
               "WindowExecutionId": "ecec60fa-6bb0-4d26-98c7-140308EXAMPLE",
               "Status": "SUCCESS",
               "StatusDetails": "No tasks to execute.",
               "StartTime": 1557593193.309,
               "EndTime": 1557593193.334
           }
       ]
   }
   ```

1. Ejecute el siguiente comando para obtener información sobre la ejecución de una tarea del periodo de mantenimiento.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-maintenance-window-execution \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm get-maintenance-window-execution ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
       "TaskIds": [
           "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
       ],
       "Status": "SUCCESS",
       "StartTime": 1557593493.096,
       "EndTime": 1557593498.611
   }
   ```

1. Ejecute el siguiente comando para enumerar las tareas ejecutadas como parte de una ejecución del periodo de mantenimiento.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-execution-tasks \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-execution-tasks ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowExecutionTaskIdentities": [
           {
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "TaskExecutionId": "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE",
               "Status": "SUCCESS",
               "StartTime": 1557593493.162,
               "EndTime": 1557593498.57,
               "TaskArn": "AWS-RunShellScript",
               "TaskType": "RUN_COMMAND"
           }
       ]
   }
   ```

1. Ejecute el siguiente comando para obtener los detalles de una ejecución de tareas.

------
#### [ Linux & macOS ]

   ```
   aws ssm get-maintenance-window-execution-task \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" \
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm get-maintenance-window-execution-task ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" ^
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
       "TaskExecutionId": "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE",
       "TaskArn": "AWS-RunShellScript",
       "ServiceRole": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
       "Type": "RUN_COMMAND",
       "TaskParameters": [
           {
               "aws:InstanceId": {
                   "Values": [
                       "i-02573cafcfEXAMPLE"
                   ]
               },
               "commands": {
                   "Values": [
                       "df"
                   ]
               }
           }
       ],
       "Priority": 10,
       "MaxConcurrency": "1",
       "MaxErrors": "1",
       "Status": "SUCCESS",
       "StartTime": 1557593493.162,
       "EndTime": 1557593498.57
   }
   ```

1. Ejecute el siguiente comando para obtener las invocaciones de tareas concretas realizadas en una ejecución de tareas.

------
#### [ Linux & macOS ]

   ```
   aws ssm describe-maintenance-window-execution-task-invocations \
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" \
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------
#### [ Windows ]

   ```
   aws ssm describe-maintenance-window-execution-task-invocations ^
       --window-execution-id "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE" ^
       --task-id "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowExecutionTaskInvocationIdentities": [
           {
               "WindowExecutionId": "14bea65d-5ccc-462d-a2f3-e99c8EXAMPLE",
               "TaskExecutionId": "c9b05aba-197f-4d8d-be34-e73fbEXAMPLE",
               "InvocationId": "c336d2ab-09de-44ba-8f6a-6136cEXAMPLE",
               "ExecutionId": "76a5a04f-caf6-490c-b448-92c02EXAMPLE",
               "TaskType": "RUN_COMMAND",
               "Parameters": "{\"documentName\":\"AWS-RunShellScript\",\"instanceIds\":[\"i-02573cafcfEXAMPLE\"],\"maxConcurrency\":\"1\",\"maxErrors\":\"1\",\"parameters\":{\"commands\":[\"df\"]}}",
               "Status": "SUCCESS",
               "StatusDetails": "Success",
               "StartTime": 1557593493.222,
               "EndTime": 1557593498.466
           }
       ]
   }
   ```

# Tutorial actualización de un periodo de mantenimiento mediante la AWS CLI
<a name="maintenance-windows-cli-tutorials-update"></a>

En este tutorial, se muestra cómo utilizar la AWS Command Line Interface (AWS CLI) para actualizar un periodo de mantenimiento. También se muestra cómo actualizar diferentes tipos de tarea, incluidos aquellos para AWS Systems Manager Run Command y Automation, AWS Lambda y AWS Step Functions. 

En los ejemplos que aparecen en esta sección, se utilizan las siguientes acciones de Systems Manager para actualizar un periodo de mantenimiento:
+ [UpdateMaintenanceWindow](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateMaintenanceWindow.html)
+ [UpdateMaintenanceWindowTarget](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateMaintenanceWindowTarget.html)
+ [UpdateMaintenanceWindowTask](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateMaintenanceWindowTask.html)
+ [DeregisterTargetFromMaintenanceWindow](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DeregisterTargetFromMaintenanceWindow.html)

Para obtener información acerca de cómo utilizar la consola de Systems Manager para actualizar un periodo de mantenimiento, consulte [Actualizar o eliminar recursos de un periodo de mantenimiento mediante la consola](sysman-maintenance-update.md). 

A medida que siga los pasos que se indican en este tutorial, reemplace los valores en *rojo* y cursiva por sus propias opciones y sus ID. Por ejemplo, reemplace el ID del periodo de mantenimiento *mw-0c50858d01EJEMPLO* y el ID de la instancia *i-02573cafcfEJEMPLO* por los ID de los recursos que usted cree.

**Para actualizar un periodo de mantenimiento mediante la AWS CLI**

1. Abra el AWS CLI y ejecute el siguiente comando para actualizar un destino e incluir un nombre y una descripción.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-target \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --name "My-Maintenance-Window-Target" \
       --description "Description for my maintenance window target"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-target ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --name "My-Maintenance-Window-Target" ^
       --description "Description for my maintenance window target"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
       "Targets": [
           {
               "Key": "InstanceIds",
               "Values": [
                   "i-02573cafcfEXAMPLE"
               ]
           }
       ],
       "Name": "My-Maintenance-Window-Target",
       "Description": "Description for my maintenance window target"
   }
   ```

1. Ejecute el siguiente comando si desea utilizar la opción `replace` para eliminar el campo de descripción y agregar un destino adicional. El campo de descripción se elimina, ya que la actualización no incluye el campo (un valor nulo). Asegúrese de especificar un nodo adicional que se haya configurado para utilizarse con Systems Manager.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-target \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "d208dedf-3f6b-41ff-ace8-8e751EXAMPLE" \
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE" \
       --name "My-Maintenance-Window-Target" \
       --replace
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-target ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "d208dedf-3f6b-41ff-ace8-8e751EXAMPLE" ^
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE" ^
       --name "My-Maintenance-Window-Target" ^
       --replace
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE",
       "Targets": [
           {
               "Key": "InstanceIds",
               "Values": [
                   "i-02573cafcfEXAMPLE",
                   "i-0471e04240EXAMPLE"
               ]
           }
       ],
       "Name": "My-Maintenance-Window-Target"
   }
   ```

1. La opción `start-date` permite retrasar la activación de un periodo de mantenimiento hasta una fecha futura especificada. La opción `end-date` permite establecer una fecha y hora en el futuro después de la cual el periodo de mantenimiento dejará de ejecutarse. Especifique las opciones de formato extendido ISO-8601.

   Ejecute el siguiente comando para especificar un intervalo de fecha y hora para ejecuciones programadas de forma regular del periodo de mantenimiento.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --start-date "2020-10-01T10:10:10Z" \
       --end-date "2020-11-01T10:10:10Z"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --start-date "2020-10-01T10:10:10Z" ^
       --end-date "2020-11-01T10:10:10Z"
   ```

------

1. Ejecute el siguiente comando para actualizar una tarea del Run Command.
**sugerencia**  
Si su destino es una instancia de Amazon Elastic Compute Cloud (Amazon EC2) para Windows Server, cambie `df` a `ipconfig` y `AWS-RunShellScript` a `AWS-RunPowerShellScript` en el siguiente comando.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --task-arn "AWS-RunShellScript" \
       --service-role-arn "arn:aws:iam::account-id:role/MaintenanceWindowsRole" \
       --task-invocation-parameters "RunCommand={Comment=Revising my Run Command task,Parameters={commands=df}}" \
       --priority 1 --max-concurrency 10 --max-errors 4 \
       --name "My-Task-Name" --description "A description for my Run Command task"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --task-arn "AWS-RunShellScript" ^
       --service-role-arn "arn:aws:iam::account-id:role/MaintenanceWindowsRole" ^
       --task-invocation-parameters "RunCommand={Comment=Revising my Run Command task,Parameters={commands=df}}" ^
       --priority 1 --max-concurrency 10 --max-errors 4 ^
       --name "My-Task-Name" --description "A description for my Run Command task"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskArn": "AWS-RunShellScript",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MaintenanceWindowsRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "RunCommand": {
               "Comment": "Revising my Run Command task",
               "Parameters": {
                   "commands": [
                       "df"
                   ]
               }
           }
       },
       "Priority": 1,
       "MaxConcurrency": "10",
       "MaxErrors": "4",
       "Name": "My-Task-Name",
       "Description": "A description for my Run Command task"
   }
   ```

1. Adapte y ejecute el siguiente comando para actualizar una tarea de Lambda.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id mw-0c50858d01EXAMPLE \
       --window-task-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --task-arn "arn:aws:lambda:region:111122223333:function:SSMTestLambda" \
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" \
       --task-invocation-parameters '{"Lambda":{"Payload":"{\"InstanceId\":\"{{RESOURCE_ID}}\",\"targetType\":\"{{TARGET_TYPE}}\"}"}}' \
       --priority 1 --max-concurrency 10 --max-errors 5 \
       --name "New-Lambda-Task-Name" \
       --description "A description for my Lambda task"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id mw-0c50858d01EXAMPLE ^
       --window-task-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --task-arn --task-arn "arn:aws:lambda:region:111122223333:function:SSMTestLambda" ^
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" ^
       --task-invocation-parameters '{"Lambda":{"Payload":"{\"InstanceId\":\"{{RESOURCE_ID}}\",\"targetType\":\"{{TARGET_TYPE}}\"}"}}' ^
       --priority 1 --max-concurrency 10 --max-errors 5 ^
       --name "New-Lambda-Task-Name" ^
       --description "A description for my Lambda task"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
           }
       ],
       "TaskArn": "arn:aws:lambda:us-east-2:111122223333:function:SSMTestLambda",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MaintenanceWindowsRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "Lambda": {
               "Payload": "e30="
           }
       },
       "Priority": 1,
       "MaxConcurrency": "10",
       "MaxErrors": "5",
       "Name": "New-Lambda-Task-Name",
       "Description": "A description for my Lambda task"
   }
   ```

1. Si está actualizando una tarea de Step Functions, adapte y ejecute el siguiente comando para actualizar los parámetros de invocación de tareas.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --task-arn "arn:aws:states:region:execution:SSMStepFunctionTest" \
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" \
       --task-invocation-parameters '{"StepFunctions":{"Input":"{\"InstanceId\":\"{{RESOURCE_ID}}\"}"}}' \
       --priority 0 --max-concurrency 10 --max-errors 5 \
       --name "My-Step-Functions-Task" \
       --description "A description for my Step Functions task"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --task-arn "arn:aws:states:region:execution:SSMStepFunctionTest" ^
       --service-role-arn "arn:aws:iam:account-id:role/MaintenanceWindowsRole" ^
       --task-invocation-parameters '{"StepFunctions":{"Input":"{\"InstanceId\":\"{{RESOURCE_ID}}\"}"}}' ^
       --priority 0 --max-concurrency 10 --max-errors 5 ^
       --name "My-Step-Functions-Task" ^
       --description "A description for my Step Functions task"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskArn": "arn:aws:states:us-east-2:111122223333:execution:SSMStepFunctionTest",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MaintenanceWindowsRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "StepFunctions": {
               "Input": "{\"instanceId\":\"{{RESOURCE_ID}}\"}"
           }
       },
       "Priority": 0,
       "MaxConcurrency": "10",
       "MaxErrors": "5",
       "Name": "My-Step-Functions-Task",
       "Description": "A description for my Step Functions task"
   }
   ```

1. Ejecute el siguiente comando para anular el registro de un destino del período de mantenimiento. Este ejemplo utiliza el parámetro `safe` para determinar que el destino no tenga referencias de alguna tarea y, por lo tanto, se pueda anular el registro.

------
#### [ Linux & macOS ]

   ```
   aws ssm deregister-target-from-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --safe
   ```

------
#### [ Windows ]

   ```
   aws ssm deregister-target-from-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --safe
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   An error occurred (TargetInUseException) when calling the DeregisterTargetFromMaintenanceWindow operation: 
   This Target cannot be deregistered because it is still referenced in Task: 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
   ```

1. Ejecute el siguiente comando para anular el registro de un destino de un período de mantenimiento incluso si el destino tiene referencias de una tarea. Puede forzar la operación de anulación del registro mediante el parámetro `no-safe`.

------
#### [ Linux & macOS ]

   ```
   aws ssm deregister-target-from-maintenance-window \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" \
       --no-safe
   ```

------
#### [ Windows ]

   ```
   aws ssm deregister-target-from-maintenance-window ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-target-id "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE" ^
       --no-safe
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTargetId": "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
   }
   ```

1. Ejecute el siguiente comando para actualizar una tarea del Run Command. En este ejemplo, se utiliza un parámetro de Systems Manager Parameter Store denominado `UpdateLevel`, que tiene el siguiente formato: “`{{ssm:UpdateLevel}}`”.

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"  \
       --task-invocation-parameters "RunCommand={Comment=A comment for my task update,Parameters={UpdateLevel='{{ssm:UpdateLevel}}'}}"
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=InstanceIds,Values=i-02573cafcfEXAMPLE"  ^
       --task-invocation-parameters "RunCommand={Comment=A comment for my task update,Parameters={UpdateLevel='{{ssm:UpdateLevel}}'}}"
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "InstanceIds",
               "Values": [
                   "i-02573cafcfEXAMPLE"
               ]
           }
       ],
       "TaskArn": "AWS-RunShellScript",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "RunCommand": {
               "Comment": "A comment for my task update",
               "Parameters": {
                   "UpdateLevel": [
                       "{{ssm:UpdateLevel}}"
                   ]
               }
           }
       },
       "Priority": 10,
       "MaxConcurrency": "1",
       "MaxErrors": "1"
   }
   ```

1. Ejecute el siguiente comando para actualizar una tarea de Automation y especificar los parámetros `WINDOW_ID` y `WINDOW_TASK_ID` para el parámetro `task-invocation-parameters`:

------
#### [ Linux & macOS ]

   ```
   aws ssm update-maintenance-window-task \
       --window-id "mw-0c50858d01EXAMPLE" \
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" \
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE \
       --task-arn "AutoTestDoc" \
       --service-role-arn "arn:aws:iam:account-id:role/MyMaintenanceWindowServiceRole \
       --task-invocation-parameters "Automation={Parameters={InstanceId='{{RESOURCE_ID}}',initiator='{{WINDOW_ID}}.Task-{{WINDOW_TASK_ID}}'}}" \
       --priority 3 --max-concurrency 10 --max-errors 5
   ```

------
#### [ Windows ]

   ```
   aws ssm update-maintenance-window-task ^
       --window-id "mw-0c50858d01EXAMPLE" ^
       --window-task-id "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE" ^
       --targets "Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE ^
       --task-arn "AutoTestDoc" ^
       --service-role-arn "arn:aws:iam:account-id:role/MyMaintenanceWindowServiceRole ^
       --task-invocation-parameters "Automation={Parameters={InstanceId='{{RESOURCE_ID}}',initiator='{{WINDOW_ID}}.Task-{{WINDOW_TASK_ID}}'}}" ^
       --priority 3 --max-concurrency 10 --max-errors 5
   ```

------

   El sistema devuelve información similar a la siguiente.

   ```
   {
       "WindowId": "mw-0c50858d01EXAMPLE",
       "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskArn": "AutoTestDoc",
       "ServiceRoleArn": "arn:aws:iam::111122223333:role/MyMaintenanceWindowServiceRole",
       "TaskParameters": {},
       "TaskInvocationParameters": {
           "Automation": {
               "Parameters": {
                   "multi": [
                       "{{WINDOW_TASK_ID}}"
                   ],
                   "single": [
                       "{{WINDOW_ID}}"
                   ]
               }
           }
       },
       "Priority": 0,
       "MaxConcurrency": "10",
       "MaxErrors": "5",
       "Name": "My-Automation-Task",
       "Description": "A description for my Automation task"
   }
   ```

# Tutorial: eliminación de un periodo de mantenimiento mediante la AWS CLI
<a name="mw-cli-tutorial-delete-mw"></a>

Para eliminar un periodo de mantenimiento que creó en estos tutoriales, ejecute el siguiente comando.

```
aws ssm delete-maintenance-window --window-id "mw-0c50858d01EXAMPLE"
```

El sistema devuelve información similar a la siguiente.

```
{
   "WindowId":"mw-0c50858d01EXAMPLE"
}
```

# Tutorial: creación de un periodo de mantenimiento para la aplicación de revisiones mediante la consola
<a name="maintenance-window-tutorial-patching"></a>

**importante**  
Puede seguir utilizando este tema heredado para crear un período de mantenimiento para la aplicación de revisiones. Sin embargo, le recomendamos que utilice una política de revisiones. Para obtener más información, consulte [Configuraciones de políticas de revisiones en Quick Setup](patch-manager-policies.md) y [Cómo configurar las revisiones para las instancias de una organización mediante una política de parches Quick Setup](quick-setup-patch-manager.md). 

Para minimizar el impacto en la disponibilidad de los servidores, le recomendamos que configure un período de mantenimiento para ejecutar la aplicación de revisiones durante las horas en que no se interrumpan las operaciones de negocio.

Debe configurar los roles y los permisos de Maintenance Windows, una herramienta de AWS Systems Manager, antes de comenzar este procedimiento. Para obtener más información, consulte [Configuración de Maintenance Windows](setting-up-maintenance-windows.md). 

**Para crear un período de mantenimiento para la aplicación de revisiones**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Maintenance Windows**.

1. Elija **Create maintenance window (Crear periodo de mantenimiento)**.

1. En **Name (Nombre)** escriba un nombre que designe este período de mantenimiento para aplicar revisiones de actualizaciones críticas e importantes.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción. 

1. Elija **Allow unregistered targets** (Permitir destinos no registrados) si desea permitir que se ejecute una tarea del periodo de mantenimiento en los nodos administrados, incluso si no ha registrado esos nodos como destinos.

   Si elige esta opción, podrá elegir los nodos no registrados (por ID de nodo) al registrar una tarea con el periodo de mantenimiento.

   Si no elige esta opción, tendrá elegir los destinos registrados anteriormente cuando registre una tarea con el periodo de mantenimiento. 

1. En la parte superior de la sección **Schedule (Programación)** especifique un programa para el período de mantenimiento mediante una de las tres opciones de programación.

   Para obtener información acerca de cómo crear expresiones Cron y Rate, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

1. En **Duration (Duración)**, escriba el número de horas que se ejecutará el periodo de mantenimiento. El valor que especifique determina la hora de finalización específica del periodo de mantenimiento en función de la hora de inicio. No se permite que las tareas del período de mantenimiento comiencen después de la hora de enlace resultante menos el número de horas que especifique para **Stop initiating tasks (Dejar de iniciar tareas)** en el siguiente paso. 

   Por ejemplo, si el período de mantenimiento comienza a las 15:00 h, la duración es de tres horas y el valor de **Stop initiating tasks (Dejar de iniciar tareas)** es de una hora, no se pueden iniciar tareas del período de mantenimiento después de las 17:00 h. 

1. En el campo **Stop initiating tasks (Dejar de iniciar tareas)**, escriba el número de horas que el sistema debe considerar antes de que finalice el período de mantenimiento para dejar de programar nuevas tareas por ejecutar. 

1. (Opcional) En **Window start date** (Fecha de inicio del periodo), especifique una fecha y un horario en formato extendido ISO-8601 para cuando desee que se active el periodo de mantenimiento. Esto le permite retrasar la activación del periodo de mantenimiento hasta la fecha futura especificada.

1. (Opcional) En **Window end date** (Fecha de finalización del periodo), especifique una fecha y un horario en formato extendido ISO-8601 para cuando desee que se desactive el periodo de mantenimiento. Esto le permite establecer una fecha y hora en el futuro después de la cual el periodo de mantenimiento dejará de ejecutarse.

1. (Opcional) En **Zona horaria de la programación**, especifique la zona horaria en la que se basan las programaciones de las ejecuciones de periodos de mantenimiento, en formato Internet Assigned Numbers Authority (IANA). Por ejemplo: "America/Los\$1Angeles", "etc/UTC" o "Asia/Seoul".

   Para obtener más información sobre los formatos válidos, consulte [Time Zone Database](https://www.iana.org/time-zones) en el sitio web de IANA.

1. (Opcional) En el área **Manage tags (Administrar etiquetas)**, aplique uno o varios pares de claves nombre/valor al periodo de mantenimiento.

   Las etiquetas son metadatos opcionales que usted asigna a un recurso. Las etiquetas permiten clasificar los recursos de diversas maneras, por ejemplo, según la finalidad, el propietario o el entorno. Por ejemplo, es posible que desee etiquetar este periodo de mantenimiento para identificar el tipo de tareas que ejecuta. En este caso, puede especificar el siguiente par de clave nombre-valor:
   + `Key=TaskType,Value=Patching`

1. Elija **Create maintenance window (Crear periodo de mantenimiento)**.

1. En la lista de períodos de mantenimiento, elija el que acaba de crear y, a continuación, elija **Actions (Acciones)**, **Register targets (Registrar destinos)**.

1. (Opcional) En la sección **Maintenance window target details**, proporcione un nombre, una descripción y la información del propietario (su nombre o alias) para este destino.

1. En **Selección de destino**, elija **Especificar etiquetas de instancia**.

1. En **Especificar etiquetas de instancia**, ingrese una clave de etiqueta y un valor de etiqueta para identificar los nodos que se va a registrar en el periodo de mantenimiento y, a continuación, seleccione **Agregar**.

1. Elija **Register target (Registrar destino)**. El sistema crea un destino del período de mantenimiento.

1. En la página de detalles del período de mantenimiento que ha creado, elija **Actions (Acciones)**, **Register run command task (Registrar tarea de Run Command)**.

1. (Opcional) En **Maintenance window task details (Detalles de la tarea de período de mantenimiento)**, proporcione un nombre y la descripción de esta tarea.

1. En **Command document (Documento Command)**, elija `AWS-RunPatchBaseline`.

1. En **Task priority (Prioridad de tarea)**, elija una prioridad. Cero (`0`) es la prioridad más alta.

1. En **Targets (Destinos)**, en **Target by (Destino por)**, elija el destino del período de mantenimiento que ha creado anteriormente en este procedimiento.

1. En **Rate control** (Control de velocidad):
   + En **Concurrency** (Simultaneidad), especifique un número o un porcentaje de los nodos administrados en los que desea ejecutar el comando al mismo tiempo.
**nota**  
Si seleccionó los destinos mediante la especificación de etiquetas aplicadas a nodos administrados o de grupos de recursos de AWS y no está seguro de cuántos nodos administrados tienen destino, limite el número de destinos que puede ejecutar el documento al mismo tiempo. Para ello, especifique un porcentaje.
   + En **Error threshold** (Umbral de errores), especifique cuándo desea parar la ejecución del comando en los demás nodos administrados después de que haya fallado en un número o un porcentaje de los nodos. Por ejemplo, si especifica tres errores, Systems Manager dejará de enviar el comando cuando se reciba el cuarto error. Los nodos administrados que estén procesando el comando todavía pueden enviar errores.

1. (Opcional) En **Rol de servicio de IAM**, seleccione un rol que proporcione permisos para que los asuma Systems Manager al ejecutar una tarea del periodo de mantenimiento.

   Si no especifica el ARN de un rol de servicio, Systems Manager usa un rol vinculado al servicio de su cuenta. Si en su cuenta no existe ningún rol vinculado al servicio adecuado para Systems Manager, se crea cuando la tarea se registra correctamente.
**nota**  
Para mejorar la seguridad, le recomendamos encarecidamente que cree una política y un rol de servicio personalizados para ejecutar las tareas del periodo de mantenimiento. La política se puede diseñar para proporcionar solo los permisos necesarios para las tareas específicas del periodo de mantenimiento. Para obtener más información, consulte [Configuración de Maintenance Windows](setting-up-maintenance-windows.md).

1. (Opcional) En **Output options (Opciones de salida)**, para guardar la salida del comando en un archivo, seleccione el cuadro **Enable writing output to S3 (Permitir la escritura de salida en S3)**. Ingrese los nombres del bucket y del prefijo (carpeta) en los cuadros.
**nota**  
Los permisos de S3 que conceden la capacidad de escribir datos en un bucket de S3 son los del perfil de instancias asignado al nodo administrado, no los del usuario de IAM que realiza esta tarea. Para obtener más información, consulte [Configuración de permisos de instancia requeridos para Systems Manager](setup-instance-permissions.md) o [Creación de un rol de servicio de IAM para un entorno híbrido](hybrid-multicloud-service-role.md). Además, si el bucket de S3 especificado se encuentra en una Cuenta de AWS diferente, verifique que el perfil de instancias o el rol de servicio de IAM asociado al nodo administrado tenga los permisos necesarios para escribir en ese bucket.

   Para transmitir la salida a un grupo de registro de Amazon CloudWatch Logs, seleccione la casilla **CloudWatch output** (Salida de CloudWatch). Ingrese el nombre del grupo de registro en la casilla.

1. En la sección **SNS notifications** (Notificaciones de SNS), seleccione la casilla de verificación **Enable SNS notifications** (Habilitar notificaciones de SNS) si desea recibir notificaciones sobre el estado de la ejecución de los comandos.

   Para obtener más información acerca de la configuración de las notificaciones de Amazon SNS para Run Command, consulte [Cómo monitorear los cambios de estado de Systems Manager mediante las notificaciones de Amazon SNS](monitoring-sns-notifications.md).

1. En **Parameters (Parámetros)**:
   + En **Operation (Operación)**, elija **Scan (Analizar)** para buscar las revisiones que faltan o elija **Install (Instalar)** para buscar las revisiones que faltan e instalarlos.
   + No necesita especificar nada en el campo **Snapshot Id (Id de instantánea)**. Este sistema genera y proporciona este parámetro automáticamente.
   + No es necesario ingresar nada en el campo **Install Override List** (Lista de anulación de instalación) a menos que desee que Patch Manager utilice un conjunto de revisiones diferente al especificado para la línea de base de revisiones. Para obtener más información, consulte [Nombre del parámetro: `InstallOverrideList`](patch-manager-aws-runpatchbaseline.md#patch-manager-aws-runpatchbaseline-parameters-installoverridelist).
   + En **RebootOption**, especifique si desea que los nodos se reinicien si se instalan revisiones durante la operación `Install` o si Patch Manager detecta otras revisiones instaladas a partir del último reinicio de nodo. Para obtener más información, consulte [Nombre del parámetro: `RebootOption`](patch-manager-aws-runpatchbaseline.md#patch-manager-aws-runpatchbaseline-parameters-norebootoption).
   + (Opcional) Para **Comment (Comentario)**, introduzca una nota de seguimiento o un recordatorio sobre este comando.
   + Para **Timeout (seconds) Tiempo de espera (segundos)**, escriba el número de segundos que el sistema tiene que esperar a que finalice la operación antes de que se considere incorrecta.

1. Elija **Register Run command task** (Registrar tarea de Run Command).

Una vez que se complete la tarea del periodo de mantenimiento, puede ver los detalles de la conformidad de revisiones en la consola de Systems Manager en la herramienta de [Fleet Manager](fleet-manager.md). 

También puede ver la información de cumplimiento en la herramienta [Patch Manager](patch-manager.md), en la pestaña **Informes de conformidad**. 

También puede usar las API [DescribePatchGroupState](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribePatchGroupState.html) y [DescribeInstancePatchStatesForPatchGroup](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeInstancePatchStatesForPatchGroup.html) para ver los detalles de conformidad. Para obtener información sobre los datos de conformidad de revisiones, consulte [Acerca de la conformidad de parches](compliance-about.md#compliance-monitor-patch).

# Programación de aplicación de parches mediante periodos de mantenimiento
<a name="sysman-patch-scheduletasks"></a>

Después de configurar una base de referencia de revisiones (y, si lo desea, un grupo de revisiones), puede aplicar las revisiones al nodo mediante un periodo de mantenimiento. Un período de mantenimiento puede reducir el impacto en la disponibilidad del servidor al permitir especificar una hora para realizar el proceso de aplicación de parches que no interrumpa las operaciones de negocio. Un período de mantenimiento funciona del siguiente modo:

1. Cree un período de mantenimiento con una programación para sus operaciones de aplicación de parches.

1. Elija los destinos del periodo de mantenimiento mediante la especificación de la etiqueta `Patch Group` o `PatchGroup` para el nombre de grupo y cualquier valor para el que haya definido etiquetas de Amazon Elastic Compute Cloud (Amazon EC2), por ejemplo, “servidores de producción” o “US-EAST-PROD”. (Tiene que usar `PatchGroup`, sin espacio, si ha [permitido las etiquetas en los metadatos de las instancias de EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#allow-access-to-tags-in-IMDS)).

1. Cree una nueva tarea de periodo de mantenimiento y especifique el documento `AWS-RunPatchBaseline`. 

Al configurar la tarea, puede elegir entre analizar los nodos o analizar e instalar las revisiones en los nodos. Si decide analizar nodos, Patch Manager, una herramienta de AWS Systems Manager, analiza cada uno de ellos y genera una lista de las revisiones que faltan para que las revise.

Si elige analizar e instalar revisiones, Patch Manager analiza cada nodo y compara la lista de revisiones instaladas con la de revisiones aprobadas en la base de referencia. Patch Manager identifica las revisiones que faltan y, a continuación, descarga e instala todas las revisiones faltantes y aprobadas.

Si desea realizar un único análisis o instalación para corregir un problema, puede usar Run Command para llamar al documento `AWS-RunPatchBaseline` directamente.

**importante**  
Después de instalar las revisiones, Systems Manager reinicia cada nodo. El reinicio es necesario para asegurarse de que las revisiones se han instalado correctamente y para garantizar que el sistema no haya podido dejar el nodo en un estado incorrecto. (Excepción: si el parámetro `RebootOption` se configura en `NoReboot` en el documento `AWS-RunPatchBaseline`, el nodo administrado no se reinicia una vez que se ejecuta Patch Manager. Para obtener más información, consulte [Nombre del parámetro: `RebootOption`](patch-manager-aws-runpatchbaseline.md#patch-manager-aws-runpatchbaseline-parameters-norebootoption).) 

# Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento
<a name="maintenance-window-tasks-pseudo-parameters"></a>

Cuando se registra una tarea en Maintenance Windows, una herramienta de AWS Systems Manager, puede especificar los parámetros únicos para cada uno de los cuatro tipos. (En los comandos de la CLI, estas se ofrecen al utilizar la opción `--task-invocation-parameters`).

 También puede hacer referencia a determinados valores mediante la sintaxis de *pseudoparámetros*, como `{{RESOURCE_ID}}`, `{{TARGET_TYPE}}` y `{{WINDOW_TARGET_ID}}`. Al ejecutarse la tarea del periodo de mantenimiento, esta pasa los valores correctos en lugar de los marcadores de posición del pseudoparámetro. Más adelante, en la sección [Pseudoparámetros admitidos](#pseudo-parameters), se ofrece una lista completa de los pseudoparámetros que se pueden utilizar.

**importante**  
Para el tipo de destino `RESOURCE_GROUP`, en función del formato de ID necesario para la tarea, puede elegir entre usar `{{TARGET_ID}}` y `{{RESOURCE_ID}}` para hacer referencia al recurso cuando se ejecute la tarea. `{{TARGET_ID}}` devuelve el ARN completo del recurso. `{{RESOURCE_ID}}` devuelve solo un ID o nombre más corto del recurso, como se muestra en estos ejemplos.  
`{{TARGET_ID}}` Formato de: `arn:aws:ec2:us-east-1:123456789012:instance/i-02573cafcfEXAMPLE`
`{{RESOURCE_ID}}` Formato de: `i-02573cafcfEXAMPLE`
Para el tipo de destino `INSTANCE`, los parámetros `{{TARGET_ID}}` y `{{RESOURCE_ID}}` solo generan el ID de instancia. Para obtener más información, consulte [Pseudoparámetros admitidos](#pseudo-parameters).  
`{{TARGET_ID}}` y `{{RESOURCE_ID}}` se pueden utilizar para pasar los ID de los recursos de AWS solo a tareas de Automation, Lambda y Step Functions. Estos dos pseudoparámetros no se pueden utilizar con tareas de Run Command.

## Ejemplos de pseudoparámetros
<a name="pseudo-parameter-examples"></a>

Suponga que la carga para una tarea de AWS Lambda necesita referenciar una instancia por su ID.

Si utiliza un destino de periodo de mantenimiento `INSTANCE` o `RESOURCE_GROUP`, esto se puede lograr con el pseudoparámetro `{{RESOURCE_ID}}`. Por ejemplo:

```
"TaskArn": "arn:aws:lambda:us-east-2:111122223333:function:SSMTestFunction",
    "TaskType": "LAMBDA",
    "TaskInvocationParameters": {
        "Lambda": {
            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",
            "Payload": "{ \"instanceId\": \"{{RESOURCE_ID}}\" }",
            "Qualifier": "$LATEST"
        }
    }
```

Si su tarea de Lambda está diseñada para ejecutarse en otro tipo de destino compatible además de las instancias Amazon Elastic Compute Cloud (Amazon EC2), como una tabla de Amazon DynamoDB, se puede utilizar la misma sintaxis y `{{RESOURCE_ID}}` solo genera el nombre de la tabla. Sin embargo, si necesita el ARN completo de la tabla, utilice `{{TARGET_ID}}`, como se muestra en el siguiente ejemplo.

```
"TaskArn": "arn:aws:lambda:us-east-2:111122223333:function:SSMTestFunction",
    "TaskType": "LAMBDA",
    "TaskInvocationParameters": {
        "Lambda": {
            "ClientContext": "ew0KICAi--truncated--0KIEXAMPLE",
            "Payload": "{ \"tableArn\": \"{{TARGET_ID}}\" }",
            "Qualifier": "$LATEST"
        }
    }
```

La misma sintaxis funciona para la definición de destinos de instancias u otros tipos de recursos. Cuando se han agregado varios tipos de recursos a un grupo de recursos, la tarea se ejecuta en cada uno de los recursos correspondientes. 

**importante**  
No todos los tipos de recursos que se pueden incluir en un grupo de recursos generan un valor para el parámetro `{{RESOURCE_ID}}`. Para obtener una lista de los tipos de recursos admitidos, consulte [Pseudoparámetros admitidos](#pseudo-parameters).

Otro ejemplo es que, para ejecutar una tarea de Automation que detenga las instancias EC2, deberá especificar el documento de Systems Manager (documento de SSM) `AWS-StopEC2Instance` como el valor de `TaskArn` y utilizar el pseudoparámetro `{{RESOURCE_ID}}`:

```
"TaskArn": "AWS-StopEC2Instance",
    "TaskType": "AUTOMATION"
    "TaskInvocationParameters": {
        "Automation": {
            "DocumentVersion": "1",
            "Parameters": {
                "instanceId": [
                    "{{RESOURCE_ID}}"
                ]
            }
        }
    }
```

Para ejecutar una tarea de Automation que copie una instantánea de un volumen de Amazon Elastic Block Store (Amazon EBS), deberá especificar el documento de SSM `AWS-CopySnapshot` como el valor de `TaskArn` y utilizar el pseudoparámetro `{{RESOURCE_ID}}`.

```
"TaskArn": "AWS-CopySnapshot",
    "TaskType": "AUTOMATION"
    "TaskInvocationParameters": {
        "Automation": {
            "DocumentVersion": "1",
            "Parameters": {
                "SourceRegion": "us-east-2",
                "targetType":"RESOURCE_GROUP",
                "SnapshotId": [
                    "{{RESOURCE_ID}}"
                ]
            }
        }
    }
```

## Pseudoparámetros admitidos
<a name="pseudo-parameters"></a>

En la siguiente lista se describen los pseudoparámetros que puede especificar mediante la sintaxis `{{PSEUDO_PARAMETER}}` en la opción `--task-invocation-parameters`.
+ **`WINDOW_ID`**: el ID del período de mantenimiento de destino.
+ **`WINDOW_TASK_ID`**: el ID de la tarea del periodo que se está ejecutando.
+ **`WINDOW_TARGET_ID`**: el ID del destino de la ventana que incluye el destino (ID de destino).
+ **`WINDOW_EXECUTION_ID`**: el ID de ejecución de la ventana actual.
+ **`TASK_EXECUTION_ID`**: el ID de la ejecución de tarea actual.
+ **`INVOCATION_ID`**: el ID de la invocación actual.
+ **`TARGET_TYPE`**: el tipo de destino. Los tipos admitidos son `RESOURCE_GROUP` e `INSTANCE`.
+ **`TARGET_ID`**: 

  Si el tipo de destino especificado es `INSTANCE`, el pseudoparámetro `TARGET_ID` se reemplaza por el ID de la instancia. Por ejemplo, `i-078a280217EXAMPLE`.

  Si el tipo de destino especificado es `RESOURCE_GROUP`, el valor que se referencia para la ejecución de la tarea es el ARN completo del recurso. Por ejemplo: `arn:aws:ec2:us-east-1:123456789012:instance/i-078a280217EXAMPLE`. La tabla siguiente proporciona valores de `TARGET_ID` de ejemplo para determinados tipos de recursos de un grupo de recursos. 
**nota**  
`TARGET_ID` no es compatible con tareas de Run Command.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/maintenance-window-tasks-pseudo-parameters.html)
+ **`RESOURCE_ID`**: el ID abreviado de un tipo de recurso incluido en un grupo de recursos. La tabla siguiente proporciona valores de `RESOURCE_ID` de ejemplo para determinados tipos de recursos de un grupo de recursos. 
**nota**  
`RESOURCE_ID` no es compatible con tareas de Run Command.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/systems-manager/latest/userguide/maintenance-window-tasks-pseudo-parameters.html)
**nota**  
Si el grupo de recursos de AWS que usted especifica incluye tipos de recursos que no generan un valor de `RESOURCE_ID` y no aparecen en la tabla anterior, el parámetro `RESOURCE_ID` no se rellena. Se seguirá produciendo una invocación de ejecución para ese recurso. En estos casos, utilice el pseudoparámetro `TARGET_ID` en su lugar, que se reemplazará por el ARN completo del recurso.

# Programación de la ventana de mantenimiento y opciones de periodo activo
<a name="maintenance-windows-schedule-options"></a>

Al crear un período de mantenimiento, debe especificar la frecuencia con la que se ejecuta el período de mantenimiento mediante una [expresión cron o rate](reference-cron-and-rate-expressions.md). Si lo prefiere, puede especificar un intervalo de fechas durante el cual se puede ejecutar el periodo de mantenimiento en su programación habitual, así como una zona horaria en la que basar esa programación habitual. 

Tenga en cuenta, sin embargo, que la opción de zona horaria y las opciones de fecha de inicio y fecha de finalización no se afectan entre sí. Cualquier fecha de inicio y de finalización que especifique (con o sin corrección para su zona horaria) solo determinan el *período válido* durante el cual se puede ejecutar el período de mantenimiento en su programación. Una opción de zona horaria determina la zona horaria internacional en la que se basa la programación del período de mantenimiento *durante* su período válido.

**nota**  
Especifique las fechas de inicio y de finalización en formato de marca temporal ISO-8601. Por ejemplo: `2021-04-07T14:29:00-08:00`  
Especifique las zonas horarias en formato IANA (del inglés, Internet Assigned Numbers Authority). Por ejemplo, `America/Chicago`, `Europe/Berlin` o `Asia/Tokyo`.

**Topics**
+ [Ejemplo 1: especificar una fecha de inicio del período de mantenimiento](#schedule-example-start-date)
+ [Ejemplo 2: especificar una fecha de inicio y finalización del período de mantenimiento](#schedule-example-start-end-date)
+ [Ejemplo 3: crear un período de mantenimiento que se ejecuta solo una vez](#schedule-example-one-time)
+ [Ejemplo 4: especifique el número de días de desplazamiento de la programación de un período de mantenimiento](#schedule-example-schedule-offset)

## Ejemplo 1: especificar una fecha de inicio del período de mantenimiento
<a name="schedule-example-start-date"></a>

Suponga que utiliza la AWS Command Line Interface (AWS CLI) para crear un periodo de mantenimiento con las siguientes opciones:
+ `--start-date 2021-01-01T00:00:00-08:00`
+ `--schedule-timezone "America/Los_Angeles"`
+ `--schedule "cron(0 09 ? * WED *)"`

Por ejemplo:

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-LAX-Maintenance-Window" \
    --allow-unassociated-targets \
    --duration 3 \
    --cutoff 1 \
    --start-date 2021-01-01T00:00:00-08:00 \
    --schedule-timezone "America/Los_Angeles" \
    --schedule "cron(0 09 ? * WED *)"
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-LAX-Maintenance-Window" ^
    --allow-unassociated-targets ^
    --duration 3 ^
    --cutoff 1 ^
    --start-date 2021-01-01T00:00:00-08:00 ^
    --schedule-timezone "America/Los_Angeles" ^
    --schedule "cron(0 09 ? * WED *)"
```

------

Esto significa que la primera ejecución del periodo de mantenimiento no ocurrirá hasta *después* de la fecha y la hora de inicio especificadas, que es a las 00.00 h en la zona horaria del Pacífico de EE. UU. del viernes 1 de enero de 2021. (Esta zona horaria está ocho horas por detrás de la hora UTC). En este caso, la fecha y la hora de inicio del periodo no representan cuándo se ejecutan por primera vez los periodos de mantenimiento. En conjunto, los valores `--schedule-timezone` y `--schedule` significan que el periodo de mantenimiento se ejecutará todos los miércoles a las 9.00 h en la zona horaria del Pacífico de EE. UU. (representados por “América/Los Ángeles” en formato IANA). La primera ejecución en el periodo permitido será el miércoles 4 de enero de 2021 a las 9.00 h en la zona horaria del Pacífico de EE. UU.

## Ejemplo 2: especificar una fecha de inicio y finalización del período de mantenimiento
<a name="schedule-example-start-end-date"></a>

Supongamos que, a continuación, desea crear un período de mantenimiento con estas opciones:
+ `--start-date 2019-01-01T00:03:15+09:00`
+ `--end-date 2019-06-30T00:06:15+09:00`
+ `--schedule-timezone "Asia/Tokyo"`
+ `--schedule "rate(7 days)"`

Por ejemplo:

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-NRT-Maintenance-Window" \
    --allow-unassociated-targets \
    --duration 3 \
    --cutoff 1 \
    --start-date 2019-01-01T00:03:15+09:00 \
    --end-date 2019-06-30T00:06:15+09:00 \
    --schedule-timezone "Asia/Tokyo" \
    --schedule "rate(7 days)"
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-NRT-Maintenance-Window" ^
    --allow-unassociated-targets ^
    --duration 3 ^
    --cutoff 1 ^
    --start-date 2019-01-01T00:03:15+09:00 ^
    --end-date 2019-06-30T00:06:15+09:00 ^
    --schedule-timezone "Asia/Tokyo" ^
    --schedule "rate(7 days)"
```

------

El periodo permitido para este periodo de mantenimiento comienza a las 3.15 h, hora estándar de Japón, el 1 de enero de 2019. El período válido para este período de mantenimiento termina a las 6:15, hora estándar de Japón, el domingo, 30 de junio de 2019. (Esta zona horaria está nueve horas por delante de la hora UTC). En conjunto, los valores `--schedule-timezone` y `--schedule` significan que el período de mantenimiento se ejecutará todos los martes a las 3:15 en la zona horaria estándar de Japón (representados por "Asia/Tokyo" en formato IANA). Esto se debe a que el periodo de mantenimiento se ejecuta cada siete días y se activa a las 3.15 h del martes 1 de enero. La última ejecución será a las 3:15, hora estándar de Japón, el martes, 25 de junio de 2019. Este es el último martes antes de que el periodo de mantenimiento permitido finalice cinco días más tarde.

## Ejemplo 3: crear un período de mantenimiento que se ejecuta solo una vez
<a name="schedule-example-one-time"></a>

Ahora, cree un periodo de mantenimiento con esta opción:
+ `--schedule "at(2020-07-07T15:55:00)"`

Por ejemplo:

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-One-Time-Maintenance-Window" \
    --schedule "at(2020-07-07T15:55:00)" \
    --duration 5 \
    --cutoff 2 \
    --allow-unassociated-targets
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-One-Time-Maintenance-Window" ^
    --schedule "at(2020-07-07T15:55:00)" ^
    --duration 5 ^
    --cutoff 2 ^
    --allow-unassociated-targets
```

------

Este período de mantenimiento se ejecuta una única vez, a las 15.55 (UTC) del 7 de julio de 2020. El periodo de mantenimiento se puede ejecutar un máximo de cinco horas, según sea necesario, pero se impide que se inicien tareas nuevas dos horas antes de que finalice el periodo de mantenimiento.

## Ejemplo 4: especifique el número de días de desplazamiento de la programación de un período de mantenimiento
<a name="schedule-example-schedule-offset"></a>

Ahora, cree un periodo de mantenimiento con esta opción:

```
--schedule-offset 2
```

Por ejemplo:

------
#### [ Linux & macOS ]

```
aws ssm create-maintenance-window \
    --name "My-Cron-Offset-Maintenance-Window" \
    --schedule "cron(0 30 23 ? * TUE#3 *)" \
    --duration 4 \
    --cutoff 1 \
    --schedule-offset 2 \
    --allow-unassociated-targets
```

------
#### [ Windows ]

```
aws ssm create-maintenance-window ^
    --name "My-Cron-Offset-Maintenance-Window" ^
    --schedule "cron(0 30 23 ? * TUE#3 *)" ^
    --duration 4 ^
    --cutoff 1 ^
    --schedule-offset 2 ^
    --allow-unassociated-targets
```

------

Un desplazamiento de la programación es el número de días que se debe esperar después de la fecha y hora especificadas por una expresión CRON antes de ejecutar el período de mantenimiento.

En el ejemplo anterior, la expresión CRON programa un periodo de mantenimiento para que se ejecute el tercer martes de cada mes a las 23.30 h: 

```
--schedule "cron(0 30 23 ? * TUE#3 *)
```

Sin embargo, si incluye `--schedule-offset 2` significará que el período de mantenimiento no se ejecutará hasta las 23.30 h dos días *después* del tercer martes de cada mes. 

Los desplazamientos de la programación solo se admiten en las expresiones CRON. 

**Más información**  
+ [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md)
+ [Crear y configurar un periodo de mantenimiento mediante la consola](sysman-maintenance-create-mw.md)
+ [Tutorial: cree y configure un periodo de mantenimiento mediante la AWS CLI](maintenance-windows-cli-tutorials-create.md)
+ [CreateMaintenanceWindow](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateMaintenanceWindow.html) en la *Referencia de la API de AWS Systems Manager*
+ [https://docs.aws.amazon.com/cli/latest/reference/ssm/create-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/create-maintenance-window.html) en la *sección AWS Systems Manager de la Referencia de comandos de la AWS CLI*
+ [Base de datos de zonas horarias](https://www.iana.org/time-zones) en el sitio web de IANA

# Registro de tareas del periodo de mantenimiento sin destinos
<a name="maintenance-windows-targetless-tasks"></a>

Para cada periodo de mantenimiento que crea, puede especificar una o más tareas que se deben realizar cuando se ejecuta el periodo de mantenimiento. En la mayoría de los casos, debe especificar los recursos o los destinos en los que se ejecutará la tarea. En algunos casos, sin embargo, no es necesario que especifique destinos de forma explícita en la tarea.

Se deben especificar uno o más destinos para las tareas de tipo Systems Manager Run Command del periodo de mantenimiento. Según la naturaleza de la tarea, los destinos son opcionales para otros tipos de tarea de periodo de mantenimiento (Automatización de Systems Manager, AWS Lambda y AWS Step Functions). 

Para los tipos de tareas de Lambda y Step Functions, la necesidad de un destino dependerá del contenido de la función o la máquina de estado que haya creado.

**nota**  
Cuando una tarea tiene objetivos registrados, Automatización, AWS Lambda y las tareas de AWS Step Functions resuelven los objetivos de los grupos de recursos y las etiquetas y envían una invocación por recurso resuelto, lo que da como resultado varias invocaciones de tareas. Pero supongamos, por ejemplo, que solo desea una invocación para una tarea de Lambda que esté registrada en un grupo de recursos que contenga más de una instancia. En este caso, si está trabajando en Consola de administración de AWS, elija la opción **Destino de tarea no requerido** en la página **Registrar tarea de Lambda** o **Editar tarea de Lambda**. Si utiliza el comando AWS CLI, no especifique los objetivos mediante el parámetro `--targets` al ejecutar el comando [https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html) o el comando [https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html).

En muchos casos, no es necesario especificar de forma explícita un destino para una tarea de automatización. Por ejemplo, suponga que crea una tarea de tipo Automation para actualizar una Amazon Machine Image (AMI) para Linux mediante el manual de procedimientos `AWS-UpdateLinuxAmi`. Cuando se ejecuta la tarea, la AMI se actualiza con los paquetes de distribución de Linux y el software de Amazon disponibles más recientes. Las instancias nuevas que se crearon a partir de la AMI ya tienen estas actualizaciones instaladas. Como el ID de la AMI que se actualizará se especifica en los parámetros de entrada del manual de procedimientos, no es necesario volver a especificar un destino en la tarea del periodo de mantenimiento.

Del mismo modo, suponga que utiliza la AWS Command Line Interface (AWS CLI) para registrar un periodo de mantenimiento de una tarea de automatización que utiliza el manual de procedimientos `AWS-RestartEC2Instance`. Puesto que el nodo que se debe reiniciar se especifica en el argumento `--task-invocation-parameters`, no es necesario especificar también una opción `--targets`. 

**nota**  
En el caso de las tareas del periodo de mantenimiento sin un destino especificado, no puede proporcionar valores para `--max-errors` ni `--max-concurrency`. En su lugar, el sistema inserta un valor de marcador `1`, el cual podría notificarse en la respuesta a los comandos, como [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-maintenance-window-tasks.html) y [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-maintenance-window-task.html). Estos valores no afectan la ejecución de la tarea y se pueden ignorar.

En el siguiente ejemplo, se muestra la omisión de las opciones `--targets`, `--max-errors` y `--max-concurrency` para una tarea de un periodo de mantenimiento sin destino.

------
#### [ Linux & macOS ]

```
aws ssm register-task-with-maintenance-window \
    --window-id "mw-ab12cd34eEXAMPLE" \
    --service-role-arn "arn:aws:iam::123456789012:role/MaintenanceWindowAndAutomationRole" \
    --task-type "AUTOMATION" \
    --name "RestartInstanceWithoutTarget" \
    --task-arn "AWS-RestartEC2Instance" \
    --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"]}}}" \
    --priority 10
```

------
#### [ Windows ]

```
aws ssm register-task-with-maintenance-window ^
    --window-id "mw-ab12cd34eEXAMPLE" ^
    --service-role-arn "arn:aws:iam::123456789012:role/MaintenanceWindowAndAutomationRole" ^
    --task-type "AUTOMATION" ^
    --name "RestartInstanceWithoutTarget" ^
    --task-arn "AWS-RestartEC2Instance" ^
    --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"i-02573cafcfEXAMPLE\"]}}}" ^
    --priority 10
```

------

**nota**  
Para tareas de periodo de mantenimiento registradas antes del 23 de diciembre de 2020: si especificó destinos para la tarea y ya no es necesario uno, puede actualizar esa tarea para eliminar los destinos mediante la consola de Systems Manager o el comando AWS CLI de la [https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/update-maintenance-window-task.html). 

**Más información**  
+ [Mensajes de error: “Maintenance window tasks without targets don't support MaxConcurrency values” (“Las tareas del periodo de mantenimiento sin destinos no admiten valores MaxConcurrency”) y “Maintenance window tasks without targets don't support MaxErrors values” (“Las tareas del periodo de mantenimiento sin destinos no admiten valores MaxErrors”).](troubleshooting-maintenance-windows.md#maxconcurrency-maxerrors-not-supported)

# Solución de problemas de periodos de mantenimiento
<a name="troubleshooting-maintenance-windows"></a>

Utilice la siguiente información como ayuda para solucionar problemas con periodos de mantenimiento.

**Topics**
+ [Error de edición de tarea: en la página de edición de una tarea de periodo de mantenimiento, la lista de roles de IAM devuelve un mensaje de error: “We couldn't find the IAM maintenance window role specified for this task. It might have been deleted, or it might not have been created yet" (No se encontró el rol de IAM Maintenance Window especificada para esta tarea. Puede que se haya eliminado o que todavía no se haya creado).](#maintenance-window-role-troubleshooting)
+ [No todos los destinos del periodo de mantenimiento se actualizan](#targets-not-updated)
+ [La tarea falla con el estado de invocación de tarea: “El rol proporcionado no contiene los permisos SSM correctos”.](#incorrect-ssm-permissions)
+ [La tarea falla con el mensaje de error: “Step fails when it is validating and resolving the step inputs” (El paso falla cuando está validando y resolviendo las entradas del paso).](#step-fails)
+ [Mensajes de error: “Maintenance window tasks without targets don't support MaxConcurrency values” (“Las tareas del periodo de mantenimiento sin destinos no admiten valores MaxConcurrency”) y “Maintenance window tasks without targets don't support MaxErrors values” (“Las tareas del periodo de mantenimiento sin destinos no admiten valores MaxErrors”).](#maxconcurrency-maxerrors-not-supported)

## Error de edición de tarea: en la página de edición de una tarea de periodo de mantenimiento, la lista de roles de IAM devuelve un mensaje de error: “We couldn't find the IAM maintenance window role specified for this task. It might have been deleted, or it might not have been created yet" (No se encontró el rol de IAM Maintenance Window especificada para esta tarea. Puede que se haya eliminado o que todavía no se haya creado).
<a name="maintenance-window-role-troubleshooting"></a>

**Problema 1**: el rol de periodo de mantenimiento de AWS Identity and Access Management (IAM) que especificó originalmente se eliminó después de que se creó la tarea.

**Posible solución**: 1) Seleccione un rol de periodo de mantenimiento de IAM diferente, si ya existe uno en su cuenta, o cree uno nuevo y selecciónelo para la tarea. 

**Problema 2**: si la tarea se creó mediante la AWS Command Line Interface (AWS CLI), AWS Tools for Windows PowerShell o un AWS SDK, es posible que se haya especificado un nombre de rol de periodo de mantenimiento de IAM inexistente. Por ejemplo, es posible se haya eliminado el rol de periodo de mantenimiento de IAM antes de crear la tarea, o que el nombre del rol se haya escrito incorrectamente, como **myrole** en lugar de **my-role**.

**Posible solución**: Seleccione el nombre correcto del rol de periodo de mantenimiento de IAM que desea utilizar o cree uno nuevo con el fin de especificarlo para la tarea. 

## No todos los destinos del periodo de mantenimiento se actualizan
<a name="targets-not-updated"></a>

**Problema:** observa que las tareas del periodo de mantenimiento no se ejecutaron en todos los recursos indicados como destino por el periodo de mantenimiento. Por ejemplo, en los resultados de la ejecución del periodo de mantenimiento, la tarea de ese recurso se marca como error o tiempo de espera agotado.

**Solución:** la conectividad y la disponibilidad son las razones más comunes por las que una tarea del periodo de mantenimiento no se ejecuta en un recurso de destino. Por ejemplo:
+ Systems Manager perdió la conexión con el recurso antes de la operación del periodo de mantenimiento o durante ella.
+ El recurso se quedó sin conexión o se detuvo durante la operación del periodo de mantenimiento.

Puede esperar a la hora del próximo periodo de mantenimiento programado para ejecutar las tareas en los recursos. Puede ejecutar de forma manual las tareas del periodo de mantenimiento en los recursos que no estaban disponibles o que estaban sin conexión.

## La tarea falla con el estado de invocación de tarea: “El rol proporcionado no contiene los permisos SSM correctos”.
<a name="incorrect-ssm-permissions"></a>

**Problema**: especificó un rol de servicio de periodo de mantenimiento para una tarea, pero esta no se ejecuta de forma correcta y el estado de invocación de la tarea indica que “el rol proporcionado no contiene los permisos SSM correctos”. 
+ **Solución**: en [Tarea 1: cree una política personalizada para el rol de servicio de periodo de mantenimiento mediante la consola](configuring-maintenance-window-permissions-console.md#create-custom-policy-console), ofrecemos una política básica que puede adjuntar al [rol de servicio de periodo de mantenimiento personalizado](configuring-maintenance-window-permissions-console.md#create-custom-role-console). La política incluye los permisos necesarios para muchos escenarios de tareas. Sin embargo, debido a la gran variedad de tareas que puede ejecutar, es posible que deba proporcionar permisos adicionales en la política para el rol de periodo de mantenimiento.

  Por ejemplo, algunas acciones de Automation trabajan con pilas de AWS CloudFormation. Por lo tanto, es posible que tenga que agregar permisos adicionales de `cloudformation:CreateStack`, `cloudformation:DescribeStacks`, y `cloudformation:DeleteStack` a la política para el rol de servicio del periodo de mantenimiento. 

  Otro ejemplo es el manual de procedimientos de Automation `AWS-CopySnapshot`, que requiere permisos para crear una instantánea de Amazon Elastic Block Store (Amazon EBS). Por lo tanto, es posible que tenga que agregar el permiso `ec2:CreateSnapshot`.

  Para obtener información sobre los permisos de rol que necesita un manual de procedimientos de Automatización administrada de AWS, consulte las descripciones de manuales de procedimientos en la [referencia de manuales de procedimientos de Automatización de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html).

  Para obtener más información acerca de los permisos de rol que necesita un documento de SSM administrado de AWS, revise el contenido del mismo en la sección [Documentos](https://console.aws.amazon.com//systems-manager/documents) de la consola de Systems Manager.

  Para obtener información sobre los permisos de rol necesarios para las tareas de Step Functions, de Lambda y los manuales de procedimientos de automatización personalizados y los documentos de SSM, verifique los requisitos de permisos con el autor de esos recursos.

## La tarea falla con el mensaje de error: “Step fails when it is validating and resolving the step inputs” (El paso falla cuando está validando y resolviendo las entradas del paso).
<a name="step-fails"></a>

**Problema**: un manual de procedimientos de Automation o un documento de Command de Systems Manager que se utiliza en una tarea requiere que especifique entradas como `InstanceId` o `SnapshotId`, pero no se proporciona un valor o no se suministra correctamente.
+ **Solución 1**: si la tarea tiene como destino un recurso único, como un nodo único o una instantánea única, ingrese su ID en los parámetros de entrada de la tarea.
+ **Solución 2**: si la tarea tiene como destino varios recursos, como la creación de imágenes a partir de varios nodos cuando utiliza el manual de procedimientos `AWS-CreateImage`, puede utilizar uno de los pseudoparámetros admitidos para tareas del periodo de mantenimiento en los parámetros de entrada para representar los ID de nodo en el comando. 

  Los siguientes comandos registran una tarea de Systems Manager Automation con un periodo de mantenimiento mediante la AWS CLI. El valor `--targets` indica un ID de destino del periodo de mantenimiento. Además, a pesar de que el parámetro `--targets` especifica un ID de destino del periodo, los parámetros del manual de procedimientos de Automation requieren que se proporcione un ID de nodo. En este caso, el comando utiliza el pseudoparámetro `{{RESOURCE_ID}}`como el valor de `InstanceId`.

  **AWS CLI comando:**

------
#### [ Linux & macOS ]

  El siguiente comando de ejemplo reinicia las instancias de Amazon Elastic Compute Cloud (Amazon EC2) que pertenecen al grupo de destino del periodo de mantenimiento con el ID e32eecb2-646c-4f4b-8ed1-205fbEJEMPLO.

  ```
  aws ssm register-task-with-maintenance-window \
      --window-id "mw-0c50858d01EXAMPLE" \
      --targets Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE \
      --task-arn "AWS-RestartEC2Instance" \
      --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole \
      --task-type AUTOMATION \
      --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{RESOURCE_ID}}'}}" \
      --priority 0 --max-concurrency 10 --max-errors 5 --name "My-Restart-EC2-Instances-Automation-Task" \
      --description "Automation task to restart EC2 instances"
  ```

------
#### [ Windows ]

  ```
  aws ssm register-task-with-maintenance-window ^
      --window-id "mw-0c50858d01EXAMPLE" ^
      --targets Key=WindowTargetIds,Values=e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE ^
      --task-arn "AWS-RestartEC2Instance" ^
      --service-role-arn arn:aws:iam::123456789012:role/MyMaintenanceWindowServiceRole ^
      --task-type AUTOMATION ^
      --task-invocation-parameters "Automation={DocumentVersion=5,Parameters={InstanceId='{{RESOURCE_ID}}'}}" ^
      --priority 0 --max-concurrency 10 --max-errors 5 --name "My-Restart-EC2-Instances-Automation-Task" ^
      --description "Automation task to restart EC2 instances"
  ```

------

  Para obtener más información acerca de cómo trabajar con pseudoparámetros para tareas de periodo de mantenimiento, consulte [Utilización de pseudoparámetros en el registro de las tareas del periodo de mantenimiento](maintenance-window-tasks-pseudo-parameters.md) y [Ejemplos de registro de tareas](mw-cli-register-tasks-examples.md#task-examples).

## Mensajes de error: “Maintenance window tasks without targets don't support MaxConcurrency values” (“Las tareas del periodo de mantenimiento sin destinos no admiten valores MaxConcurrency”) y “Maintenance window tasks without targets don't support MaxErrors values” (“Las tareas del periodo de mantenimiento sin destinos no admiten valores MaxErrors”).
<a name="maxconcurrency-maxerrors-not-supported"></a>

**Problema:** cuando registra una tarea de tipo Run Command, debe especificar al menos un destino en el que se ejecutará la tarea. Para otros tipos de tarea (Automation, AWS Lambda y AWS Step Functions), en función de la naturaleza de la tarea, los destinos son opcionales. Las opciones `MaxConcurrency` (la cantidad de recursos en los que se ejecuta una tarea al mismo tiempo) y `MaxErrors` (la cantidad de errores para ejecutar la tarea en los recursos de destino antes de que se produzca un error en la tarea) no son necesarias ni compatibles con las tareas de periodo de mantenimiento que no especifican destinos. El sistema genera estos mensajes de error cuando se especifican valores para cualquiera de estas opciones y no se especifica ningún destino de tarea.

**Solución**: si recibe alguno de estos errores, elimine los valores de simultaneidad y del límite de error antes de continuar registrando o actualizando la tarea del periodo de mantenimiento.

Para obtener más información acerca de la ejecución de tareas que no especifican destinos, consulte [Registro de tareas del periodo de mantenimiento sin destinos](maintenance-windows-targetless-tasks.md) en la *Guía del usuario de AWS Systems Manager*.

# AWS Systems Manager Quick Setup
<a name="systems-manager-quick-setup"></a>

Utilice Quick Setup, una herramienta de AWS Systems Manager, para configurar rápidamente los servicios y características de Amazon Web Services de uso frecuente con las prácticas recomendadas. Quick Setup simplifica la configuración de servicios, incluido Systems Manager, mediante la automatización de tareas comunes o recomendadas. Estas tareas incluyen, por ejemplo, la creación de roles de perfil de instancias de AWS Identity and Access Management (IAM) necesarios y la configuración de prácticas recomendadas operativas, como análisis periódicos de revisiones y recopilación de inventario. El uso de no supone costo alguno Quick Setup. Sin embargo, se puede incurrir en costos en función del tipo de servicios que configure y de los límites de uso, sin cargos por los servicios utilizados para configurar el servicio. Para comenzar a utilizar Quick Setup, abra la [consola de Systems Manager](https://console.aws.amazon.com/systems-manager/quick-setup). En el panel de navegación, elija **Quick Setup**.

**nota**  
Si se le redirigió a Quick Setup a fin de configurar sus instancias para que Systems Manager las administre, complete el procedimiento en [Instalar la administración de host de Amazon EC2 mediante Quick Setup](quick-setup-host-management.md).

## ¿Cuáles son los beneficios principales de Quick Setup?
<a name="quick-setup-features"></a>

Entre los beneficios de Quick Setup se incluyen los siguientes:
+ **Simplifique la configuración de servicios y funciones**

  Quick Setup lo guía a través de la configuración de las prácticas recomendadas operativas y las implementa automáticamente. El panel de Quick Setup muestra una vista en tiempo real del estado de implementación de la configuración. 
+ **Implementar configuraciones automáticamente en varias cuentas**

  Puede utilizar Quick Setup en una Cuenta de AWS individual o en varias Cuentas de AWS y Regiones de AWS mediante la integración con AWS Organizations. El uso de Quick Setup en varias cuentas ayuda a garantizar que su organización mantenga configuraciones coherentes.
+ **Eliminar la desviación de la configuración**

  La desviación de configuración se produce cada vez que un usuario realiza algún cambio en un servicio o característica que entra en conflicto con las selecciones realizadas a través de Quick Setup. Quick Setup verifica la desviación de la configuración de forma periódica e intenta corregirla.

## ¿Quién debe utilizar Quick Setup?
<a name="quick-setup-audience"></a>

Quick Setup es más beneficioso para los clientes que ya tienen experiencia con los servicios y características que están configurando y desean simplificar su proceso de configuración. Si no está familiarizado con el Servicio de AWS que está configurando con Quick Setup, se recomienda que obtenga más información sobre el servicio. Revise el contenido de la Guía del usuario correspondiente antes de crear una configuración con Quick Setup.

## Disponibilidad de Quick Setup en Regiones de AWS
<a name="quick-setup-getting-started-regions"></a>

En las Regiones de AWS siguientes, puede utilizar todos los tipos de configuración de Quick Setup para toda una organización, conforme a la configuración de AWS Organizations, o solo para las cuentas organizativas y las regiones que seleccione. También puede utilizar Quick Setup con una sola cuenta en estas regiones.
+ Este de EE. UU. (Ohio)
+ Este de EE. UU. (Norte de Virginia)
+ Oeste de EE. UU. (Norte de California)
+ Oeste de EE. UU. (Oregón)
+ Asia-Pacífico (Bombay)
+ Asia-Pacífico (Seúl)
+ Asia-Pacífico (Singapur)
+ Asia-Pacífico (Sídney)
+ Asia-Pacífico (Tokio)
+ Canadá (centro)
+ Europa (Fráncfort)
+ Europa (Estocolmo)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (París)
+ América del Sur (São Paulo)

En las siguientes regiones, para cuentas individuales solo está disponible el tipo de configuración [Administración de hosts](quick-setup-host-management.md):
+ Europa (Milán)
+ Asia-Pacífico (Hong Kong)
+ Medio Oriente (Baréin)
+ China (Pekín)
+ China (Ningxia)
+ AWS GovCloud (EE. UU. Este)
+ AWS GovCloud (Oeste de EE. UU.)

 Para ver una lista de todas las regiones admitidas para Systems Manager, consulte la columna **Region** de [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) en la *Referencia general de Amazon Web Services*.

# Introducción a con () Quick Setup
<a name="quick-setup-getting-started"></a>

Utilice la información de este tema como ayuda para prepararse para usar Quick Setup.

**Topics**
+ [Roles y permisos de IAM para la incorporación de Quick Setup](#quick-setup-getting-started-iam)
+ [Incorporación manual para trabajar con la API de Quick Setup de forma programática](#quick-setup-api-manual-onboarding)

## Roles y permisos de IAM para la incorporación de Quick Setup
<a name="quick-setup-getting-started-iam"></a>

Quick Setup lanzó una nueva experiencia de consola y una API también nueva. Ahora puede interactuar con esta API mediante la consola, la AWS CLI, CloudFormation y los SDK. Si opta por la nueva experiencia, las configuraciones existentes se recrearán con la nueva API. Este proceso puede tardar varios minutos, según el número de configuraciones existentes en la cuenta.

Para poder usar la nueva consola de Quick Setup, debe tener permisos para las acciones siguientes:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm-quicksetup:*",
                "cloudformation:DescribeStackSetOperation",
                "cloudformation:ListStacks",
                "cloudformation:DescribeStacks",
                "cloudformation:DescribeStackResources",
                "cloudformation:ListStackSetOperations",
                "cloudformation:ListStackInstances",
                "cloudformation:DescribeStackSet",
                "cloudformation:ListStackSets",
                "cloudformation:DescribeStackInstance",
                "cloudformation:DescribeOrganizationsAccess",
                "cloudformation:ActivateOrganizationsAccess",
                "cloudformation:GetTemplate",
                "cloudformation:ListStackSetOperationResults",
                "cloudformation:DescribeStackEvents",
                "cloudformation:UntagResource",
                "ec2:DescribeInstances",
                "ssm:DescribeAutomationExecutions",
                "ssm:GetAutomationExecution",
                "ssm:ListAssociations",
                "ssm:DescribeAssociation",
                "ssm:GetDocument",
                "ssm:ListDocuments",
                "ssm:DescribeDocument",
                "ssm:ListResourceDataSync",
                "ssm:DescribePatchBaselines",
                "ssm:GetPatchBaseline",
                "ssm:DescribeMaintenanceWindows",
                "ssm:DescribeMaintenanceWindowTasks",
                "ssm:GetOpsSummary",
                "organizations:DeregisterDelegatedAdministrator",
                "organizations:DescribeAccount",
                "organizations:DescribeOrganization",
                "organizations:ListDelegatedAdministrators",
                "organizations:ListRoots",
                "organizations:ListParents",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:DescribeOrganizationalUnit",
                "organizations:ListAWSServiceAccessForOrganization",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "resource-groups:ListGroups",
                "iam:ListRoles",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:CreatePolicy",
                "organizations:RegisterDelegatedAdministrator",
                "organizations:EnableAWSServiceAccess",
                "cloudformation:TagResource"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:RollbackStack",
                "cloudformation:CreateStack",
                "cloudformation:UpdateStack",
                "cloudformation:DeleteStack"
            ],
            "Resource": [
                "arn:aws:cloudformation:*:*:stack/StackSet-AWS-QuickSetup-*",
                "arn:aws:cloudformation:*:*:stack/AWS-QuickSetup-*",
                "arn:aws:cloudformation:*:*:type/resource/*",
                "arn:aws:cloudformation:*:*:stack/StackSet-SSMQuickSetup"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStackSet",
                "cloudformation:UpdateStackSet",
                "cloudformation:DeleteStackSet",
                "cloudformation:DeleteStackInstances",
                "cloudformation:CreateStackInstances",
                "cloudformation:StopStackSetOperation"
            ],
            "Resource": [
                "arn:aws:cloudformation:*:*:stackset/AWS-QuickSetup-*",
                "arn:aws:cloudformation:*:*:stackset/SSMQuickSetup",
                "arn:aws:cloudformation:*:*:type/resource/*",
                "arn:aws:cloudformation:*:*:stackset-target/AWS-QuickSetup-*:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:GetRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:role/AWS-QuickSetup-*",
                "arn:aws:iam::*:role/service-role/AWS-QuickSetup-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/AWS-QuickSetup-*",
            "Condition": {
                "StringEquals": {
	            "iam:PassedToService": [
	                "ssm-quicksetup.amazonaws.com",
	                "cloudformation.amazonaws.com"
	            ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DeleteAssociation",
                "ssm:CreateAssociation",
                "ssm:StartAssociationsOnce"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:StartAutomationExecution",
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-EnableExplorer",
                "arn:aws:ssm:*:*:automation-execution/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetOpsSummary",
                "ssm:CreateResourceDataSync",
                "ssm:UpdateResourceDataSync"
            ],
            "Resource": "arn:aws:ssm:*:*:resource-data-sync/AWS-QuickSetup-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:AWSServiceName": [
                        "accountdiscovery.ssm.amazonaws.com",
                        "ssm.amazonaws.com",
                        "ssm-quicksetup.amazonaws.com",
                        "stacksets.cloudformation.amazonaws.com"
                    ]
                }
            },
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/stacksets.cloudformation.amazonaws.com/AWSServiceRoleForCloudFormationStackSetsOrgAdmin"
        }
    ]
}
```

------

Para restringir a los usuarios a permisos de solo lectura, solo permita operaciones de `ssm-quicksetup:List*` y `ssm-quicksetup:Get*` para la API de Quick Setup.

Durante la incorporación, Quick Setup crea los siguientes roles de AWS Identity and Access Management (IAM) en su nombre:
+ `AWS-QuickSetup-LocalExecutionRole`: otorga permisos de CloudFormation para usar cualquier plantilla, excepto la plantilla de política de revisiones, y para crear los recursos necesarios.
+ `AWS-QuickSetup-LocalAdministrationRole`: Otorga a AWS CloudFormation el permiso para asumir `AWS-QuickSetup-LocalExecutionRole`.
+ `AWS-QuickSetup-PatchPolicy-LocalExecutionRole`: otorga permisos a AWS CloudFormation para usar la plantilla de política de revisioens y crear los recursos necesarios.
+ `AWS-QuickSetup-PatchPolicy-LocalAdministrationRole`: Otorga a AWS CloudFormation el permiso para asumir `AWS-QuickSetup-PatchPolicy-LocalExecutionRole`.

Si va a incorporar una cuenta de administración (la cuenta en la que crea una organización en AWS Organizations), Quick Setup también crea los siguientes roles en su nombre:
+ `AWS-QuickSetup-SSM-RoleForEnablingExplorer`: Otorga los permisos al runbook de automatización `AWS-EnableExplorer`. El manual de procedimientos `AWS-EnableExplorer` configura Explorer, una herramienta de Systems Manager, para mostrar información de varias Cuentas de AWS y Regiones de AWS.
+ `AWSServiceRoleForAmazonSSM`: Rol vinculado a un servicio que otorga el acceso a los recursos administrados de AWS y utilizados por Systems Manager.
+ `AWSServiceRoleForAmazonSSM_AccountDiscovery`: un rol vinculado a servicio que otorga los permisos a Systems Manager para llamar a los Servicios de AWS para detectar información de las cuentas de Cuenta de AWS al sincronizar datos. Para obtener más información, consulte [Uso de roles para recopilar información de la Cuenta de AWS para OpsCenter y Explorer](using-service-linked-roles-service-action-2.md).

Al incorporar una cuenta de administración, Quick Setup permite el acceso de confianza entre AWS Organizations y CloudFormation para implementar configuraciones de Quick Setup en toda la organización. Para habilitar el acceso de confianza, su cuenta de administración debe tener permisos de administrador. Tras la incorporación, ya no necesita los permisos de administrador. Para obtener más información, consulte [Activar el acceso de confianza con Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html).

Para obtener más información sobre los tipos de cuenta de AWS Organizations, consulte [Conceptos y terminología de AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) en la *Guía del usuario de AWS Organizations*.

**nota**  
Quick Setup utiliza StackSets de CloudFormation para implementar las configuraciones en las Cuentas de AWS y regiones. Si el número de cuentas de destino multiplicado por el número de regiones supera las 10 000, la configuración no se implementará. Le recomendamos revisar su caso de uso y crear configuraciones que utilicen menos objetivos para adaptarse al crecimiento de su organización. Las instancias de pila no se implementan en la cuenta de administración de su organización. Para obtener mas información, consulte [Consideraciones al crear un conjunto de pilas con permisos administrados por servicios](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html?icmpid=docs_cfn_console#stacksets-orgs-considerations). 

## Incorporación manual para trabajar con la API de Quick Setup de forma programática
<a name="quick-setup-api-manual-onboarding"></a>

Si utiliza la consola para trabajar con la Quick Setup, el servicio se encarga de los pasos de incorporación por usted. Si tiene pensado utilizar los SDK o la AWS CLI para trabajar con la API de Quick Setup, puede seguir utilizando la consola para que complete los pasos de incorporación por usted, de forma que no tenga que realizarlos manualmente. Sin embargo, algunos clientes tienen que completar los pasos de incorporación de la Quick Setup forma programática sin tener que interactuar con la consola. Si este método se ajusta a su caso de uso, debe realizar los siguientes pasos. Todos estos pasos deben completarse desde su cuenta de administración de AWS Organizations.

**Para realizar la incorporación manual de Quick Setup**

1. Active el acceso confiable para CloudFormation con Organizations. Esto le proporciona a la cuenta de administración los permisos necesarios para crear y administrar StackSets para su organización. Puede usar la acción de la API de `ActivateOrganizationsAccess` de CloudFormation para completar este paso. Para obtener más información, consulte [ActivateOrganizationsAccess](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateOrganizationsAccess.html) en la *Referencia de la API de AWS CloudFormation*.

1. Habilite la integración de Systems Manager con Organizations. Esto permite que Systems Manager cree un rol vinculado a servicios en todas las cuentas de su organización. También le permite realizar operaciones en su nombre en su organización y sus cuentas. Puede usar la acción de la API de `EnableAWSServiceAccess` de AWS Organizations para completar este paso. La entidad principal de servicio de Systems Manager es `ssm.amazonaws.com`. Para obtener más información, consulte [EnableAWSServiceAccess](https://docs.aws.amazon.com/organizations/latest/APIReference/API_EnableAWSServiceAccess.html) en la *referencia de la API de AWS Organizations*

1. Cree el rol de IAM requerido para Explorer. Esto permite que Quick Setup cree paneles de control para sus configuraciones, de modo que pueda ver los estados de implementación y asociación. Cree un rol de IAM y adjúntelo a la política administrada de `AWSSystemsManagerEnableExplorerExecutionPolicy`. Modifique la política de confianza del rol para que coincida con lo siguiente. Reemplace cada *ID de cuenta* con su propia información.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "111122223333"
                   },
                   "ArnLike": {
                       "aws:SourceArn": "arn:*:ssm:*:111122223333:automation-execution/*"
                   }
               }
           }
       ]
   }
   ```

------

1. Actualice la configuración del servicio de la Quick Setup para Explorer. Puede usar la acción de la API de `UpdateServiceSettings` de Quick Setup para completar este paso. Especifique el ARN para el rol de IAM que creó en el paso anterior para el parámetro de solicitud de `ExplorerEnablingRoleArn`. Para obtener más información, consulte [UpdateServiceSettings](https://docs.aws.amazon.com/quick-setup/latest/APIReference/API_UpdateServiceSettings.html) en la *referencia de la API de Quick Setup*

1. Crea los roles de IAM necesarios para que los usen los StackSets de CloudFormation. Debe crear un rol de *ejecución* y un rol de *administración.*

   1. Creación del rol de ejecución. El rol de ejecución debe tener al menos una de las políticas administradas de `AWSQuickSetupDeploymentRolePolicy` o de `AWSQuickSetupPatchPolicyDeploymentRolePolicy` asociadas. Si solo está creando configuraciones de políticas de revisiones, puede usar la política administrada de `AWSQuickSetupPatchPolicyDeploymentRolePolicy`. Todas las demás configuraciones utilizan la política de `AWSQuickSetupDeploymentRolePolicy`. Modifique la política de confianza del rol para que coincida con lo siguiente. Reemplace cada *ID de cuenta* y *nombre de rol de administración* con su propia información.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/administration role name"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. Cree el rol de administración. La política de permisos debe coincidir con lo siguiente. Reemplace cada *ID de cuenta* y *nombre de rol de ejecución* con su propia información.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Action": [
                      "sts:AssumeRole"
                  ],
                  "Resource": "arn:*:iam::111122223333:role/execution role name",
                  "Effect": "Allow"
              }
          ]
      }
      ```

------

      Modifique la política de confianza del rol para que coincida con lo siguiente. Reemplace cada *ID de cuenta* con su propia información.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "cloudformation.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceAccount": "111122223333"
                      },
                      "ArnLike": {
                          "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:stackset/AWS-QuickSetup-*"
                      }
                  }
              }
          ]
      }
      ```

------

# Configuración de rol de asunción para Systems Manager
<a name="quick-setup-assume-role"></a>

## Creación de un rol de asunción para la Configuración Rápida de Systems Manager:
<a name="create-assume-role"></a>

La Configuración Rápida de Systems Manager requiere un rol que permita a Systems Manager realizar acciones de forma segura en su cuenta. Este rol otorga a Systems Manager los permisos necesarios para ejecutar comandos en sus instancias y configurar las instancias de EC2, los roles de IAM y otros recursos de Systems Manager en su nombre.

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Políticas** y, a continuación, seleccione **Crear política**.

1. Añada la política `SsmOnboardingInlinePolicy` mediante el JSON que aparece a continuación. (Esta política activa las acciones necesarias para adjuntar los permisos del perfil de la instancia a las instancias que especifiques. Por ejemplo, permitir la creación de perfiles de instancias y asociarlos a instancias de EC2).

1. Una vez completado el paso anterior, seleccione **Roles** en el panel de navegación y, a continuación, **Crear rol**.

1. En **Tipo de entidad de confianza**, déjelo como predeterminado (servicio).

1. En **Caso de uso**, elija **Systems Manager** y, a continuación, elija **Siguiente**.

1. Se abre la página **Agregar permisos**:

1. Añade la política `SsmOnboardingInlinePolicy`

1. Elija **Siguiente**.

1. En **Nombre del rol**, ingrese un nombre descriptivo (por ejemplo, `AmazonSSMRoleForAutomationAssumeQuickSetup`).

1. (Opcional) Agregue etiquetas para que sea más fácil identificar y organizar el rol.

1. Elija **Creación de rol**.

**importante**  
El rol debe tener una relación de confianza con `ssm.amazonaws.com`. Esto se configura de manera automática al seleccionar Systems Manager como servicio en el paso 4.

Tras crear el rol, puede seleccionarlo al configurar la Configuración Rápida. El rol permite a Systems Manager administrar las instancias de EC2, los roles de IAM y otros recursos de Systems Manager y ejecutar comandos en su nombre y, al mismo tiempo, mantener la seguridad mediante permisos específicos y limitados.

## Políticas de permisos
<a name="permissions-policies"></a>

**`SsmOnboardingInlinePolicy`**  
La siguiente política define los permisos para la Configuración Rápida de Systems Manager:

```
{
    "Version": "2012-10-17" 		 	 	 ,
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateInstanceProfile",
                "iam:ListInstanceProfilesForRole",
                "ec2:DescribeIamInstanceProfileAssociations",
                "iam:GetInstanceProfile",
                "iam:AddRoleToInstanceProfile"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AssociateIamInstanceProfile"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "Null": {
                    "ec2:InstanceProfile": "true"
                },
                "ArnLike": {
                    "ec2:NewInstanceProfile": "arn:aws:iam::*:instance-profile/[INSTANCE_PROFILE_ROLE_NAME]"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/[INSTANCE_PROFILE_ROLE_NAME]",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ec2.amazonaws.com"
                }
            }
        }
    ]
        }
```

**Relación de confianza**  
*Esto se agrega automáticamente mediante los pasos anteriores*

```
{
    "Version": "2012-10-17" 		 	 	 ,
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
     ]
        }
```

# Uso de un administrador delegado para Quick Setup
<a name="quick-setup-delegated-administrator"></a>

Tras registrar una cuenta de administrador delegado para Quick Setup, los usuarios con los permisos adecuados en esa cuenta pueden crear, actualizar, ver y eliminar administradores de configuración que tienen como destino las unidades organizativas de su estructura AWS Organizations. Esta cuenta de administrador delegado también puede gestionar los administradores de configuración creados por la cuenta de administración de su organización.

En Organizations, la cuenta de administración puede designar una cuenta en su organización como administrador delegado. Cuando registra una cuenta como administrador delegado para Quick Setup, esta cuenta también se convierte automáticamente en administrador delegado para AWS CloudFormation StackSets y Systems Manager Explorer, ya que estos servicios son necesarios para implementar y supervisar las configuraciones de Quick Setup.

**nota**  
En este momento, el administrador delegado para Quick Setup no admite el tipo de configuración de la política de revisiones. Las configuraciones de políticas de revisión para una organización deben crearse y mantenerse en la cuenta de administración de una organización. Para obtener más información, consulte [Cómo crear una política de revisiones](quick-setup-patch-manager.md#create-patch-policy).

En los temas siguientes se describe cómo registrar un administrador delegado para Quick Setup y cómo anular su registro.

**Topics**
+ [Registro de un administrador delegado para Quick Setup](quick-setup-register-delegated-administrator.md)
+ [Anulación del registro de un administrador delegado para Quick Setup](quick-setup-deregister-delegated-administrator.md)

# Registro de un administrador delegado para Quick Setup
<a name="quick-setup-register-delegated-administrator"></a>

Utilice el procedimiento siguiente para registrar un administrador delegado para Quick Setup.

**Registro de un administrador delegado de Quick Setup**

1. Inicie sesión en la cuenta de administración de AWS Organizations.

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. Seleccione **Configuración**.

1. En la sección **Administrador delegado para Quick Setup**, compruebe que ha configurado el rol vinculada al servicio y las opciones de acceso al servicio necesarias. Si es preciso, elija los botones **Create rol** (Crear rol) y **Enable access** (Habilitar acceso) para configurar estas opciones.

1. En **Account ID** (ID de cuenta), ingrese el ID de la Cuenta de AWS. Esta cuenta debe ser una cuenta de miembro en AWS Organizations.

1. Elija **Registrar administrador delegado**.

# Anulación del registro de un administrador delegado para Quick Setup
<a name="quick-setup-deregister-delegated-administrator"></a>

Utilice el procedimiento siguiente para anular el registro de un administrador delegado para Quick Setup.

**Anulación del registro de un administrador delegado de Quick Setup**

1. Inicie sesión en la cuenta de administración de AWS Organizations.

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. Seleccione **Configuración**.

1. En la sección **Administrador delegado para Quick Setup**, elija **Anular registro** en el menú desplegable **Acciones**.

1. Seleccione **Confirmar**.

# Aprenda la terminología y detalles de Quick Setup
<a name="quick-setup-using"></a>

Quick Setup, una herramienta de AWS Systems Manager, muestra los resultados de todos los administradores de configuración que ha creado en todas las Regiones de AWS en la tabla **Administradores de configuración** de la página de inicio de Quick Setup. En esta página, puede seleccionar **View details** para ver los detalles de cada configuración, eliminar configuraciones del menú desplegable **Actions** (Acciones) o seleccionar **Create** para crear configuraciones. Esta tabla de **Administradores de configuración** contiene la siguiente información:
+ **Nombre**: el nombre del administrador de la configuración, si se proporcionó al crearlo.
+ **Configuration type** (Tipo de configuración): el tipo de configuración que se ha elegido al crear la configuración. 
+ **Versión**: la versión del tipo de configuración actualmente implementada.
+ **Organizational units** (Unidades organizativas): muestra las unidades organizativas (OU) en las que se ha implementado la configuración si elige un conjunto de destinos **Custom** (Personalizados). Las unidades organizativas y los destinos personalizados solo están disponibles para la cuenta de administración de su organización. La cuenta de administración es la cuenta que usa para crear la organización en AWS Organizations.
+ **Tipo de implementación**: indica si la implementación se aplica a toda la organización (`Organizational`) o solo a su cuenta (`Local`).
+ **Regions** (Regiones): las regiones en las que se implementa la configuración si elige un conjunto de destinos **Custom** (Personalizados) o destinos dentro de su **Current account** (Cuenta actual). 
+ **Deployment status** (Estado de la implementación): el estado de implementación indica si AWS CloudFormation ha implementado correctamente la instancia de destino o pila. Las instancias de destino y pila contienen las opciones de configuración que eligió durante la creación de la configuración.
+ **Association status** (Estado de asociación): el estado de asociación es el estado de todas las asociaciones creadas por la configuración que ha creado. Todas las asociaciones para todos los destinos deben ejecutarse correctamente; de lo contrario, el estado es **Failed** (Error).

  Quick Setup crea y ejecuta una asociación State Manager para cada destino de configuración. State Manager es una herramienta de AWS Systems Manager.

Para ver las configuraciones implementadas en la región por la que está navegando actualmente, seleccione la pestaña **Configuraciones**.

## Detalles de configuración
<a name="quick-setup-details"></a>

La página **Configuration details** (Detalles de configuración) muestra información sobre la implementación de la configuración y las asociaciones relacionadas. Desde esta página puede editar opciones de configuración, actualizar destinos o eliminar la configuración. También puede ver los detalles de cada implementación de configuración para obtener más información sobre las asociaciones. 

Según el tipo de configuración, se muestran uno o más de los siguientes gráficos de estado:

**Estado de la implementación de configuración**  
Muestra la cantidad de implementaciones que se han realizado correctamente, han fallado, se están ejecutando o están pendientes. Las implementaciones se producen en las cuentas de destino especificadas y en las regiones que contienen nodos afectados por la configuración. 

**Estado de asociación de configuración**  
Muestra la cantidad de asociaciones de State Manager que se han realizado correctamente, han fallado o están pendientes. Quick Setup crea una asociación en cada implementación para las opciones de configuración seleccionadas.

**Estado de configuración**  
Muestra el número de acciones realizadas por el tipo de configuración y sus estados actuales. 

**Conformidad de recursos**  
Muestra el número de recursos que cumplen con la política de configuración especificada.

La tabla **Configuration details** (Detalles de configuración) muestra información sobre la implementación de la configuración. Para ver más detalles sobre cada implementación, seleccione la implementación y, a continuación, elija **View details** (Ver detalles). En la página de detalles de cada implementación, se muestran las asociaciones implementadas en los nodos de esa implementación.

## Edición y eliminación de la configuración
<a name="quick-setup-edit-delete"></a>

Puede editar las opciones de configuración de una configuración desde la página **Configuration details** (Detalles de configuración) al elegir **Actions** (Acciones) y, luego, **Edit configuration options** (Editar opciones de configuración). Al agregar nuevas opciones a la configuración, Quick Setup ejecuta las implementaciones y crea nuevas asociaciones. Al quitar opciones de una configuración, Quick Setup ejecuta las implementaciones y elimina cualquier asociación relacionada.

**nota**  
Puede editar las configuraciones de Quick Setup para su cuenta en cualquier momento. Para editar la configuración de una **Organization** (Organización), el **Configuration status** (Estado de configuración) debe ser **Success** (Correcto) o **Failed** (Error). 

También puede actualizar los destinos que se incluyen en las configuraciones si elige **Actions** (Acciones) y **Add OUs** (Agregar unidades organizativas), **Add Regions** (Agregar regiones), **Remove OUs** (Eliminar unidades organizativas), o **Remove Regions** (Eliminar regiones). Si su cuenta no está configurada como cuenta de administración o ha creado la configuración solo para la cuenta actual, no puede actualizar las unidades organizativas (OU) de destino. Al quitar una región o una unidad organizativa, se eliminan las asociaciones de esas regiones o unidades organizativas. 

Quick Setup publica nuevas versiones de las configuraciones de forma periódica. Puede seleccionar la opción **Actualizar la configuración** para actualizar la configuración a la versión más reciente.

Puede eliminar una configuración de Quick Setup al elegir la configuración, **Actions** (Acciones) y, luego, **Delete configuration** (Eliminar la configuración). O bien puede eliminar la configuración desde la página **Detalles de configuración** en el menú desplegable **Acciones** con la opción **Eliminar la configuración**. Quick Setup luego solicita **Eliminar todas las unidades organizativas y regiones**, que puede tardar un poco en llevarse a cabo. Al eliminar una configuración también se eliminan todas las asociaciones relacionadas. Este proceso de eliminación en dos pasos elimina todos los recursos implementados de todas las cuentas y regiones y, a continuación, elimina la configuración.

## Conformidad de la configuración
<a name="quick-setup-compliance"></a>

Puede ver si sus instancias cumplen con las asociaciones creadas en las configuraciones en Explorer o Cumplimiento, que son herramientas de AWS Systems Manager. Para obtener más información sobre la conformidad, consulte [Detalles sobre el cumplimiento](compliance-about.md). Para obtener más información sobre la conformidad en Explorer, consulte [AWS Systems Manager Explorer](Explorer.md).

# Uso de la API Quick Setup para gestionar las configuraciones y las implementaciones
<a name="quick-setup-api"></a>

Se puede usar la API proporcionada por Quick Setup para crear y administrar configuraciones e implementaciones con la AWS CLI o con el SDK que se prefiera. También puede utilizar CloudFormation para crear un recurso de administrador de configuración que implemente las configuraciones. Con la API, se crean administradores de configuración que implementan *definiciones* de configuración. Las definiciones de configuración contienen toda la información necesaria para implementar un tipo de configuración concreto. Para obtener más información sobre la API de Quick Setup consulte la [Referencia de la API de Configuración Rápida](https://docs.aws.amazon.com/quick-setup/latest/APIReference/).

Los siguientes ejemplos muestran cómo crear administradores de configuración mediante la AWS CLI y CloudFormation.

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

```
aws ssm-quicksetup create-configuration-manager \
--name configuration manager name \
--description Description of your configuration manager
--configuration-definitions JSON string containing configuration defintion
```

El siguiente es un ejemplo de cadena JSON que contiene una definición de configuración para la política de revisioens.

```
'{"Type":"AWSQuickSetupType-PatchPolicy","LocalDeploymentAdministrationRoleArn":"arn:aws:iam::123456789012:role/AWS-QuickSetup-StackSet-Local-AdministrationRole","LocalDeploymentExecutionRoleName":"AWS-QuickSetup-StackSet-Local-ExecutionRole","Parameters":{"ConfigurationOptionsInstallNextInterval":"true","ConfigurationOptionsInstallValue":"cron(0 2 ? * SAT#1 *)","ConfigurationOptionsPatchOperation":"ScanAndInstall","ConfigurationOptionsScanNextInterval":"false","ConfigurationOptionsScanValue":"cron(0 1 * * ? *)","HasDeletedBaseline":"false","IsPolicyAttachAllowed":"true","OutputBucketRegion":"","OutputLogEnableS3":"false","OutputS3BucketName":"","OutputS3KeyPrefix":"","PatchBaselineRegion":"us-east-1","PatchBaselineUseDefault":"custom","PatchPolicyName":"dev-patch-policy","RateControlConcurrency":"5","RateControlErrorThreshold":"0%","RebootOption":"RebootIfNeeded","ResourceGroupName":"","SelectedPatchBaselines":"{\"ALMA_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0cb0c4966f86b059b\",\"label\":\"AWS-AlmaLinuxDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Alma Linux Provided by AWS.\",\"disabled\":false},\"AMAZON_LINUX_2\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0be8c61cde3be63f3\",\"label\":\"AWS-AmazonLinux2DefaultPatchBaseline\",\"description\":\"Baseline containing all Security and Bugfix updates approved for Amazon Linux 2 instances\",\"disabled\":false},\"AMAZON_LINUX_2023\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-05c9c9bf778d4c4d0\",\"label\":\"AWS-AmazonLinux2023DefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Amazon Linux 2023 Provided by AWS.\",\"disabled\":false},\"DEBIAN\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-09a5f8eb62bde80b1\",\"label\":\"AWS-DebianDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Debian Provided by AWS.\",\"disabled\":false},\"MACOS\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0ee4f94581368c0d4\",\"label\":\"AWS-MacOSDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for MacOS Provided by AWS.\",\"disabled\":false},\"ORACLE_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-06bff38e95fe85c02\",\"label\":\"AWS-OracleLinuxDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Oracle Linux Server Provided by AWS.\",\"disabled\":false},\"REDHAT_ENTERPRISE_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-0cbb3a633de00f07c\",\"label\":\"AWS-RedHatDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Redhat Enterprise Linux Provided by AWS.\",\"disabled\":false},\"ROCKY_LINUX\":{\"value\":\"arn:aws:ssm:us-east-1:123456789012:patchbaseline/pb-03ec98bc512aa3ac0\",\"label\":\"AWS-RockyLinuxDefaultPatchBaseline\",\"description\":\"Default Patch Baseline for Rocky Linux Provided by AWS.\",\"disabled\":false},\"UBUNTU\":{\"value\":\"pb-06e3563bd35503f2b\",\"label\":\"custom-UbuntuServer-Blog-Baseline\",\"description\":\"Default Patch Baseline for Ubuntu Provided by AWS.\",\"disabled\":false},\"WINDOWS\":{\"value\":\"pb-016889927b2bb8542\",\"label\":\"custom-WindowsServer-Blog-Baseline\",\"disabled\":false}}","TargetInstances":"","TargetOrganizationalUnits":"ou-9utf-example","TargetRegions":"us-east-1,us-east-2","TargetTagKey":"Patch","TargetTagValue":"true","TargetType":"Tags"}}' \
```

------
#### [ CloudFormation ]

```
AWSTemplateFormatVersion: '2010-09-09'
Resources:
SSMQuickSetupTestConfigurationManager:
Type: "AWS::SSMQuickSetup::ConfigurationManager"
Properties:
    Name: "MyQuickSetup"
    Description: "Test configuration manager"
    ConfigurationDefinitions:
    - Type: "AWSQuickSetupType-CFGRecording"
      Parameters:
        TargetAccounts:
            Ref: AWS::AccountId
        TargetRegions:
            Ref: AWS::Region
        LocalDeploymentAdministrationRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/AWS-QuickSetup-StackSet-ContractTest-AdministrationRole"
        LocalDeploymentExecutionRoleName: "AWS-QuickSetup-StackSet-ContractTest-ExecutionRole"
    Tags:
        foo1: "bar1"
```

------

# Tipos de configuración Quick Setup compatibles
<a name="quick-setup-config-types"></a>

**Tipos de configuración compatibles**  
Quick Setup explica cómo configurar las prácticas recomendadas operativas para una serie de servicios de Systems Manager y otros Servicios de AWS, así como la forma de implementar automáticamente dichas configuraciones. El panel de Quick Setup muestra una vista en tiempo real del estado de implementación de la configuración. 

Puede utilizar Quick Setup en una Cuenta de AWS individual o en varias regiones y AWS Organizations mediante la integración con Cuentas de AWS. El uso de Quick Setup en varias cuentas ayuda a garantizar que su organización mantenga configuraciones coherentes.

Quick Setup proporciona soporte para los siguientes tipos de configuración.
+ [Instalar la administración de host de Amazon EC2 mediante Quick Setup](quick-setup-host-management.md)
+ [Instalar la Configuración de administración de hosts predeterminada de una organización mediante Quick Setup](quick-setup-default-host-management-configuration.md)
+ [Cree un registrador de configuración de AWS Config mediante Quick Setup](quick-setup-config.md)
+ [Implemente el paquete de conformidad de AWS Config mediante Quick Setup](quick-setup-cpack.md)
+ [Cómo configurar las revisiones para las instancias de una organización mediante una política de parches Quick Setup](quick-setup-patch-manager.md)
+ [Configuración de la organización de Change Manager](change-manager-organization-setup.md)
+ [Configurar DevOps Guru con Quick Setup](quick-setup-devops.md)
+ [Implemente paquetes de Distributor mediante Quick Setup](quick-setup-distributor.md)
+ [Detenga e inicie las instancias EC2 automáticamente según una programación mediante Quick Setup](quick-setup-scheduler.md)
+ [Configuración de la organización de OpsCenter](OpsCenter-quick-setup-cross-account.md)
+ [Configuración de Explorador de recursos de AWS mediante Quick Setup](Resource-explorer-quick-setup.md)

# Instalar la administración de host de Amazon EC2 mediante Quick Setup
<a name="quick-setup-host-management"></a>

Utilice Quick Setup, una herramienta de AWS Systems Manager, para configurar rápidamente los roles de seguridad necesarios y las herramientas de Systems Manager de uso común en sus instancias de Amazon Elastic Compute Cloud (Amazon EC2). Puede utilizar Quick Setup en una cuenta individual o en varias cuentas y Regiones de AWS mediante la integración con AWS Organizations. Estas herramientas le ayudan a administrar y supervisar el estado de las instancias, a la vez que proporcionan los permisos mínimos necesarios para dar los primeros pasos. 

Si no está familiarizado con los servicios y las características de Systems Manager, se recomienda que revise la *Guía del usuario de AWS Systems Manager* antes de crear una configuración con Quick Setup. Para obtener más información acerca de Systems Manager, consulte [¿Qué es AWS Systems Manager?](what-is-systems-manager.md).

**importante**  
Quick Setup podría no ser la herramienta adecuada para la administración de EC2 si se da alguno de los siguientes casos:  
Intenta crear una instancia de EC2 por primera vez para probar las funciones de AWS.
No sabe bien cómo funciona la administración de instancias de EC2.
Por ello, le recomendamos que consulte el siguiente contenido:   
[Introducción a Amazon EC2](https://aws.amazon.com/ec2/getting-started)
[Inicialización de una instancia mediante el nuevo asistente de inicialización de instancias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) en la *Guía del usuario de Amazon EC2*
[Tutorial: Introducción a las instancias de Linux de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) en la *Guía del usuario de Amazon EC2*
Si ya sabe cómo funciona la administración de instancias de EC2 y desea optimizar la configuración y la administración de varias instancias de EC2, utilice Quick Setup. Ya sea que su organización tenga docenas, miles o millones de instancias de EC2, puede utilizar el siguiente procedimiento de Quick Setup para configurar varias opciones a la vez.

**nota**  
Este tipo de configuración permite establecer varias opciones para toda una organización definida en AWS Organizations, solo algunas cuentas y regiones de la organización, o una sola cuenta. Una de estas opciones consiste en comprobar cada dos semanas si existen actualizaciones de SSM Agent y aplicarlas. Si es administrador de la organización, también puede optar por actualizar *todas* las instancias de EC2 de su organización con actualizaciones de los agentes cada dos semanas mediante el tipo Configuración de la administración de hosts predeterminada. Para obtener más información, consulte [Instalar la Configuración de administración de hosts predeterminada de una organización mediante Quick Setup](quick-setup-default-host-management-configuration.md).

## Configuración de las opciones de administración de hosts para instancias de EC2
<a name="host-management-configuration"></a>

Para configurar la administración de host, lleve a cabo las siguientes tareas en la consola de AWS Systems Manager Quick Setup.

**Apertura de la página de configuración del Administrador de host**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta de **Administración de host**, elija **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

**Configuración de las opciones de la administración de hosts de Systems Manager**
+ Para configurar la funcionalidad de Systems Manager, en la sección **Opciones de configuración**, dentro del grupo **Systems Manager**, seleccione las opciones que quiera habilitar para la configuración:

     
**Actualizar el agente de Systems Manager (SSM) cada dos semanas**  
Le permite a Systems Manager verificar cada dos semanas si hay una nueva versión disponible del agente. Si hay una nueva versión, Systems Manager actualiza automáticamente el agente en el nodo administrado a la versión más reciente publicada. Quick Setup no instala el agente en instancias donde no está presente. Para obtener información sobre las AMIs que SSM Agent tiene preinstaladas, consulte [Búsqueda de AMIs con SSM Agent preinstalado](ami-preinstalled-agent.md).  
Le recomendamos que elija esta opción para asegurarse de que los nodos siempre ejecuten la versión más actualizada de SSM Agent. Para obtener más información acerca de SSM Agent, incluida información sobre cómo instalar manualmente el agente, consulte [Uso de SSM Agent](ssm-agent.md).  
**Recopilar el inventario de las instancias cara 30 minutos**  
Le permite a Quick Setup configurar la recopilación de los tipos de metadatos que se mencionan a continuación:  
  + **Componentes de AWS**: controlador de EC2, agentes, versiones y más.
  + **Aplicaciones**: nombres de aplicaciones, editores, versiones y más.
  + **Detalles del nodo**: nombre del sistema, nombre del sistema operativo (OS), versión del OS, último inicio, DNS, dominio, grupo de trabajo, arquitectura del OS y más.
  + **Configuración de red**: dirección IP, dirección MAC, DNS, gateway, máscara de subred y más. 
  + **Servicios**: nombre, nombre de visualización, estado, servicios dependientes, tipo de servicio, tipo de inicio y más (solo en nodos de Windows Server).
  + **Roles de Windows**: nombre, nombre de visualización, ruta, tipo de característica, estado instalado y más (solo en nodos de Windows Server).
  + **Actualizaciones de Windows**: ID de hotfix, instalado por, fecha de instalación y más (solo en nodos de Windows Server).
Para obtener más información sobre Inventario, una herramienta de AWS Systems Manager, consulte [Inventario de AWS Systems Manager](systems-manager-inventory.md).  
La opción **Recopilación de inventario** puede tardar hasta 10 minutos en completarse, aunque solo haya seleccionado algunos nodos.  
**Analizar a diario las instancias para identificar los parches que faltan**  
Permite a Patch Manager, una herramienta de Systems Manager, analizar los nodos a diario y generar un informe en la página **Conformidad**. El informe muestra cuántos nodos son conformes con las revisiones de acuerdo con la *base de referencia de revisiones predeterminada*. El informe incluye una lista de cada nodo y su estado de conformidad.   
Para obtener información acerca de las operaciones de aplicación de revisiones y las líneas de base de revisiones, consulte [AWS Systems Manager Patch Manager](patch-manager.md).   
Para obtener información acerca de la conformidad de revisiones, consulte la página [Conformidad](https://console.aws.amazon.com/systems-manager/compliance) de Systems Manager.  
Para obtener información sobre cómo aplicar revisiones a los nodos administrados en varias cuentas y regiones en una configuración, consulte [Configuraciones de políticas de revisiones en Quick Setup](patch-manager-policies.md) y [Cómo configurar las revisiones para las instancias de una organización mediante una política de parches Quick Setup](quick-setup-patch-manager.md).  
Systems Manager admite varios métodos para analizar nodos administrados y así comprobar la conformidad de revisiones. Si implementa más de uno de estos métodos a la vez, la información de conformidad de las revisiones que ve siempre será el resultado del análisis más reciente. Los resultados de análisis anteriores se sobrescriben. Si los métodos de análisis utilizan diferentes líneas de base de revisiones con diferentes reglas de aprobación, la información de conformidad de revisiones puede cambiar inesperadamente. Para obtener más información, consulte [Identificación de la ejecución que creó los datos de conformidad de la revisión](patch-manager-compliance-data-overwrites.md).

**Configuración de las opciones de administración de hosts de Amazon CloudWatch**
+ Para configurar la funcionalidad de CloudWatch, dentro de la sección **Opciones de configuración**, en el grupo **Amazon CloudWatch**, seleccione las opciones que quiera habilitar para la configuración:

     
**Instalación y configuración del agente de CloudWatch**  
Instala la configuración básica del agente unificado de CloudWatch en las instancias de Amazon EC2. El agente recopila métricas y archivos de registro de las instancias de Amazon CloudWatch. Esta información se consolida para que pueda determinar rápidamente el estado de las instancias. Para obtener más información sobre la configuración básica del agente de CloudWatch, consulte [Conjuntos de métricas predefinidas del agente de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html#cloudwatch-agent-preset-metrics). Es posible que haya un costo adicional. Para más información, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).  
**Actualizar el agente de CloudWatch una vez cada 30 días**  
Le permite a Systems Manager verificar cada 30 días si hay una nueva versión disponible del agente de CloudWatch. Si hay una nueva versión, Systems Manager actualiza automáticamente el agente en la instancia. Lo animamos a que elija esta opción para asegurarse de que sus instancias siempre ejecuten la versión más actualizada del agente de CloudWatch.

**Configuración de las opciones de administración de hosts de Amazon EC2 Launch Agent**
+ Para configurar la funcionalidad de Amazon EC2 Launch Agent, dentro de la sección **Opciones de configuración**, en el grupo **Amazon EC2 Launch Agent**, seleccione las opciones que quiera habilitar para la configuración:

     
**Actualizar el agente de ejecución de EC2 una vez cada 30 días**  
Le permite a Systems Manager verificar cada 30 días si hay una nueva versión del agente de ejecución instalada en la instancia. Si hay una nueva versión disponible, Systems Manager actualiza el agente en la instancia. Lo animamos a que elija esta opción para asegurarse de que sus instancias siempre ejecuten la versión más actualizada del agente de lanzamiento correspondiente. Para las instancias de Windows de Amazon EC2, esta opción es compatible con EC2Launch, EC2Launch v2 y EC2Config. Para las instancias de Linux de Amazon EC2, esta opción es compatible con `cloud-init`. Para las instancias Mac de Amazon EC2, esta opción es compatible con `ec2-macos-init`. Quick Setup no admite la actualización de los agentes de lanzamiento que estén instalados en sistemas operativos no compatibles con el agente de lanzamiento o en AL2023.  
Para obtener más información sobre estos agentes de inicialización, consulte los siguientes temas:  
  +  [Configurar una instancia de Windows mediante EC2Launch v2](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch-v2.html) 
  +  [Configurar una instancia de Windows mediante EC2Launch](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html) 
  +  [Configurar una instancia de Windows mediante el servicio de EC2Config](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2config-service.html) 
  +  [Documentación de cloud-init](https://cloudinit.readthedocs.io/en/22.2.2/index.html) 
  +  [ec2-macos-init](https://github.com/aws/ec2-macos-init) 

**Selección de las instancias de EC2 que se actualizarán con la configuración de la administración de hosts**
+ En la sección **Destinos**, seleccione el método para determinar las cuentas y las regiones en las que se implementará la configuración:
**nota**  
No puede crear varias configuraciones de Administración de host de Quick Setup que tengan como destino a la misma Región de AWS.

------
#### [ Entire organization ]

  La configuración se implementará en todas las unidades organizativas (UO) y en las Regiones de AWS de su organización.

**nota**  
La opción **Organización completa** solo está disponible si configura la administración de host desde la cuenta de administración de su organización.

------
#### [ Custom ]

  1. En la sección **UO de destino**, seleccione las UO en las que quiere implementar esta configuración de la administración de hosts.

  1. En la sección **Regiones de destino**, seleccione la región en la que quiere implementar la configuración de la administración de hosts.

------
#### [ Current account ]

  Seleccione una de las opciones de región y siga los pasos de esa opción.

   

**Región actual**  
Seleccione cómo elegir instancias como destino solo dentro de la región actual:  
  + **Todas las instancias**: la configuración de la administración de hosts selecciona como destino, de manera automática, cada EC2 dentro de la región actual.
  + **Etiqueta**: seleccione **Agregar** e ingrese la clave y un valor opcional que se agregue a las instancias que serán el destino.
  + **Grupo de recursos**: en **Grupo de recursos**, seleccione un grupo de recursos existente que contenga las instancias de EC2 que serán el destino.
  + **Manual**: en la sección **Instancias**, seleccione la casilla de verificación para cada instancia de EC2 que será el destino.

**Elección de regiones**  
Utilice una de las opciones que se enumeran a continuación para seleccionar cómo elegir instancias como destino en la región especificada:  
  + **Todas las instancias**: todas las instancias de las regiones especificadas se eligen como destino.
  + **Etiqueta**: seleccione **Agregar** e ingrese la clave y un valor opcional que se haya agregado a las instancias que serán el destino.
En la sección **Regiones de destino**, seleccione la región en la que quiere implementar la configuración de la administración de hosts.

------

**Especificación de una opción de perfil de instancia**
+ *Solo para los destinos **Toda la organización** y **Personalizado**.*

  En la sección **Instance profile options** (Opciones de perfil de instancia), elija si desea agregar las políticas de IAM necesarias a los perfiles de instancias existentes asociados a sus instancias o permitir que Quick Setup cree las políticas de IAM y los perfiles de instancias con los permisos necesarios para la configuración que elija.

Luego de especificar todas las opciones de configuración, seleccione **Crear**.

# Instalar la Configuración de administración de hosts predeterminada de una organización mediante Quick Setup
<a name="quick-setup-default-host-management-configuration"></a>

Con Quick Setup, una herramienta de AWS Systems Manager, puede activar la Configuración de la administración de hosts predeterminada para todas las cuentas y regiones que se hayan agregado a su organización en AWS Organizations. Esto garantiza que SSM Agent se mantenga actualizado en todas las instancias de Amazon Elastic Compute Cloud (EC2) de la organización, y que estas se puedan conectar a Systems Manager.

**Antes de empezar**  
Antes de habilitar esta configuración, compruebe que se cumplen los siguientes requisitos.
+ La última versión de SSM Agent ya está instalada en todas las instancias de EC2 que hay que administrar en su organización.
+ Las instancias de ECS que hay que administrar están utilizando el Servicio de metadatos de instancia versión 2 (IMDSv2).
+ Ha iniciado sesión en la cuenta de administración de su organización, tal como se especifica en AWS Organizations, mediante una identidad (usuario, rol o grupo) de AWS Identity and Access Management (IAM) con permisos de administrador.

**Uso del rol de administración de instancias de EC2 predeterminado**  
La Configuración de la administración de hosts predeterminada utiliza la configuración del servicio `default-ec2-instance-management-role` para Systems Manager. Se trata de un rol con permisos que desea que estén disponibles en todas las cuentas de su organización para permitir la comunicación entre SSM Agent de la instancia y el servicio Systems Manager en la nube.

Si ya ha establecido este rol mediante el comando [https://docs.aws.amazon.com/cli/latest/reference/ssm/update-service-setting.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/update-service-setting.html) de la CLI, la Configuración de la administración de hosts predeterminada lo utiliza. Si aún no ha establecido este rol, Quick Setup se encargará de crearlo y aplicarlo. 

Para comprobar si este rol ya se ha especificado para su organización, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-service-setting.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-service-setting.html).

## Habilitación de actualizaciones automáticas de SSM Agent cada dos semanas
<a name="dhmc-enable-automatic-updates"></a>

Utilice el siguiente procedimiento para habilitar la opción de la Configuración de la administración de hosts predeterminada para toda la organización de AWS Organizations.

**Para habilitar las actualizaciones automáticas de SSM Agent cada dos semanas**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta **Configuración de la administración de hosts predeterminada**, seleccione **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En la sección **Opciones de configuración**, seleccione **Habilitar actualizaciones automáticas de SSM Agent cada dos semanas**.

1. Elija **Create (Creación de)**.

# Cree un registrador de configuración de AWS Config mediante Quick Setup
<a name="quick-setup-config"></a>

Con Quick Setup, una herramienta de AWS Systems Manager, puede crear rápidamente un registro de configuración basado en AWS Config. Utilice el registro de configuración para detectar los cambios en las configuraciones del recurso y capturar los cambios como elementos de configuración. Si no está familiarizado con AWS Config, recomendamos obtener más información acerca del servicio. Para ello, consulte el contenido en la *Guía para desarrolladores de AWS Config* antes de crear una configuración con Quick Setup. Para obtener más información sobre AWS Config, consulte [¿Qué es AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) en la *Guía para desarrolladores de AWS Config*.

De forma predeterminada, el registro de configuración registra todos los recursos admitidos en la Región de AWS donde se ejecuta AWS Config. Puede personalizar la configuración para que solo se registren los tipos de recursos que especifique. Para obtener más información, consulte [Selección de los recursos que registra AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html) en la *Guía para desarrolladores de AWS Config*.

Se le cobrarán las tarifas de uso del servicio cuando AWS Config comience a registrar configuraciones. Para obtener información sobre precios, consulte [Precios de AWS Config](https://aws.amazon.com/config/pricing/).

**nota**  
Si ya creó un registro de configuración, Quick Setup no detiene el registro ni realiza ningún cambio en los tipos de recursos que ya está registrando. Si decide registrar otros tipos de recursos con Quick Setup, el servicio los anexará a sus grupos de registradores existentes. Eliminar el tipo de configuración de Quick Setup **Registro de configuración** no detiene el registro de la configuración. Los cambios se siguen registrando y se aplican tarifas por uso del servicio hasta que detenga el registro de configuración. Para obtener más información acerca de la administración del registro de configuración, consulte [Administración del registro de configuración](https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html) en la *Guía para desarrolladores de AWS Config*.

Para configurar el registro de AWS Config, realice las siguientes tareas en la consola de AWS Systems Manager.

**Para configurar el registro de AWS Config con Quick Setup**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta **Registro de configuración**, elija **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En la sección **Opciones de configuración**, haga lo siguiente:

   1. En **Elegir los tipos de recursos de AWS para registrar**, especifique si desea registrar todos los recursos admitidos o solo los tipos de recursos que elija.

   1. En **Configuración de entrega**, especifique si desea crear un nuevo bucket de Amazon Simple Storage Service (Amazon S3) o elija un bucket existente al que enviar instantáneas de configuración.

   1. En **Opciones de notificación**, elija la opción de notificación que prefiera. AWS Config utiliza Amazon Simple Notification Service (Amazon SNS) para enviar notificaciones sobre eventos de AWS Config importantes relacionados con los recursos. Si elige la opción **Use existing SNS topics** (Utilizar temas existentes de SNS), debe proporcionar el ID de la Cuenta de AWS y el nombre del tema de Amazon SNS existente en la cuenta que desea utilizar. Si apunta a varias Regiones de AWS, los nombres de los temas deben ser idénticos en cada región.

1. En la sección **Schedule** (Programación), elija la frecuencia con la que desea que Quick Setup corrija los cambios realizados en los recursos que difieren de la configuración. La opción **Default** (Predeterminado) se ejecuta una vez. Si no desea que Quick Setup corrija los cambios realizados en los recursos que difieren de la configuración, elija **Disable remediation** (Deshabilitar la corrección) en **Custom** (Personalizar).

1. En la sección **Destinos**, elija una de las siguientes opciones para identificar las cuentas y regiones para registrar.
**nota**  
Si trabaja en una sola cuenta, las opciones para trabajar con organizaciones y unidades organizativas (OU) no están disponibles. Puede elegir si desea aplicar esta configuración a todas las Regiones de AWS de su cuenta o solo a las regiones que seleccione.
   + **Entire organization** (Toda la organización): todas las cuentas y regiones de su organización.
   + **Custom** (Personalizado): solo las unidades organizativas y las regiones que especifique.
     + En la sección **Unidades organizativas de destino**, seleccione las unidades organizativas donde desea permitir el registro. 
     + En la sección **Regiones de destino**, seleccione las regiones donde desea permitir el registro. 
   + **Current account** (Cuenta actual): solo se seleccionan las regiones que especifica en la cuenta en la que ha iniciado sesión actualmente. Elija una de las opciones siguientes:
     + **Current Region** (Región actual): solo se dirige a los nodos administrados de la región seleccionada en la consola. 
     + **Elegir regiones**: elija las regiones individuales a las que se aplicará la configuración de registro.

1. Seleccione **Crear**.

# Implemente el paquete de conformidad de AWS Config mediante Quick Setup
<a name="quick-setup-cpack"></a>

Un paquete de conformidad es una colección de normas y medidas correctivas de AWS Config. Con Quick Setup, puede implementar un paquete de conformidad como una única entidad en una cuenta y una Región de AWS o en toda una organización en AWS Organizations. Esto le ayuda a administrar la conformidad de la configuración de los recursos de AWS a escala, desde la definición de políticas hasta la auditoría y la presentación de informes agregados, mediante un marco común y un modelo de empaquetado. 

Para implementar paquetes de conformidad, realice las siguientes tareas en la consola de AWS Systems Manager Quick Setup.

**nota**  
Debe habilitar el registro de AWS Config antes de implementar esta configuración. Para obtener más información, consulte [Paquetes de conformidad](https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html) en la *Guía para desarrolladores de AWS Config*.

**Para implementar paquetes de conformidad con Quick Setup**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta **Paquetes de conformidad**, seleccione **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En la sección **Opciones de configuración**, elija los paquetes de conformidad que desea implementar.

1. En la sección **Schedule** (Programación), elija la frecuencia con la que desea que Quick Setup corrija los cambios realizados en los recursos que difieren de la configuración. La opción **Default** (Predeterminado) se ejecuta una vez. Si no desea que Quick Setup corrija los cambios realizados en los recursos que difieren de la configuración, elija **Disabled** (Desactivado) en **Custom** (Personalizar).

1. En la sección **Targets** (Destinos), elija si desea implementar paquetes de conformidad en toda la organización, algunas Regiones de AWS, o la cuenta en la que ha iniciado sesión.

   Si elige **Entire Organization** (Toda la organización), continúe en el paso 8.

   Si elige **Custom** (Personalizado), continúe en el paso 7.

1. En la sección **Target Regions** (Regiones de destino), seleccione las casillas de verificación de las Regiones en las que desea implementar paquetes de conformidad.

1. Seleccione **Crear**.

# Cómo configurar las revisiones para las instancias de una organización mediante una política de parches Quick Setup
<a name="quick-setup-patch-manager"></a>

Con Quick Setup, una regiones de AWS Systems Manager, puede crear políticas de revisiones con tecnología de Patch Manager. Una política de revisiones define la programación y la línea base que se utilizarán al aplicar revisiones automáticamente a las instancias de Amazon Elastic Compute Cloud (Amazon EC2) y a otros nodos administrados. Con una configuración de política de revisiones única, puede definir la aplicación de revisiones para todas las cuentas de varias Regiones de AWS de su organización, solo para las cuentas y regiones que elija o para un solo par de cuenta y región. Para obtener más información sobre las políticas de revisiones, consulte [Configuraciones de políticas de revisiones en Quick Setup](patch-manager-policies.md).

**Requisito previo**  
Para definir una política de revisiones para un nodo que utilice Quick Setup, el nodo debe ser un *nodo administrado*. Para obtener más información sobre la administración de nodos, consulte [Cómo configurar la consola unificada de Systems Manager para una organización](systems-manager-setting-up-organizations.md).

**importante**  
**Métodos de escaneo de conformidad de las revisiones**: Systems Manager admite varios métodos para analizar nodos administrados y así comprobar la conformidad de las revisiones. Si implementa más de uno de estos métodos a la vez, la información de conformidad de las revisiones que ve siempre será el resultado del análisis más reciente. Los resultados de análisis anteriores se sobrescriben. Si los métodos de análisis utilizan diferentes líneas de base de revisiones con diferentes reglas de aprobación, la información de conformidad de revisiones puede cambiar inesperadamente. Para obtener más información, consulte [Identificación de la ejecución que creó los datos de conformidad de la revisión](patch-manager-compliance-data-overwrites.md).  
**Estado de conformidad de la asociación y políticas de revisiones**: el estado de las revisiones para un nodo administrado bajo una política de revisiones de Quick Setup coincide con el estado de la ejecución de la asociación de State Manager de ese nodo. Si el estado de ejecución de la asociación es `Compliant`, el estado de las revisiones del nodo administrado también se marca como `Compliant`. Si el estado de ejecución de la asociación es `Non-Compliant`, el estado de las revisiones del nodo administrado también se marca como `Non-Compliant`. 

## Regiones compatibles para configuraciones de políticas de revisiones
<a name="patch-policies-supported-regions"></a>

Las configuraciones de políticas de revisiones en Quick Setup se admiten actualmente en las siguientes regiones:
+ Este de EE. UU. (Ohio) (us-east-2)
+ Este de EE. UU. (Norte de Virginia) (us-east-1)
+ EE. UU. Oeste (Norte de California) (us-west-1)
+ Oeste de EE. UU. (Oregón) (us-west-2)
+ Asia-Pacífico (Mumbai) (ap-south-1)
+ Asia-Pacífico (Seúl) (ap-northeast-2)
+ Asia-Pacífico (Singapur) (ap-southeast-1)
+ Asia-Pacífico (Sídney) (ap-southeast-2)
+ Asia-Pacífico (Tokio) (ap-northeast-1)
+ Canadá (centro) (ca-central-1)
+ Europa (Fráncfort) (eu-central-1)
+ Europa (Irlanda) (eu-west-1)
+ Europa (Londres) (eu-west-2)
+ UE (París) (eu-west-3)
+ Europa (Estocolmo) (eu-north-1)
+ América del Sur (São Paulo) (sa-east-1)

## Permisos para el bucket de S3 de la política de revisiones
<a name="patch-policy-s3-bucket-permissions"></a>

Cuando crea una política de revisiones, Quick Setup crea un bucket de Amazon S3 que contiene un archivo denominado `baseline_overrides.json`. Este archivo almacena información sobre las líneas de base de revisiones que especificó para la política de revisiones.

El nombre del bucket de S3 tiene el siguiente formato `aws-quicksetup-patchpolicy-account-id-quick-setup-configuration-id`. 

Por ejemplo: .: `aws-quicksetup-patchpolicy-123456789012-abcde`

Si va a crear una política de revisiones para una organización, el bucket se crea en la cuenta de administración de la organización. 

Hay dos casos de uso en los que debe proporcionar permiso a otros recursos de AWS para acceder a este bucket de S3 mediante políticas AWS Identity and Access Management (IAM):
+ [Caso 1: uso de su propio perfil de instancia o rol de servicio con los nodos administrados en lugar de utilizar uno proporcionado por Quick Setup](#patch-policy-instance-profile-service-role)
+ [Caso 2: uso de puntos de conexión de VPC para conectarse a Systems Manager](#patch-policy-vpc)

La política de permisos que necesita en ambos casos se encuentra en la siguiente sección: [Política de permisos para buckets de S3 de Quick Setup](#patch-policy-bucket-permissions)

### Caso 1: uso de su propio perfil de instancia o rol de servicio con los nodos administrados en lugar de utilizar uno proporcionado por Quick Setup
<a name="patch-policy-instance-profile-service-role"></a>

Las configuraciones de políticas de revisiones incluyen una opción para **Agregar las políticas de IAM necesarias a los perfiles de instancia existentes adjuntos a sus instancias**. 

Si no elige esta opción pero quiere que Quick Setup aplique revisiones a los nodos administrados mediante esta política de revisiones, debe asegurarse de implementar lo siguiente:
+ La política gestionada de IAM `AmazonSSMManagedInstanceCore` debe adjuntarse al [perfil de instancia de IAM](setup-instance-permissions.md) o al [rol de servicio de IAM](hybrid-multicloud-service-role.md) que se utiliza para proporcionar permisos de Systems Manager a los nodos administrados.
+ Debe agregar permisos para acceder a su bucket de políticas de revisiones como política integrada al perfil de instancia de IAM o rol de servicio de IAM. Puede proporcionar un acceso comodín a todos los buckets de `aws-quicksetup-patchpolicy` o solo al bucket específico creado para su organización o cuenta, como se muestra en los ejemplos de código anteriores.
+ Debe etiquetar el perfil de instancia de IAM o rol de servicio de IAM con el siguiente par clave-valor.

  `Key: QSConfigId-quick-setup-configuration-id, Value: quick-setup-configuration-id`

  *quick-setup-configuration-id* representa el valor del parámetro aplicado a la pila AWS CloudFormation que se utiliza para crear la configuración de la política de revisiones. Para recuperar este identificador, haga lo siguiente:

  1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

  1. Seleccione el nombre de la pila que se utiliza para crear la política de revisiones. El nombre tiene un formato como `StackSet-AWS-QuickSetup-PatchPolicy-LA-q4bkg-52cd2f06-d0f9-499e-9818-d887cEXAMPLE`.

  1. Elija la pestaña **Parámetros**.

  1. En la lista de **Parámetros**, en la columna **Clave**, busque la clave **QSConfigurationID**. En la columna **Valor** de su fila, busque el ID de configuración, por ejemplo `abcde`.

     En este ejemplo, para que la etiqueta se aplique al perfil de instancia o al rol de servicio, la clave es `QSConfigId-abcde` y el valor es `abcde`.

Para obtener información sobre cómo agregar etiquetas a un rol de IAM, consulte [Etiquetar los roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags_roles.html#id_tags_roles_procs-console) y [Administrar las etiquetas en los perfiles de instancia (AWS CLIo AWS API)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags_instance-profiles.html#id_tags_instance-profile_procs-cli-api) en la *Guía del usuario de IAM*.

### Caso 2: uso de puntos de conexión de VPC para conectarse a Systems Manager
<a name="patch-policy-vpc"></a>

Si utiliza puntos de conexión de VPC para conectarse a Systems Manager, su política de puntos de conexión de VPC para S3 debe permitir el acceso al bucket de S3 de su política de revisiones de Quick Setup.

Para obtener información sobre cómo agregar permisos a una política de puntos de conexión de VPC para S3, consulte [Control del acceso desde puntos de conexión de VPC con políticas de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html) en la *Guía del usuario de Amazon S3*.

### Política de permisos para buckets de S3 de Quick Setup
<a name="patch-policy-bucket-permissions"></a>

Puede proporcionar acceso comodín a todos los buckets de `aws-quicksetup-patchpolicy` o solo al bucket específico creado para su organización o cuenta. Para proporcionar los permisos necesarios en los dos casos que se describen a continuación, utilice uno de los dos formatos.

------
#### [ All patch policy buckets ]

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToAllPatchPolicyRelatedBuckets",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::aws-quicksetup-patchpolicy-*"
    }
  ]
}
```

------

------
#### [ Specific patch policy bucket ]

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToMyPatchPolicyRelatedBucket",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::aws-quicksetup-patchpolicy-111122223333-quick-setup-configuration-id"
    }
  ]
}
```

------

**nota**  
Una vez creada la configuración de la política de revisiones, puede buscar el nombre completo del bucket en la consola S3. Por ejemplo: .: `aws-quicksetup-patchpolicy-123456789012-abcde`

------

## Cómo asignar al azar de identificadores de línea de base de revisiones en las operaciones de la política de revisiones
<a name="qs-patch-baselines-and-compliance"></a>

Las operaciones de aplicación de revisiones para las políticas de revisiones utilizan el parámetro `BaselineOverride` del documento de comandos SSM `AWS-RunPatchBaseline`. 

Si se utiliza `AWS-RunPatchBaseline` para aplicar revisiones *fuera* de una política de revisiones, se puede utilizar `BaselineOverride` para especificar una lista de líneas de base de revisiones que se utilizarán durante la operación y que sean distintas de las predeterminadas especificadas. Esta lista se crea en un archivo denominado `baseline_overrides.json` y se agrega manualmente a un bucket de Amazon S3 de su propiedad, tal y como se explica en [Uso del parámetro BaselineOverride](patch-manager-baselineoverride-parameter.md).

Sin embargo, para las operaciones de aplicación de revisiones basadas en políticas de revisiones, Systems Manager crea automáticamente un bucket de S3 y le agrega un archivo `baseline_overrides.json`. A continuación, cada vez que Quick Setup ejecuta una operación de aplicación de revisiones (mediante la herramienta Run Command), el sistema genera un ID aleatorio para cada línea de base de revisiones. Este identificador es diferente para cada operación de aplicación de revisiones a la política de revisiones, y la línea de base de revisiones que representa no se almacena en su cuenta ni tiene acceso a ella. 

Como resultado, no verá el ID de la línea de base de revisiones seleccionada en su configuración en los registros de aplicación de revisiones. Esto se aplica tanto a las líneas de base de revisiones de AWS administradas como a las líneas de base de revisiones personalizadas que haya seleccionado. El identificador de línea de base indicado en el registro es, en cambio, el que se generó para esa operación de aplicación de revisiones específica.

Además, si intenta ver los detalles en Patch Manager sobre la línea de base de revisiones que se generó con un identificador asignado al azar, el sistema indicará que la línea de base de revisiones no existe. Este es el comportamiento esperado y se puede omitir.

## Cómo crear una política de revisiones
<a name="create-patch-policy"></a>

Para crear una política de revisiones, realice las siguientes tareas en la consola de Systems Manager.

**Cómo crear una política de revisiones con Quick Setup**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

   Si va a configurar revisiones para una organización, asegúrese de haber iniciado sesión en la cuenta de administración de la organización. No puede configurar la política con la cuenta de administrador delegado ni con una cuenta de miembro.

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta de **Patch Manager**, elija **Create** (Crear).
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En **Configuration name** (Nombre de configuración), ingrese un nombre que ayude a identificar la política de revisiones.

1. En la sección **Análisis e instalación**, en **Operación de revisiones**, elija si la política de revisiones **analizará** los destinos especificados o **analizará e instalará** las revisiones en los destinos especificados.

1. En **Scanning schedule** (Programación de análisis), elija **Use recommended defaults** (Usar los valores predeterminados recomendados) o **Custom scan schedule** (Programación de análisis personalizado). La programación de análisis predeterminado analizará sus destinos todos los días a las 1:00 h UTC.
   + Si elige **Custom scan schedule** (Programación de análisis personalizado), seleccione la frecuencia de análisis (**Scanning Frequency**).
   + Si elige **Daily** (Diariamente), ingrese la hora, en UTC, en la que desea analizar sus destinos. 
   + Si elige **Custom CRON Expression** (Expresión CRON personalizada), introduzca la programación como **expresión CRON**. Para obtener más información acerca de cómo dar formato a las expresiones CRON para Systems Manager, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

     Además, seleccione **Wait to scan targets until first CRON interval** (Esperar para analizar los destinos hasta el primer intervalo CRON). De forma predeterminada, Patch Manager analiza inmediatamente los nodos a medida que se convierten en destinos.

1. Si elige **Scan and install** (Analizar e instalar), elija la **programación de instalación** que se utilizará al instalar las revisiones en los destinos especificados. Si elige **Use recommended defaults** (Usar los valores predeterminados recomendados), Patch Manager instalará revisiones semanalmente a las 2:00 h UTC del domingo.
   + Si elige **Custom install schedule** (Programación de instalación personalizada), seleccione la frecuencia de instalación (**Installation Frequency**).
   + Si elige **Daily** (Diariamente), ingrese la hora, en UTC, en la que desea instalar las actualizaciones en sus destinos.
   + Si elige **Custom CRON expression** (Expresión CRON personalizada), introduzca la programación como **expresión CRON**. Para obtener más información acerca de cómo dar formato a las expresiones CRON para Systems Manager, consulte [Referencia: expresiones cron y rate para Systems Manager](reference-cron-and-rate-expressions.md).

     Además, desactive **Wait to install updates until first CRON interval** (Esperar a instalar las actualizaciones hasta el primer intervalo CRON) para instalar inmediatamente las actualizaciones en los nodos a medida que se convierten en destinos. De forma predeterminada, Patch Manager espera hasta el primer intervalo CRON para instalar las actualizaciones.
   + Elija **Reboot if needed** (Reiniciar si es necesario) para reiniciar los nodos después de la instalación de la revisión. Se recomienda reiniciar después de la instalación, pero puede causar problemas de disponibilidad.

1. En la sección **Patch baseline** (Línea de base de revisiones), elija las líneas de base de revisiones que se utilizarán al analizar y actualizar sus destinos. 

   De forma predeterminada, Patch Manager utiliza las líneas de base de revisiones predefinidas. Para obtener más información, consulte [Líneas de base predefinidas](patch-manager-predefined-and-custom-patch-baselines.md#patch-manager-baselines-pre-defined).

   Si elige **Custom patch baseline** (línea de base de revisiones personalizada), cambie la línea de base de revisiones seleccionada para los sistemas operativos que no desee utilizar una línea de base de revisiones de AWS predefinida.
**nota**  
Si usa puntos de conexión de VPC para conectarse a Systems Manager, asegúrese de que su política de puntos de conexión de VPC para S3 permita el acceso a este bucket de S3. Para obtener más información, consulte [Permisos para el bucket de S3 de la política de revisiones](#patch-policy-s3-bucket-permissions). 
**importante**  
Si utiliza una [configuración de política de revisiones](patch-manager-policies.md) en Quick Setup, las actualizaciones que realice en las líneas de base de revisiones personalizadas se sincronizan con Quick Setup cada hora.   
Si se elimina una línea de base de revisiones personalizada a la que se hacía referencia en una política de revisiones, aparece un banner en la página **Configuration details** (Detalles de configuración) de Quick Setup correspondiente a la política de revisiones. El banner le informa que la política de revisiones hace referencia a una línea de base de revisiones que ya no existe y que las operaciones de aplicación de revisiones posteriores fallarán. En este caso, vuelva a la página **Configurations** (Configuraciones) de Quick Setup, seleccione la configuración de Patch Manager y elija **Actions** (Acciones), **Edit configuration** (Editar configuración). El nombre de la línea de base de revisiones eliminado aparece resaltado y debe seleccionar una nueva línea de base de revisiones para el sistema operativo afectado.

1. (Opcional) En la sección **Patching log storage** (Almacenamiento de registros de revisiones), seleccione **Write output to S3 bucket** (Escribir salida en un bucket de S3) para almacenar los registros de operaciones de revisiones en un bucket de Amazon S3. 
**nota**  
Si está configurando una política de revisiones para una organización, la cuenta de administración de su organización debe tener al menos permisos de solo lectura para este bucket. Todas las unidades organizativas incluidas en la política deben tener acceso de escritura al bucket. Para obtener información sobre cómo conceder acceso a un bucket a diferentes cuentas, consulte el [Ejemplo 2: el propietario del bucket concede permisos de bucket para varias cuentas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html) en la *Guía del usuario de Amazon Simple Storage Service*.

1. Elija **Examinar S3** para seleccionar el bucket en el que desea almacenar la salida del registro de revisiones. La cuenta de administración debe tener acceso de lectura a este bucket. Todos los destinos y las cuentas que no sean de administración configurados en la sección **Targets** (Destinos) deben tener acceso de escritura al bucket de S3 proporcionado para el registro.

1. En la sección **Targets** (Destinos), elija una de las siguientes opciones para identificar las cuentas y las regiones de esta operación de política de revisiones.
**nota**  
Si trabaja en una sola cuenta, las opciones para trabajar con organizaciones y unidades organizativas (OU) no están disponibles. Puede elegir si desea aplicar esta configuración a todas las Regiones de AWS de su cuenta o solo a las regiones que seleccione.  
Si anteriormente especificó una región local para su cuenta y no se ha incorporado a la nueva experiencia de la consola Quick Setup, no puede excluir esa región de la configuración de **Destinos**.
   + **Entire organization** (Toda la organización): todas las cuentas y regiones de su organización.
   + **Custom** (Personalizado): solo las unidades organizativas y las regiones que especifique.
     + En la sección **Target OUs** (Unidades organizativas de destino), seleccione las unidades organizativas en las que desea configurar la política de revisiones. 
     + En la sección **Target Regions** (Regiones de destino), seleccione las regiones en las que desea aplicar la política de revisiones. 
   + **Current account** (Cuenta actual): solo se seleccionan las regiones que especifica en la cuenta en la que ha iniciado sesión actualmente. Elija una de las opciones siguientes:
     + **Current Region** (Región actual): solo se dirige a los nodos administrados de la región seleccionada en la consola. 
     + **Choose Regions** (Elegir regiones): elija las regiones individuales a las que se aplicará la política de revisiones.

1. En **Choose how you want to target instances** (Elegir cómo desea dirigir las instancias), elija una de las siguientes opciones para identificar los nodos en los que desea aplicar revisiones: 
   + **All managed nodes** (Todos los nodos administrados): todos los nodos administrados de las unidades organizativas y regiones seleccionadas.
   + **Specify the resource group** (Especificar el grupo de recursos): elija el nombre de un grupo de recursos de la lista para dirigir sus recursos asociados.
**nota**  
Actualmente, la selección de grupos de recursos solo se admite para configuraciones de cuentas individuales. Para aplicar revisiones a recursos de varias cuentas, elija una opción de segmentación diferente.
   + **Specify a node tag** (Especificar una etiqueta de nodo): solo los nodos etiquetados con el par clave-valor que especifique tendrán revisiones aplicadas en todas las cuentas y regiones a las que se ha dirigido. 
   + **Manual**: elija manualmente los nodos administrados de todas las cuentas y regiones especificadas de una lista.
**nota**  
Actualmente, esta opción solo admite instancias de Amazon EC2. Puede agregar un máximo de 25 instancias de forma manual en una configuración de política de revisiones.

1. En la sección **Rate control** (Control de frecuencia), haga lo siguiente:
   + En **Concurrency** (Simultaneidad), ingrese un número o un porcentaje de nodos en los cuales ejecutar la política de revisiones al mismo tiempo.
   + En **Error threshold** (Umbral de error), ingrese el número o el porcentaje de nodos que pueden experimentar un error antes de que falle la política de revisiones.

1. (Opcional) Seleccione la casilla **Agregar políticas de IAM necesarias a los perfiles de instancia existentes asociados a sus instancias**.

   Esta selección aplica las políticas de IAM creadas por esta configuración de Quick Setup a los nodos que ya tengan un perfil de instancia asociado (instancias de EC2) o un rol de servicio asociado (nodos activados de manera híbrida). Recomendamos que seleccione esta opción cuando los nodos administrados ya tengan un perfil de instancia o un rol de servicio asociado, pero no contengan todos los permisos necesarios para trabajar con Systems Manager.

   Su selección aquí se aplica a los nodos administrados que se creen más adelante en las cuentas y regiones a las que se aplica esta configuración de política de revisiones.
**importante**  
Si no selecciona esta casilla pero quiere que Quick Setup aplique revisiones a los nodos administrados mediante esta política de revisiones, debe hacer lo siguiente:  
Agregue permisos a su [perfil de instancia de IAM](setup-instance-permissions.md) o [rol de servicio de IAM](hybrid-multicloud-service-role.md) para acceder al bucket de S3 creado para su política de revisiones  
Etiquete su perfil de instancia de IAM o rol de servicio de IAM con un par clave-valor específico.  
Para obtener más información, consulte [Caso 1: uso de su propio perfil de instancia o rol de servicio con los nodos administrados en lugar de utilizar uno proporcionado por Quick Setup](#patch-policy-instance-profile-service-role).

1. Seleccione **Crear**.

   Para revisar el estado de las revisiones una vez creada la política de revisiones, puede acceder a la configuración desde la página [https://console.aws.amazon.com/systems-manager/quick-setup](https://console.aws.amazon.com/systems-manager/quick-setup).

# Configurar DevOps Guru con Quick Setup
<a name="quick-setup-devops"></a>

Puede configurar rápidamente las opciones de DevOps Guru mediante Quick Setup. Amazon DevOps Guru es un servicio basado en Machine Learning (ML) que facilita la mejora del rendimiento operativo y la disponibilidad de la aplicación. DevOps Guru detecta comportamientos que se desvían de los patrones de funcionamiento normales para que pueda identificar problemas operativos mucho antes de que afecten a sus clientes. DevOps Guru captura automáticamente datos operativos de las aplicaciones de AWS y proporciona un único panel para visualizar problemas en los datos operativos. Puede comenzar con DevOps Guru para mejorar la disponibilidad y fiabilidad de las aplicaciones sin configuración manual ni experiencia en machine learning.

La configuración de DevOps Guru con Quick Setup está disponible en las siguientes Regiones de AWS:
+ Este de EE. UU. (Norte de Virginia)
+ Este de EE. UU. (Ohio)
+ Oeste de EE. UU. (Oregón)
+ Europa (Fráncfort)
+ Europa (Irlanda)
+ Europa (Estocolmo)
+ Asia-Pacífico (Singapur)
+ Asia-Pacífico (Sídney)
+ Asia-Pacífico (Tokio)

Para obtener información acerca de los precios, consulte [Precios de Amazon DevOps Guru](https://aws.amazon.com/devops-guru/pricing/).

Para configurar DevOps Guru, realice las siguientes tareas en la consola de AWS Systems Manager Quick Setup.

**Para configurar DevOps Guru con Quick Setup**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta **DevOps Guru**, elija **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En la sección **Configuration options** (Opciones de configuración), elija los tipos de recursos de AWS que desea analizar y las preferencias de notificación.

   Si no selecciona la opción **Analyze all AWS resources in all the accounts in my organization** (Analizar todos los recursos de AWS en todas las cuentas de la organización), puede elegir recursos de AWS para analizar más adelante en la consola de DevOps Guru. DevOps Guru analiza los distintos tipos de recursos de AWS (por ejemplo, buckets de Amazon Simple Storage Service [Amazon S3] e instancias de Amazon Elastic Compute Cloud [Amazon EC2]), que se clasifican en dos grupos de precios. Se paga por la cantidad de horas de recursos de AWS analizadas, por cada recurso activo. Un recurso solo está activo si produce métricas, eventos o entradas de registro en el plazo de una hora. La tarifa que se cobra por un tipo de recurso específico de AWS depende del grupo de precios.

   Si selecciona la opción **Enable SNS notifications** (Habilitar notificaciones de SNS), se crea un tema de Amazon Simple Notification Service (Amazon SNS) en cada Cuenta de AWS, en las unidades organizativas de destino en su configuración. DevOps Guru utiliza el tema para enviarle notificaciones sobre eventos importantes de DevOps Guru, como la creación de nueva información. Si no habilita esta opción, puede agregar un tema más adelante en la consola de DevOps Guru.

   Si selecciona la opción **Enable AWS Systems Manager OpsItems** (Habilitar elementos operativos de Systems Manager), se crearán elementos de trabajo operativos (OpsItems) para eventos relacionados de Amazon EventBridge y alarmas de Amazon CloudWatch.

1. En la sección **Schedule** (Programación), elija la frecuencia con la que desea que Quick Setup corrija los cambios realizados en los recursos que difieren de la configuración. La opción **Default** (Predeterminado) se ejecuta una vez. Si no desea que Quick Setup corrija los cambios realizados en los recursos que difieren de la configuración, elija **Disabled** (Desactivado) en **Custom** (Personalizar).

1. En la sección **Targets** (Destinos), elija si desea permitir que DevOps Guru analice los recursos de algunas de sus unidades organizativas o la cuenta en la que ha iniciado sesión.

   Si elige **Custom** (Personalizar), continúe al paso 8.

   Si elige **Current account** (Cuenta actual), continúe al paso 9.

1. En las secciones **Target OUs** (OU de destino) y **Target Regions** (Regiones de destino), seleccione las casillas de verificación de las OU y las Regiones en las que desea utilizar DevOps Guru.

1. Elija las Regiones en las que desea utilizar DevOps Guru en la cuenta actual.

1. Seleccione **Crear**.

# Implemente paquetes de Distributor mediante Quick Setup
<a name="quick-setup-distributor"></a>

Distributor es una herramienta de AWS Systems Manager. El paquete Distributor es una colección de recursos de software instalable o activos que se pueden implementar como una sola entidad. Con Quick Setup, puede implementar un paquete Distributor en una Cuenta de AWS y una Región de AWS o en toda una organización en AWS Organizations. Actualmente, solo se puede implementar el agente de EC2Launch v2, el paquete de utilidades de Amazon Elastic File System (Amazon EFS) y el agente de Amazon CloudWatch con Quick Setup. Para obtener más información acerca de Distributor, consulte [AWS Systems Manager Distributor](distributor.md).

Para implementar paquetes de Distributor realice las siguientes tareas en la consola de AWS Systems Manager Quick Setup.

**Para implementar paquetes de Distributor con Quick Setup**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta de **Distribuidor**, seleccione **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En la sección **Configuration options** (Opciones de configuración), elija el paquete que desea implementar.

1. En la sección **Targets** (Destinos), elija si desea implementar el paquete para toda la organización, algunas de sus unidades organizativas o la cuenta en la que ha iniciado sesión.

   Si elige **Entire Organization** (Toda la organización), continúe en el paso 8.

   Si elige **Custom** (Personalizado), continúe en el paso 7.

1. En la sección **Target OUs** (Unidades organizativas de destino), seleccione las casillas de verificación de las unidades organizativas y las regiones en las que desea implementar el paquete.

1. Seleccione **Crear**.

# Detenga e inicie las instancias EC2 automáticamente según una programación mediante Quick Setup
<a name="quick-setup-scheduler"></a>

Con Quick Setup, una herramienta de AWS Systems Manager, puede configurar Programador de recursos para automatizar el inicio y la detención de las instancias de Amazon Elastic Compute Cloud (Amazon EC2).

Esta configuración de Quick Setup lo ayuda a reducir los costos operativos al iniciar y detener las instancias de acuerdo con la programación que especifique. Esta herramienta lo ayuda a evitar incurrir en costos innecesarios al ejecutar instancias cuando no son necesarias. 

Por ejemplo, actualmente, puede que sus instancias estén en constante ejecución, aunque solo se usen 10 horas al día, 5 días a la semana. En su lugar, puede programar sus instancias para que se detengan todos los días después del horario laboral. Como resultado, se ahorraría un 70 por ciento en esas instancias, ya que el tiempo de ejecución se reduce de 168 horas a 50 horas. El uso de no supone costo alguno Quick Setup. Sin embargo, se puede incurrir en costos en función de los recursos que configure y de los límites de uso, sin cargos por los servicios utilizados para configurar el servicio.

Con Programador de recursos, puede optar por detener e iniciar automáticamente las instancias en varias Regiones de AWS y Cuentas de AWS según una programación que usted defina. La configuración de Quick Setup se dirige a las instancias de Amazon EC2 mediante la clave de etiqueta y el valor que usted especifique. Programador de recursos solo detiene o inicia las instancias con una etiqueta que coincida con el valor que especifique en la configuración. Tenga en cuenta que si los volúmenes de Amazon EBS adjuntos a la instancia están cifrados, debe añadir los permisos necesarios para la clave AWS KMS al rol de IAM para que el Programador de recursos pueda iniciar la instancia.

**Número máximo de instancias por configuración**  
Una configuración individual admite la programación de hasta 5000 instancias por región. Si su caso requiere programar más de 5000 instancias en una región determinada, debe crear varias configuraciones. Etiquete sus instancias en consecuencia para que cada configuración administre hasta 5000 instancias. Al crear varias configuraciones de Quick Setup de Programador de recursos, debe especificar diferentes valores de clave de etiqueta. Por ejemplo, una configuración puede usar la clave de etiqueta `Environment` con el valor `Production`, mientras que otra usa `Environment` y `Development`.

**Comportamientos de programación**  
En los siguientes puntos se describen ciertos comportamientos de las configuraciones de programación:
+ Programador de recursos inicia las instancias etiquetadas solo si están en estado `Stopped`. Del mismo modo, las instancias solo se detienen si están en estado `running`. Programador de recursos funciona con un modelo basado en eventos y solo inicia o detiene las instancias en los momentos que usted especifique. Por ejemplo, usted crea una programación que inicie las instancias a las 9:00 h. Programador de recursos inicia todas las instancias asociadas a la etiqueta que especifique que estén en estado `Stopped` a 9:00 h. Si las instancias se detienen manualmente más adelante, Programador de recursos no las volverá a iniciar para mantener el estado `Running`. Del mismo modo, si una instancia se inicia manualmente después de detenerla según lo programado, Programador de recursos no volverá a detenerla.
+ Si crea una programación con una hora de inicio posterior a la hora de detención en una programación de 24 horas, Programador de recursos asume que las instancias se ejecutan durante la noche. Por ejemplo, usted crea una programación que inicie las instancias a las 21:00 h y las detenga a las 7:00 h. Programador de recursos inicia todas las instancias asociadas a la etiqueta que especifique que estén en estado `Stopped` a las 21:00 h y las detiene a las 7:00 h del día siguiente. En el caso de los horarios nocturnos, la hora de inicio aplica a los días que seleccione para su programación. Sin embargo, la hora de detención se aplica al día siguiente de su programación.
+ Al crear una configuración de programación, es posible que el estado actual de las instancias cambie para que se ajuste a los requisitos de programación.

  Por ejemplo, supongamos que hoy es miércoles y especifica una programación para que las instancias administradas se inicien a las 9 h y se detengan a las 17 h *solo* los martes y los jueves. Como la hora actual está fuera del horario establecido para que las instancias se ejecuten, se detendrán una vez creada la configuración. Las instancias no volverán a ejecutarse hasta la siguiente hora establecida, es decir, el jueves a las 9 h. 

  Si el estado actual de las instancias es `Stopped` y especifica una programación en la que se ejecutarían en la hora actual, Programador de recursos las inician después de que se cree la configuración.

Si elimina la configuración, las instancias ya no se detendrán ni se iniciarán de acuerdo con la programación definida anteriormente. En raras ocasiones, es posible que las instancias no se detengan o se inicien correctamente debido a errores en las operaciones de la API.

Para configurar la programación de las instancias de Amazon EC2, realice las siguientes tareas en la consola AWS Systems Manager Quick Setup.

**Para configurar la programación de instancias con Quick Setup**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta del **Programador de recursos**, seleccione **Crear**.
**sugerencia**  
Si ya tiene una o más configuraciones en su cuenta, seleccione primero la pestaña **Biblioteca** o el botón **Crear** de la sección **Configuraciones** para ver las tarjetas.

1. En la sección **Instance tag** (Etiqueta de instancia), especifique la clave de etiqueta y el valor aplicados a las instancias que desea asociar a su programación.

1. En la sección **Schedule options** (Opciones de programación), especifique la zona horaria, los días y las horas en que desea iniciar y detener las instancias.

1. En la sección **Targets** (Destinos), elija si desea configurar la programación para un grupo de unidades organizativas (OU) personalizadas (**Custom**) o la cuenta actual (**Current account**) en la que tenga iniciada la sesión:
   + **Custom** (Personalizadas): en la sección **Target OUs** (OU de destino), seleccione las OU en donde desea configurar la programación. Luego, en la sección **Target Regions** (Regiones de destino), seleccione las regiones en las que desea configurar la programación.
   + **Cuenta actual**: Seleccione **Región actual** o **Elegir regiones**. Si seleccionó **Choose Regions** (Elegir regiones), elija las **Target Regions** (Regiones de destino) en las que desea configurar la programación.

1. Verifique la información de la programación en la sección **Summary** (Resumen).

1. Seleccione **Crear**.

# Configuración de Explorador de recursos de AWS mediante Quick Setup
<a name="Resource-explorer-quick-setup"></a>

Con Quick Setup, una herramienta de AWS Systems Manager, puede configurar Explorador de recursos de AWS rápidamente para buscar y descubrir recursos en su Cuenta de AWS o en toda una organización de AWS. Puede buscar sus recursos mediante metadatos, como nombres, etiquetas e ID. Explorador de recursos de AWS brinda respuestas rápidas a sus consultas de búsqueda mediante el uso de *índices*. Resource Explorer crea y mantiene índices con una variedad de orígenes de datos para recopilar información sobre los recursos de su Cuenta de AWS. 

Quick Setup para Resource Explorer automatiza el proceso de configuración del índice. Para obtener más información sobre Explorador de recursos de AWS, consulte [¿Qué es Explorador de recursos de AWS?](https://docs.aws.amazon.com/resource-explorer/latest/userguide/welcome.html) en la Guía del usuario de Explorador de recursos de AWS.

Con Quick Setup, Resource Explorer realiza lo siguiente: 
+ Crea un índice en cada una de la Región de AWS de su Cuenta de AWS.
+ Actualiza el índice de la región que especifique como índice agregador de la cuenta.
+ Crea una vista predeterminada en la región del índice de agregador. Esta vista no posee filtros, por lo que devuelve todos los recursos que se encuentran en el índice.

**Permisos mínimos**

Para realizar los siguientes pasos, debe tener los siguientes permisos:
+ **Acción**: `resource-explorer-2:*` — **Recurso**: ningún recurso específico (`*`)
+ **Acción**: `iam:CreateServiceLinkedRole` — **Recurso**: ningún recurso específico (`*`)

**Para configurar Resource Explorer**

1. Abra la consola de AWS Systems Manager en [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Quick Setup**.

1. En la tarjeta de **Resource Explorer**, seleccione **Crear**.

1. En la sección **Región del índice de agregadores**, elija qué región desea que contenga el **índice de agregadores**. Debe seleccionar la región adecuada para la ubicación geográfica de los usuarios.

1. (Opcional) Seleccione la casilla de verificación **Reemplazar los índices agregadores existentes en regiones distintas de la seleccionada anteriormente**. 

1. En la sección **Destinos**, elija la **organización** de destino o las **unidades organizativas (UO)** específicas que contengan los recursos que desea descubrir. 

1. En la sección **Regiones**, elija qué **regiones** quiere incluir en la configuración. 

1. Revise el resumen de la configuración y, a continuación, elija **Crear**. 

En la página de **Resource Explorer**, puede supervisar el estado de la configuración.

# Solución de problemas de los resultados de Quick Setup
<a name="quick-setup-results-troubleshooting"></a>

Utilice la siguiente información como ayuda para solucionar problemas con Quick Setup, una herramienta de AWS Systems Manager. Este tema incluye tareas específicas para resolver problemas en función del tipo de incidencia de Quick Setup.

**Problema: error de implementación**  
Se produce un error en la implementación si el conjunto de pilas de CloudFormation ha fallado durante la creación. Siga los siguientes pasos para investigar un error de implementación.

1. Vaya a la [consola de AWS CloudFormation](https://console.aws.amazon.com/cloudformation). 

1. Elija la pila creada por su configuración de Quick Setup. El **Stack name** (Nombre de la pila) incluye `QuickSetup` seguida del tipo de configuración que eligió, como `SSMHostMgmt`. 
**nota**  
CloudFormation, a veces, elimina implementaciones de pila con error. Si la pila no está disponible en la tabla **Stacks** (Pilas), elija **Deleted** (Eliminadas) de la lista de filtros.

1. Consulte **Status** (Estado) y **Status reason** (Motivo del estado). Para obtener más información sobre los estados de la pila, consulte [Códigos de estado de pilas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html#cfn-console-view-stack-data-resources-status-codes) en la *Guía del usuario de AWS CloudFormation*. 

1. Para entender el paso exacto que ha fallado, consulte la pestaña **Events** (Eventos) y revise el **Status** (Estado) de cada evento. 

1. Revise la [Solución de problemas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) en la *Guía del usuario de AWS CloudFormation*.

1. Si no puede resolver el error de implementación mediante los pasos de la solución de problemas de CloudFormation, elimine la configuración y vuelva a configurarla.

**Problema: error de asociación**  
La tabla **Detalles de configuración** de la página **Detalles de configuración** de la configuración muestra el **Estado de configuración** con el valor **Error** si alguna de las asociaciones ha fallado durante la configuración. Siga los pasos a continuación para solucionar un error de asociación.

1. En la tabla **Configuration details** (Detalles de configuración), elija la configuración con error y, a continuación, elija **View details** (Ver detalles).

1. Copie el **Association name** (Nombre de la asociación).

1. Vaya a **State Manager** y pegue el nombre de la asociación en el campo de búsqueda. 

1. Elija la asociación y elija la pestaña **Execution history** (Historial de ejecución).

1. En **Execution ID (ID de ejecución)**, elija la ejecución de la asociación que ha producido un error.

1. La página **Association execution targets (Destinos de ejecución de asociación)** muestra todos los nodos en los que se ejecutó la asociación. Elija el botón **Output (Salida)** para una ejecución que no se pudo ejecutar.

1. En la página **Output (Salida)** elija **Step - Output (Paso: salida)** para ver el mensaje de error de ese paso en la ejecución del comando. Cada paso puede mostrar un mensaje de error diferente. Revise los mensajes de error de todos los pasos para ayudar a solucionar el problema.
Si ver el resultado del paso no ayuda a solucionar el problema, puede volver a crear la asociación. Para volver a crear la asociación, elimine primero la asociación que falla en State Manager. Después de eliminar la asociación, edite la configuración, elija la opción que eliminó y elija **Update** (Actualizar).  
Para investigar las asociaciones que figuren con el estado **Failed** (Error) para una configuración de **Organization** (Organización), debe iniciar sesión en la cuenta con la asociación con error y seguir el procedimiento de la asociación errónea que antes se indicó. El **ID de asociación** no es un hipervínculo a la cuenta de destino cuando se visualizan los resultados de la cuenta de administración.

**Problema: estado de deriva**  
Al ver la página de detalles de una configuración, puede ver el estado de la desviación de cada implementación. La desviación de la configuración se produce cada vez que un usuario realiza algún cambio en un servicio o característica que entra en conflicto con las selecciones realizadas a través de Quick Setup. Si una asociación ha cambiado después de la configuración inicial, la tabla muestra un icono de advertencia que indica la cantidad de elementos que se han desviado. Puede determinar qué causó la desviación al pasar el ratón sobre el icono. 
Cuando se elimina una asociación en State Manager, las implementaciones relacionadas muestran una advertencia de desviación. Para solucionarlo, edite la configuración y elija la opción que se quitó cuando se eliminó la asociación. Elija **Update** (Actualizar) y espere a que se complete la implementación.