Referencia de acciones de Automatización de Systems Manager - AWS Systems Manager

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.

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

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