Riferimento alle operazioni del servizio di automazione di Systems Manager - AWS Systems Manager

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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, consulta (Facoltativo) Aggiungi una policy in linea di automazione o una policy gestita dal cliente per richiamarne altre Servizi AWS.

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

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

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

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

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