Software Package Catalog の使用準備
次のセクションでは、パッケージバージョンのライフサイクルの概要と、AWS IoT Device Management Software Package Catalog を使用するための情報を説明します。
パッケージバージョンライフサイクル
パッケージバージョンは、draft
、published
、deprecated
などのライフサイクルステータスを経て進化する可能性があります。deleted
である可能性もあります。
下書き
パッケージバージョンが作成されると、
draft
状態になります。この状態は、ソフトウェアパッケージが準備中であるか、不完全であることを示します。この状態のパッケージバージョンでは、デプロイできません。パッケージバージョンの説明、属性、およびタグを編集することはできます。
コンソールを使用するか、UpdatePackageVersion または DeletePackageVersion API オペレーションのいずれかを発行することで、現在
draft
の状態のパッケージバージョンをpublished
に移行するかdeleted
にできます。公開済み
パッケージバージョンをデプロイする準備ができたら、パッケージバージョンを
published
状態に移行します。この状態では、コンソールでソフトウェアパッケージを編集するか、UpdatePackage API オペレーションを使用して、パッケージバージョンをデフォルトバージョンとして指定できます。この状態では、説明とタグのみを編集できます。コンソールを使用するか、UpdatePackageVersion または DeletePackageVersion API オペレーションのいずれかを発行することで、現在
published
の状態のパッケージバージョンをdeprecated
に移行するかdeleted
にできます。廃止済み
新しいパッケージバージョンがある場合は、以前のパッケージバージョンを
deprecated
に移行できます。廃止されたパッケージバージョンを使用してジョブをデプロイすることもできます。廃止されたパッケージバージョンをデフォルトバージョンとして命名し、説明とタグのみを編集することもできます。パッケージバージョンが古い場合、またはランタイムの依存関係のためにパッケージバージョンを維持する必要がある場合は、パッケージバージョンを
deprecated
に移行することを検討してください。コンソールを使用するか、UpdatePackageVersion または DeletePackageVersion API オペレーションのいずれかを発行することで、現在
deprecated
の状態のパッケージバージョンをpublished
に移行するかdeleted
にできます。[Deleted] (削除済み)
パッケージバージョンを使用する意図がなくなった場合は、コンソールまたは DeletePackageVersion API オペレーションを使用して削除できます。
注記
そのパッケージバージョンを参照している保留中のジョブがあるときにパッケージバージョンを削除した場合、ジョブが正常に完了して予約済みの名前付きシャドウを更新しようとしたときにエラーメッセージが表示されます。
削除するソフトウェアパッケージバージョンがデフォルトパッケージバージョンとして指定されている場合は、最初にパッケージを更新して別のバージョンをデフォルトとして指定するか、フィールドを名前なしのままにする必要があります。これを行うには、コンソールまたは UpdatePackageVersion API オペレーションを使用します。(指定されたパッケージバージョンをデフォルトとして削除するには、UpdatePackage API オペレーションを発行するときに unsetDefaultVersion パラメーターを true に設定します)。
デフォルトバージョンとして指定されていない限り、コンソールからソフトウェアパッケージを削除すると、そのパッケージに関連付けられているすべてのパッケージバージョンが削除されます。
パッケージバージョンの命名規則
パッケージバージョンに名前を付けるときは、自分や他の人が最新のパッケージバージョンとバージョンの進行状況を簡単に識別できるように、論理的な命名戦略を計画して適用することが重要です。パッケージバージョンを作成するときはバージョン名を指定する必要がありますが、戦略と形式はビジネスケースによって大きく異なります。
ベストプラクティスとして、セマンティックバージョニング SemVer1.2.3
の場合、1
は機能的に互換性のない変更のメジャーバージョン、2
は機能的に互換性のある変更のメジャーバージョン、3
は (バグ修正用の) パッチバージョンです。詳細については、「セマンティックバージョニング 2.0.0
デフォルトバージョン
バージョンをデフォルトとして設定することは任意です。デフォルトのパッケージバージョンを追加または削除できます。デフォルトバージョンとして指定されていないパッケージバージョンをデプロイすることもできます。
パッケージバージョンを作成すると、そのバージョンは draft
状態になり、パッケージバージョンを公開済みに移行するまでデフォルトバージョンとして指定することはできません。Software Package Catalog は、デフォルトとしてバージョンを自動的に選択したり、新しいパッケージバージョンをデフォルトとして更新したりしません。コンソールから、または UpdatePackageVersion API オペレーションを発行して、選択したパッケージバージョンに意図的に名前を付ける必要があります。
バージョン属性
バージョン属性とその値には、パッケージバージョンに関する重要な情報が格納されます。パッケージまたはパッケージバージョンの汎用属性を定義することをお勧めします。例えば、プラットフォーム、アーキテクチャ、オペレーティングシステム、リリース日、作成者、または Amazon S3 URL の名前と値のペアを作成できます。
ジョブドキュメントを使用して AWS IoT ジョブを作成すると、属性の値を参照する代替変数 ($parameter
) の使用を選択できます。詳細については、「AWS IoT ジョブの準備」を参照してください。
パッケージバージョンで使用されるバージョン属性は、予約された名前付きシャドウに自動的に追加されず、フリートインデックス作成から直接インデックスを作成またはクエリすることはできません。フリートのインデックス作成を使用してパッケージバージョン属性をインデックス作成またはクエリするには、予約された名前付きシャドウにバージョン属性を入力します。
オペレーションシステムやインストール時間など、予約された名前付きシャドウキャプチャデバイスレポートプロパティのバージョン属性パラメータを使用することをお勧めします。また、フリートのインデックス作成を使用してインデックスを作成し、クエリを実行することもできます。
バージョン属性は、特定の命名規則に従う必要はありません。ビジネスニーズに合わせて名前と値のペアを作成できます。パッケージバージョンのすべての属性の合計サイズは 3 KB に制限されています。詳細については、「Software Package Catalog ソフトウェアパッケージとパッケージバージョンの制限」を参照してください。
ジョブドキュメント内のすべての属性の使用
選択したデバイスのジョブデプロイに、すべてのパッケージバージョン属性を自動的に追加できます。API または CLI コマンドでプログラムですべてのパッケージバージョン属性を自動的に使用するには、次のジョブドキュメントの例を参照してください。
"
TestPackage
": "${aws:iot:package:TestPackage
:version:PackageVersion
:attributes}"
ソフトウェア部品表
ソフトウェア部品表 (SBOM) は、ソフトウェアパッケージのあらゆる側面の一元化されたリポジトリを提供します。ソフトウェアパッケージとパッケージバージョンを保存するだけでなく、各パッケージバージョンに関連付けられたソフトウェア部品表 (SBOM) を AWS IoT Device Management Software Package Catalog に保存できます。ソフトウェアパッケージには 1 つ以上のパッケージバージョンが含まれ、各パッケージバージョンは 1 つ以上のコンポーネントで構成されます。特定のパッケージバージョンの構成をサポートする各コンポーネントは、ソフトウェア部品表を使用して説明およびカタログ化できます。サポートされるソフトウェア部品表の業界標準は、SPDX と CycloneDX です。SBOM が最初に作成されると、SPDX および CycloneDX 業界標準形式に対する検証が行われます。SPDX の詳細については、「System Package Data Exchange
ソフトウェア部品表には、パッケージ情報、ファイル情報、その他の関連メタデータなど、特定のパッケージバージョンのコンポーネントのあらゆる側面が記載されています。SPDX 形式のソフトウェア部品表ドキュメント構造の以下の例を参照してください。
ソフトウェア部品表の利点
Software Package Catalog にパッケージバージョンのソフトウェア部品表を追加する主な利点の 1 つは、脆弱性管理です。
脆弱性管理
ソフトウェアコンポーネントの明らかなセキュリティリスクに対する脆弱性を評価して軽減することは、デバイスフリートの整合性を保護する上で依然として重要です。パッケージバージョンごとに Software Package Catalog に保存されているソフトウェア部品表を追加すると、独自の社内脆弱性管理ソリューションを使用して、パッケージバージョンと SBOM に基づいてリスクにさらされているデバイスを把握して、セキュリティ上のギャップを事前に公開できます。影響を受けるデバイスに修正をデプロイし、デバイスのフリートを保護できます。
ソフトウェア部品表のストレージ
各ソフトウェアパッケージバージョンのソフトウェア部品表 (SBOM) は、Amazon S3 バージョニング機能を使用して Amazon S3 バケットに保存されます。SBOM を格納する Amazon S3 バケットは、パッケージバージョンが作成されたのと同じリージョンに配置する必要があります。バージョニング機能を使用する Amazon S3 バケットは、同じバケットにオブジェクトの複数のバリアントを保持します。Amazon S3 バケットでのバージョニングの使用の詳細については、「Amazon S3 バケットでのバージョニングの使用」を参照してください。
注記
各ソフトウェアパッケージバージョンには、1 つの SBOM ファイルが zip アーカイブファイルとして保存されています。
バケットの特定の Amazon S3 キーとバージョン ID は、パッケージバージョンのソフトウェア部品表の各バージョンを一意に識別するために使用されます。
注記
単一の SBOM ファイルを持つパッケージバージョンの場合、その SBOM ファイルを Amazon S3 バケットに zip アーカイブファイルとして保存できます。
複数の SBOM ファイルを含むパッケージバージョンでは、すべての SBOM ファイルを 1 つの zip アーカイブファイルに配置し、その zip アーカイブファイルを Amazon S3 バケットに保存する必要があります。
両方のシナリオで単一の zip アーカイブファイルに保存されているすべての SBOM ファイルは、SPDX または CycloneDX の .json ファイルとしてフォーマットされます。
アクセス許可ポリシー
AWS IoT が Amazon S3 バケットに保存されている SBOM zip アーカイブファイルにアクセスするための指定されたプリンシパルとして機能するには、リソースベースのアクセス許可ポリシーが必要です。正しいリソースベースのアクセス許可ポリシーについては、次の例を参照してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "iot.amazonaws.com" ] }, "Action": "s3:*", "Resource": "arn:aws:s3:::bucketName/*" } ] }
リソースベースのアクセス許可ポリシーの詳細については、「AWS IoT リソースベースのポリシー」を参照してください。
SBOM の更新
ソフトウェア部品表は、デバイスフリートを保護し強化するために必要な頻度で更新できます。Amazon S3 バケットでソフトウェア部品表が更新されるたびに、バージョン ID が変更され、Software Package Catalog に更新が通知され、新しい Amazon S3 バケット URL を適切なパッケージバージョンに関連付ける必要があります。新しいバージョン ID は、AWS Management Console のパッケージバージョンページの Amazon S3 オブジェクトバージョン ID 列に表示されます。さらに、API オペレーション GetPackageVersion
または CLI コマンド get-package-version
を使用して、新しいバージョン ID を表示できます。
注記
新しいバージョン ID の原因となるソフトウェア部品表を更新しても、新しいパッケージバージョンは作成されません。
Amazon S3 オブジェクトキー名の詳細については、「オブジェクトキー名の作成」を参照してください。
AWS IoT フリートインデックス作成の有効化
Software Package Catalog で AWS IoT フリートのインデックス作成をするには、インデックスを作成してメトリクスを収集する各デバイスのデータソースとして予約済み名前付きシャドウ ($package
) を設定します。予約済みの名前付きシャドウの詳細については、「予約済みの名前付きシャドウ」を参照してください。
フリートインデックス作成は、ソフトウェアパッケージのバージョン別にフィルタリングされたモノの動的グループで AWS IoT のモノをグループ化できるようにするサポートを提供します。例えば、フリートインデックス作成では、特定のパッケージバージョンがインストールされているモノ、されていないモノ、パッケージバージョンが何もインストールされていないモノ、特定の名前と値のペアに一致するモノを識別できます。最後に、フリートインデックスを作成すると、デバイスフリートの状態に関するインサイトを得るのに使用できる標準およびカスタムメトリクスが提供されます。詳細については、「フリートインデックス作成の準備」を参照してください。
注記
Software Package Catalog のフリートインデックス作成を有効にすると、標準のサービスコストが発生します。詳細については、「AWS IoT Device Management, Pricing
予約済みの名前付きシャドウ
予約済みの名前付きシャドウ、$package
は、デバイスにインストールされているソフトウェアパッケージとパッケージバージョンの状態を反映しています。フリートインデックス作成では、予約済みの名前付きシャドウをデータソースとして使用して標準メトリクスとカスタムメトリクスを構築し、フリートの状態をクエリできるようにします。詳細については、「フリートインデックス作成の準備」を参照してください。
予約済みの名前付きシャドウは、名前があらかじめ定義されていて変更できないという点を除いて、名前付きのシャドウと似ています。さらに、予約済みの名前付きシャドウはメタデータを更新せず、version
および attributes
のキーワードのみを使用します。
description
など、他のキーワードを含む更新リクエストには、rejected
トピックの下でエラーレスポンスが返されます。詳細については、「Device Shadow エラーメッセージ」を参照してください。
コンソールから AWS IoT のモノを作成するとき、AWS IoT ジョブが正常に完了してシャドウが更新され、UpdateThingShadow
API オペレーションを発行した場合に作成できます。詳細については、AWS IoT Core 開発者ガイドの「UpdateThingShadow」を参照してください。
注記
予約済みの名前付きシャドウをインデックスしても、フリートインデックスでインデックスできる名前付きシャドウの数にはカウントされません。クォータと制限の詳細については、「AWS IoT Device Management フリートインデックス作成の制限とクォータ」を参照してください。さらに、ジョブが正常に完了したときに予約済みの名前付きシャドウを更新するように AWS IoT ジョブで選択した場合、その API コールは Device Shadow とレジストリオペレーションにカウントされ、コストが発生する可能性があります。詳細については、「AWS IoT Device Management jobs limits and quotas」(ジョブの制限とクォータ) および IndexingFilter API データタイプを参照してください。
$package
シャドウの構造
予約済みの名前付きシャドウには次のものが含まれます。
{
"state": {
"reported": {
"<packageName>
": {
"version": "",
"attributes": {
}
}
}
},
"version" : 1
"timestamp" : 1672531201
}
シャドウのプロパティは次の情報で更新されます。
-
<packageName>
: インストール済みのソフトウェアパッケージの名前。packageName パラメータで更新されます。 -
version
: インストールされているパッケージバージョンの名前。versionName パラメータで更新されます。 -
attributes
: デバイスに保存され、フリートインデックスによってインデックス化されるオプションのメタデータ。これにより、保存されたデータに基づいてインデックスにクエリを実行できます。 -
version
: シャドウのバージョン番号。シャドウが更新されるたびに自動的に増加し、1
から開始します。 -
timestamp
: シャドウが最後に更新された日時を示し、Unix 時間で記録されます。
名前付きシャドウの形式と動作の詳細については、「AWS IoT Device Shadow サービス メッセージの順序」を参照してください。
ソフトウェアパッケージとそのパッケージバージョンの削除
ソフトウェアパッケージを削除する前に、次の操作を行います。
パッケージとそのバージョンがアクティブにデプロイされていないことを確認します。
最初に、関連するすべてのバージョンを削除します。いずれかのバージョンがデフォルトバージョンとして指定されている場合は、指定されたデフォルトバージョンをパッケージから削除する必要があります。デフォルトバージョンの指定は任意であり、削除しても競合はありません。ソフトウェアパッケージからデフォルトバージョンを削除するには、コンソールからパッケージを編集するか、 UpdatePackageVersion API オペレーションを使用します。
指定されたデフォルトパッケージバージョンがない限り、コンソールを使用してソフトウェアパッケージを削除でき、そのパッケージバージョンもすべて削除されます。API コールを使用してソフトウェアパッケージを削除する場合は、最初にパッケージバージョンを削除してからソフトウェアパッケージを削除する必要があります。