動態物件群組 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

動態物件群組

動態物件群組是從登錄檔中的特定搜尋查詢建立的。搜尋查詢參數,例如裝置連線能力、裝置影子建立和 AWS IoT Device Defender 違規資料都支援此參數。動態物件群組需要啟用機群索引,才能索引、搜尋和彙總裝置的資料。您可以使用機群索引搜尋查詢預覽動態物件群組中的物件,然後再建立它。如需詳細資訊,請參閱 機群索引查詢語法

注意

動態物件群組操作是在登錄檔操作下計量。如需詳細資訊,請參閱AWS IoT Core 其他計量詳細資訊

動態物件群組與靜態物件群組的差異如下:

  • 物件成員資格沒有明確定義。若要建立動態物件群組,請定義搜尋查詢字串以判斷群組成員資格。

  • 動態物件群組無法成為階層的一部分。

  • 動態物件群組無法套用政策。

  • 您會使用不同的命令集來建立、更新和刪除動態物件群組。對於所有其他操作,您都對這兩種類型的物件群組使用相同的命令。

  • 每個 的動態群組數量 AWS 帳戶 有限

  • 請勿在物件群組名稱中使用個人識別資訊。物件群組名稱可顯示於未加密的通訊和報告中。

如需靜態物件群組的詳細資訊,請參閱 靜態物件群組

動態物件群組的使用案例

您可以針對下列使用案例使用動態物件群組:

將動態物件群組指定為任務的目標

建立以動態物件群組作為目標的連續任務,可讓您在裝置符合所需條件時自動將裝置設定為目標。條件可以是連線狀態或儲存在登錄檔或影子中的任何條件,例如軟體版本或模型。如果動態物件群組中未顯示物件,則不會從任務接收任務文件。

例如,如果您的裝置機群需要韌體更新,以將更新程序期間中斷的風險降至最低,而且您只想要更新電池壽命大於 80% 的裝置上韌體。您可以建立名為 80 的動態物件群組PercentBatteryLife ,該群組僅包含電池壽命超過 80% 的裝置,並將其用作任務的目標。只有符合您電池壽命條件的裝置才會收到韌體更新。當裝置達到 80% 的電池壽命條件時,它們會自動新增至動態物件群組,並會收到韌體更新。

您也可以擁有多個具有不同韌體或作業系統的裝置模型,這需要不同版本的新軟體更新。這是具有連續任務的動態群組最常見的使用案例,您可以在其中為每個裝置模型、韌體和作業系統組合建立動態群組。然後,您可以為每個這些動態群組設定連續任務,以在裝置根據定義的條件自動成為這些群組的成員時推送軟體更新。

如需將物件群組指定為任務目標的詳細資訊,請參閱 CreateJob

使用動態群組成員資格變更來執行所需的動作

每次將裝置新增至動態物件群組或從動態物件群組中移除時,都會傳送通知至MQTT主題,做為登錄事件更新的一部分。您可以設定AWS IoT Core 規則,根據動態群組成員資格更新與 AWS 服務互動,並採取所需的動作。範例動作包括寫入 Amazon DynamoDB、叫用 Lambda 函數,或傳送通知至 Amazon SNS。

將裝置新增至動態物件群組以進行自動違規偵測

AWS IoT Device Defender Detect 客戶可以在動態物件群組上定義安全設定檔。動態物件群組的裝置會自動透過群組上定義的安全設定檔偵測違規。

在動態物件群組上設定日誌層級,以觀察具有精細記錄的裝置

您可以在動態物件群組上指定日誌層級。如果您只想要為符合特定條件的裝置自訂記錄層級和詳細資訊,這很有用。例如,如果您懷疑具有特定韌體版本的裝置導致特定規則發佈主題發生錯誤,建議您設定詳細日誌記錄以偵錯這些問題。在此情況下,您可以為所有具有此韌體版本的裝置建立動態群組,我們假設該群組會儲存為登錄檔屬性或裝置影子。然後,您可以設定偵錯層級,並將記錄目標定義為此動態物件群組。如需精細記錄的詳細資訊,請參閱AWS IoT 使用 CloudWatch 日誌監控 。如需如何為特定物件群組指定記錄層級的詳細資訊,請參閱在 中設定資源特定的登入 AWS IoT

建立動態物件群組

使用 CreateDynamicThingGroup 命令建立動態物件群組。若要為 80PercentBatteryLife scenario 建立動態物件群組,請使用 create-dynamic-thing-groupCLI命令:

$ aws iot create-dynamic-thing-group --thing-group-name "80PercentBatteryLife" --query-string "attributes.batterylife80"
注意

請勿在動態物件群組名稱中使用個人識別資訊。

CreateDynamicThingGroup 命令會傳回回應。回應包含索引名稱、查詢字串、查詢版本、物件群組名稱、物件群組 ID 和物件群組的 Amazon Resource Name (ARN):

{ "indexName": "AWS_Things", "queryVersion": "2017-09-30", "thingGroupName": "80PercentBatteryLife", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/80PercentBatteryLife", "queryString": "attributes.batterylife80\n", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx" }

動態物件群組的建立不會同時發生。動態物件群組回填需要一些時間才能完成。當您建立動態物件群組時,群組的狀態會設定為 BUILDING。回填處理完成時,狀態會變更為 ACTIVE。若要檢查動態物件群組的狀態,請使用 DescribeThingGroup命令。

描述動態物件群組

使用 DescribeThingGroup 命令以取得動態物件群組的相關資訊:

$ aws iot describe-thing-group --thing-group-name "80PercentBatteryLife"

DescribeThingGroup 命令會傳回關於指定群組的資訊:

{ "status": "ACTIVE", "indexName": "AWS_Things", "thingGroupName": "80PercentBatteryLife", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/80PercentBatteryLife", "queryString": "attributes.batterylife80\n", "version": 1, "thingGroupMetadata": { "creationDate": 1548716921.289 }, "thingGroupProperties": {}, "queryVersion": "2017-09-30", "thingGroupId": "84dd9b5b-2b98-4c65-84e4-be0e1ecf4fd8" }

在動態物件群組DescribeThingGroup上執行會傳回動態物件群組特有的屬性。傳回屬性範例為 queryString 和 狀態。

動態物件群組的狀態可能會需要以下的值:

ACTIVE

動態物件群組已準備就緒。

BUILDING

正在建立動態群組,且正在處理物件成員資格。

REBUILDING

正在更新動態物件群組的成員資格,接著是調整該群組搜尋查詢。

注意

建立動態物件群組後,無論其狀態為何,都可以使用它。只有狀態為 ACTIVE 的動態物件群組,才會包含所有與該動態物件群組搜尋查詢相符的物件。狀態為 BUILDINGREBUILDING 的動態物件群組,則可能不會包含所有符合搜尋查詢的物件。

更新動態物件群組

使用 UpdateDynamicThingGroup 命令來更新動態物件群組的屬性,包括該群組的搜尋查詢。下列命令會更新兩個屬性。一個是物件群組描述,另一個是將成員資格條件變更為電池壽命 > 85 的查詢字串:

$ aws iot update-dynamic-thing-group --thing-group-name "80PercentBatteryLife" --thing-group-properties "thingGroupDescription=\"This thing group contains devices with a battery life greater than 85 percent.\"" --query-string "attributes.batterylife85"

UpdateDynamicThingGroup 命令的回應會包含更新之後的群組版本編號:

{ "version": 2 }

動態物件群組的更新不會同時發生。動態物件群組回填需要一些時間才能完成。當您更新動態物件群組時,群組的狀態會變更為 ,REBUILDING而群組則會更新其成員資格。回填處理完成時,狀態會變更為 ACTIVE。若要檢查動態物件群組的狀態,請使用 DescribeThingGroup命令。

刪除動態物件群組

使用 DeleteDynamicThingGroup 命令來刪除動態物件群組:

$ aws iot delete-dynamic-thing-group --thing-group-name "80PercentBatteryLife"

DeleteDynamicThingGroup 命令不會產生任何輸出。

雲端中的記錄正在更新時,顯示物件所屬群組的命令 (例如 ListGroupsForThing) 可能仍會顯示出該群組。

動態和靜態物件群組限制

動態物件群組和靜態物件群組共用下列限制:

  • 物件群組可以擁有的屬性數量有限

  • 物件所屬群組數有限

  • 您無法重新命名物件群組。

  • 物件群組名稱無法包含國際字元,例如 û、é 和 ñ。

動態物件群組限制

動態物件群組有下列限制:

機群索引

啟用機群索引服務後,您可以在裝置機群上執行搜尋查詢。您可以在機群索引回填完成後建立和管理動態物件群組。回填程序的完成時間會直接取決於向 註冊的裝置機群大小 AWS 雲端。在您為動態物件群組啟用機群索引服務後,除非您刪除所有動態物件群組,否則無法停用服務。

注意

如果您有查詢機群索引的許可,您就可以存取整個機群的物件資料。

動態物件群組的數量有限

動態物件群組的數量有限

成功的命令可以記錄錯誤

當您建立或更新動態物件群組時,有些物件可能符合包含在動態物件群組中的資格,但不會新增至其中。該案例在記錄錯誤和產生AddThingToDynamicThingGroupsFailed指標 時,將導致成功的建立或更新命令。單一指標可以代表多個日誌項目。

發生下列情況時,日誌中會建立錯誤日誌項目: CloudWatch

  • 符合資格的物件無法新增至動態物件群組。

  • 從動態物件群組中移除物件,以將其新增至另一個群組。

當物件符合新增至動態物件群組的資格時,請考慮下列事項:

  • 該物件是否已經在盡可能多的群組中存在? (請參閱限制數量)。

    • 否:該物件被新增到動態物件組。

    • YES:該物件是否為任何動態物件群組的成員?

當動態物件群組中的物件不再符合搜尋查詢時,該物件會從動態物件群組中移除。同樣地,當某物件更新為符合動態物件群組的搜尋查詢時,該物件會如先前所述新增至群組。這些新增和移除都是正常的,不會產生錯誤日誌項目。

啟用 overrideDynamicGroups 時,靜態群組會優先於動態群組

物件所屬群組數有限。當您使用 AddThingToThingGroupUpdateThingGroupsForThing命令更新物件成員資格時,新增 --overrideDynamicGroups 參數會給予靜態物件群組優先順序,而不是動態物件群組。

當您將物件新增至靜態物件群組時,請考慮下列事項:

  • 物件是否已屬於群組的最大數量?

    • 否:該物件會新增到靜態物件群組。

    • YES:該物件是否在任何動態群組中?

      • 否:不能將該物件新增到物件群組。命令會引發例外狀況。

      • YES:已啟用--overrideDynamicGroups

        • 否:不能將該物件新增到物件群組。命令會引發例外狀況。

        • YES:該物件會從最近建立的動態物件群組中移除,記錄錯誤,並為移除物件的動態物件群組產生AddThingToDynamicThingGroupsFailed指標。然後,事情會新增到靜態物件群組中。

較舊的動態物件群組優先於較新的動態物件群組

物件所屬群組數有限。當建立或更新操作為物件建立額外的群組資格,且物件已達到其群組限制時,可能會從另一個動態物件群組中移除,以啟用此新增。如需有關如何發生這種情況的詳細資訊,請參閱 成功的命令可以記錄錯誤啟用 overrideDynamicGroups 時,靜態群組會優先於動態群組 以取得範例。

從動態物件群組中移除物件時,會記錄錯誤並引發事件。

您無法將政策套用至動態物件群組

嘗試將政策套用至動態物件群組會產生例外狀況。

動態物件群組成員資格為最終一致

只會針對登錄檔對物件的最終狀態進行評估。如果狀態快速更新,可能會略過中繼狀態。避免將規則或任務與動態物件群組建立關聯,其成員資格取決於中間人狀態。