Programación de automatizaciones con asociaciones de State Manager - AWS Systems Manager

Programación de automatizaciones con asociaciones de State Manager

Puede iniciar una automatización al crear una asociación de State Manager a un manual de procedimientos. State Manager es una capacidad de AWS Systems Manager. Mediante la creación de una asociación de State Manager a un manual de procedimientos, puede indicar diferentes tipos de recursos de AWS como destino. Por ejemplo, puede crear asociaciones que implementen un estado deseado en un recurso de AWS, incluidas las siguientes:

  • adjuntar un rol de Systems Manager a las instancias de Amazon Elastic Compute Cloud (Amazon EC2) para transformarlas en instancias administradas

  • aplicar las reglas de entrada y salida que desee para un grupo de seguridad

  • crear o eliminar copias de seguridad de Amazon DynamoDB

  • crear o eliminar instantáneas de Amazon Elastic Block Store (Amazon EBS)

  • desactivar los permisos de lectura y escritura en los buckets de Amazon Simple Storage Service (Amazon S3)

  • activar, reiniciar o detener las instancias administradas y las instancias de Amazon Relational Database Service (Amazon RDS)

  • aplicar revisiones a las AMIs de Linux, macOS y Windows

Utilice los siguientes procedimientos para crear una asociación de State Manager que ejecute una automatización a través de la consola de AWS Systems Manager y la AWS Command Line Interface (AWS CLI). Para obtener información general sobre las asociaciones e información sobre la creación de una asociación que utilice un documento de Command o un documento de Policy de SSM, consulte Creación de asociaciones.

Antes de empezar

Tenga en cuenta los siguientes detalles importantes antes de ejecutar una automatización con State Manager:

  • Antes de crear una asociación que use un manual de procedimientos, verifique que ha configurado los permisos para Automation, una capacidad de AWS Systems Manager. Para obtener más información, consulte Configuración de Automation.

  • Las asociaciones de State Manager que usan manuales de procedimientos contribuyen al número máximo de automatizaciones que se ejecutan a la vez en su Cuenta de AWS. Puede tener como máximo 100 automatizaciones en ejecución simultánea. Para obtener más información, consulte Service Quotas de Systems Manager en Referencia general de Amazon Web Services.

  • Al ejecutar una automatización, State Manager no registra las operaciones de la API iniciadas por la automatización en AWS CloudTrail.

  • Systems Manager crea de forma automática un rol vinculado a servicios de modo que State Manager tenga permiso para llamar las operaciones de la API de Automatización de Systems Manager. Si lo desea, puede crear el rol vinculado al servicio usted mismo. Para ello, ejecute el siguiente comando en la AWS CLI o AWS Tools for PowerShell.

    Linux & macOS
    aws iam create-service-linked-role \ --aws-service-name ssm.amazonaws.com
    Windows
    aws iam create-service-linked-role ^ --aws-service-name ssm.amazonaws.com
    PowerShell
    New-IAMServiceLinkedRole ` -AWSServiceName ssm.amazonaws.com

    Para obtener más información acerca de los roles vinculados a servicios, consulte Uso de roles vinculados a servicios de Systems Manager.

Creación de una asociación que ejecuta una automatización (consola)

El siguiente procedimiento describe cómo utilizar la consola de Systems Manager para crear una asociación de State Manager que ejecuta una automatización.

Para crear una asociación de State Manager que ejecute una automatización
  1. Abra la consola de AWS Systems Manager en https://console.aws.amazon.com/systems-manager/.

  2. En el panel de navegación, elija State Manager y, a continuación, elija Create association (Crear asociación).

  3. Escriba un nombre en el campo Nombre. Esto es opcional, pero recomendable.

  4. En la lista Document (Documento), elija un manual de procedimientos. Utilice la barra de búsqueda para filtrar por manuales de procedimientos Document type : Equal : Automation (Tipo de documento : Igual : Automation). Para ver más manuales de procedimientos, utilice los números que se encuentran a la derecha de la barra de búsqueda.

    nota

    Puede ver información acerca de un manual de procedimientos al seleccionar su nombre.

  5. Seleccione Simple execution (Ejecución sencilla) para ejecutar la instancia de Automation en uno o varios destinos mediante la especificación del ID de recurso de dichos destinos. Seleccione Rate control (Control de frecuencia) para ejecutar la instancia de Automation en una flota de recursos de AWS mediante la especificación de una opción de indicación de destino, como etiquetas o AWS Resource Groups. También puede controlar la operación de la automatización en sus recursos mediante la especificación de la simultaneidad y los umbrales de error.

    Si ha seleccionado Rate control (Control de frecuencia), se muestra la sección Targets (Destinos).

  6. En la sección Targets (Destinos), seleccione un método para los recursos de indicación de destino.

    1. (Obligatorio) En la lista Parameter (Parámetro), seleccione un parámetro. Los elementos de la lista Parameter (Parámetro) se determinan a partir de los parámetros en el manual de procedimientos que seleccionó al inicio de este procedimiento. Al elegir un parámetro, define el tipo de recurso en el que se ejecuta la automatización.

    2. (Obligatorio) En la lista Targets (Destinos), seleccione un método para indicar los recursos de destino.

      • Resource Group (Grupo de recursos): seleccione el nombre del grupo en la lista Resource Group (Grupo de recursos). Para obtener más información acerca de la indicación de AWS Resource Groups como destino en los manuales de procedimientos, consulte Indicar AWS Resource Groups de destino.

      • Tags (Etiquetas): introduzca la clave de etiqueta y, si lo desea, el valor de etiqueta en los campos proporcionados. Elija Añadir. Para obtener más información acerca de cómo indicar las etiquetas como destino en los manuales de procedimientos, consulte Especificación de una etiqueta como destino.

      • Parameter Values (Valores de parámetros): introduzca valores en la sección Input parameters (Parámetros de entrada) . Si especifica varios valores, Systems Manager ejecuta una automatización secundaria en cada valor especificado.

        Por ejemplo, supongamos que su manual de procedimientos incluye un parámetro InstanceID. Si indica los valores del parámetro InstanceID como destino a la hora de ejecutar la automatización, Systems Manager ejecuta una automatización secundaria para el valor de ID de cada instancia especificada. La automatización principal se habrá completado cuando la automatización termine de ejecutar cada instancia especificada o cuando se produzca un error en la automatización. Puede indicar un máximo de 50 valores de parámetros de destino. Para obtener más información acerca de cómo indicar los valores de parámetros como destino en los manuales de procedimientos, consulte Indicar valores de parámetros de destino.

  7. En la sección Parámetros de entrada, especifique los parámetros de entrada necesarios.

    Si decidió indicar recursos como destino a través de etiquetas o un grupo de recursos, es posible que no se vea obligado a elegir algunas de las opciones de la sección Input parameters (Parámetros de entrada). Por ejemplo, si eligió el manual de procedimientos AWS-RestartEC2Instance y decidió indicar las instancias como destino a través de etiquetas, entonces no necesita especificar ni elegir los ID de instancias en la sección Input parameters (Parámetros de entrada). La automatización localiza las instancias que desea reiniciar a través de las etiquetas que ha especificado.

    importante

    Debe especificar un ARN de rol en el campo AutomationAssumeRole. State Manager utiliza el rol de asunción para llamar los Servicios de AWS especificados en el manual de procedimientos y ejecutar las asociaciones de Automation en su nombre.

  8. En la sección Specify schedule (Especificar programación), seleccione On Schedule (De forma programada) si desea ejecutar la asociación periódicamente. Si selecciona esta opción, utilice las opciones proporcionadas para crear la programación mediante expresiones cron o rate. Para obtener más información acerca de las expresiones cron y rate para State Manager, consulte Expresiones cron y rate para asociaciones.

    nota

    Las expresiones rate son el mecanismo de programación preferido para las asociaciones de State Manager que utilizan manuales de procedimientos. Las expresiones rate ofrecen una mayor flexibilidad para la ejecución de asociaciones en caso de que se alcance el número máximo de automatizaciones en ejecución simultánea. Con una programación de frecuencia, Systems Manager puede volver a intentar completar la automatización poco después de recibir una notificación que indique que las automatizaciones simultáneas han alcanzado el número máximo y se han limitado.

    Seleccione No schedule (Sin programación) si desea ejecutar la asociación una sola vez.

  9. (Opcional) En la sección Rate Control (Control de frecuencia), elija las opciones Concurrency (Simultaneidad) y Error threshold (Umbral de error) para controlar la implementación de la automatización en todos los recursos de AWS.

    1. En la sección Simultaneidad, elija una opción:

      • Elija targets (destinos) para ingresar un número absoluto de destinos que pueden ejecutar la automatización simultáneamente.

      • Elija percentage (porcentaje) para ingresar un porcentaje del conjunto de destinos que puede ejecutar la automatización simultáneamente.

    2. En la sección Umbral de error, elija una opción:

      • Elija errors (errores) para ingresar un número absoluto de errores permitidos antes de que Automation deje de enviar la automatización a otros recursos.

      • Elija percentage (porcentaje) para ingresar un porcentaje de errores permitidos antes de que Automation deje de enviar la automatización a otros recursos.

    Para obtener más información sobre el uso de controles de frecuencia y destinos con Automation, consulte Ejecución de operaciones automatizadas a escala.

  10. Elija Crear asociación.

    importante

    Al crear una asociación, esta se ejecuta de inmediato en los destinos especificados. A continuación, la asociación se ejecuta en función de la expresión cron o rate que haya seleccionado. Si seleccionó No schedule (Sin programación), la asociación no volverá a ejecutarse.

Creación de una asociación que ejecuta una automatización (línea de comandos)

El siguiente procedimiento describe cómo utilizar la AWS CLI (en Linux o Windows) o las AWS Tools for PowerShell para crear una asociación de State Manager que ejecute una automatización.

Antes de empezar

Antes de completar el siguiente procedimiento, asegúrese de haber creado un rol de servicio de IAM que contenga los permisos necesarios para ejecutar el runbook y haya configurado una relación de confianza para Automation, una capacidad de AWS Systems Manager. Para obtener más información, consulte Tarea 1: crear un rol de servicio para Automation.

Para crear una asociación que ejecute una automatización
  1. Si aún no lo ha hecho, instale y configure la AWS CLI o las AWS Tools for PowerShell.

    Para obtener información, consulte Instalación o actualización de la última versión de la AWS CLI e Instalación de AWS Tools for PowerShell.

  2. Ejecute el siguiente comando para ver una lista de documentos.

    Linux & macOS
    aws ssm list-documents
    Windows
    aws ssm list-documents
    PowerShell
    Get-SSMDocumentList

    Anote el nombre del manual de procedimientos que desea utilizar para la asociación.

  3. Ejecute el siguiente comando para ver detalles acerca del manual de procedimientos. En el siguiente comando, reemplace runbook name con su propia información.

    Linux & macOS
    aws ssm describe-document \ --name runbook name

    Especifique el nombre de parámetro (por ejemplo, InstanceId) que desea utilizar para la opción --automation-target-parameter-name. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

    Windows
    aws ssm describe-document ^ --name runbook name

    Especifique el nombre de parámetro (por ejemplo, InstanceId) que desea utilizar para la opción --automation-target-parameter-name. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

    PowerShell
    Get-SSMDocumentDescription ` -Name runbook name

    Especifique el nombre de parámetro (por ejemplo, InstanceId) que desea utilizar para la opción AutomationTargetParameterName. Este parámetro determina el tipo de recurso en el que se ejecuta la automatización.

  4. Cree un comando que ejecute una automatización mediante una asociación de State Manager. Reemplace cada example resource placeholder con su propia información.

    Indicar destino mediante etiquetas

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=tag:key name,Values=value \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression"
    nota

    Si crea una asociación mediante la AWS CLI, utilice el parámetro --targets en las instancias de destino para la asociación. No utilice el parámetro --instance-id. El parámetro --instance-id es un parámetro heredado.

    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=tag:key name,Values=value ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression"
    nota

    Si crea una asociación mediante la AWS CLI, utilice el parámetro --targets en las instancias de destino para la asociación. No utilice el parámetro --instance-id. El parámetro --instance-id es un parámetro heredado.

    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "tag:key name" $Targets.Values = "value" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole" } ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression"
    nota

    Si crea una asociación mediante la AWS Tools for PowerShell, utilice el parámetro Target en las instancias de destino para la asociación. No utilice el parámetro InstanceId. El parámetro InstanceId es un parámetro heredado.

    Indicar destino mediante valores de parámetros

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=ParameterValues,Values=value,value 2,value 3 \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression"
    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=ParameterValues,Values=value,value 2,value 3 ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ParameterValues" $Targets.Values = "value","value 2","value 3" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression"

    Indicar destino mediante AWS Resource Groups

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=ResourceGroup,Values=resource group name \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression"
    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=ResourceGroup,Values=resource group name ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression"
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "resource group name" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression"

    Indicar varias cuentas y regiones como destino

    Linux & macOS
    aws ssm create-association \ --association-name association name \ --targets Key=ResourceGroup,Values=resource group name \ --name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole \ --automation-target-parameter-name target parameter \ --schedule "cron or rate expression" \ --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
    Windows
    aws ssm create-association ^ --association-name association name ^ --targets Key=ResourceGroup,Values=resource group name ^ --name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/RunbookAssumeRole ^ --automation-target-parameter-name target parameter ^ --schedule "cron or rate expression" ^ --target-locations Accounts=111122223333,444455556666,444455556666,Regions=region,region
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "resource group name" New-SSMAssociation ` -AssociationName "association name" ` -Target $Targets ` -Name "runbook name" ` -Parameters @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/RunbookAssumeRole"} ` -AutomationTargetParameterName "target parameter" ` -ScheduleExpression "cron or rate expression" ` -TargetLocations @{ "Accounts"=["111122223333,444455556666,444455556666"], "Regions"=["region,region"]

    El comando devuelve detalles de la nueva asociación similares a los siguientes.

    Linux & macOS
    {
    "AssociationDescription": {
        "ScheduleExpression": "cron(0 7 ? * MON *)",
        "Name": "AWS-StartEC2Instance",
        "Parameters": {
            "AutomationAssumeRole": [
                "arn:aws:iam::123456789012:role/RunbookAssumeRole"
            ]
        },
        "Overview": {
            "Status": "Pending",
            "DetailedStatus": "Creating"
        },
        "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
        "DocumentVersion": "$DEFAULT",
        "AutomationTargetParameterName": "InstanceId",
        "LastUpdateAssociationDate": 1564686638.498,
        "Date": 1564686638.498,
        "AssociationVersion": "1",
        "AssociationName": "CLI",
        "Targets": [
            {
                "Values": [
                    "DEV"
                ],
                "Key": "tag:ENV"
            }
        ]
    }
    }
    
    Windows
    {
    "AssociationDescription": {
        "ScheduleExpression": "cron(0 7 ? * MON *)",
        "Name": "AWS-StartEC2Instance",
        "Parameters": {
            "AutomationAssumeRole": [
                "arn:aws:iam::123456789012:role/RunbookAssumeRole"
            ]
        },
        "Overview": {
            "Status": "Pending",
            "DetailedStatus": "Creating"
        },
        "AssociationId": "1450b4b7-bea2-4e4b-b340-01234EXAMPLE",
        "DocumentVersion": "$DEFAULT",
        "AutomationTargetParameterName": "InstanceId",
        "LastUpdateAssociationDate": 1564686638.498,
        "Date": 1564686638.498,
        "AssociationVersion": "1",
        "AssociationName": "CLI",
        "Targets": [
            {
                "Values": [
                    "DEV"
                ],
                "Key": "tag:ENV"
            }
        ]
    }
    }
    
    PowerShell
    Name                  : AWS-StartEC2Instance
    InstanceId            : 
    Date                  : 8/1/2019 7:31:38 PM
    Status.Name           : 
    Status.Date           : 
    Status.Message        : 
    Status.AdditionalInfo : 
nota

Si utiliza las etiquetas para crear una asociación en una o varias instancias de destino, elimine las etiquetas de una instancia (dicha instancia ya no ejecutará la asociación). La instancia se desvincula del documento de State Manager.

Automatizaciones de solución de problemas ejecutadas por asociaciones de State Manager

La Automatización de Systems Manager implementa un límite de 100 automatizaciones simultáneas y 1000 automatizaciones en cola por cuenta, por región. Si una asociación de State Manager que usa un manual de procedimientos tiene el estado Failed (Error) y el estado detallado AutomationExecutionLimitExceeded, es posible que su automatización haya alcanzado el límite. Como resultado, Systems Manager limita las automatizaciones. Para resolver este problema, siga estos pasos:

  • Utilice una expresión rate o cron diferente para la asociación. Por ejemplo, si la asociación está programada para ejecutarse cada 30 minutos, cambie la expresión para que se ejecute cada hora o cada dos horas.

  • Elimine las automatizaciones existentes con el estado Pending (Pendiente). Si elimina estas automatizaciones, se vaciará la cola actual.