Riferimento alle operazioni del servizio di automazione di Systems Manager
In questa sezione di riferimento sono descritte le operazioni del servizio di automazione che è possibile specificare in un runbook del servizio di automazione. Il servizio di automazione è una funzionalità di AWS Systems Manager. Queste operazioni non possono essere utilizzate in altri tipi di documenti di Systems Manager (SSM). Per informazioni sui plugin per gli altri tipi di documenti di SSM, consulta Documentazione di riferimento del plugin per i documenti di comando .
Il servizio di automazione di Systems Manager esegue le fasi definite nei runbook del servizio di automazione. Ogni fase è associata a un'operazione specifica. L'operazione determina gli input, il comportamento e l'output della fase. Le fasi vengono definite nella sezione mainSteps
del runbook.
Non è necessario specificare gli output di un'operazione o una fase. Gli output sono definiti dall'operazione associata alla fase. Quando si specifica gli input delle fasi nei runbook, è possibile fare riferimento a uno o più output di una fase precedente. Ad esempio, è possibile rendere disponibile l'output di aws:runInstances
a una successiva operazione aws:runCommand
. È anche possibile fare riferimento agli output delle fasi precedenti nella sezione Output
del runbook.
Importante
Se si esegue un flusso di lavoro di automazione che chiama altri servizi utilizzando un ruolo di servizio (IAM) di AWS Identity and Access Management, tenere presente che tale ruolo di servizio deve essere configurato con l'autorizzazione per la chiamata di tali servizi. Questo requisito si applica a tutti i runbook di automazione di AWS (runbook di AWS-*
) come i runbook di AWS-ConfigureS3BucketLogging
, AWS-CreateDynamoDBBackup
, e AWS-RestartEC2Instance
, per citarne alcuni. Questo requisito vale anche per i runbook di automazione personalizzati creati che chiamano a Servizi AWS tramite l'utilizzo di operazioni che chiamano altri servizi. Ad esempio, se utilizzi le operazioni aws:executeAwsApi
, aws:createStack
o aws:copyImage
, devi configurare il ruolo di servizio con l'autorizzazione per richiamare tali servizi. Puoi concedere le autorizzazioni ad altri Servizi AWS aggiungendo una policy inline IAM al ruolo. Per ulteriori informazioni, consultare (Facoltativo) Aggiunta di una policy di automazione inline o di una policy gestita dal cliente per richiamare altri Servizi AWS.
Argomenti
- Proprietà condivise da tutte le operazioni
- aws:approve: sospendere un'automazione per l'approvazione manuale
- aws:assertAwsResourceProperty: asserzione di uno stato della risorsa di AWS o stato evento
- aws:branch: esecuzione delle fasi di automazione condizionale
- aws:changeInstanceState: modifica o rileva dello stato dell'istanza
- aws:copyImage: copia o crittografa un'Amazon Machine Image
- aws:createImage: creazione di un'Amazon Machine Image
- aws:createStack: creazione di uno stack di AWS CloudFormation.
- aws:createTags: creazione di tag per risorse di AWS
- aws:deleteImage: eliminazione di un'Amazon Machine Image
- aws:deleteStack: eliminazione di uno stack di AWS CloudFormation.
- aws:executeAutomation: esecuzione di un'altra automazione
- aws:executeAwsApi: chiamata ed esecuzione di operazioni API di AWS
- aws:executeScript: esecuzione di uno script
- aws:executeStateMachine: esecuzione di una macchina a stati di AWS Step Functions.
- aws:invokeWebhook: richiamo dell'integrazione di un webhook di Automation
- aws:invokeLambdaFunction: chiamata di una funzione AWS Lambda
- aws:loop: intera sui passaggi di un'automazione
- aws:pause: sospensione di un'automazione
- aws:runCommand: esecuzione di un comando su un'istanza gestita
- aws:runInstances: avvio di un'istanza di Amazon EC2
- aws:sleep: ritardo di un'automazione
- aws:updateVariable: aggiorna un valore per una variabile di runbook
- aws:waitForAwsResourceProperty: attesa di una proprietà della risorsa di AWS
- Variabili di sistema del servizio di automazione
Proprietà condivise da tutte le operazioni
Le proprietà comuni sono parametri o opzioni che si trovano in tutte le operazioni. Alcune opzioni definiscono il comportamento per una fase, ad esempio quanto tempo attendere il completamento di una fase e cosa fare se la fase non riesce. Le seguenti proprietà sono comuni a tutte le operazioni.
- description
-
Informazioni fornite per descrivere lo scopo di un runbook o di un passaggio.
Tipo: string
Campo obbligatorio: no
- name
-
Identificatore che deve essere univoco per tutti i nomi di fase nel runbook.
Tipo: stringa
Modello consentito: [a-zA-Z0-9_]+$
Campo obbligatorio: sì
- action
-
Nome dell'operazione che la fase deve eseguire. aws:runCommand: esecuzione di un comando su un'istanza gestita è un esempio di operazione che puoi specificare. Questo documento fornisce informazioni dettagliate su tutte le operazioni disponibili.
Tipo: stringa
Campo obbligatorio: sì
- maxAttempts
-
Numero di nuovi tentativi di esecuzione della fase in caso di errore. Se il valore è maggiore di 1, la fase non viene considerata non riuscita finché tutti i nuovi tentativi non hanno restituito esito negativo. Il valore predefinito è 1.
Tipo: integer
Campo obbligatorio: no
- timeoutSeconds
-
Valore di timeout per la fase. Se il timeout viene raggiunto e il valore di
maxAttempts
è maggiore di 1, la fase non viene considerata scaduta finché non vengono eseguiti tutti i nuovi tentativi.Tipo: integer
Campo obbligatorio: no
- onFailure
-
Indica se, in caso di errore, l'automazione deve essere interrotta, deve continuare o deve passare a un'altra fase. Il valore predefinito di questa opzione è "abort" (interrompi).
Tipo: stringa
Valori validi: Abort | Continue | step:
step_name
Campo obbligatorio: no
- onCancel
-
Indica a quale fase deve passare l'automazione nel caso in cui un utente annulli l'automazione. L'automazione esegue il flusso di lavoro di annullamento per un massimo di due minuti.
Tipo: stringa
Valori validi: Abort | step:
step_name
Campo obbligatorio: no
La proprietà
onCancel
non supporta il passaggio alle seguenti operazioni:-
aws:approve
-
aws:copyImage
-
aws:createImage
-
aws:createStack
-
aws:createTags
-
aws:loop
-
aws:pause
-
aws:runInstances
-
aws:sleep
-
- isEnd
-
Questa opzione arresta l'automazione alla fine di una fase specifica. L'automazione viene arrestata se la fase ha esito positivo o negativo. Il valore predefinito è false.
Tipo: Booleano
Valori validi: true | false
Campo obbligatorio: no
- nextStep
-
Specifica la successiva fase di un'automazione da elaborare dopo il completamento di una fase.
Tipo: string
Campo obbligatorio: no
- isCritical
-
Designa una fase come fase critica per il corretto completamento dell'automazione. Se una fase con questa definizione ha esito negativo, il servizio di automazione restituisce come stato finale dell'automazione il valore "Failed" (Non riuscito). Questa proprietà viene valutata solo se viene definita esplicitamente nella fase. Se la proprietà
onFailure
viene impostata suContinue
in una fase, il valore predefinito è false. Altrimenti, il valore predefinito per questa opzione è "true".Tipo: Booleano
Valori validi: true | false
Campo obbligatorio: no
- inputs
-
Proprietà specifiche dell'operazione.
Tipo: Map
Campo obbligatorio: sì
Esempio
--- 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 }}"