

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

# 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\_]\+$  
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 \| Continue \| step:{{nombre\_del\_paso}}  
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 \| step:{{step\_name}}  
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 \| 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 \| 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 }}"
```