Referencia de acciones de Automatización de Systems Manager
Esta referencia describe las acciones de Automation que puede especificar en un manual de procedimientos de automatización. Automation es una capacidad 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.
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.
Temas
- Propiedades compartidas por todas las acciones
- aws:approve: detener una automatización para la aprobación manual
- aws:assertAwsResourceProperty: confirmar el estado de un recurso o un evento de AWS
- aws:branch: ejecutar pasos de automatización condicionales
- aws:changeInstanceState: cambiar o confirmar el estado de la instancia
- aws:copyImage: copiar o cifrar una Amazon Machine Image
- aws:createImage: crear una Amazon Machine Image
- aws:createStack: crear una pila de AWS CloudFormation
- aws:createTags: crear etiquetas para recursos de AWS
- aws:deleteImage: eliminar una Amazon Machine Image
- aws:deleteStack: eliminar una pila de AWS CloudFormation
- aws:executeAutomation: ejecutar otra automatización
- aws:executeAwsApi: llamar y ejecutar operaciones de la API de AWS
- aws:executeScript: ejecutar un script
- aws:executeStateMachine: ejecutar una máquina de estado de AWS Step Functions
- aws:invokeWebhook: invocar una integración de webhook de Automation
- aws:invokeLambdaFunction: invocar una función de AWS Lambda
- aws:loop — Repita los pasos en una automatización
- aws:pause: detener una automatización
- aws:runCommand: ejecutar un comando en una instancia administrada
- aws:runInstances: lanzar una instancia de Amazon EC2
- aws:sleep: retrasar una automatización
- aws:updateVariable — Actualiza el valor de una variable del manual de procedimientos
- aws:waitForAwsResourceProperty: esperar una propiedad de recurso de AWS
- Variables del sistema de Automation
Propiedades compartidas por todas las acciones
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
-
Información que proporciona para describir el propósito de un manual de procedimientos o un paso.
Tipo: cadena
Requerido: no
- name
-
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
-
El nombre de la acción que ejecutará el paso. aws:runCommand: ejecutar un comando en una instancia administrada 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
-
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
Requerido: no
- timeoutSeconds
-
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
Requerido: no
- onFailure
-
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
Requerido: no
- onCancel
-
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
Requerido: 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
-
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
Requerido: no
- nextStep
-
Especifica qué paso de una automatización se debe procesar después de finalizar correctamente un paso.
Tipo: cadena
Requerido: no
- isCritical
-
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 enContinue
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
Requerido: no
- inputs
-
Las propiedades específicas de la acción.
Tipo: mapa
Obligatorio: sí
Ejemplo
--- 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 }}"