

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Software Package Catalog の使用準備
<a name="preparing-to-use-software-package-catalog"></a>

次のセクションでは、パッケージバージョンのライフサイクルの概要と、 AWS IoT Device Management Software Package Catalog を使用するための情報について説明します。

## パッケージバージョンライフサイクル
<a name="package-version-lifecycle"></a>

パッケージバージョンは、`draft`、`published`、`deprecated` などのライフサイクルステータスを経て進化する可能性があります。`deleted` である可能性もあります。

![\[下書き、公開済み、廃止済みを含むパッケージバージョンのライフサイクル。削除することもできます。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/package-catalog-version-lifecycle.png)

+ **下書き**

  パッケージバージョンが作成されると、`draft` 状態になります。この状態は、ソフトウェアパッケージが準備中であるか、不完全であることを示します。

  この状態のパッケージバージョンでは、デプロイできません。パッケージバージョンの説明、属性、およびタグを編集することはできます。

  コンソールを使用するか、[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) または [DeletePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackageVersion.html) API オペレーションのいずれかを発行することで、現在 `draft` の状態のパッケージバージョンを `published` に移行するか `deleted` にできます。
+ **公開済み**

  パッケージバージョンをデプロイする準備ができたら、パッケージバージョンを `published` 状態に移行します。この状態では、コンソールでソフトウェアパッケージを編集するか、[UpdatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackage.html) API オペレーションを使用して、パッケージバージョンをデフォルトバージョンとして指定できます。この状態では、説明とタグのみを編集できます。

  コンソールを使用するか、[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) または [DeletePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackageVersion.html) API オペレーションのいずれかを発行することで、現在 `published` の状態のパッケージバージョンを `deprecated` に移行するか、`deleted` にできます。
+ **廃止済み**

  新しいパッケージバージョンがある場合は、以前のパッケージバージョンを `deprecated` に移行できます。廃止されたパッケージバージョンを使用してジョブをデプロイすることもできます。廃止されたパッケージバージョンをデフォルトバージョンとして命名し、説明とタグのみを編集することもできます。

  パッケージバージョンが古い場合、またはランタイムの依存関係のためにパッケージバージョンを維持する必要がある場合は、パッケージバージョンを `deprecated` に移行することを検討してください。

  コンソールを使用するか、[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) または [DeletePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackageVersion.html) API オペレーションのいずれかを発行することで、現在 `deprecated `の状態のパッケージバージョンを `published` に移行するか、`deleted` にできます。
+ **[Deleted]** (削除済み)

  パッケージバージョンを使用する意図がなくなった場合は、コンソールまたは [DeletePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackageVersion.html) API オペレーションを使用して削除できます。
**注記**  
そのパッケージバージョンを参照している保留中のジョブがあるときにパッケージバージョンを削除した場合、ジョブが正常に完了して予約済みの名前付きシャドウを更新しようとしたときにエラーメッセージが表示されます。  
 削除するソフトウェアパッケージバージョンがデフォルトパッケージバージョンとして指定されている場合は、最初にパッケージを更新して別のバージョンをデフォルトとして指定するか、フィールドを名前なしのままにする必要があります。これを行うには、コンソールまたは [UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) API オペレーションを使用します。(指定されたパッケージバージョンをデフォルトとして削除するには、[UpdatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackage.html) API オペレーションを発行するときに [unsetDefaultVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackage.html#iot-UpdatePackage-request-unsetDefaultVersion) パラメーターを true に設定します)。

  デフォルトバージョンとして指定されていない限り、コンソールからソフトウェアパッケージを削除すると、そのパッケージに関連付けられているすべてのパッケージバージョンが削除されます。

## パッケージバージョンの命名規則
<a name="package-version-naming"></a>

パッケージバージョンに名前を付けるときは、自分や他の人が最新のパッケージバージョンとバージョンの進行状況を簡単に識別できるように、論理的な命名戦略を計画して適用することが重要です。パッケージバージョンを作成するときはバージョン名を指定する必要がありますが、戦略と形式はビジネスケースによって大きく異なります。

ベストプラクティスとして、セマンティックバージョニング [SemVer](https://semver.org/) 形式を使用することをお勧めします。例えば、`1.2.3` の場合、`1` は機能的に互換性のない変更のメジャーバージョン、`2` は機能的に互換性のある変更のメジャーバージョン、`3` は (バグ修正用の) パッチバージョンです。詳細については、「[セマンティックバージョニング 2.0.0](https://semver.org/)」を参照してください。パッケージバージョン名の要件の詳細については、 AWS IoT API リファレンスガイドの[versionName](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackageVersion.html#API_CreatePackageVersion_RequestSyntax)」を参照してください。

## デフォルトバージョン
<a name="default-version"></a>

バージョンをデフォルトとして設定することは任意です。デフォルトのパッケージバージョンを追加または削除できます。デフォルトバージョンとして指定されていないパッケージバージョンをデプロイすることもできます。

パッケージバージョンを作成すると、そのバージョンは `draft` 状態になり、パッケージバージョンを公開済みに移行するまでデフォルトバージョンとして指定することはできません。Software Package Catalog は、デフォルトとしてバージョンを自動的に選択したり、新しいパッケージバージョンをデフォルトとして更新したりしません。コンソールから、または [UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) API オペレーションを発行して、選択したパッケージバージョンに意図的に名前を付ける必要があります。

## バージョン属性
<a name="version-attributes"></a>

バージョン属性とその値には、パッケージバージョンに関する重要な情報が格納されます。パッケージまたはパッケージバージョンの汎用属性を定義することをお勧めします。例えば、プラットフォーム、アーキテクチャ、オペレーティングシステム、リリース日、作成者、または Amazon S3 URL の名前と値のペアを作成できます。

 AWS IoT ジョブドキュメントを使用してジョブを作成するときに、属性の値を参照する置換変数 (`$parameter`) を使用することもできます。詳細については、[AWS IoT 「ジョブの準備](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-jobs-for-service-package-catalog.html)」を参照してください。

パッケージバージョンで使用されるバージョン属性は、予約された名前付きシャドウに自動的に追加されず、フリートインデックス作成から直接インデックスを作成またはクエリすることはできません。フリートのインデックス作成を使用してパッケージバージョン属性をインデックス作成またはクエリするには、予約された名前付きシャドウにバージョン属性を入力します。

オペレーションシステムやインストール時間など、予約された名前付きシャドウキャプチャデバイスレポートプロパティのバージョン属性パラメータを使用することをお勧めします。また、フリートのインデックス作成を使用してインデックスを作成し、クエリを実行することもできます。

バージョン属性は、特定の命名規則に従う必要はありません。ビジネスニーズに合わせて名前と値のペアを作成できます。パッケージバージョンのすべての属性の合計サイズは 3 KB に制限されています。詳細については、「[Software Package Catalog ソフトウェアパッケージとパッケージバージョンの制限](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#software_package_catalog_limits)」を参照してください。

**ジョブドキュメント内のすべての属性の使用**

選択したデバイスのジョブデプロイに、すべてのパッケージバージョン属性を自動的に追加できます。API または CLI コマンドでプログラムですべてのパッケージバージョン属性を自動的に使用するには、次のジョブドキュメントの例を参照してください。

```
"TestPackage": "${aws:iot:package:TestPackage:version:PackageVersion:attributes}"
```

## ソフトウェア部品表
<a name="software-bill-of-materials"></a>

ソフトウェア部品表 (SBOM) は、ソフトウェアパッケージのあらゆる側面の一元化されたリポジトリを提供します。ソフトウェアパッケージとパッケージバージョンを保存するだけでなく、各パッケージバージョンに関連付けられたソフトウェア部品表 (SBOM) を AWS IoT Device Management Software Package Catalog に保存できます。ソフトウェアパッケージには 1 つ以上のパッケージバージョンが含まれ、各パッケージバージョンは 1 つ以上のコンポーネントで構成されます。特定のパッケージバージョンの構成をサポートする各コンポーネントは、ソフトウェア部品表を使用して説明およびカタログ化できます。サポートされるソフトウェア部品表の業界標準は、SPDX と CycloneDX です。SBOM が最初に作成されると、SPDX および CycloneDX 業界標準形式に対する検証が行われます。SPDX の詳細については、「[System Package Data Exchange](https://spdx.dev/)」を参照してください。CycloneDX の詳細については、「[CycloneDX](https://cyclonedx.org/)」を参照してください。

ソフトウェア部品表には、パッケージ情報、ファイル情報、その他の関連メタデータなど、特定のパッケージバージョンのコンポーネントのあらゆる側面が記載されています。SPDX 形式のソフトウェア部品表ドキュメント構造の以下の例を参照してください。

![\[SPDX 形式の SBOM の例。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/spdx-2.3-document.png)


### ソフトウェア部品表の利点
<a name="spc-sbom-benefits"></a>

Software Package Catalog にパッケージバージョンのソフトウェア部品表を追加する主な利点の 1 つは、脆弱性管理です。

**脆弱性管理**

ソフトウェアコンポーネントの明らかなセキュリティリスクに対する脆弱性を評価して軽減することは、デバイスフリートの整合性を保護する上で依然として重要です。パッケージバージョンごとに Software Package Catalog に保存されているソフトウェア部品表を追加すると、独自の社内脆弱性管理ソリューションを使用して、パッケージバージョンと SBOM に基づいてリスクにさらされているデバイスを把握して、セキュリティ上のギャップを事前に公開できます。影響を受けるデバイスに修正をデプロイし、デバイスのフリートを保護できます。

### ソフトウェア部品表のストレージ
<a name="spc-sbom-storage"></a>

各ソフトウェアパッケージバージョンのソフトウェア部品表 (SBOM) は、Amazon S3 バージョニング機能を使用して Amazon S3 バケットに保存されます。SBOM を格納する Amazon S3 バケットは、パッケージバージョンが作成されたのと同じリージョンに配置する必要があります。バージョニング機能を使用する Amazon S3 バケットは、同じバケットにオブジェクトの複数のバリアントを保持します。Amazon S3 バケットでのバージョニングの使用の詳細については、「[Amazon S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。

**注記**  
各ソフトウェアパッケージバージョンには複数の SBOM ファイルをアタッチできますが、SBOM ファイルは 1 つの 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 リソースベースのポリシー](security_iam_service-with-iam.md#security_iam_service-with-iam-resource-based-policies)」を参照してください。

**SBOM の更新**

ソフトウェア部品表は、デバイスフリートを保護し強化するために必要な頻度で更新できます。Amazon S3 バケットでソフトウェア部品表が更新されるたびに、バージョン ID が変更されます。このため、新しい Amazon S3 バケット URL を適切なパッケージバージョンに関連付ける必要があります。新しいバージョン ID は、 AWS マネジメントコンソールのパッケージバージョンページの **Amazon S3 オブジェクトバージョン ID** 列に表示されます。さらに、API オペレーション `[GetPackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_GetPackageVersion.html)` または CLI コマンド `[get-package-version](https://docs.aws.amazon.com/cli/latest/reference/iot/get-package-version.html)` を使用して、新しいバージョン ID を表示できます。

**注記**  
新しいバージョン ID の原因となるソフトウェア部品表を更新しても、新しいパッケージバージョンは作成されません。

Amazon S3 オブジェクトキー名の詳細については、「[オブジェクトキー名の作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html)」を参照してください。

## AWS IoT フリートインデックス作成の有効化
<a name="enable-fleet-indexing"></a>

 AWS IoT フリートインデックス作成を有効にすることは、 AWS IoT Device Management Software Package Catalog を使用するための要件です。Software Package Catalog で AWS IoT フリートのインデックス作成をするには、インデックスを作成してメトリクスを収集する各デバイスのデータソースとして予約済み名前付きシャドウ (`$package`) を設定します。予約済みの名前付きシャドウの詳細については、「[予約済みの名前付きシャドウ](#reserved-named-shadow)」を参照してください。

フリートインデックス作成は、ソフトウェアパッケージバージョンでフィルタリングされたモノの動的グループを通じて AWS IoT モノをグループ化できるようにするサポートを提供します。例えば、フリートインデックス作成では、特定のパッケージバージョンがインストールされているモノ、されていないモノ、パッケージバージョンが何もインストールされていないモノ、特定の名前と値のペアに一致するモノを識別できます。最後に、フリートインデックスを作成すると、デバイスフリートの状態に関するインサイトを得るのに使用できる標準およびカスタムメトリクスが提供されます。詳細については、「[フリートインデックス作成の準備](preparing-fleet-indexing.md)」を参照してください。

**注記**  
Software Package Catalog のフリートインデックス作成を有効にすると、標準のサービスコストが発生します。詳細については、「[AWS IoT Device Management, Pricing](https://aws.amazon.com/iot-device-management/pricing/)」(、料金) を参照してください。

## 予約済みの名前付きシャドウ
<a name="reserved-named-shadow"></a>

予約済みの名前付きシャドウ、`$package` は、デバイスにインストールされているソフトウェアパッケージとパッケージバージョンの状態を反映しています。フリートインデックス作成では、予約済みの名前付きシャドウをデータソースとして使用して標準メトリクスとカスタムメトリクスを構築し、フリートの状態をクエリできるようにします。詳細については、「[フリートインデックス作成の準備](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-fleet-indexing.html)」を参照してください。

予約済みの名前付きシャドウは、名前があらかじめ定義されていて変更できないという点を除いて、[名前付きのシャドウ](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)と似ています。さらに、予約済みの名前付きシャドウはメタデータを更新せず、`version` および `attributes` のキーワードのみを使用します。

`description` など、他のキーワードを含む更新リクエストには、`rejected` トピックの下でエラーレスポンスが返されます。詳細については、「[Device Shadow エラーメッセージ](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-error-messages.html)」を参照してください。

コンソールを使用して AWS IoT モノを作成するとき、 AWS IoT ジョブが正常にシャドウを完了して更新するとき、および [https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html) API オペレーションを発行するときに作成できます。詳細については、 デ AWS IoT Core ベロッパーガイドの[UpdateThingShadow](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-rest-api.html#API_UpdateThingShadow)」を参照してください。

**注記**  
予約済みの名前付きシャドウをインデックスしても、フリートインデックスでインデックスできる名前付きシャドウの数にはカウントされません。クォータと制限の詳細については、「[AWS IoT Device Management フリートインデックス作成の制限とクォータ](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits)」を参照してください。さらに、 AWS IoT ジョブが正常に完了したときに予約された名前付きシャドウをジョブで更新することを選択した場合、API コールは Device Shadow およびレジストリオペレーションにカウントされ、コストが発生する可能性があります。詳細については、「[AWS IoT Device Management jobs limits and quotas](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#job-limits)」(ジョブの制限とクォータ) および [IndexingFilter](https://docs.aws.amazon.com/iot/latest/apireference/API_IndexingFilter.html) API データタイプを参照してください。

**`$package` シャドウの構造**

予約済みの名前付きシャドウには次のものが含まれます。

```
{
    "state": {
        "reported": {
            "<packageName>": {
                "version": "",
                "attributes": {
                }
            }
        }
    },
    "version" : 1
    "timestamp" : 1672531201
}
```

シャドウのプロパティは次の情報で更新されます。
+  `<packageName>`: インストール済みのソフトウェアパッケージの名前。[packageName](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackage.html#API_CreatePackage_RequestSyntax) パラメータで更新されます。
+  `version`: インストールされているパッケージバージョンの名前。[versionName](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackageVersion.html#API_CreatePackageVersion_RequestSyntax) パラメータで更新されます。
+  `attributes`: デバイスに保存され、フリートインデックスによってインデックス化されるオプションのメタデータ。これにより、保存されたデータに基づいてインデックスにクエリを実行できます。
+ `version`: シャドウのバージョン番号。シャドウが更新されるたびに自動的に増加し、`1` から開始します。
+ `timestamp`: シャドウが最後に更新された日時を示し、[Unix 時間](https://en.wikipedia.org/wiki/Unix_time)で記録されます。

名前付きシャドウの形式と動作の詳細については、「[AWS IoT Device Shadow サービス メッセージの順序](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html#message-ordering)」を参照してください。

## ソフトウェアパッケージとそのパッケージバージョンの削除
<a name="deleting-packages-and-versions"></a>

ソフトウェアパッケージを削除する前に、次の操作を行います。
+ パッケージとそのバージョンがアクティブにデプロイされていないことを確認します。
+ 最初に、関連するすべてのバージョンを削除します。いずれかのバージョンが**デフォルトバージョン**として指定されている場合は、指定されたデフォルトバージョンをパッケージから削除する必要があります。デフォルトバージョンの指定は任意であり、削除しても競合はありません。ソフトウェアパッケージからデフォルトバージョンを削除するには、コンソールからパッケージを編集するか、[ UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) API オペレーションを使用します。

指定されたデフォルトパッケージバージョンがない限り、コンソールを使用してソフトウェアパッケージを削除でき、そのパッケージバージョンもすべて削除されます。API コールを使用してソフトウェアパッケージを削除する場合は、最初にパッケージバージョンを削除してからソフトウェアパッケージを削除する必要があります。