

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS IoT Device Management 소프트웨어 패키지 카탈로그
<a name="software-package-catalog"></a>

 AWS IoT Device Management 소프트웨어 패키지 카탈로그를 사용하면 소프트웨어 패키지 및 해당 버전의 인벤토리를 유지할 수 있습니다. 패키지 버전을 개별 사물 및 AWS IoT 동적 사물 그룹에 연결하고 사내 프로세스 또는 [AWS IoT 작업을](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) 통해 배포할 수 있습니다.

소프트웨어 패키지는 하나의 단위로 배포할 수 있는 파일 모음인 패키지 버전을 하나 이상 포함합니다. 패키지 버전에는 펌웨어, 운영 체제 업데이트, 디바이스 애플리케이션, 구성 및 보안 패치가 포함될 수 있습니다. 시간이 흘러 소프트웨어가 발전하면 새 패키지 버전을 생성하여 플릿에 배포할 수 있습니다.

 AWS IoT 소프트웨어 패키지 허브는 내부에 있습니다 AWS IoT Core. 이 허브를 사용하여 소프트웨어 패키지 인벤토리 및 메타데이터를 중앙에서 등록 및 유지 관리할 수 있으며, 이렇게 하면 소프트웨어 패키지 및 해당 버전의 카탈로그가 생성됩니다. 디바이스에 배포된 소프트웨어 패키지 및 패키지 버전을 기준으로 디바이스를 그룹화할 수 있습니다. 이 기능을 사용하면 디바이스 측 패키지 인벤토리를 명명된 섀도우로 유지하고, 버전을 기반으로 디바이스를 연결 및 그룹화하고, 플릿 메트릭을 사용하여 플릿 전체의 패키지 버전 분포를 시각화할 수 있습니다.

사내 소프트웨어 배포 시스템을 구축한 경우 해당 프로세스를 계속 사용하여 패키지 버전을 배포할 수 있습니다. 배포 프로세스를 설정하지 않았거나 원하는 경우 [AWS IoT 작업](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html)을 사용하여 소프트웨어 패키지 카탈로그의 기능을 사용하는 것이 좋습니다. 자세한 내용은 [AWS IoT 작업 준비를](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-jobs-for-service-package-catalog.html) 참조하세요.

**Topics**
+ [소프트웨어 패키지 카탈로그 사용 준비](preparing-to-use-software-package-catalog.md)
+ [보안 준비](preparing-security.md)
+ [플릿 인덱싱 준비](preparing-fleet-indexing.md)
+ [AWS IoT 작업 준비](preparing-jobs-for-service-package-catalog.md)
+ [소프트웨어 패키지 카탈로그 시작](getting-started-with-software-package-catalog.md)

# 소프트웨어 패키지 카탈로그 사용 준비
<a name="preparing-to-use-software-package-catalog"></a>

다음 섹션에서는 패키지 버전 수명 주기에 대한 개요와 AWS IoT Device Management 소프트웨어 패키지 카탈로그 사용에 대한 정보를 제공합니다.

## 패키지 버전 수명 주기
<a name="package-version-lifecycle"></a>

패키지 버전은 `draft`, `published`, 및 `deprecated`와 같은 수명 주기 상태를 따라 변화할 수 있습니다. `deleted` 상태일 수도 있습니다.

![\[Draft, Published, Deprecated 상태를 거치는 패키지 버전 수명 주기. Deleted 상태일 수도 있습니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/package-catalog-version-lifecycle.png)

+ **Draft**

  패키지 버전이 생성되면 `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**

  패키지 버전을 배포할 준비가 되면 패키지 버전을 `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`로 전환할 수 있습니다. 더 이상 사용되지 않는 패키지 버전으로 작업을 배포할 수 있습니다. 사용되지 않는 패키지 버전의 이름을 기본 버전으로 지정하고 설명 및 태그만 편집할 수도 있습니다.

  버전이 오래된 경우 패키지 버전을 `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) 파라미터를 참으로 설정하세요.

  콘솔을 통해 소프트웨어 패키지를 삭제하면 기본 버전으로 명명되지 않은 한 해당 패키지와 관련된 모든 패키지 버전이 삭제됩니다.

## 패키지 버전 명명 규칙
<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` 상태가 되며 패키지 버전을 Published로 전환하기 전까지는 기본 버전으로 명명할 수 없습니다. 소프트웨어 패키지 카탈로그는 자동으로 버전을 기본 버전으로 선택하거나 새 패키지 버전을 기본 버전으로 업데이트하지 않습니다. 콘솔을 통해 또는 [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).

패키지 버전에서 사용되는 버전 속성은 예약 및 명명된 섀도우에 자동으로 추가되지 않으며 플릿 인덱싱을 통해 직접 인덱싱하거나 쿼리할 수 없습니다. 플릿 인덱싱을 통해 패키지 버전 속성을 인덱싱하거나 쿼리하려면 예약 및 명명된 섀도우에 버전 속성을 채우면 됩니다.

예약 및 명명된 섀도우 캡처 디바이스에서 보고한 속성(예: 운영 체제 및 설치 시간)의 버전 속성 파라미터를 사용하는 것이 좋습니다. 플릿 인덱싱을 통해 인덱싱하고 쿼리할 수도 있습니다.

버전 속성에 대한 특정 명명 규칙을 따를 필요는 없습니다. 비즈니스 요구 사항에 맞게 이름-값 페어를 만들 수 있습니다. 패키지 버전의 모든 속성을 합친 크기는 3KB로 제한됩니다. 자세한 내용은 [소프트웨어 패키지 카탈로그 소프트웨어 패키지 및 패키지 버전 제한](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 소프트웨어 패키지 카탈로그에 저장할 수 있습니다. 소프트웨어 패키지에는 하나 이상의 패키지 버전이 포함되어 있으며 각 패키지 버전은 하나 이상의 구성 요소로 구성됩니다. 특정 패키지 버전의 구성을 지원하는 각 구성 요소는 소프트웨어 재료표를 사용하여 설명하고 카탈로그화할 수 있습니다. 지원되는 소프트웨어 재료표에 대한 업계 표준은 SPDX 및 CycloneDX 입니다. SBOM이 처음 생성되면 SPDX 및 CycloneDX 산업 표준 형식에 대한 검증을 거칩니다. SPDX에 대한 자세한 내용은 [시스템 패키지 데이터 교환](https://spdx.dev/)을 참조하세요. CycloneDX에 대한 자세한 내용은 [CycloneDX](https://cyclonedx.org/)를 참조하세요.

소프트웨어 자료표는 패키지 정보, 파일 정보 및 기타 관련 메타데이터와 같은 특정 패키지 버전 구성 요소의 모든 측면을 설명합니다. SPDX 형식의 소프트웨어 재료표 문서 구조의 아래 예제를 참조하세요.

![\[SPDX 형식의 SBOM 예제입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/spdx-2.3-document.png)


### 소프트웨어 재료표 이점
<a name="spc-sbom-benefits"></a>

Software Package Catalog의 패키지 버전에 대한 소프트웨어 재료 명세서를 추가할 때 얻을 수 있는 주요 이점 중 하나는 취약성 관리입니다.

**취약성 관리**

소프트웨어 구성 요소의 명백한 보안 위험에 대한 취약성을 평가하고 완화하는 것은 디바이스 플릿의 무결성을 보호하는 데 여전히 중요합니다. 각 패키지 버전에 대해 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 파일은 단일 zip 아카이브 파일에 저장되어야 합니다.

버킷의 특정 Amazon S3 키 및 버전 ID는 패키지 버전에 대한 소프트웨어 재료표의 각 버전을 고유하게 식별하는 데 사용됩니다.

**참고**  
단일 SBOM 파일이 있는 패키지 버전의 경우 해당 SBOM 파일을 Amazon S3 버킷에 zip 아카이브 파일로 저장할 수 있습니다.  
여러 SBOM 파일이 있는 패키지 버전의 경우 모든 SBOM 파일을 단일 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을 적절한 소프트웨어 패키지 버전과 연결해야 합니다. AWS Management Console의 패키지 버전 페이지에 있는 **Amazon S3 객체 버전 ID** 열에 새 버전 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를 사용하여 AWS IoT 플릿 인덱싱을 활용하려면 예약된 명명 섀도(`$package`)를 인덱싱하고 지표를 수집하려는 각 디바이스의 데이터 소스로 설정합니다. 예약된 명명 섀도에 대한 자세한 내용은 [명명된 예약 섀도우](#reserved-named-shadow) 섹션을 참조하세요.

플릿 인덱싱은 소프트웨어 패키지 버전으로 필터링되는 동적 사물 그룹을 통해 AWS IoT 사물을 그룹화할 수 있는 지원을 제공합니다. 예를 들어 플릿 인덱싱은 특정 패키지 버전이 설치되어 있거나 설치되지 않은 사물, 패키지 버전이 설치되지 않은 사물, 특정 이름-값 페어와 일치하는 사물을 식별할 수 있습니다. 마지막으로, 플릿 인덱싱은 디바이스 플릿 상태에 대한 인사이트를 얻는 데 사용할 수 있는 표준 및 사용자 지정 지표를 제공합니다. 자세한 내용은 [플릿 인덱싱 준비](preparing-fleet-indexing.md) 단원을 참조하십시오.

**참고**  
소프트웨어 패키지 카탈로그에 플릿 인덱싱을 활성화하면 표준 서비스 비용이 발생합니다. 자세한 내용은 [AWS IoT Device Management요금](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` 주제에서 오류 응답을 받게 됩니다. 자세한 내용은 [디바이스 섀도우 오류 메시지](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 호출은 디바이스 섀도우 및 레지스트리 작업에 포함되며 비용이 발생할 수 있습니다. 자세한 내용은 [AWS IoT Device Management 작업 제한 및 할당량](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 디바이스 섀도우 서비스 메시지 순서](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 호출을 사용하여 소프트웨어 패키지를 삭제하는 경우 먼저 패키지 버전을 삭제한 다음 소프트웨어 패키지를 삭제해야 합니다.

# 보안 준비
<a name="preparing-security"></a>

이 섹션에서는 AWS IoT Device Management 소프트웨어 패키지 카탈로그의 주요 보안 요구 사항에 대해 설명합니다.

## 리소스 기반 인증
<a name="resource-based-authorization"></a>

소프트웨어 패키지 카탈로그는 리소스 기반 인증을 사용하여 플릿의 소프트웨어를 업데이트할 때 보안을 강화합니다. 즉, 소프트웨어 패키지 및 패키지 버전에 대해 `create`, `read`, `update``delete`, 및 `list` 작업을 수행할 권한을 부여하는 AWS Identity and Access Management (IAM) 정책을 생성하고 `Resources` 섹션에서 배포하려는 특정 소프트웨어 패키지 및 패키지 버전을 참조해야 합니다. [명명된 예약 섀도우](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#reserved-named-shadow)를 업데이트할 때도 이러한 권한이 필요합니다. 각 엔터티에 Amazon 리소스 이름(ARN)을 포함하여 소프트웨어 패키지 및 패키지 버전을 참조합니다.

**참고**  
정책에서 패키지 버전 API 직접 호출(예: [CreatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackageVersion.html), [UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html), [DeletePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackageVersion.html))에 대한 권한을 부여하려는 경우, 소프트웨어 패키지와 패키지 버전 ARN을 *둘 다* 정책에 포함해야 합니다. 정책에서 패키지 버전 API 직접 호출(예: [CreatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackage.html), [UpdatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackage.html), [DeletePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackage.html))에 대한 권한을 부여하려는 경우 소프트웨어 패키지 ARN만 정책에 포함해야 합니다.

소프트웨어 패키지 및 패키지 버전 ARN을 다음과 같이 구성하세요.
+ 소프트웨어 패키지: `arn:aws:iot:<region>:<accountID>:package/<packageName>/package` 
+ 패키지 버전: `arn:aws:iot:<region>:<accountID>:package/<packageName>/version/<versionName>` 

**참고**  
이 정책에 포함할 수 있는 기타 관련 권한도 있습니다. 예를 들어, `job`, `thinggroup` 및 `jobtemplate`에 대한 ARN을 포함할 수 있습니다. 자세한 내용과 정책 옵션의 전체 목록은 [AWS IoT 작업을 사용하여 사용자 및 디바이스 보안을 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs-security.html).

예를 들어 다음과 같이 명명된 소프트웨어 패키지 및 패키지 버전이 있는 경우:
+ AWS IoT 사물: `myThing`
+ 패키지 이름: `samplePackage`
+ 버전: `1.0.0`

정책은 다음과 같을 수 있습니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:createPackage",
                "iot:createPackageVersion",
                "iot:updatePackage",
                "iot:updatePackageVersion"
            ],
            "Resource": [
               "arn:aws:iot:us-east-1:111122223333:package/samplePackage",
               "arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/1.0.0"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Resource": "arn:aws:iot:us-east-1:111122223333:thing/myThing/$package"
        }
    ]
}
```

## AWS IoT 패키지 버전을 배포할 수 있는 작업 권한
<a name="job-rights-deploy-versions"></a>

보안을 위해 패키지 및 패키지 버전을 배포할 권한을 부여하고 배포가 허용된 특정 패키지 및 패키지 버전의 이름을 지정하는 것이 중요합니다. 이를 위해서는 패키지 버전으로 작업을 배포할 권한을 부여하는 IAM 역할과 정책을 만듭니다. 정책은 대상 패키지 버전을 리소스로 지정해야 합니다.

**IAM 정책**

IAM 정책은 `Resource` 섹션에 명명된 패키지 및 버전을 포함하는 작업을 생성할 권한을 부여합니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:CreateJob",
                "iot:CreateJobTemplate"
            ],
            "Resource":[
                "arn:aws:iot:*:111122223333:job/<jobId>",
                "arn:aws:iot:*:111122223333:thing/<thingName>/$package",
                "arn:aws:iot:*:111122223333:thinggroup/<thingGroupName>",
                "arn:aws:iot:*:111122223333:jobtemplate/<jobTemplateName>",
                "arn:aws:iot:*:111122223333:package/<packageName>/version/<versionName>"
            ]
        }
    ]
}
```

**참고**  
소프트웨어 패키지와 패키지 버전을 제거하는 작업을 배포하려면 다음과 같이 패키지 버전이 `$null`인 ARN을 승인해야 합니다.

```
arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$null
```

## AWS IoT 예약된 명명된 섀도우를 업데이트하는 작업 권한
<a name="job-rights-update-reserved-named-shadow"></a>

작업이 성공적으로 완료되었을 때 작업이 사물의 명명된 예약 섀도우를 업데이트할 수 있게 하려면 IAM 역할 및 정책을 생성해야 합니다. AWS IoT 콘솔에서 이 작업을 수행하는 방법은 두 가지입니다. 첫 번째는 콘솔에서 소프트웨어 패키지를 만드는 것입니다. **패키지 관리를 위한 종속성 활성화** 대화 상자가 표시되면 기존 역할을 사용하거나 새 역할을 만들 수 있습니다. 또는 AWS IoT 콘솔에서 **설정**을 선택하고 **인덱싱 관리**를 선택한 다음 **디바이스 패키지 및 버전 인덱싱 관리**를 선택합니다.

**참고**  
 AWS IoT 작업이 성공적으로 완료되면 작업 서비스가 예약된 명명된 섀도우를 업데이트하도록 선택하면 API 호출이 **디바이스 섀도우 및 레지스트리 작업에** 포함되며 비용이 발생할 수 있습니다. 자세한 내용은 [AWS IoT Core 요금](https://aws.amazon.com/iot-core/pricing/)을 참조하십시오.

**역할 생성** 옵션을 사용하는 경우 생성된 역할 이름은 `aws-iot-role-update-shadows`로 시작되며 다음 정책을 포함합니다.

**역할 설정**

**권한**  
권한 정책은 사물 섀도우를 쿼리하고 업데이트할 권한을 부여합니다. 리소스 ARN의 `$package` 파라미터는 명명된 예약 섀도우를 대상으로 합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:DescribeEndpoint",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Resource": [
            "arn:aws:iot:us-east-1:111122223333:thing/<thingName>/$package"
            ]
        }
    ]
}
```

**신뢰 관계**  
권한 정책 외에도 역할에는 엔터티가 역할을 수임하고 명명된 예약 섀도우를 업데이트할 수 있도록 AWS IoT Core 와의 신뢰 관계가 필요합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "iot.amazonaws.com"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

**사용자 정책 설정**

**iam:PassRole 권한**  
마지막으로 [ UpdatePackageConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageConfiguration.html) API 작업을 호출할 AWS IoT Core 때 역할을에 전달할 권한이 있어야 합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "iot:UpdatePackageConfiguration"
            ],
            "Resource": "arn:aws:iam::111122223333:role/<roleName>"
        }
    ]
}
```

## AWS IoT Amazon S3에서 다운로드할 수 있는 작업 권한
<a name="job-rights-download-job-document"></a>

작업 문서는 Amazon S3에 저장됩니다. AWS IoT 작업을 통해 디스패치할 때이 파일을 참조합니다. AWS IoT 작업에게 파일()을 다운로드할 수 있는 권한을 제공해야 합니다`s3:GetObject`. 또한 Amazon S3와 AWS IoT 작업 간에 신뢰 관계를 설정해야 합니다. 이러한 정책을 생성하는 방법에 대한 지침은 [작업 관리](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html)에서 [미리 서명된 URL](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html#create-manage-jobs-presigned-URLs)을 참조하세요.

## 패키지 버전의 소프트웨어 재료 명세서를 업데이트할 수 있는 권한
<a name="job-rights-update-sbom"></a>

`Draft`, `Published`또는 `Deprecated` 수명 주기 상태에서 패키지 버전의 소프트웨어 재료표를 업데이트하려면 Amazon S3에서 새 소프트웨어 재료표를 찾고 패키지 버전을 업데이트하기 위한 AWS Identity and Access Management 역할 및 정책이 필요합니다 AWS IoT Core.

먼저 업데이트된 소프트웨어 재료표를 버전이 지정된 Amazon S3 버킷에 넣고 `sboms` 파라미터가 포함된 `[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)` API 작업을 직접적으로 호출합니다. 그런 다음 권한 있는 보안 주체가 생성한 IAM 역할을 수임하고, Amazon S3에서 업데이트된 소프트웨어 재료표를 찾고, AWS IoT Core for Software Package Catalog에서 패키지 버전을 업데이트합니다.

이 업데이트를 수행하려면 다음 정책이 필요합니다.

**정책**
+ Amazon S3의 버전 버킷에서 업데이트된 소프트웨어 재료표를 찾고 AWS IoT Core에서 패키지 버전을 업데이트할 수 있도록 IAM 역할을 수임하는 권한 있는 위탁자와 신뢰 관계를 설정하는 **신뢰 정책** 정책입니다.
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "s3.amazonaws.com"
            },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "iot.amazonaws.com"
            },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```
+ **권한 정책**: 패키지 버전에 대한 소프트웨어 자재 명세서가 저장되는 Amazon S3 버전 버킷에 액세스하고 AWS IoT Core에서 패키지 버전을 업데이트하는 정책입니다.
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::awsexamplebucket1"
                ]
            }
        ]
    }
    ```
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "iot:UpdatePackageVersion"
                ],
                "Resource": [
                    "arn:aws:iot:*:111122223333:package/<packageName>/version/<versionName>"
                ]
            }
        ]
    }
    ```
+ **역할 권한 전달**: `[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)` API 작업을 호출할 AWS IoT Core 때 IAM 역할을 Amazon S3 및에 전달할 수 있는 권한을 부여하는 정책입니다.
  +   
****  

    ```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:PassRole",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::awsexamplebucket1"
          ]
        }
      ]
    }
    ```
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "iam:PassRole",
                    "iot:UpdatePackageVersion"
                ],
                "Resource": "arn:aws:iam::111122223333:role/<roleName>"
            }
        ]
    }
    ```

**참고**  
`Deleted` 수명 주기 상태로 전환된 패키지 버전에서는 소프트웨어 재료표를 업데이트할 수 없습니다.

 AWS 서비스에 대한 IAM 역할 생성에 대한 자세한 내용은 [AWS 서비스에 권한을 위임할 역할 생성을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html).

Amazon S3 버킷 생성 및 객체 업로드에 대한 자세한 내용은 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 및 [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하세요.

# 플릿 인덱싱 준비
<a name="preparing-fleet-indexing"></a>

 AWS IoT 플릿 인덱싱을 사용하면 예약된 명명된 섀도우()를 사용하여 데이터를 검색하고 집계할 수 있습니다`$package`. [명명된 예약 섀도우](preparing-to-use-software-package-catalog.md#reserved-named-shadow) 및 동적 AWS IoT 사물 그룹을 쿼리하여 사물을 그룹화할 수도 있습니다. [https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html) 예를 들어 특정 패키지 버전을 사용하거나, 특정 패키지 버전이 설치되어 있지 않거나, 패키지 버전이 설치되어 있지 않은 AWS IoT 사물에 대한 정보를 찾을 수 있습니다. 속성을 결합하여 더 많은 인사이트를 얻을 수 있습니다. 예를 들어, 특정 버전이 설치되었고 특정 사물 유형(예: 버전 1.0.0, 사물 유형 pump\$1sensor)인 사물을 식별할 수 있습니다. 자세한 내용은 [플릿 인덱싱](https://docs.aws.amazon.com/iot/latest/developerguide/iot-indexing.html)을 참조하세요.

## `$package` 섀도우를 데이터 소스로 설정
<a name="shadow-as-data-source"></a>

소프트웨어 패키지 카탈로그에서 플릿 인덱싱을 사용하려면 플릿 인덱싱을 활성화하고, 명명된 섀도우를 데이터 소스로 설정하고, `$package`를 명명된 섀도우 필터로 정의해야 합니다. 플릿 인덱싱을 활성화하지 않은 경우 이 프로세스에서 활성화할 수 있습니다. 콘솔의 [AWS IoT Core](https://console.aws.amazon.com/iot/home)에서 **설정**을 열고 **인덱싱 관리**를 선택한 다음 **명명된 섀도우 추가**, **디바이스 소프트웨어 패키지 및 버전 추가**, **업데이트**를 선택합니다. 자세한 내용은 [사물 인덱싱 관리](https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#thing-index)를 참조하세요.

또는 첫 번째 패키지를 생성할 때 플릿 인덱싱을 활성화할 수 있습니다. **패키지 관리를 위한 종속성 활성화** 대화 상자가 나타나면 디바이스 소프트웨어 패키지 및 버전을 플릿 인덱싱에 데이터 소스로 추가하는 옵션을 선택합니다. 이 옵션을 선택하면 플릿 인덱싱도 활성화됩니다.

**참고**  
소프트웨어 패키지 카탈로그에 플릿 인덱싱을 활성화하면 표준 서비스 비용이 발생합니다. 자세한 내용은 [AWS IoT Device Management요금](https://aws.amazon.com/iot-device-management/pricing/)을 참조하세요.

## 콘솔에 표시된 지표
<a name="metrics-displayed-in-console"></a>

![\[표준 지표 이미지\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/package-catalog-discovery-metrics.png)


 AWS IoT 콘솔 소프트웨어 패키지 세부 정보 페이지의 **검색** 패널에는 `$package` 섀도우를 통해 수집된 표준 지표가 표시됩니다.
+ **현재 버전 배포** 차트는이 소프트웨어 패키지와 연결된 모든 디바이스의 AWS IoT 사물과 연결된 10개의 최신 패키지 버전에 대한 디바이스 수와 비율을 보여줍니다. **참고:** 소프트웨어 패키지의 패키지 버전이 차트에 레이블이 지정된 버전보다 많으면 **기타** 내에 그룹화되어 있는 것을 확인할 수 있습니다.
+ **기록 차트**는 지정된 기간 동안 선택한 패키지 버전과 관련된 디바이스 수를 보여줍니다. 처음부터 패키지 버전을 최대 5개까지 선택하고 날짜 범위와 시간 간격을 정의할 때까지 차트는 비어 있습니다. 차트의 파라미터를 선택하려면 **설정**을 선택합니다. 표시되는 패키지 버전 수에 차이가 있고 **기록 차트**에서 분석할 패키지 버전을 선택할 수 있기 때문에 **기록 차트**에 표시되는 데이터가 **현재 버전 배포** 차트와 다를 수 있습니다. **참고:** 시각화할 패키지 버전을 선택하면 해당 패키지 버전이 플릿 지표 최대 한도에 포함됩니다. 자세한 내용은 [ 플릿 인덱싱 제한 및 할당량](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits)을 참조하세요.

패키지 버전 배포 수집에 대한 인사이트를 얻을 수 있는 또 다른 방법은 [`getBucketsAggregation`을 통한 패키지 버전 배포 수집](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-fleet-indexing.html#package-version-distribution)을 참조하세요.

## 쿼리 패턴
<a name="query-patterns"></a>

Software Package Catalog를 사용한 플릿 인덱싱은 표준으로 지원되는 대부분의 기능(예: 용어, 구문, 검색 필드)을 사용합니다. 그러나 명명된 예약 섀도우(`$package`) `version` 키에는 비교 연산자(예: `<`보다 작거나 `>`보다 큼)와 `range` 쿼리를 사용할 수 없습니다. 이러한 쿼리는 `attributes` 키에 사용할 수 있습니다. 자세한 내용은 [쿼리 구문](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)을 참조하세요.

### 예시 데이터
<a name="query-patterns-example-data"></a>

**참고:** 명명된 예약 섀도우와 그 구조에 대한 자세한 내용은 [명명된 예약 섀도우](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#reserved-named-shadow)를 참조하세요.

이 예시에서는 첫 번째 디바이스의 이름이 `AnyThing`이고 다음 패키지가 설치되어 있습니다.
+ 소프트웨어 패키지: `SamplePackage`

  패키지 버전: `1.0.0`

  패키지 ID: `1111`

섀도우는 다음과 같습니다.

```
{
    "state": {
        "reported": {
            "SamplePackage": {
                "version": "1.0.0",
                "attributes": {
                    "s3UrlForSamplePackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile1",
                    "packageID": "1111"
                    }
            }
        }
    }
}
```

두 번째 디바이스는 이름이 `AnotherThing`이고며 다음 패키지가 설치되어 있습니다.
+ 소프트웨어 패키지: `SamplePackage`

  패키지 버전: `1.0.0`

  패키지 ID: `1111`
+ 소프트웨어 패키지: `OtherPackage`

  패키지 버전: `1.2.5`

  패키지 ID: `2222`

섀도우는 다음과 같습니다.

```
{
    "state": {
        "reported": {
            "SamplePackage": {
                "version": "1.0.0",
                "attributes": {
                    "s3UrlForSamplePackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile1",
                    "packageID": "1111"
                }
            },
            "OtherPackage": {
                "version": "1.2.5",
                "attributes": {
                    "s3UrlForOtherPackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile2",
                    "packageID": "2222"
                    }
            },
        }
    }
}
```

### 샘플 쿼리
<a name="sample-queries"></a>

다음 테이블에는 `AnyThing` 및 `AnotherThing`에 대한 예시 디바이스 섀도우를 기반으로 한 샘플 쿼리가 나열되어 있습니다. 자세한 내용은 [예시 사물 쿼리](https://docs.aws.amazon.com/iot/latest/developerguide/example-queries.html)를 참조하세요.


**FreeRTOS AWS IoT Device Tester 용의 최신 버전**  

| **요청된 정보** | **Query** | **결과** | 
| --- | --- | --- | 
|  특정 패키지 버전이 설치된 사물  |  `shadow.name.$package.reported.SamplePackage.version:1.0.0`  |  `AnyThing`, `OtherThing`  | 
|  특정 패키지 버전이 설치되지 않은 사물  |  `NOT shadow.name.$package.reported.OtherPackage.version:1.2.5`  |  `AnyThing`  | 
|  패키지 ID가 1500보다 큰 패키지 버전을 사용하는 모든 디바이스  |  `shadow.name.$package.reported.*.attributes.packageID>1500"`  |  `OtherThing`  | 
|  특정 패키지가 설치되어 있고 두 개 이상의 패키지가 설치된 사물  |  `shadow.name.$package.reported.SamplePackage.version:1.0.0 AND shadow.name.$package.reported.totalCount:2`  |  `OtherThing`  | 

## `getBucketsAggregation`을 통한 패키지 버전 배포 수집
<a name="package-version-distribution"></a>

 AWS IoT 콘솔 내의 **검색** 패널 외에도 [https://docs.aws.amazon.com/iot/latest/apireference/API_GetBucketsAggregation.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetBucketsAggregation.html) API 작업을 사용하여 패키지 버전 배포 정보를 가져올 수도 있습니다. 패키지 버전 배포 정보를 가져오려면 다음을 수행해야 합니다.
+ 각 소프트웨어 패키지의 플릿 인덱싱 내에서 사용자 지정 필드를 정의합니다. **참고:** 사용자 지정 필드를 생성하는 것은 [AWS IoT 플릿 인덱싱 서비스](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits) 할당량에 포함됩니다.
+ 다음과 같이 사용자 지정 필드의 형식을 지정합니다.

  `shadow.name.$package.reported.<packageName>.version`

자세한 내용은 AWS IoT 플릿 인덱싱의 [사용자 지정 필드](https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#custom-field) 섹션을 참조하세요.

# AWS IoT 작업 준비
<a name="preparing-jobs-for-service-package-catalog"></a>

AWS IoT Device Management 소프트웨어 패키지 카탈로그는 대체 파라미터, AWS IoT 플릿 인덱싱, 동적 사물 그룹 및 AWS IoT 사물의 예약된 명명된 섀도우와의 통합을 통해 AWS IoT 작업을 확장합니다.

**참고**  
 소프트웨어 패키지 카탈로그에서 제공하는 모든 기능을 사용하려면 다음과 같은 AWS Identity and Access Management (IAM) 역할 및 정책을 생성해야 합니다. [AWS IoT 패키지 버전을 배포할 수 있는 작업 권한](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-security.html#job-rights-deploy-versions) 및 [AWS IoT 예약된 명명된 섀도우를 업데이트할 수 있는 작업 권한](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-security.html#job-rights-update-reserved-named-shadow). 자세한 내용은 [보안 준비](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-security.html)를 참조하세요.

## AWS IoT 작업의 대체 파라미터
<a name="substitution-parameters"></a>

대체 파라미터를 AWS IoT 작업 문서 내에서 자리 표시자로 사용할 수 있습니다. 작업 서비스는 대체 파라미터를 발견하면 작업이 해당 파라미터 값에 대한 명명된 소프트웨어 버전의 속성을 가리키도록 합니다. 이 프로세스를 사용하여 단일 작업 문서를 만들고 범용 속성을 통해 메타데이터를 작업에 전달할 수 있습니다. 예를 들어 패키지 버전 속성을 통해 Amazon Simple Storage Service(S3) URL, 소프트웨어 패키지 Amazon 리소스 이름(ARN) 또는 서명을 작업 문서에 전달할 수 있습니다.

작업 문서에서 대체 파라미터의 형식을 다음과 같이 지정해야 합니다.
+ **소프트웨어 패키지 이름 및 패키지 버전**
  + `package::version` 사이의 빈 문자열은 소프트웨어 패키지 이름 대체 파라미터를 나타냅니다. `version::attribute` 사이의 빈 문자열은 소프트웨어 패키지 버전 대체 파라미터를 나타냅니다. 작업 문서에서 패키지 이름 및 패키지 버전 대체 파라미터를 사용하려면 다음 예시를 참조하세요. `${aws:iot:package::version::attributes:<attributekey>}`.
  + 작업 문서는 패키지 버전 세부 정보의 *버전 ARN*을 사용하여 이러한 대체 파라미터를 자동으로 채웁니다. API 또는 CLI 명령을 사용하여 단일 패키지 배포에 대한 작업 또는 작업 템플릿을 생성하는 경우 패키지 버전의 *버전 ARN*은 `CreateJob` 및 `DescribeJob`의 `destinationPackageVersions` 파라미터로 표시됩니다.
+ **소프트웨어 패키지 버전의 모든 속성**
  + 작업 문서에서 소프트웨어 패키지 버전 대체 파라미터의 모든 속성을 사용하려면 다음 예제를 참조하세요. `${aws:iot:package:<packageName>:version:<versionName>:attributes}`.

**참고**  
패키지 이름, 패키지 버전 및 모든 속성 대체 파라미터를 함께 사용할 수 있습니다. 작업 문서에서 세 가지 대체 파라미터를 모두 사용하려면 다음 예제를 참조하세요. `${aws:iot:package::version::attributes}`.

이 예시에는 이름이 `samplePackage`인 소프트웨어 패키지가 있고 이 패키지에는 이름이 `2.1.5`이고 속성이 다음과 같은 패키지 버전이 있습니다.
+ 이름: `s3URL`, 값: `https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile`
  + 이 속성은 Amazon S3에 저장된 코드 파일의 위치를 식별합니다.
+ 이름: `signature`, 값: `aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj`
  + 이 속성은 디바이스에 보안 조치로 필요한 코드 서명 값을 제공합니다. 자세한 내용은 [작업용 코드 서명](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html#create-manage-jobs-code-signing)을 참조하세요. **참고:** 이 속성은 예시이며 소프트웨어 패키지 카탈로그 또는 작업에 필요하지 않습니다.

`s3URL`의 경우, 작업 문서 파라미터는 다음과 같이 작성됩니다.

```
{
"samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}"
}
```

`signature`의 경우, 작업 문서 파라미터는 다음과 같이 작성됩니다.

```
{
"samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}"
}
```

전체 작업 문서는 다음과 같이 작성됩니다.

```
{
  ...
  "Steps": {
    "uninstall": ["samplePackage"],
    "download": [ 
      { 
        "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}"
      },
    ],
    "signature": [
      "samplePackage" : "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}"
    ]
  }
}
```

대체가 이루어지면 다음 작업 문서가 디바이스에 배포됩니다.

```
{
  ...
  "Steps": {
    "uninstall": ["samplePackage"],
    "download": [ 
      { 
        "samplePackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile"
      },
    ],
    "signature": [
      "samplePackage" : "aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj"
    ]
  }
}
```

**대체 파라미터(전/후 보기)**

대체 파라미터는 기본 패키지 버전의 `$default`와 같은 다양한 플래그를 사용하여 작업 문서 생성을 간소화합니다. 이렇게 하면 해당 플래그가 특정 패키지 버전에서 참조된 메타데이터로 자동 채워지므로 각 작업 배포에 대해 특정 패키지 버전 메타데이터를 수동으로 입력할 필요가 없습니다. 기본 패키지 버전의 `$default`와 같은 패키지 버전 속성에 대한 자세한 내용은 [배포를 위한 작업 문서 및 패키지 버전 준비](#preparing-to-deploy) 섹션을 참조하세요.

에서 패키지 버전의 작업 배포 중에 *배포 지침 파일 편집기* 창의 *대체 미리* 보기 버튼을 AWS Management Console전환하여 대체 파라미터가 있거나 없는 작업 문서를 봅니다.

`DescribeJob` 및 `GetJobDocument` API의 'before-substitution' 파라미터를 사용하면 대체 파라미터가 제거되기 전과 후에 API 응답을 볼 수 있습니다. `DescribeJob` 및 `GetJobDocument` API에 대한 다음 예시를 참조하세요.
+ `DescribeJob`
  + 기본 보기

    ```
    {
        "jobId": "<jobId>",
        "description": "<description>",
        "destinationPackageVersions": ["arn:aws:iot:us-west-2:123456789012:package/TestPackage/version/1.0.2"]
    }
    ```
  + 대체 보기 전

    ```
    {
        "jobId": "<jobId>",
        "description": "<description>",
        "destinationPackageVersions": ["arn:aws:iot:us-west-2:123456789012:package/TestPackage/version/$default"]
    }
    ```
+ `GetJobDocument`
  + 기본 보기

    ```
    {
        "attributes": {
            "location": "prod-artifacts.s3.us-east-1.amazonaws.com/mqtt-core",
            "signature": "IQoJb3JpZ2luX2VjEIrwEaCXVzLWVhc3QtMSJHMEUCIAofPNPpZ9cI",
            "streamName": "mqtt-core",
            "fileId": "0"
        },
    }
    ```
  + 대체 보기 전

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

 AWS IoT 작업, 작업 문서 생성 및 작업 배포에 대한 자세한 내용은 [작업을 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html).

## 배포를 위한 작업 문서 및 패키지 버전 준비
<a name="preparing-to-deploy"></a>

패키지 버전이 생성되면 배포 준비 중임을 나타내기 위해 `draft` 상태가 됩니다. 배포를 위해 패키지 버전을 준비하려면 반드시 작업 문서를 생성하고, 작업이 액세스할 수 있는 위치(예: Amazon S3)에 문서를 저장하고, 패키지 버전에 작업 문서에서 사용할 속성 값이 있는지 확인하고, 패키지 버전을 게시해야 합니다. (참고: `draft` 상태에 있는 동안에만 패키지 버전의 속성을 업데이트할 수 있습니다.) 

단일 패키지 배포를 위한 AWS IoT 작업 또는 작업 템플릿을 생성할 때 작업 문서를 사용자 지정하는 다음과 같은 옵션이 있습니다.

**배포 지침 파일(`recipe`)**
+ 패키지 버전의 배포 지침 파일에는 패키지 버전을 여러 디바이스에 배포하기 위한 인라인 작업 문서를 포함한 배포 지침이 포함되어 있습니다. 파일은 빠르고 효율적인 작업 배포를 위해 패키지 버전에 특정 배포 지침을 연결합니다.

  에서 새 패키지 생성 워크플로의 *버전* *배포 구성 탭에 있는 배포 지침 파일 미리 보기* 창에서 파일을 생성할 AWS Management Console수 있습니다. AWS IoT 를 사용하여 *권장 파일에서 시작을 사용하여 패키지 버전 속성에서 AWS IoT 지침 파일을* 자동으로 생성하거나 자체 배포 지침 파일 사용을 사용하여 Amazon S3 버킷에 저장된 기존 작업 문서를 사용할 수 있습니다. ** 
**참고**  
자체 작업 문서를 사용하는 경우 *배포 지침 파일 미리 보기* 창에서 직접 업데이트할 수 있지만 Amazon S3 버킷에 저장된 원본 작업 문서는 자동으로 업데이트되지 않습니다.

   AWS CLI 또는 `CreatePackageVersion`, `GetPackageVersion`또는와 같은 API 명령을 사용하는 경우는 인라인 작업 문서가 포함된 배포 지침 파일을 `UpdatePackageVersion` `recipe` 나타냅니다.

  작업 문서가 무엇인지에 대한 자세한 내용은 [기본 개념](key-concepts-jobs.md#basic-concepts-jobs) 섹션을 참조하세요.

  `recipe`로 표시된 배포 지침 파일은 다음 예시를 참조하세요.

  ```
  {
      "packageName": "sample-package-name",
      "versionName": "sample-package-version",
      ...
      "recipe": "{...}"
  }
  ```
**참고**  
패키지 버전이 패키지 버전 메타데이터와 별개인 `published` 상태일 때 `recipe`로 표시되는 배포 지침 파일을 업데이트할 수 있습니다. 작업 배포 중에는 변경할 수 없습니다.

**`Artifact` 버전 속성**
+ 소프트웨어 패키지 버전의 버전 속성 `artifact`를 사용하여 패키지 버전 아티팩트의 Amazon S3 위치를 추가할 수 있습니다. AWS IoT 작업을 사용하여 패키지 버전의 작업 배포가 트리거되면 ` ${aws:iot:package:<packageName>:version:<versionName>:artifact-location:s3-presigned-url}` 작업 문서의 미리 서명된 URL 자리 표시자는 Amazon S3 버킷, 버킷 키 및 Amazon S3 버킷에 저장된 파일의 버전을 사용하여 업데이트됩니다. 패키지 버전 아티팩트를 저장하는 Amazon S3 버킷은 패키지 버전이 생성된 동일한 리전에 있어야 합니다.
**참고**  
Amazon S3 버킷에 동일한 파일의 여러 객체 버전을 저장하려면 버킷에서 버전 관리를 활성화해야 합니다. 자세한 내용은 [버킷에 버전 관리 사용 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)을 참조하세요.

  `CreatePackageVersion` 또는 `UpdatePackageVersion` API 작업을 사용할 때 Amazon S3 버킷의 패키지 버전 아티팩트에 액세스하려면 다음 권한이 있어야 합니다.  
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "s3:GetObjectVersion",
              "Resource": "arn:aws:s3:::bucket-name/key-name"
          }
      ]
  }
  ```

  `CreatePackageVersion` 및 `UpdatePackageVersion` API 작업의 버전 속성 `artifact`에 대한 자세한 내용은 [CreatePackageVersion](https://amazonaws.com/iot/latest/apireference/API_CreatePackageVersion.html) 및 [UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)을 참조하세요.

  새 패키지 버전을 생성할 때 Amazon S3에서 아티팩트 위치를 지원하는 버전 속성 `artifact`를 보여주는 다음 예시를 참조하세요.

  ```
  {
      "packageName": "sample package name",
      "versionName": "1.0",
      "artifact": {
          "s3Location": {
              "bucket": "firmware",
              "key": "image.bin",
              "version": "12345"
          }
      }
  }
  ```
**참고**  
패키지 버전이 `draft` 상태에서 `published` 상태로 업데이트되면 패키지 버전 속성과 아티팩트 위치를 변경할 수 없게 됩니다. 이 정보를 업데이트하려면 새 패키지 버전을 생성하고 `draft` 상태에서 해당 업데이트를 수행해야 합니다.

**패키지 버전**
+ 기본 소프트웨어 패키지 버전은 안전하고 안정적인 패키지 버전을 제공하는 소프트웨어 패키지의 사용 가능한 버전에 표시될 수 있습니다. 이는 AWS IoT 작업을 사용하여 디바이스 플릿에 기본 패키지 버전을 배포할 때 소프트웨어 패키지의 기본 버전으로 사용됩니다. 소프트웨어 `$default` 패키지의 패키지 버전을 배포하는 작업을 생성할 때 작업 문서와 새 작업 배포의 패키지 버전이 `$default`와 일치해야 합니다. 작업 배포의 패키지 버전은 API 및 CLI 명령의 경우 `destinationPackageVersions`로 표시되고 `VersionARN`에서는 AWS Management Console로 표시됩니다. 작업 문서의 패키지 버전은 아래에 표시된 다음 작업 문서 자리 표시자로 표시됩니다.

  ```
  arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$default
  ```

  기본 패키지 버전을 사용하여 작업 또는 작업 템플릿을 생성하려면 아래와 같이 `CreateJob` 또는 `CreateJobTemplate` API 명령에서 `$default` 플래그를 사용합니다.

  ```
  "$ aws iot create-job \
      --destination-package-versions "arn:aws:iot:us-west-2:123456789012:package/TestPackage/version/$default"
      --document file://jobdoc.json
  ```
**참고**  
기본 버전을 참조하는 `$default` 패키지 버전 속성은 AWS IoT 작업을 통한 작업 배포에 대한 기본 패키지 버전을 참조할 때만 필요한 선택적 속성입니다.

패키지 버전이 만족스러우면 AWS IoT 콘솔의 소프트웨어 패키지 세부 정보 페이지를 통해 게시하거나 [UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) API 작업을 실행하여 게시합니다. 그런 다음 AWS IoT 콘솔을 통해 또는 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API 작업을 실행하여 작업을 생성할 때 패키지 버전을 참조할 수 있습니다.

## 배포 시 패키지 및 버전 이름 지정
<a name="naming-package-versions"></a>

소프트웨어 패키지 버전을 디바이스에 배포하려면 작업 문서에 참조된 소프트웨어 패키지 및 패키지 버전이 `CreateJob` API 작업의 `destinationPackageVersions` 파라미터에 명시된 소프트웨어 패키지 및 패키지 버전과 일치하는지 확인합니다. 일치하지 않는 경우 두 참조를 모두 일치하라는 오류 메시지가 표시됩니다. Software Package Catalog 오류 메시지에 대한 자세한 내용은 [오류 메시지 일반 문제 해결](software-package-catalog-troubleshooting.md#spc-general-troubleshooting) 섹션을 참조하세요.

작업 문서에 참조된 소프트웨어 패키지 및 패키지 버전 외에도 작업 문서에 참조되지 않은 `CreateJob` API 작업의 `destinationPackageVersions` 파라미터에 추가 소프트웨어 패키지 및 패키지 버전을 포함할 수 있습니다. 디바이스가 추가 소프트웨어 패키지 버전을 올바르게 설치하는 데 필요한 설치 정보가 작업 문서에 포함되어 있는지 확인합니다. `CreateJob ` API 작업에 대한 자세한 내용은 [CreateJob](https://amazonaws.com/iot/latest/apireference/API_CreateJob.html) 섹션을 참조하세요.

## AWS IoT 동적 사물 그룹을 통한 작업 대상 지정
<a name="jobs-and-dynamic-groups"></a>

Software Package Catalog는 [플릿 인덱싱](https://docs.aws.amazon.com/iot/latest/developerguide/iot-indexing.html), [AWS IoT 작업](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html) 및 [AWS IoT 동적 사물 그룹](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html)과 함께 작동하여 플릿 내의 디바이스를 필터링하고 타게팅하여 디바이스에 배포할 패키지 버전을 선택합니다. 디바이스의 현재 패키지 정보를 기반으로 플릿 인덱싱 쿼리를 실행하고 해당 작업을 대상으로 지정할 수 있습니다 AWS IoT . 소프트웨어 업데이트를 릴리스할 수도 있지만 적합한 대상 디바이스에만 릴리스할 수 있습니다. 예를 들어, 현재 `iot-device-client 1.5.09`를 실행하는 디바이스에만 구성을 배포하도록 지정할 수 있습니다. 자세한 내용은 [동적 사물 그룹 생성](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html#create-dynamic-thing-group)을 참조하세요.

## 명명된 예약 섀도우 및 패키지 버전
<a name="reserved-shadow-and-package-versions"></a>

구성된 경우 AWS IoT 작업이 성공적으로 완료되면 작업에서 예약된 섀도우(`$package`)를 업데이트할 수 있습니다. 이렇게 하면 패키지 버전을 사물의 명명된 예약 섀도우에 수동으로 연결할 필요가 없습니다.

다음과 같은 상황에서는 패키지 버전을 사물의 명명된 예약 섀도우에 수동으로 연결하거나 업데이트하도록 선택할 수 있습니다.
+ 설치된 패키지 버전을 연결 AWS IoT Core 하지 않고에 사물을 등록합니다.
+ AWS IoT 사물의 예약된 명명된 섀도우를 업데이트하도록 작업이 구성되지 않았습니다.
+ 사내 프로세스를 사용하여 패키지 버전을 플릿으로 디스패치하고 해당 프로세스가 AWS IoT Core 완료되면 업데이트되지 않습니다.

**참고**  
 AWS IoT 작업을 사용하여 예약된 명명된 섀도우()에서 패키지 버전을 업데이트하는 것이 좋습니다`$package`. AWS IoT 작업이 `$package` 섀도우를 업데이트하도록 구성된 경우 다른 프로세스(예: 수동 또는 프로그래밍 방식 API 호출)를 통해 섀도우의 버전 파라미터를 업데이트하면 디바이스의 실제 버전과 예약된 명명된 섀도우에 보고된 버전 간에 불일치가 발생할 수 있습니다.

콘솔 또는 [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 작업을 통해 사물의 명명된 예약 섀도우(`$package`)에 패키지 버전을 추가하거나 업데이트할 수 있습니다. 자세한 내용은 [패키지 버전을 AWS IoT 사물에 연결을 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/associating-package-version.html).

**참고**  
패키지 버전을 AWS IoT 사물에 연결해도 디바이스 소프트웨어가 직접 업데이트되지는 않습니다. 디바이스 소프트웨어를 업데이트하려면 패키지 버전을 디바이스에 배포해야 합니다.

## 소프트웨어 패키지 및 패키지 버전 제거
<a name="uninstalling-packages-and-versions"></a>

`$null`는 AWS IoT Jobs 서비스에 디바이스의 예약된 명명된 섀도우에서 기존 소프트웨어 패키지 및 패키지 버전을 제거하라는 메시지를 표시하는 예약 자리 표시자입니다`$package`. 자세한 내용은 [명명된 예약 섀도우](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#reserved-named-shadow)를 참조하세요.

이 기능을 사용하려면 버전명의 끝에 있는 [destinationPackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html#iot-CreateJobTemplate-request-destinationPackageVersions) Amazon Resource Name(ARN)을 `$null`로 바꿔야 합니다. 그런 다음 디바이스에서 소프트웨어를 제거하도록 서비스에 지시합니다.

승인된 ARN은 다음의 형식을 사용합니다.

```
arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$null
```

예:

```
$ aws iot create-job \
    ... \
    --destinationPackageVersions ["arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/$null"]
```

# 소프트웨어 패키지 카탈로그 시작
<a name="getting-started-with-software-package-catalog"></a>

, AWS Management Console AWS IoT Core API 작업 및 AWS Command Line Interface ()를 통해 AWS IoT Device Management 소프트웨어 패키지 카탈로그를 빌드하고 유지 관리할 수 있습니다AWS CLI.

**참고**  
 AWS IoT 플릿 인덱싱을 활성화하려면 소프트웨어 패키지 카탈로그를 사용해야 합니다. 에서 소프트웨어 패키지 버전을 생성하고 `CreatePackage` API 명령을 AWS Management Console 사용하는 등의 기본 작업은 AWS IoT 플릿 인덱싱을 활성화하지 않으면 실패합니다.  
소프트웨어 패키지 카탈로그에서 AWS IoT 플릿 인덱싱을 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[플릿 인덱싱 준비](preparing-fleet-indexing.md).

**콘솔 사용**

를 사용하려면 AWS 계정에 AWS Management Console로그인하고 로 이동합니다[AWS IoT Core](https://console.aws.amazon.com/iot/home). 탐색 창에서 **소프트웨어 패키지**를 선택합니다. 그런 다음 이 섹션에서 패키지와 해당 버전을 만들고 관리할 수 있습니다.

**API 또는 CLI 작업 사용**

 AWS IoT Core API 작업을 사용하여 소프트웨어 패키지 카탈로그 기능을 생성하고 관리할 수 있습니다. 자세한 내용은 [AWS IoT API 참조](https://docs.aws.amazon.com/iot/latest/apireference/)와AWS [ SDK 및 도구](https://aws.amazon.com/developer/tools/)를 참조하세요. AWS CLI 명령은 카탈로그도 관리합니다. 자세한 내용은 [AWS IoT CLI 명령 참조](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html)를 참조하세요.

**Topics**
+ [소프트웨어 패키지 및 패키지 버전 생성](creating-package-and-version.md)
+ [AWS IoT 작업을 통해 패키지 버전 배포](deploying-package-version.md)
+ [패키지 버전을 AWS IoT 사물에 연결](associating-package-version.md)

# 소프트웨어 패키지 및 패키지 버전 생성
<a name="creating-package-and-version"></a>

다음 단계에 따라 AWS Management Console을 통해 패키지와 초기 버전을 만들 수 있습니다.

**소프트웨어 패키지를 만드는 방법**

1.  AWS 계정에 로그인하고 [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)로 이동합니다.

1.  탐색 창에서 **소프트웨어 패키지**를 선택합니다.

1.  **AWS IoT 소프트웨어 패키지** 페이지에서 **패키지 생성**을 선택합니다. **패키지 관리를 위한 종속성 활성화** 대화 상자가 나타납니다.

1.  **플릿 인덱싱**에서 **디바이스 소프트웨어 패키지 및 버전 추가**를 선택합니다. 이는 소프트웨어 패키지 카탈로그에 필요하며 플릿에 대한 플릿 인덱싱 및 지표를 제공합니다.

1. [선택 사항] AWS IoT 작업이 성공적으로 완료되면 예약된 명명된 섀도우를 업데이트하도록 하려면 **작업에서 섀도우 자동 업데이트를** 선택합니다. AWS IoT 작업이이 업데이트를 수행하지 않도록 하려면이 확인란을 선택하지 않은 상태로 둡니다.

1.  [선택 사항] 예약된 명명된 섀도우를 업데이트할 수 있는 권한을 AWS IoT 작업에 부여하려면 **역할 선택**에서 **역할 생성을** 선택합니다. AWS IoT 작업이이 업데이트를 수행하지 않도록 하려면이 역할이 필요하지 않습니다.

1. 역할을 생성하거나 선택합니다.

   1. 이 목적을 위한 **역할이 없는** 경우: **역할 생성**생성 대화 상자가 나타나면 **역할 이름**을 입력한 다음 **생성**을 선택합니다.

   1. 이 목적을 위한 **역할이 있는** 경우: **역할 선택**에서 역할을 선택한 다음 **IAM 역할에 정책 연결** 확인란이 선택되어 있는지 확인합니다.

1. **확인**을 선택합니다. **새 패키지 생성** 페이지가 나타납니다.

1. **패키지 세부 정보**에서 **패키지 이름**을 입력합니다.

1. **패키지 설명**에서 이 패키지를 식별하고 관리하는 데 도움이 되는 정보를 입력합니다.

1. [선택 사항] 태그를 사용하여 이 패키지를 분류하고 관리할 수 있습니다. 태그를 추가하려면 **태그**를 확장하고 태그 **추가**를 선택한 다음 키-값 페어를 입력합니다. 최대 50개의 태그를 추가할 수 있습니다. 자세한 내용은 [AWS IoT 리소스 태그 지정을 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/tagging-iot.html).

**새 패키지를 만들 때 패키지 버전을 추가하는 방법**

1. **첫 번째 버전**에서 **버전 이름**을 입력합니다.

   패키지 버전을 고유하게 식별하려면 [SemVer 형식](https://semver.org/)(예:`1.0.0.0`)을 사용하는 것이 좋습니다. 사용 사례에 더 적합한 다른 형식 지정 전략을 사용할 수도 있습니다. 자세한 내용은 [패키지 버전 수명 주기](preparing-to-use-software-package-catalog.md#package-version-lifecycle) 단원을 참조하십시오.

1. **버전 설명**에서 이 패키지 버전을 식별하고 관리하는 데 도움이 되는 정보를 입력합니다.
**참고**  
패키지 버전이 `draft` 상태에서 생성되므로 **기본 버전** 확인란은 비활성화되어 있습니다. 패키지 버전을 만든 후 상태를 `published`로 변경할 때 기본 버전의 이름을 지정할 수 있습니다. 자세한 내용은 [패키지 버전 수명 주기](preparing-to-use-software-package-catalog.md#package-version-lifecycle) 단원을 참조하십시오.

1. [선택 사항] 이 버전을 관리하거나 디바이스에 정보를 전달하는 데 도움이 되도록 **버전 속성**에 하나 이상의 이름-값 페어를 입력하세요. 입력한 각 이름-값 페어에 대해 **속성 추가**를 선택합니다. 자세한 내용은 [버전 속성](preparing-to-use-software-package-catalog.md#version-attributes) 단원을 참조하십시오.

1. [선택 사항] 태그를 사용하여 이 패키지를 분류하고 관리할 수 있습니다. 태그를 추가하려면 **태그**를 확장하고 태그 **추가**를 선택한 다음 키-값 페어를 입력합니다. 최대 50개의 태그를 추가할 수 있습니다. 자세한 내용은 [AWS IoT 리소스 태그 지정을 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/tagging-iot.html).

1. **다음**을 선택합니다.

**소프트웨어 재료표를 패키지 버전에 연결(선택 사항)**

1. **SBOMs 구성** 창의 **3단계: 버전 SBOM(선택 사항)**에서 패키지 버전에 연결하기 전에 소프트웨어 재료표를 검증하는 데 사용되는 기본 SBOM 파일 형식 및 검증 모드를 선택합니다. 

1. **SBOM 파일 추가** 창에서 버전이 지정된 Amazon S3 버킷을 나타내는 Amazon 리소스 이름(ARN)과 기본 유형이 작동하지 않는 경우 선호하는 SBOM 파일 형식을 입력합니다.
**참고**  
패키지 버전에 대한 소프트웨어 자재 명세서가 두 개 이상인 경우 단일 SBOM 파일 또는 여러 SBOM이 포함된 단일 zip 파일을 추가할 수 있습니다.

1. **추가된 SBOM 파일** 창에서 패키지 버전에 추가한 SBOM 파일을 볼 수 있습니다.

1. **패키지 및 버전 생성**을 선택합니다. 패키지 버전 페이지가 나타나고 **추가된 SBOM 파일** 창에서 SBOM 파일의 검증 상태를 볼 수 있습니다. SBOM 파일이 검증을 거치면 초기 상태가 `In progress`가 됩니다.
**참고**  
SBOM 파일 검증 상태는 `Invalid file`, `Not started`, `In progress`, `Validated (SPDX)`, `Validated (CycloneDX)` 및 검증 실패 이유입니다.

# AWS IoT 작업을 통해 패키지 버전 배포
<a name="deploying-package-version"></a>

다음 단계에 따라 AWS Management Console을 통해 패키지 버전을 배포할 수 있습니다.

**사전 조건**:

시작하기 전에 다음을 수행하십시오.
+ 에 AWS IoT 사물을 등록합니다 AWS IoT Core. 디바이스를 추가하는 방법에 대한 지침은 [사물 객체 생성을](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html#create-aws-thing) AWS IoT Core참조하세요.
+ [선택 사항] AWS IoT 패키지 버전을 배포할 디바이스를 대상으로 하는 사물 그룹 또는 동적 사물 그룹을 생성합니다. 사물 그룹을 생성하는 방법에 대한 지침은 [정적 사물 그룹 생성](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html#create-thing-group)을 참조하세요. 동적 사물 그룹을 생성하는 방법에 대한 지침은 [동적 사물 그룹 생성](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html#create-dynamic-thing-group)을 참조하세요.
+ 소프트웨어 패키지 및 패키지 버전 생성 자세한 내용은 [소프트웨어 패키지 및 패키지 버전 생성](creating-package-and-version.md) 단원을 참조하십시오.
+ 작업 문서를 만듭니다. 자세한 내용은 [배포를 위한 작업 문서 및 패키지 버전 준비](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-jobs-for-service-package-catalog.html#preparing-to-deploy)를 참조하세요.

**AWS IoT 작업을 배포하려면**

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home)에서 **소프트웨어 패키지**를 선택합니다.

1. 배포하려는 소프트웨어 패키지를 선택합니다. **소프트웨어 패키지 세부 정보** 페이지가 나타납니다.

1. **버전**에서 배포하려는 패키지 버전을 선택하고 **작업 버전 배포**를 선택합니다.

1. 이 포털을 통해 작업을 배포하는 것이 처음인 경우 요구 사항을 설명하는 대화 상자가 나타납니다. 정보를 검토하고 **확인**을 선택합니다.

1. 배포 이름을 입력하거나 **이름** 필드에 자동 생성된 이름을 그대로 둡니다.

1. [선택 사항] **설명** 필드에 배포의 목적이나 내용을 식별하는 설명을 입력하거나 자동 생성된 정보를 그대로 둡니다.

   **참고:** 작업 이름 및 설명 필드에 개인 식별 정보를 사용하지 않는 것이 좋습니다.

1. [선택 사항] 이 작업과 연결할 태그를 추가합니다.

1. **다음**을 선택합니다.

1. **작업 대상**에서 작업을 받아야 하는 사물 또는 사물 그룹을 선택합니다.

1. **작업 파일** 필드에 작업 문서 JSON 파일을 지정합니다.

1. **패키지 카탈로그 서비스와 작업 통합**을 엽니다.

1. 작업 문서에 지정된 패키지 및 버전을 선택합니다.
**참고**  
작업 문서에 지정된 것과 동일한 패키지 및 패키지 버전을 선택해야 합니다. 더 많이 포함할 수 있지만 작업은 작업 문서에 포함된 패키지 및 버전에 대한 지침만 발행합니다. 자세한 내용은 [배포 시 패키지 및 버전 이름 지정](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-jobs-for-service-package-catalog.html#naming-package-versions)을 참조하세요.

1. **다음**을 선택합니다.

1. 작업 구성 페이지의 작업 구성 대화 상자에서 다음 작업 유형 중 하나를 선택합니다.
   + **스냅샷 작업:** 스냅샷 작업은 대상 디바이스 및 그룹에서 실행이 완료되면 완료됩니다.
   + **연속 작업:** 연속 작업은 사물 그룹에 적용되며 이후에 지정된 대상 그룹에 추가하는 모든 디바이스에서 실행됩니다.

1. **추가 구성 - 선택 사항** 대화 상자에서 다음과 같은 선택적 작업 구성을 검토하고 적절히 선택합니다. 자세한 내용은 [작업 롤아웃, 예약 및 중단 구성](https://docs.aws.amazon.com/iot/latest/developerguide/jobs-configurations-details.html#job-rollout-abort-scheduling)과 [작업 실행 제한 시간 및 재시도 구성](https://docs.aws.amazon.com/iot/latest/developerguide/jobs-configurations-details.html#job-timeout-retry)을 참조하세요.
   + Rollout configuration(롤아웃 구성)
   + Scheduling configuration(예약 구성)
   + Job executions timeout configuration(작업 실행 제한 시간 구성)
   + 작업 실행 재시도 구성
   + Abort configuration(중단 구성)

1. 작업 선택을 검토한 다음 **제출**을 선택합니다.

작업을 생성하면 콘솔에서는 JSON 서명을 생성해 작업 문서에 배치합니다. AWS IoT 콘솔을 사용하여 작업 상태를 보거나 작업을 취소 또는 삭제할 수 있습니다. 작업을 관리하려면 [콘솔의 작업 허브(Job hub of the console)](https://console.aws.amazon.com/iot/home#/jobhub)로 이동합니다.

# 패키지 버전을 AWS IoT 사물에 연결
<a name="associating-package-version"></a>

디바이스에 소프트웨어를 설치한 후 패키지 버전을 예약된 명명된 AWS IoT 사물 섀도에 연결할 수 있습니다. AWS IoT 작업이 배포되고 성공적으로 완료된 후 사물의 예약된 명명된 섀도우를 업데이트하도록 작업이 구성된 경우이 절차를 완료할 필요가 없습니다. 자세한 내용은 [명명된 예약 섀도우](preparing-to-use-software-package-catalog.md#reserved-named-shadow) 단원을 참조하십시오.

**사전 조건**:

시작하기 전에 다음을 수행하십시오.
+  AWS IoT 사물 또는 사물을 생성하고를 통해 원격 측정을 설정합니다 AWS IoT Core. 자세한 내용은 [시작하기를 참조하세요 AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html).
+  소프트웨어 패키지 및 패키지 버전을 생성합니다. 자세한 내용은 [소프트웨어 패키지 및 패키지 버전 생성](creating-package-and-version.md) 단원을 참조하십시오.
+  디바이스에 패키지 버전 소프트웨어를 설치합니다.

**참고**  
패키지 버전을 AWS IoT 사물에 연결해도 물리적 디바이스에 소프트웨어가 업데이트되거나 설치되지 않습니다. 패키지 버전을 디바이스에 배포해야 합니다.

**패키지 버전을 AWS IoT 사물에 연결하려면**

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/home) 탐색 창에서 **모든 디바이스** 메뉴를 펼치고 **사물**을 선택합니다.

1. 목록에서 업데이트하려는 AWS IoT 사물을 식별하고 사물 이름을 선택하여 세부 정보 페이지를 표시합니다.

1. **세부 정보** 섹션에서 **패키지 및 버전**을 선택합니다.

1.  **패키지 및 버전에 추가**를 선택합니다.

1.  **디바이스 패키지 선택**에서 원하는 소프트웨어 패키지를 선택합니다.

1.  **버전 선택**에서 원하는 소프트웨어 버전을 선택합니다.

1.  **디바이스 패키지 추가**를 선택합니다.

    패키지와 버전이 **선택한 패키지 및 버전** 목록에 표시됩니다.

1.  이 사물에 연결할 각 패키지 및 버전에 대해 이 단계를 반복합니다.

1.  완료하면 **패키지 및 버전 세부 정보 추가**를 선택합니다. **사물 세부 정보** 페이지가 열리고 목록에서 새 패키지와 버전을 볼 수 있습니다.