avance
Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras!
Esta característica se proporciona actualmente como parte de un programa de vista previa de conformidad con nuestras políticas de prelanzamiento.
Esta página proporciona una referencia completa de las acciones de AWS Systems Manager disponibles en el catálogo de acciones de automatización del flujo de trabajo. Estas acciones le permiten gestionar sistemas de automatización y documentar operaciones.
Requisitos previos
Antes de emplear las acciones AWS en la automatización del flujo de trabajo, cerciorar de tener lo siguiente:
- Una cuenta de AWS con las licencias adecuadas.
- Credenciales de AWS configuradas (credenciales de usuario de IAM, ARN de rol de IAM o credenciales de sesión).
- Las licencias IAM necesarios para los servicios específicos de AWS que planea emplear.
Consulte Configurar credenciales AWS para obtener información sobre cómo crear usuarios y roles de IAM, y configurar credenciales AWS estáticas y de sesión para la integración con acciones de automatización de flujo de trabajo AWS.
Escriba un documento SSM en la cuenta AWS según las credenciales de AWS pasadas en la entrada de acción. Consulte la documentación de AWS Systems Manager
Campo de entrada | Opcionalidad | Tipo | Ejemplo |
|---|---|---|---|
awsRoleArn | Opcional | Cadena |
|
awsAccessKeyId | Opcional | Cadena |
|
awsSecretAccessKey | Opcional | Cadena |
|
awsSessionToken | Opcional | Cadena |
|
región | Requerido | Cadena |
|
documentName | Requerido | Cadena |
|
documentType | Opcional | Cadena |
Compruebe los valores válidos desde aquí. |
documentFormat | Opcional | Cadena |
Compruebe los valores válidos desde aquí. |
documentContent | Requerido | Cadena | Ver ejemplo |
override | Opcional | Booleano |
Cuando Cuando |
selectores | Opcional | lista |
|
Campo de salida | Tipo | Descripción y ejemplo |
|---|---|---|
documentName | Cadena |
|
documentVersion | Cadena |
|
documentType | Cadena |
|
documentStatus | Cadena |
El valor será uno de los estados desde aquí. |
éxito | Booleano |
|
mensaje de error | Cadena |
|
Importante
- En la entrada de acción, solo se pueden proporcionar
awsAccessKeyIdyawsSecretAccessKey, pero deben ser credenciales estáticas de un usuario de IAM. - Si se van a emplear las credenciales de sesión, se deben pasar
awsAccessKeyId,awsSecretAccessKeyyawsSessionTokena la entrada de acción. - Los selectores para obtener como resultado el único parámetro especificado.
- Consulte las credenciales de AWS para obtener instrucciones.
Ejemplo 1: Un documento SSM simple para enumerar todas las funciones Lambda
schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi action: aws:executeAwsApi isEnd: true inputs: Service: lambda Api: ListFunctions outputs: - Name: resultFunctionName Selector: $..FunctionName Type: StringList outputs: - ExecuteAwsApi.resultFunctionNameDefinición completa de flujos automáticos con la función de listado SSM Lambda
name: aws-api
workflowInputs: key: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_ACCESS_KEY_ID }}" access: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SECRET_ACCESS_KEY }}" token: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SESSION_TOKEN }}" region: type: String defaultValue: us-east-2
steps: - name: createSsmDocument type: action action: aws.systemsManager.writeDocument version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} selectors: - name: documentName expression: '.documentName' - name: documentType expression: '.documentType' - name: documentStatus expression: '.documentStatus' - name: success expression: '.success' documentName: "LambdaListFunctionNames" documentContent: | schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi action: aws:executeAwsApi isEnd: true inputs: Service: lambda Api: ListFunctions outputs: - Name: resultFunctionName Selector: $..FunctionName Type: StringList outputs: - ExecuteAwsApi.resultFunctionName
- name: generateIdempotencyToken type: action action: utils.uuid.generate version: 1
- name: start1 type: action action: aws.systemsManager.startAutomation version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: "${{ .steps.createSsmDocument.outputs.documentName }}" idempotencyToken: ${{ .steps.generateIdempotencyToken.outputs.uuid }}
- name: waitForCompletion type: action action: aws.systemsManager.waitForAutomationStatus version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} automationExecutionId: ${{ .steps.start1.outputs.automationExecutionId }} # Optional, default is Success and Failed automationExecutionStatuses: - "Success" - "Failed" timeout: 60
- name: hasCompleted type: switch switch: - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }} next: displayError - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }} next: displaySuccess next: displayUnexpected
- name: displayUnexpected type: action action: newrelic.instrumentation.log version: 1 inputs: message: "Unexpected status ${{ .steps.waitForCompletion.outputs.automationExecutionStatus | tojson }}" next: cleanupSsmDocument
- name: displaySuccess type: action action: newrelic.instrumentation.log version: 1 inputs: message: "This is all the lambda function names on the region ${{ .workflowInputs.region }}:${{ .steps.waitForCompletion.outputs.automationExecutionOutputs.ExecuteAwsApi.resultFunctionName | join(\",\") }}" next: cleanupSsmDocument
- name: displayError type: action action: newrelic.instrumentation.log version: 1 inputs: message: "Error while executing document ${{ .steps.createSsmDocument.outputs.documentName }}, detail: ${{ .steps.waitForCompletion.outputs.errorMessage }}" next: cleanupSsmDocument
- name: cleanupSsmDocument type: action action: aws.systemsManager.deleteDocument version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: ${{ .steps.createSsmDocument.outputs.documentName }}Ejemplo 2: Ejecutar un script de Python
Al emplear la automatización y la acción de documento de AWS SystemsManager, podemos definir una definición de flujo de trabajo que ejecute un script de Python.
A continuación se muestra un breve ejemplo que ilustra con una sencilla aplicación Hola Mundo.
schemaVersion: '0.3' description: "Run a Python script that says 'Hello' to the username passed as input and capture the output." parameters: Username: type: String description: "The username to greet." default: "User" mainSteps: - action: aws:executeScript name: pythonStep inputs: Runtime: python3.8 Handler: script_handler Script: | def script_handler(event, context): username = event['username'] return f'Hello {username}' InputPayload: username: "{{ Username }}" outputs: - Name: scriptOutput Type: String Selector: $.Payload outputs: - pythonStep.scriptOutputEsto luego se puede emplear en el flujo de trabajo siguiente:
name: aws-python-script
workflowInputs: key: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_ACCESS_KEY_ID }}" access: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SECRET_ACCESS_KEY }}" token: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SESSION_TOKEN }}" region: type: String defaultValue: us-west-2 name: type: String defaultValue: ExecuteHelloPythonScript username: type: String defaultValue: World!
steps: - name: generateIdempotencyToken type: action action: utils.uuid.generate version: 1
- name: createSsmDocument type: action action: aws.systemsManager.writeDocument version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: ${{ .workflowInputs.name }} documentContent: | schemaVersion: '0.3' description: "Run a Python script that says 'Hello' to the username passed as input and capture the output." parameters: Username: type: String description: "The username to greet." default: "User" mainSteps: - action: aws:executeScript name: pythonStep inputs: Runtime: python3.8 Handler: script_handler Script: | def script_handler(event, context): username = event['username'] return f'Hello {username}' InputPayload: username: "{{ Username }}" outputs: - Name: scriptOutput Type: String Selector: $.Payload outputs: - pythonStep.scriptOutput
- name: start1 type: action action: aws.systemsManager.startAutomation version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: "${{ .steps.createSsmDocument.outputs.documentName }}" idempotencyToken: ${{ .steps.generateIdempotencyToken.outputs.uuid }} parameters: Username: ${{ .workflowInputs.username }}
- name: waitForCompletion type: action action: aws.systemsManager.waitForAutomationStatus version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} automationExecutionId: ${{ .steps.start1.outputs.automationExecutionId }} # Optional, default is Success and Failed automationExecutionStatuses: - "Success" - "Failed" timeout: 300
- name: hasCompleted type: switch switch: - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }} next: displayError - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }} next: displaySuccess next: displayUnexpected
- name: displayUnexpected type: action action: newrelic.instrumentation.log version: 1 inputs: message: "Unexpected status ${{ .steps.waitForCompletion.outputs.automationExecutionStatus | tojson }}" next: cleanupSsmDocument
- name: displaySuccess type: action action: newrelic.instrumentation.log version: 1 inputs: message: "This is the results of the automation that was run on the region ${{ .workflowInputs.region }}:${{ .steps.waitForCompletion.outputs.automationExecutionOutputs.pythonStep.scriptOutput | tojson }}" next: cleanupSsmDocument
- name: displayError type: action action: newrelic.instrumentation.log version: 1 inputs: message: "Error while executing document ${{ .steps.createSsmDocument.outputs.documentName }}, detail: ${{ .steps.waitForCompletion.outputs | tojson }}" next: cleanupSsmDocument
- name: cleanupSsmDocument type: action action: aws.systemsManager.deleteDocument version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: ${{ .steps.createSsmDocument.outputs.documentName }}Esto se puede iniciar con la siguiente mutación de NerdGraph, asumiendo que los secretos temporales de AWS se almacenaron previamente con las mutaciones secretsManagementCreateSecretNerdGraph.
mutation { autoflowsStartWorkflowRun(accountId: 11933347, definition: { name: "aws-python-script", }, workflowInputs: [ {key: "key" value: "${{ :secrets:testUser123_AWS_ACCESS_KEY_ID }}"} {key: "access" value: "${{ :secrets:testUser123_AWS_SECRET_ACCESS_KEY }}"} {key: "token" value: "${{ :secrets:testUser123_AWS_SESSION_TOKEN }}"} {key: "region" value:"us-west-2"} {key: "username" value: "Julien"} ]) { runId } }Al ejecutar la mutación anterior, se devuelve un runId, por ejemplo 207e8c23-2c89-4af2-a74f-3c9ea2ffd543. Luego, este runId se puede emplear para consultar los logs y ver el siguiente resultado:

Ejemplo 3: Un documento SSM más complejo
- Obtenga la lista de API de descanso de API Gateway. Filtra mi API (
Test API) y obtén el ID de API restante. - Obtenga la lista de todos los recursos dentro de mi API (
Test API). Filtrar mi recurso específico en función de pathPart(/test) y obtener el resourceID - Obtener la lista de versiones para mi función Lambda (
ApiGwTestFn). Filtrar la versión específica a la que quiero volver (versión: 1) y obtener el functionArn de esa versión. - Actualice la integración del gateway API con la función lambda Arn adquirida en el paso anterior.
- Crear una nueva implementación para mi API rest (
Test API).
schemaVersion: '0.3' description: Test SSM for API gateway rollback mainSteps: - name: ExecuteAwsApi action: aws:executeAwsApi nextStep: ExecuteGetApiResources inputs: Service: apigateway Api: GetRestApis outputs: - Name: resultApiId Selector: $.items[?(@.name=='Test API')].id Type: String - name: ExecuteGetApiResources action: aws:executeAwsApi nextStep: ExecuteListVersionsByFunction inputs: Service: apigateway Api: GetResources restApiId: '{{ ExecuteAwsApi.resultApiId }}' outputs: - Name: resultResourceId Selector: $.items[?(@.pathPart=='test')].id Type: String - name: ExecuteListVersionsByFunction action: aws:executeAwsApi nextStep: ExecuteApiGwUpdateIntg inputs: Service: lambda Api: ListVersionsByFunction FunctionName: ApiGwTestFn outputs: - Name: resultLambdaVersionArn Selector: $.Versions[?(@.Version=='1')].FunctionArn Type: String - name: ExecuteApiGwUpdateIntg action: aws:executeAwsApi nextStep: ExecuteApiGwCreateDeployment inputs: Service: apigateway Api: UpdateIntegration restApiId: '{{ ExecuteAwsApi.resultApiId }}' resourceId: '{{ ExecuteGetApiResources.resultResourceId }}' httpMethod: GET patchOperations: - op: replace path: /uri value: arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/{{ ExecuteListVersionsByFunction.resultLambdaVersionArn }}/invocations - name: ExecuteApiGwCreateDeployment action: aws:executeAwsApi inputs: Service: apigateway Api: CreateDeployment restApiId: '{{ ExecuteAwsApi.resultApiId }}' outputs: - ExecuteGetApiResources.resultResourceId - ExecuteListVersionsByFunction.resultLambdaVersionArnEl ejemplo SSM genera ExecuteGetApiResources.resultResourceId y ExecuteListVersionsByFunction.resultLambdaVersionArn. Estos resultados se pueden emplear en pasos posteriores en la definición del flujo de trabajo.
Esta acción sirve para eliminar un documento AWS SSM en la cuenta de AWS según las credenciales pasadas en la entrada de la acción. Consulte la documentación de AWS Systems Manager
Campo de entrada | Opcionalidad | Tipo | Ejemplo |
|---|---|---|---|
awsRoleArn | Opcional | Cadena |
|
awsAccessKeyId | Requerido | Cadena |
|
awsSecretAccessKey | Requerido | Cadena |
|
awsSessionToken | Opcional | Cadena |
|
región | Requerido | Cadena |
|
documentName | Requerido | Cadena |
|
selectores | Opcional | Lista |
|
Campo de salida | Tipo | Ejemplo |
|---|---|---|
documentName | Cadena |
|
éxito | Booleano |
|
mensaje de error | Cadena |
|
Importante
- En la entrada de acción, solo se pueden proporcionar
awsAccessKeyIdyawsSecretAccessKey, pero deben ser credenciales estáticas de un usuario de IAM. - Si se van a emplear las credenciales de sesión, se deben pasar
awsAccessKeyId,awsSecretAccessKeyyawsSessionTokena la entrada de acción. - Los selectores para obtener como resultado el único parámetro especificado.
Un documento SSM simple para enumerar todas las funciones Lambda
schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi action: aws:executeAwsApi isEnd: true inputs: Service: lambda Api: ListFunctions outputs: - Name: resultFunctionName Selector: $..FunctionName Type: StringList outputs: - ExecuteAwsApi.resultFunctionNameLa definición completa del flujo de trabajo con SSM:
name: aws-api
workflowInputs: key: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_ACCESS_KEY_ID }}" access: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SECRET_ACCESS_KEY }}" token: type: String defaultValue: "${{ :secrets:11933347:USERNAME_AWS_SESSION_TOKEN }}" region: type: String defaultValue: us-east-2
steps: - name: createSsmDocument type: action action: aws.systemsManager.writeDocument version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} selectors: - name: documentName expression: '.documentName' - name: documentType expression: '.documentType' - name: documentStatus expression: '.documentStatus' - name: success expression: '.success' documentName: "LambdaListFunctionNames" documentContent: | schemaVersion: '0.3' description: List all Lambda function names. mainSteps: - name: ExecuteAwsApi action: aws:executeAwsApi isEnd: true inputs: Service: lambda Api: ListFunctions outputs: - Name: resultFunctionName Selector: $..FunctionName Type: StringList outputs: - ExecuteAwsApi.resultFunctionName
- name: generateIdempotencyToken type: action action: utils.uuid.generate version: 1
- name: start1 type: action action: aws.systemsManager.startAutomation version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: "${{ .steps.createSsmDocument.outputs.documentName }}" idempotencyToken: ${{ .steps.generateIdempotencyToken.outputs.uuid }}
- name: waitForCompletion type: action action: aws.systemsManager.waitForAutomationStatus version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} automationExecutionId: ${{ .steps.start1.outputs.automationExecutionId }} # Optional, default is Success and Failed automationExecutionStatuses: - "Success" - "Failed" timeout: 60
- name: hasCompleted type: switch switch: - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }} next: displayError - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }} next: displaySuccess next: displayUnexpected
- name: displayUnexpected type: action action: newrelic.instrumentation.log version: 1 inputs: message: "Unexpected status ${{ .steps.waitForCompletion.outputs.automationExecutionStatus | tojson }}" next: cleanupSsmDocument
- name: displaySuccess type: action action: newrelic.instrumentation.log version: 1 inputs: message: "This is all the lambda function names on the region ${{ .workflowInputs.region }}:${{ .steps.waitForCompletion.outputs.automationExecutionOutputs.ExecuteAwsApi.resultFunctionName | join(\",\") }}" next: cleanupSsmDocument
- name: displayError type: action action: newrelic.instrumentation.log version: 1 inputs: message: "Error while executing document ${{ .steps.createSsmDocument.outputs.documentName }}, detail: ${{ .steps.waitForCompletion.outputs.errorMessage }}" next: cleanupSsmDocument
- name: cleanupSsmDocument type: action action: aws.systemsManager.deleteDocument version: 1 inputs: awsAccessKeyId: ${{ .workflowInputs.key }} awsSecretAccessKey: ${{ .workflowInputs.access }} awsSessionToken: ${{ .workflowInputs.token }} region: ${{ .workflowInputs.region }} documentName: ${{ .steps.createSsmDocument.outputs.documentName }}Inicia una automatización empleando un documento de AWS SSM. Consulte la documentación de AWS Systems Manager
Campo de entrada | Opcionalidad | Tipo | Ejemplo |
|---|---|---|---|
awsRoleArn | Opcional | Cadena |
|
awsAccessKeyId | Opcional | Cadena |
|
awsSecretAccessKey | Opcional | Cadena |
|
awsSessionToken | Opcional | Cadena |
|
región | Requerido | Cadena |
|
documentName | Requerido | Cadena |
|
parámetro | Opcional | Mapa |
|
idempotencyToken | Opcional | UUID |
Esto se pasará como token de cliente para la idempotencia para iniciar la automatización de AWS SSM. |
selectores | Opcional | Lista |
|
Campo de salida | Tipo | Ejemplo |
|---|---|---|
automationExecutionId | Cadena |
|
éxito | Booleano |
|
mensaje de error | Cadena |
|
Importante
- En la entrada de acción, si se van a proporcionar
awsAccessKeyIdyawsSecretAccessKey, cerciorar de que sean credenciales estáticas de un usuario de IAM. - Si se van a emplear credenciales de sesión,
awsAccessKeyId,awsSecretAccessKeyyawsSessionTokendeben pasar a la entrada de acción. - Consulte las credenciales de AWS para obtener instrucciones.
- Emplee selectores para obtener únicamente el parámetro especificado como resultado.
Definición de flujo de trabajo | Entradas | Salidas |
|---|---|---|
| | |
Espera a que se complete una automatización empleando un documento de AWS. Consulte la documentación de AWS Systems Manager para obtener más información.
Campo de entrada | Opcionalidad | Tipo | Ejemplo |
|---|---|---|---|
awsRoleArn | Opcional | Cadena |
|
awsAccessKeyId | Opcional | Cadena |
|
awsSecretAccessKey | Opcional | Cadena |
|
awsSessionToken | Opcional | Cadena |
|
región | Requerido | Cadena |
|
automationExecutionId | Requerido | Cadena |
. La automatización
cuya finalización debemos esperar. |
automationExecutionStatuses | Opcional | Lista |
Lista de estados de ejecución de automatización de AutomationExecution que pueden detener la espera. Por defecto: |
se acabó el tiempo | Opcional | En t |
La duración en segundos que podemos esperar para que el estado de automatización sea uno de los esperados Si se agotó el tiempo de espera, la salida contiene |
selectores | Opcional | Lista |
. |
Campo de salida | Tipo | Ejemplo |
|---|---|---|
automationExecutionId | Cadena |
|
automationExecutionStatus | Cadena |
Si la acción es exitosa, se empleará cualquiera de los valores pasados en el campo de entrada De lo contrario, será nulo. |
automationExecutionOutputs | Mapa | El resultado será un mapa de los valores de salida del documento. Cualquier dato que aparezca en el documento se puede recopilar empleando este campo de salida y se puede emplear en los pasos posteriores de la definición de la automatización del flujo de trabajo. |
éxito | Booleano |
|
mensaje de error | Cadena |
|
Importante
- En la entrada de acción, solo se pueden proporcionar
awsAccessKeyIdyawsSecretAccessKey, pero deben ser credenciales estáticas de un usuario de IAM. - Si se van a emplear credenciales de sesión,
awsAccessKeyId,awsSecretAccessKeyyawsSessionTokendeben pasar a la entrada de acción. - Consulte las instrucciones para configurar las credenciales de AWS.
- Emplee selectores para obtener únicamente el parámetro especificado como resultado.
Definición de flujo de trabajo | Entradas | Salidas |
|---|---|---|
| | |