Uso del inventario personalizado - AWS Systems Manager

Uso del inventario personalizado

Puede asignar los metadatos que desee a los nodos mediante la creación de un inventario personalizado de AWS Systems Manager Inventory. Por ejemplo, supongamos que administra un gran número de servidores en bastidores en su centro de datos y que estos servidores se han configurado como nodos administrados de Systems Manager. En la actualidad, guarda información sobre la ubicación de los bastidores de servidores en una hoja de cálculo. Con el inventario personalizado, puede especificar la ubicación de bastidor de cada nodo como metadatos en el nodo. Cuando recopila el inventario mediante Systems Manager, se recopilan los metadatos con otros metadatos de inventario. A continuación, puede transferir todos los metadatos de inventario a un bucket de Amazon S3 central mediante la sincronización de datos de recursos y consultar los datos.

nota

Systems Manager admite un máximo de 20 tipos de inventario personalizados por Cuenta de AWS.

Para asignar el inventario personalizado a un nodo, puede utilizar la operación PutInventory de la API de Systems Manager tal y como se describe en Asignación de metadatos de inventarios personalizados a un nodo administrado. O bien, puede crear un archivo JSON de inventario personalizado y cargarlo en el nodo. En esta sección se describe cómo crear el archivo JSON.

En el siguiente ejemplo, el archivo JSON con inventario personalizado especifica la información de bastidor en relación con un servidor local. Este ejemplo especifica un tipo de datos de inventario personalizado ("TypeName": "Custom:RackInformation"), con varias entradas en Content que describen los datos.

{ "SchemaVersion": "1.0", "TypeName": "Custom:RackInformation", "Content": { "Location": "US-EAST-02.CMH.RACK1", "InstalledTime": "2016-01-01T01:01:01Z", "vendor": "DELL", "Zone" : "BJS12", "TimeZone": "UTC-8" } }

También puede especificar entradas diferentes en la sección Content, tal y como se muestra en el siguiente ejemplo.

{ "SchemaVersion": "1.0", "TypeName": "Custom:PuppetModuleInfo", "Content": [{ "Name": "puppetlabs/aws", "Version": "1.0" }, { "Name": "puppetlabs/dsc", "Version": "2.0" } ] }

El esquema JSON del inventario personalizado requiere las secciones SchemaVersion, TypeName y Content, pero puede definir la información en dichas secciones.

{ "SchemaVersion": "user_defined", "TypeName": "Custom:user_defined", "Content": { "user_defined_attribute1": "user_defined_value1", "user_defined_attribute2": "user_defined_value2", "user_defined_attribute3": "user_defined_value3", "user_defined_attribute4": "user_defined_value4" } }

El valor de encabezado TypeName se limita a 100 caracteres. Además, el valor TypeName debe empezar por la palabra en mayúscula Custom. Por ejemplo, Custom:PuppetModuleInfo. Por lo tanto, los siguientes ejemplos darían lugar a una excepción: CUSTOM:PuppetModuleInfo, custom:PuppetModuleInfo.

La sección Content incluye atributos y datos. Esos elementos no distinguen entre mayúsculas y minúsculas. No obstante, si define un atributo (por ejemplo: “Vendor“: “DELL”), deberá hacer referencia a este atributo de forma coherente en los archivos de inventario personalizado. Si especifica “Vendor”: “DELL” (utilizando una “P” mayúscula en vendor) en un archivo y, a continuación, especifica “vendor”: “DELL” (con una “p” en minúscula en vendor) en otro archivo, el sistema devolverá un error.

nota

Debe guardar el archivo con una extensión .json y el inventario que defina debe incluir únicamente valores de cadena.

Después de crear el archivo, debe guardarlo en el nodo. La tabla siguiente muestra la ubicación en la que deben guardarse los archivos JSON del inventario personalizado en el nodo.

Sistema operativo Ruta

Linux

/var/lib/amazon/ssm/node-id/inventory/custom

macOS

/opt/aws/ssm/data/node-id/inventory/custom

Windows

%SystemDrive%\ProgramData\Amazon\SSM\InstanceData\node-id\inventory\custom

Si desea ver un ejemplo de cómo utilizar el inventario personalizado, consulte Get Disk Utilization of Your Fleet Using EC2 Systems Manager Custom Inventory Types.

Eliminación de un inventario personalizado

Puede utilizar la operación DeleteInventory de la API para eliminar un tipo de inventario personalizado y los datos asociados a él. Para eliminar todos los datos de un tipo de inventario, tiene que llamar al comando delete-inventory mediante la AWS Command Line Interface (AWS CLI). Para eliminar un tipo de inventario personalizado, tiene que llamar al comando delete-inventory con SchemaDeleteOption.

nota

Un tipo de inventario también se denomina un esquema de inventario.

El parámetro SchemaDeleteOption incluye las siguientes opciones:

  • DeleteSchema: esta opción elimina el tipo personalizado especificado y todos los datos asociados con él. Puede volver a crear el esquema más tarde, si lo desea.

  • DisableSchema: si elige esta opción, el sistema desactivará la versión actual, eliminará todos sus datos y omitirá todos los nuevos datos si la versión es anterior o igual a la versión desactivada. Puede volver a habilitar este tipo de inventario si llama a la acción PutInventory para una versión posterior a la versión desactivada.

Para eliminar o desactivar un inventario personalizado mediante la AWS CLI
  1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

    Para obtener más información, consulte Instalación o actualización de la última versión de la AWS CLI.

  2. Ejecute el siguiente comando para utilizar la opción dry-run con el fin de ver qué datos se eliminarán del sistema. Este comando no elimina ningún dato.

    aws ssm delete-inventory --type-name "Custom:custom_type_name" --dry-run

    El sistema devuelve información similar a la siguiente.

    {
       "DeletionSummary":{
          "RemainingCount":3,
          "SummaryItems":[
             {
                "Count":2,
                "RemainingCount":2,
                "Version":"1.0"
             },
             {
                "Count":1,
                "RemainingCount":1,
                "Version":"2.0"
             }
          ],
          "TotalCount":3
       },
       "TypeName":"Custom:custom_type_name"
    }

    Para obtener información acerca del resumen de eliminaciones del inventario, consulte Explicación del resumen de eliminaciones del inventario.

  3. Ejecute el siguiente comando para eliminar todos los datos de un tipo de inventario personalizado.

    aws ssm delete-inventory --type-name "Custom:custom_type_name"
    nota

    El resultado de este comando no muestra el progreso de la eliminación. Por este motivo, TotalCount y Remaining Count siguen siendo iguales, ya que el sistema no ha eliminado nada todavía. Puede utilizar el comando describe-inventory-deletions para mostrar el progreso de la eliminación, tal y como se describe más adelante en este tema.

    El sistema devuelve información similar a la siguiente.

    {
       "DeletionId":"system_generated_deletion_ID",
       "DeletionSummary":{
          "RemainingCount":3,
          "SummaryItems":[
             {
                "Count":2,
                "RemainingCount":2,
                "Version":"1.0"
             },
             {
                "Count":1,
                "RemainingCount":1,
                "Version":"2.0"
             }
          ],
          "TotalCount":3
       },
       "TypeName":"custom_type_name"
    }

    El sistema elimina todos los datos del tipo de inventario personalizado especificado del servicio Systems Manager Inventory.

  4. Ejecute el siguiente comando de la . El comando realiza las siguientes acciones para la versión actual del tipo de inventario: desactiva la versión actual, elimina todos los datos correspondientes a ella y omite todos los datos nuevos si la versión es inferior o igual a la versión desactivada.

    aws ssm delete-inventory --type-name "Custom:custom_type_name" --schema-delete-option "DisableSchema"

    El sistema devuelve información similar a la siguiente.

    {
       "DeletionId":"system_generated_deletion_ID",
       "DeletionSummary":{
          "RemainingCount":3,
          "SummaryItems":[
             {
                "Count":2,
                "RemainingCount":2,
                "Version":"1.0"
             },
             {
                "Count":1,
                "RemainingCount":1,
                "Version":"2.0"
             }
          ],
          "TotalCount":3
       },
       "TypeName":"Custom:custom_type_name"
    }

    Puede ver un tipo de inventario desactivado mediante el siguiente comando.

    aws ssm get-inventory-schema --type-name Custom:custom_type_name
  5. Ejecute el siguiente comando para eliminar un tipo de inventario.

    aws ssm delete-inventory --type-name "Custom:custom_type_name" --schema-delete-option "DeleteSchema"

    El sistema elimina el esquema y todos los datos de inventario del tipo personalizado especificado.

    El sistema devuelve información similar a la siguiente.

    {
       "DeletionId":"system_generated_deletion_ID",
       "DeletionSummary":{
          "RemainingCount":3,
          "SummaryItems":[
             {
                "Count":2,
                "RemainingCount":2,
                "Version":"1.0"
             },
             {
                "Count":1,
                "RemainingCount":1,
                "Version":"2.0"
             }
          ],
          "TotalCount":3
       },
       "TypeName":"Custom:custom_type_name"
    }

Visualización del estado de eliminación

Puede verificar el estado de una operación de eliminación mediante el comando describe-inventory-deletions de la AWS CLI. Puede especificar un ID de eliminación para ver el estado de una operación de eliminación específica. Asimismo, puede omitir el ID de eliminación para ver una lista de todas las eliminaciones ejecutadas en los últimos 30 días.

  1. Ejecute el siguiente comando para ver el estado de una operación de eliminación. El sistema devolvió el ID de eliminación en el resumen de eliminaciones del inventario.

    aws ssm describe-inventory-deletions --deletion-id system_generated_deletion_ID

    El sistema devuelve el estado más reciente. Puede que la operación de eliminación no haya terminado todavía. El sistema devuelve información similar a la siguiente.

    {"InventoryDeletions": 
      [
        {"DeletionId": "system_generated_deletion_ID", 
         "DeletionStartTime": 1521744844, 
         "DeletionSummary": 
          {"RemainingCount": 1, 
           "SummaryItems": 
            [
              {"Count": 1, 
               "RemainingCount": 1, 
               "Version": "1.0"}
            ], 
           "TotalCount": 1}, 
         "LastStatus": "InProgress", 
         "LastStatusMessage": "The Delete is in progress", 
         "LastStatusUpdateTime": 1521744844, 
         "TypeName": "Custom:custom_type_name"}
      ]
    }

    Si la operación de eliminación se realiza correctamente, LastStatusMessage indica: Deletion is successful.

    {"InventoryDeletions": 
      [
        {"DeletionId": "system_generated_deletion_ID", 
         "DeletionStartTime": 1521744844, 
         "DeletionSummary": 
          {"RemainingCount": 0, 
           "SummaryItems": 
            [
              {"Count": 1, 
               "RemainingCount": 0, 
               "Version": "1.0"}
            ], 
           "TotalCount": 1}, 
         "LastStatus": "Complete", 
         "LastStatusMessage": "Deletion is successful", 
         "LastStatusUpdateTime": 1521745253, 
         "TypeName": "Custom:custom_type_name"}
      ]
    }
  2. Ejecute el siguiente comando para ver una lista de todas las eliminaciones realizadas en los últimos 30 días.

    aws ssm describe-inventory-deletions --max-results a number
    {"InventoryDeletions": 
      [
        {"DeletionId": "system_generated_deletion_ID", 
         "DeletionStartTime": 1521682552, 
         "DeletionSummary": 
          {"RemainingCount": 0, 
           "SummaryItems": 
            [
              {"Count": 1, 
               "RemainingCount": 0, 
               "Version": "1.0"}
            ], 
           "TotalCount": 1}, 
         "LastStatus": "Complete", 
         "LastStatusMessage": "Deletion is successful", 
         "LastStatusUpdateTime": 1521682852, 
         "TypeName": "Custom:custom_type_name"}, 
        {"DeletionId": "system_generated_deletion_ID", 
         "DeletionStartTime": 1521744844, 
         "DeletionSummary": 
          {"RemainingCount": 0, 
           "SummaryItems": 
            [
              {"Count": 1, 
               "RemainingCount": 0, 
               "Version": "1.0"}
            ], 
           "TotalCount": 1}, 
         "LastStatus": "Complete", 
         "LastStatusMessage": "Deletion is successful", 
         "LastStatusUpdateTime": 1521745253, 
         "TypeName": "Custom:custom_type_name"}, 
        {"DeletionId": "system_generated_deletion_ID", 
         "DeletionStartTime": 1521680145, 
         "DeletionSummary": 
          {"RemainingCount": 0, 
           "SummaryItems": 
            [
              {"Count": 1, 
               "RemainingCount": 0, 
               "Version": "1.0"}
            ], 
           "TotalCount": 1}, 
         "LastStatus": "Complete", 
         "LastStatusMessage": "Deletion is successful", 
         "LastStatusUpdateTime": 1521680471, 
         "TypeName": "Custom:custom_type_name"}
      ], 
     "NextToken": "next-token"

Explicación del resumen de eliminaciones del inventario

Para ayudarle a comprender el contenido del resumen de eliminaciones del inventario, considere el siguiente ejemplo. Un usuario asignó el inventario Custom:RackSpace a tres nodos. Los artículos de inventario 1 y 2 utilizan la versión 1.0 del tipo personalizado ("SchemaVersion":"1.0"). El artículo de inventario 3 utiliza la versión 2.0 del tipo personalizado ("SchemaVersion":"2.0").

Inventario personalizado RackSpace 1

{ "CaptureTime":"2018-02-19T10:48:55Z", "TypeName":"CustomType:RackSpace", "InstanceId":"i-1234567890", "SchemaVersion":"1.0" "Content":[ { content of custom type omitted } ] }

Inventario personalizado RackSpace 2

{ "CaptureTime":"2018-02-19T10:48:55Z", "TypeName":"CustomType:RackSpace", "InstanceId":"i-1234567891", "SchemaVersion":"1.0" "Content":[ { content of custom type omitted } ] }

Inventario personalizado RackSpace 3

{ "CaptureTime":"2018-02-19T10:48:55Z", "TypeName":"CustomType:RackSpace", "InstanceId":"i-1234567892", "SchemaVersion":"2.0" "Content":[ { content of custom type omitted } ] }

El usuario ejecuta el siguiente comando para obtener una vista previa de los datos que se eliminarán.

aws ssm delete-inventory --type-name "Custom:RackSpace" --dry-run

El sistema devuelve información similar a la siguiente.

{
   "DeletionId":"1111-2222-333-444-66666",
   "DeletionSummary":{
      "RemainingCount":3,           
      "TotalCount":3,             
                TotalCount and RemainingCount are the number of items that would be deleted if this was not a dry run. These numbers are the same because the system didn't delete anything.
      "SummaryItems":[
         {
            "Count":2,             The system found two items that use SchemaVersion 1.0. Neither item was deleted.           
            "RemainingCount":2,
            "Version":"1.0"
         },
         {
            "Count":1,             The system found one item that uses SchemaVersion 1.0. This item was not deleted.
            "RemainingCount":1,
            "Version":"2.0"
         }
      ],

   },
   "TypeName":"Custom:RackSpace"
}

El usuario ejecuta el siguiente comando para eliminar el inventario Custom:RackSpace.

nota

El resultado de este comando no muestra el progreso de la eliminación. Por este motivo, TotalCount y RemainingCount siguen siendo iguales, ya que el sistema no ha eliminado nada todavía. Puede utilizar el comando describe-inventory-deletions para mostrar el progreso de la eliminación.

aws ssm delete-inventory --type-name "Custom:RackSpace"

El sistema devuelve información similar a la siguiente.

{
   "DeletionId":"1111-2222-333-444-7777777",
   "DeletionSummary":{
      "RemainingCount":3,           There are three items to delete
      "SummaryItems":[
         {
            "Count":2,              The system found two items that use SchemaVersion 1.0.
            "RemainingCount":2,     
            "Version":"1.0"
         },
         {
            "Count":1,              The system found one item that uses SchemaVersion 2.0.
            "RemainingCount":1,     
            "Version":"2.0"
         }
      ],
      "TotalCount":3                
   },
   "TypeName":"RackSpace"
}

Visualización de acciones de eliminación de inventario en EventBridge

Puede configurar Amazon EventBridge para que cree un evento cada vez que un usuario elimine un inventario personalizado. EventBridge ofrece tres tipos de eventos para las operaciones de eliminación de inventarios personalizados:

  • Acción de eliminación de una instancia: indica si el inventario personalizado de un nodo administrado específico se ha eliminado correctamente o no.

  • Resumen de la acción de eliminación: muestra un resumen de la acción de eliminación.

  • Advertencia de tipo de inventario personalizado desactivado: se genera un evento de advertencia si un usuario llama a la operación PutInventory de la API para una versión de tipo de inventario personalizado que se desactivó anteriormente.

A continuación, se muestran ejemplos de cada evento.

Acción de eliminación de una instancia

{
   "version":"0",
   "id":"998c9cde-56c0-b38b-707f-0411b3ff9d11",
   "detail-type":"Inventory Resource State Change",
   "source":"aws.ssm",
   "account":"478678815555",
   "time":"2018-05-24T22:24:34Z",
   "region":"us-east-1",
   "resources":[
      "arn:aws:ssm:us-east-1:478678815555:managed-instance/i-0a5feb270fc3f0b97"
   ],
   "detail":{
      "action-status":"succeeded",
      "action":"delete",
      "resource-type":"managed-instance",
      "resource-id":"i-0a5feb270fc3f0b97",
      "action-reason":"",
      "type-name":"Custom:MyInfo"
   }
}

Resumen de la acción de eliminación

{
   "version":"0",
   "id":"83898300-f576-5181-7a67-fb3e45e4fad4",
   "detail-type":"Inventory Resource State Change",
   "source":"aws.ssm",
   "account":"478678815555",
   "time":"2018-05-24T22:28:25Z",
   "region":"us-east-1",
   "resources":[

   ],
   "detail":{
      "action-status":"succeeded",
      "action":"delete-summary",
      "resource-type":"managed-instance",
      "resource-id":"",
      "action-reason":"The delete for type name Custom:MyInfo was completed. The deletion summary is: {\"totalCount\":2,\"remainingCount\":0,\"summaryItems\":[{\"version\":\"1.0\",\"count\":2,\"remainingCount\":0}]}",
      "type-name":"Custom:MyInfo"
   }
}

Advertencia de tipo de inventario personalizado desactivado

{
   "version":"0",
   "id":"49c1855c-9c57-b5d7-8518-b64aeeef5e4a",
   "detail-type":"Inventory Resource State Change",
   "source":"aws.ssm",
   "account":"478678815555",
   "time":"2018-05-24T22:46:58Z",
   "region":"us-east-1",
   "resources":[
      "arn:aws:ssm:us-east-1:478678815555:managed-instance/i-0ee2d86a2cfc371f6"
   ],
   "detail":{
      "action-status":"failed",
      "action":"put",
      "resource-type":"managed-instance",
      "resource-id":"i-0ee2d86a2cfc371f6",
      "action-reason":"The inventory item with type name Custom:MyInfo was sent with a disabled schema version 1.0. You must send a version greater than 1.0",
      "type-name":"Custom:MyInfo"
   }
}

Utilice el siguiente procedimiento para crear una regla de EventBridge para las operaciones de eliminación de inventarios personalizados. En este procedimiento se muestra cómo crear una regla que envíe notificaciones de las operaciones de eliminación de inventarios personalizados a un tema de Amazon SNS. Antes de comenzar, compruebe que tiene un tema de Amazon SNS o cree uno nuevo. Para obtener más información, consulte Introducción en la Guía para desarrolladores de Amazon Simple Notification Service.

Para configurar EventBridge para la eliminación de operaciones de inventario
  1. Abra la consola de Amazon EventBridge en https://console.aws.amazon.com/events/.

  2. En el panel de navegación, seleccione Reglas.

  3. Elija Crear regla.

  4. Escriba un nombre y una descripción para la regla.

    Una regla no puede tener el mismo nombre que otra regla de la misma región y del mismo bus de eventos.

  5. En Bus de eventos, seleccione el bus de eventos que desea asociar a esta regla. Si desea que esta regla responda a eventos coincidentes procedentes de su propia Cuenta de AWS, seleccione default (predeterminado). Cuando un Servicio de AWS en su cuenta emite un evento, siempre va al bus de eventos predeterminado de su cuenta.

  6. En Tipo de regla, elija Regla con un patrón de evento.

  7. Elija Siguiente.

  8. En Origen del evento, elija Eventos de AWS o eventos de socios de EventBridge.

  9. En la sección Event pattern (Patrón de eventos), elija Event pattern form (Formulario de patrón de eventos).

  10. Para Event source (origen de eventos), elija AWSservices (servicios).

  11. En AWS service (Servicio de ), elija Systems Manager.

  12. Para Event type (Tipo de evento), elija Inventory (Inventario).

  13. En Specific detail type(s) (Tipos de detalles específicos), elija Inventory Resource State Change (Cambio de estado de recursos de inventario).

  14. Elija Siguiente.

  15. En Target types (Tipos de destino), elija AWS service.

  16. En Select a target (Seleccione un destino), elija SNS topic (Tema de SNS) y, a continuación, elija el tema en Topic (Tema).

  17. En la sección Additional settings (Ajustes adicionales), en Configure target input (Configurar entrada de destino), verifique que Matched event (Evento coincidente) está seleccionado.

  18. Elija Siguiente.

  19. (Opcional) Introduzca una o varias etiquetas para la regla. Para obtener más información, consulte Etiquetado de los recursos de Amazon EventBridge en la Guía del usuario de Amazon EventBridge.

  20. Elija Siguiente.

  21. Revise los detalles de la regla y seleccione Crear regla.