動態物件群組 - 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 偵測客戶可以在動態物件群組上定義安全性設定檔。群組上定義的安全性設定檔會自動偵測動態物件群組的裝置是否有違規。

在動態物群組上設定記錄層級,以使用精細的記錄來觀察裝置

您可以在動態物群組上指定記錄層級。如果您只想為符合特定準則的裝置自訂記錄層級和詳細資料,此功能非常有用。例如,如果您懷疑具有特定韌體版本的裝置在特定規則的已發佈主題上造成錯誤,您可能會想要設定詳細的記錄來偵錯這些問題。在這種情況下,您可以為具有此固件版本的所有設備創建一個動態組,我們假設將其存儲為註冊表屬性或設備陰影中。然後,您可以設定偵錯層級,並將記錄目標定義為此動態物件群組。如需有關精細記錄的詳細資訊,請參閱AWS IoT 使用記 CloudWatch 錄監視。如需有關如何為特定物件群組指定記錄層級的詳細資訊,請參閱設定資源特定的登入。 AWS IoT

建立動態物件群組

使用 CreateDynamicThingGroup 命令建立動態物件群組。若要為 80 個PercentBatteryLife 案例建立動態物件群組,請使用 create-dynamic-thing-group CLI 命令:

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

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

CreateDynamicThingGroup令會傳回回應。回應包含物件群組的索引名稱、查詢字串、查詢版本、物件群組名稱、物群組 ID 以及 Amazon 資源名稱 (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 記錄檔中建立錯誤記錄項目:

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

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

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

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

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

    • 是:事情是否是任何動態物件群組的成員?

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

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

物件所屬群組數有限。當您使用「AddThingToThing群組」或「UpdateThingGroupsFor物件」指令來更新物件成員資格時,新增--overrideDynamicGroups參數會使靜態物件群組優先於動態物件群組。

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

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

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

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

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

      • 是:是否已啟用 --overrideDynamicGroups

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

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

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

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

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

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

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

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

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