使用自訂清查 - AWS Systems Manager

使用自訂清查

只要建立自訂庫存,您就能將任意中繼資料指派給執行個體。舉例來說,假設您負責管理資料中心內的大量伺服器,而這些伺服器皆已設定為 Systems Manager 受管執行個體。目前,您都是將伺服器機架位置的相關資訊存放在試算表中。透過自訂庫存,即可在執行個體上將每個執行個體的機架位置指定為中繼資料。當您使用 Systems Manager 收集庫存時,系統將一併收集中繼資料和其他庫存中繼資料。接著,您可以利用資源資料同步將所有庫存中繼資料傳輸至中央 Amazon S3 儲存貯體,並查詢該資料。

注意

Systems Manager 支援每個 AWS 帳戶有最多 20 個自訂庫存類型。

若要指派自訂庫存給執行個體,則可運用 Systems Manager PutInventory API 動作,如演練: 指派自訂清查中繼資料給執行個體中所述。或者,您也能選擇建立自訂庫存 JSON 檔案,並將其上傳至執行個體。本節將說明如何建立 JSON 檔案。

以下範例 JSON 檔案與自訂庫存會指定與現場部署伺服器相關的機架資訊。此範例會指定一種的自訂庫存資料 ("TypeName": "Custom:RackInformation"),並在 Content 下提供多個描述資料的項目。

{ "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" } }

您也可以在 Content 區段中指定不同項目,如下範例所示。

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

自訂庫存的 JSON 結構描述需要 SchemaVersion、TypeName 和 Content 區段,而您可以自行定義這些區段的資訊。

{ "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" } }

TypeName 不得超過 100 個字元。而且,TypeName 區段的開頭必須為 Custom。例如:Custom:PuppetModuleInfo。自定義和 Data 則必須以大寫字母開頭。以下示例將導致例外情況: "自定義:機架信息","自定義:機架信息"。

內容部分包括屬性和 data。這些項目不區分大小寫。然而,若您有定義屬性 (如 "Vendor": "DELL"),自訂庫存檔案便必須持續參考此屬性。如果您指定“供應商”: “DELL”(在供應商中使用大寫“V”)在一個文件中,然後指定“供應商”: “DELL”(在廠商中使用小寫“v”)在另一個文件中,系統將返回錯誤。

注意

您必須以 .json 副檔名儲存檔案,且您定義的清查必須只包含字串值。

建立檔案之後,請務必將其儲存在執行個體上。下表顯示自訂庫存 JSON 檔案在執行個體上的存放位置:

作業系統 Path

Windows

%SystemDrive%\ProgramData\Amazon\SSM\InstanceData\<instance-id>\inventory\custom

Linux

/var/lib/amazon/ssm/<instance-id>/inventory/custom

如需使用自訂庫存的範例,請參閱部落格文章 Get Disk Utilization of Your Fleet Using EC2 Systems Manager Custom Inventory Types

刪除自訂清查

透過 DeleteInventory API 動作,即可刪除自訂庫存類型,以及與該類型相關聯的資料。您可以使用 AWS CLI 來呼叫 delete-inventory 命令,進而刪除庫存類型的所有資料。此外,您也能利用 SchemaDeleteOption 來呼叫 delete-inventory 命令,藉此刪除自訂庫存類型。

注意

庫存類型也稱為庫存結構描述。

SchemaDeleteOption 參數包含下列選項:

  • 刪除方案: 此選項將刪除指定的自定義類型和所有與其關聯的數據。您稍後可以視需求重新建立該結構描述。

  • 禁用方案: 如果選擇此選項,系統將禁用當前版本,刪除所有的數據,如果版本小於或等於禁用的版本,則忽略所有新數據。在版本比遭停用版本更新的情況下,您能夠呼叫 PutInventory 動作,重新啟用這個庫存類型。

使用 AWS CLI 刪除或停用自訂庫存

  1. 如果您尚未安裝並設定 AWS CLI,請進行相應的作業。

    如需資訊,請參閱 安裝或升級 AWS 命令列工具

  2. 執行下列命令,即可利用 dry-run 選項來查看系統要刪除的資料。此命令不會刪除任何資料。

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

    系統會傳回如下資訊。

    {
       "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"
    }

    如需了解如何刪除庫存摘要的相關資訊,請參閱了解刪除清查摘要

  3. 執行下列命令,藉此刪除自訂庫存類型的所有資料。

    aws ssm delete-inventory --type-name "Custom:custom_type_name"
    注意

    此命令輸出並不會顯示刪除進度。因此,TotalCount 與 Remaining Count 的結果都是相同的,因為系統尚未刪除任何項目。您能使用 describe-inventory-deletions 命令來顯示刪除進度,本主題稍後會予以說明。

    系統會傳回如下資訊。

    {
       "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"
    }

    系統將從 Systems Manager 庫存服務刪除指定自訂庫存類型的所有資料。

  4. 執行下列命令。該命令會針對目前的庫存類型版本執行以下動作:停用目前版本,然後刪除所有相關資料。當版本低於或等於遭停用版本時,系統會忽略所有新資料。

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

    系統會傳回如下資訊。

    {
       "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"
    }

    若要檢視遭停用的庫存類型,則可使用下列命令。

    aws ssm get-inventory-schema --type-name Custom:custom_type_name
  5. 執行下列命令,以便刪除庫存類型。

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

    系統會刪除指定自訂類型的結構描述及所有庫存資料。

    系統會傳回如下資訊。

    {
       "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"
    }

檢視刪除狀態

您能夠運用 describe-inventory-deletions AWS CLI 命令來檢查刪除操作的狀態。若要檢視特定刪除操作的狀態,請指定刪除 ID。或者,您能夠省略刪除 ID,以檢視過去 30 天內執行的所有刪除操作清單。

  1. 執行下列命令,藉此檢視刪除操作狀態。系統將在 delete-inventory 摘要中傳回刪除 ID。

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

    系統會傳回最新狀態。刪除操作可能尚未完成。系統會傳回如下資訊。

    {"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"}
      ]
    }

    如果刪除操作成功, LastStatusMessage 陳述: 刪除成功。

    {"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. 執行下列命令,即可檢視過去 30 天內執行的所有刪除操作清單。

    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"

了解刪除清查摘要

為了協助您更充分了解庫存摘要刪除操作的內容,請參考以下範例。使用者將 Custom:RackSpace 庫存指派給三個執行個體。庫存項目 1 和 2 皆使用自訂類型 1.0 版 ("SchemaVersion":"1.0")。另一方面,庫存項目 3 則是使用自訂類型 2.0 版 ("SchemaVersion":"2.0")。

RackSpace 自訂庫存 1

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

RackSpace 自訂庫存 2

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

RackSpace 自訂庫存 3

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

使用者可執行下列命令,以預覽即將刪除的資料。

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

系統會傳回如下資訊。

{
   "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"
}

使用者可執行下列命令,以刪除 Custom:RackSpace 庫存。

注意

此命令輸出並不會顯示刪除進度。因此,TotalCount 與 Remaining Count 的結果都是相同的,因為系統尚未刪除任何項目。您能使用 describe-inventory-deletions 命令來顯示刪除進度。

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

系統會傳回如下資訊。

{
   "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"
}

在 EventBridge 中檢視清查刪除操作

您可以設定 Amazon EventBridge,在每次使用者刪除自訂庫存時建立事件。EventBridge 提供了三種事件類型,皆適用於自訂庫存刪除操作:

  • 刪除實例的操作: 如果已成功刪除特定託管實例的自定義庫存。

  • 刪除操作摘要: 刪除操作的摘要。

  • 禁用的自定義庫存類型警告: 如果用戶致電 Put庫存 針對以前禁用的自定義庫存類型版本的API操作。

下方是每個事件的範例:

執行個體的刪除動作

{
   "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"
   }
}

刪除動作摘要

{
   "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"
   }
}

停用自訂庫存類型的警告

{
   "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"
   }
}

使用以下步驟創建 EventBridge 自定義庫存規則刪除操作。這項程序會說明如何建立規則,使其可傳送自訂庫存刪除操作通知至 Amazon SNS 主題。開始操作前,請確認您擁有 Amazon SNS 主題,或是建立一個新的主題。如需詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》中的入門

設定適用庫存刪除操作的 EventBridge

  1. https://console.aws.amazon.com/events/ 處開啟 Amazon EventBridge 主控台。

  2. 在導航窗格中,選擇 規則,然後選擇 創建規則.

    -或-

    如果 Amazon EventBridge 首頁先打開,選擇 創建規則.

  3. 輸入規則的名稱和描述。

    在同一個區域和同一個事件匯流排上,規則不能與另一個規則同名。

  4. 針對 Define pattern (定義模式),選擇 Event pattern(事件模式)

  5. 選擇Pre-defined pattern by service (依服務預先定義模式)

  6. Service provider (服務提供者),選擇 AWS

  7. 對於 服務名稱,選擇 EC2簡單 Systems Manager (單模)

  8. 對於 事件類型,選擇 庫存.

  9. 驗證 任何詳細信息類型 已選擇。

  10. 針對 Select event bus (選取事件匯流排),選擇要與此規則建立關聯的事件匯流排。如果您想要此規則由來自您自己 AWS 帳戶的相符事件觸發,請選取 AWS default event bus (AWS 預設事件匯流排)。當您帳戶中的 AWS 服務發出事件時,一律會前往您帳戶的預設事件匯流排。

  11. 對於 目標,選擇 SNS主題,然後從 主題 列表。

  12. 展開 配置輸入 並驗證 匹配的事件 已選擇。

  13. (選用) 為規則輸入一或多個標籤。有關更多信息,請參閱 標記您的 Amazon EventBridge 資源Amazon EventBridge 使用者指南.

  14. 選擇 Create (建立)