

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

# 를 사용한 모델 패키지 및 Edge Manager 에이전트 배포 AWS IoT Greengrass
<a name="edge-greengrass"></a>

SageMaker Edge Manager는 AWS IoT Greengrass 버전 2를 통합하여 Edge Manager 에이전트 및 모델을 디바이스에 액세스, 유지 관리 및 배포하는 작업을 간소화합니다. AWS IoT Greengrass V2가 없으면 SageMaker Edge Manager를 사용하도록 디바이스와 플릿을 설정하려면 Amazon S3 릴리스 버킷에서 Edge Manager 에이전트를 수동으로 복사해야 합니다. 에이전트를 사용하면 엣지 디바이스에 로드된 모델로 예측을 수행할 수 있습니다. AWS IoT Greengrass V2 및 SageMaker Edge Manager 통합을 사용하면 AWS IoT Greengrass V2 구성 요소를 사용할 수 있습니다. 구성 요소는 엣지 디바이스를 AWS 서비스 또는 타사 서비스에 연결할 수 있는 사전 구축된 소프트웨어 모듈입니다 AWS IoT Greengrass.

Edge Manager 에이전트와 모델을 배포하기 위해 AWS IoT Greengrass V2를 사용하려면 AWS IoT Greengrass 코어 소프트웨어를 디바이스(들)에 설치해야 합니다. 디바이스 요구 사항 및 디바이스 설정 방법에 대한 자세한 내용은 AWS IoT Greengrass 설명서의 [AWS IoT Greengrass 코어 디바이스 설정을](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html) 참조하세요.

다음 세 가지 구성 요소를 사용하여 Edge Manager 에이전트를 배포합니다.
+ *사전 구축 퍼블릭 구성 요소*: SageMaker AI에서 퍼블릭 Edge Manager 구성 요소를 유지 관리.
+ *자동 생성 프라이빗 구성 요소*: 프라이빗 구성 요소는 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html) API로 기계 학습 모델을 패키징하고 `GreengrassV2Component`을(를) Edge Manager API 필드 `PresetDeploymentType`에 지정할 때 자동 생성.
+ *사용자 지정 구성 요소*: 디바이스에서 사전 처리 및 추론을 담당하는 추론 애플리케이션. 필수 생성 구성 요소. 사용자 [지정 AWS IoT Greengrass 구성 요소를 생성하는](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html) 방법에 대한 자세한 내용은 [Hello World 사용자 지정 구성 요소 생성](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how) SageMaker Edge Manager 설명서의 또는 AWS IoT Greengrass 설명서의 사용자 지정 구성 요소 생성을 참조하세요.

# Edge Manager 에이전트를 배포하기 위한 사전 조건 완료
<a name="edge-greengrass-prerequisites"></a>

SageMaker Edge Manager는 AWS IoT Greengrass V2를 사용하여 구성 요소를 사용하여 디바이스에 Edge Manager 에이전트, 기계 학습 모델 및 추론 애플리케이션을 간단하게 배포할 수 있습니다. AWS IAM 역할을 더 쉽게 유지 관리할 수 있도록 Edge Manager를 사용하면 기존 AWS IoT 역할 별칭을 재사용할 수 있습니다. 아직 별칭이 없는 경우 Edge Manager는 Edge Manager 패키징 작업의 일부로 역할 별칭을 생성합니다. 더 이상 SageMaker Edge Manager 패키징 작업에서 생성된 역할 별칭을 AWS IoT 역할과 연결할 필요가 없습니다.

시작하기 전에 다음 필수 조건을 총족해야 합니다.

1.  AWS IoT Greengrass 코어 소프트웨어를 설치합니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 설치를 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#install-greengrass-v2).

1.  AWS IoT Greengrass V2를 설정합니다. 자세한 내용은 [수동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치를 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html).
**참고**  
 AWS IoT 사물 이름이 모두 소문자이고 (선택 사항) 대시()를 제외한 문자가 포함되어 있지 않은지 확인합니다`‐`.
IAM 역할은 `SageMaker*`(으)로 시작해야 합니다.

1.  AWS IoT Greengrass V2 설정 중에 생성된 IAM 역할에 다음 권한 및 인라인 정책을 연결합니다.
   + IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))로 이동합니다.
   + **검색(Search)** 필드에 역할 이름을 입력하여 방금 생성한 역할을 검색합니다.
   + 역할을 선택합니다.
   + 다음은 **정책 연결(Attach Policies)**을 선택합니다.
   + **AmazonSageMakerEdgeDeviceFleetPolicy**를 검색합니다.
   + **AmazonSageMakerFullAccess**를 선택합니다(이 단계는 모델 컴파일 및 패키징 시 이 IAM 역할을 보다 쉽게 재사용할 수 있도록 하는 선택적 단계입니다).
   + 역할 권한 정책에 필수 권한을 추가합니다. IAM 사용자에게 인라인 정책을 연결하지 않습니다.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement":[
           {
             "Sid":"GreengrassComponentAccess",
             "Effect":"Allow",
             "Action":[
                 "greengrass:CreateComponentVersion",
                 "greengrass:DescribeComponent"
             ],
             "Resource":"*"
            }
         ]
     }
     ```

------
   + **정책 연결**을 선택합니다.
   + **신뢰 관계**를 선택합니다.
   + **신뢰 관계 편집**을 선택합니다.
   + 내용을 다음과 같이 바꿉니다.

------
#### [ JSON ]

****  

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

------

1. Edge Manager 디바이스 플릿을 생성합니다. 플릿 생성 방법에 대한 자세한 정보는 [SageMaker Edge Manager에서 디바이스 및 플릿 설정](edge-device-fleet.md)에서 확인하세요.

1.  AWS IoT Greengrass V2 설정 중에 생성된 AWS IoT 사물 이름과 동일한 이름으로 디바이스를 등록합니다.

1. 사용자 지정 프라이빗 AWS IoT Greengrass 구성 요소를 하나 이상 생성합니다. 이 구성 요소는 디바이스에서 추론을 실행하는 애플리케이션입니다. 자세한 내용은 [Hello World 사용자 지정 구성 요소 생성](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how) 섹션을 참조하세요.

**참고**  
SageMaker Edge Manager 및 AWS IoT Greengrass 통합은 v2에서만 작동합니다 AWS IoT Greengrass .
 AWS IoT 사물 이름과 Edge Manager 디바이스 이름은 모두 동일해야 합니다.
SageMaker Edge Manager는 로컬 AWS IoT 인증서를 로드하지 않고 AWS IoT 자격 증명 공급자 엔드포인트를 직접 호출합니다. 대신 SageMaker Edge Manager는 AWS IoT Greengrass v2 TokenExchangeService를 사용하고 TES 엔드포인트에서 임시 자격 증명을 가져옵니다.

# AWS IoT Greengrass V2 구성 요소 생성
<a name="edge-greengrass-custom-component"></a>

AWS IoT Greengrass 는 AWS IoT Greengrass 코어 디바이스에 배포되고 실행되는 소프트웨어 모듈인 *구성 요소를* 사용합니다. 최소 세 가지의 구성 요소가 필요합니다.

1. *Edge Manager 에이전트바이너리를 배포하는 퍼블릭 Edge Manager 에이전트 AWS IoT Greengrass 구성 요소입니다*.

1.  AWS SDK for Python (Boto3) API 또는 SageMaker AI 콘솔을 사용하여 기계 학습 모델을 패키징할 때 자동으로 생성되는 모델 *구성 요소입니다*. 자세한 내용은 [자동 생성 구성 요소 생성](#edge-greengrass-autogenerate-component-how) 단원을 참조하세요.

1. Edge Manager 에이전트 클라이언트 애플리케이션을 구현하고 추론 결과의 사전 처리 및 사후 처리를 수행하는 *프라이빗 사용자 지정 구성 요소*. 사용자 지정 구성 요소를 생성하는 방법에 대한 자세한 내용은 [자동 생성 구성 요소 생성](#edge-greengrass-autogenerate-component-how) 또는 [사용자 지정 AWS IoT Greengrass 구성 요소 생성을](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html) 참조하세요.

## 자동 생성 구성 요소 생성
<a name="edge-greengrass-autogenerate-component-how"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html) API로 모델 구성 요소를 생성하고 `GreengrassV2Component`을(를) SageMaker Edge Manager 패키징 작업 API 필드 `PresetDeploymentType`에 지정합니다. `CreateEdgePackagingJob` API를 직접적으로 호출하면 Edge Manager는 Amazon S3에서 SageMaker AI Neo로 컴파일된 모델을 가져와 모델 구성 요소를 만듭니다. 모델 구성 요소는 사용자 계정에 자동으로 저장됩니다. AWS IoT 콘솔 [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/) 이동하여 구성 요소를 볼 수 있습니다. **Greengrass**를 선택한 다음 **코어** 디바이스를 선택합니다. 이 페이지에는 계정과 연결된 AWS IoT Greengrass 코어 디바이스 목록이 있습니다. `PresetDeploymentConfig`에서 모델 구성 요소 이름을 지정하지 않은 경우, 생성되는 기본 이름은 `"SagemakerEdgeManager"` 및 Edge Manager 에이전트 패키징 작업 이름으로 구성됩니다. 다음 예제에서는 `CreateEdgePackagingJob` API를 사용하여 a AWS IoT Greengrass V2 구성 요소를 생성하기 위해를 Edge Manager에 지정하는 방법을 보여줍니다.

```
import sagemaker
import boto3

# Create a SageMaker client object to make it easier to interact with other AWS services.
sagemaker_client = boto3.client('sagemaker', region=<YOUR_REGION>)

# Replace with your IAM Role ARN
sagemaker_role_arn = "arn:aws:iam::<account>:role/*"

# Replace string with the name of your already created S3 bucket.
bucket = 'amzn-s3-demo-bucket-edge-manager'

# Specify a name for your edge packaging job.
edge_packaging_name = "edge_packag_job_demo" 

# Replace the following string with the name you used for the SageMaker Neo compilation job.
compilation_job_name = "getting-started-demo" 

# The name of the model and the model version.
model_name = "sample-model" 
model_version = "1.1"

# Output directory in S3 where you want to store the packaged model.
packaging_output_dir = 'packaged_models' 
packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

# The name you want your Greengrass component to have.
component_name = "SagemakerEdgeManager" + edge_packaging_name

sagemaker_client.create_edge_packaging_job(
                    EdgePackagingJobName=edge_packaging_name,
                    CompilationJobName=compilation_job_name,
                    RoleArn=sagemaker_role_arn,
                    ModelName=model_name,
                    ModelVersion=model_version,
                    OutputConfig={
                        "S3OutputLocation": packaging_s3_output,
                        "PresetDeploymentType":"GreengrassV2Component",
                        "PresetDeploymentConfig":"{\"ComponentName\":\"sample-component-name\", \"ComponentVersion\":\"1.0.2\"}"
                        }
                    )
```

또한 SageMaker AI 콘솔로 자동 생성 구성 요소를 만들 수 있습니다. [모델 패키징(Amazon SageMaker AI 콘솔)](edge-packaging-job-console.md)의 1\$16단계를 따릅니다.

패키징 작업의 출력과 선택 암호화 키를 저장할 Amazon S3 버킷 URI를 입력합니다.

다음을 완료하여 모델 구성 요소를 생성합니다.

1. **배포 사전 설정**을 선택합니다.

1. 구성 요소 이름을 **구성 요소 이름** 필드에 지정합니다.

1. 선택적으로 **구성 요소 설명**, **구성 요소 버전**, **플랫폼 OS**, **플랫폼 아키텍처**에 각각 구성 요소 설명, 구성 요소 버전, 플랫폼 OS 또는 플랫폼 아키텍처를 입력합니다.

1. **제출**을 선택합니다.

## Hello World 사용자 지정 구성 요소 생성
<a name="edge-greengrass-create-custom-component-how"></a>

사용자 지정 애플리케이션 구성 요소는 엣지 디바이스에서 추론 수행 시 사용됩니다. SageMaker Edge Manager에 모델을 로드하고, 추론을 위해 Edge Manager 에이전트를 호출하고, 구성 요소가 종료될 때 모델을 언로드하는 역할을 합니다. 구성 요소를 생성하기 전에 에이전트와 애플리케이션이 Edge Manager와 통신할 수 있는지 확인합니다. 이 작업을 수행하려면 [gRPC](https://grpc.io/)를 구성합니다. Edge Manager 에이전트는 Protobuf 버퍼 및 gRPC 서버에 정의된 메서드를 사용하여 엣지 디바이스 및 클라우드의 클라이언트 애플리케이션과 통신을 설정합니다.

gRPC를 사용하려면 다음을 수행해야 합니다.

1. Amazon S3 릴리스 버킷에서 Edge Manager 에이전트를 다운로드할 때 입력된 .proto 파일을 사용하여 gRPC 스터브를 생성합니다.

1. 선호하는 언어로 클라이언트 코드를 작성합니다.

.proto 파일에 서비스를 정의할 필요는 없습니다. Amazon S3 릴리스 버킷에서 Edge Manager 에이전트 릴리스 바이너리를 다운로드할 때 서비스 .proto 파일이 압축된 TAR 파일에 포함됩니다.

호스트 머신에 gRPC 및 기타 필요한 도구를 설치하고 Python에서 GrPC 스터브 `agent_pb2_grpc.py`, `agent_pb2.py`을(를) 생성합니다. 로컬 디렉터리에 `agent.proto`이(가) 있는지 확인하세요.

```
%%bash
pip install grpcio
pip install grpcio-tools
python3 -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. agent.proto
```

이전 코드는 .proto 서비스 정의에서 gRPC 클라이언트 및 서버 인터페이스를 생성합니다. 즉, Python에서 gRPC 모델을 생성합니다. API 디렉터리에는 에이전트와 통신하기 위한 Protobuf 사양이 포함되어 있습니다.

다음으로 gRPC API로 서비스 (2) 클라이언트 및 서버를 작성합니다. 다음 예제 스크립트 `edge_manager_python_example.py`에서는 Python을 사용하여 `yolov3` 모델을 로드하고 나열하고 엣지 디바이스로 언로드합니다.

```
import grpc
from PIL import Image
import agent_pb2
import agent_pb2_grpc
import os


model_path = '<PATH-TO-SagemakerEdgeManager-COMPONENT>' 
                    
agent_socket = 'unix:///tmp/aws.greengrass.SageMakerEdgeManager.sock'

agent_channel = grpc.insecure_channel(agent_socket, options=(('grpc.enable_http_proxy', 0),))

agent_client = agent_pb2_grpc.AgentStub(agent_channel)


def list_models():
    return agent_client.ListModels(agent_pb2.ListModelsRequest())


def list_model_tensors(models):
    return {
        model.name: {
            'inputs': model.input_tensor_metadatas,
            'outputs': model.output_tensor_metadatas
        }
        for model in list_models().models
    }


def load_model(model_name, model_path):
    load_request = agent_pb2.LoadModelRequest()
    load_request.url = model_path
    load_request.name = model_name
    return agent_client.LoadModel(load_request)


def unload_model(name):
    unload_request = agent_pb2.UnLoadModelRequest()
    unload_request.name = name
    return agent_client.UnLoadModel(unload_request)


def predict_image(model_name, image_path):
    image_tensor = agent_pb2.Tensor()
    image_tensor.byte_data = Image.open(image_path).tobytes()
    image_tensor_metadata = list_model_tensors(list_models())[model_name]['inputs'][0]
    image_tensor.tensor_metadata.name = image_tensor_metadata.name
    image_tensor.tensor_metadata.data_type = image_tensor_metadata.data_type
    for shape in image_tensor_metadata.shape:
        image_tensor.tensor_metadata.shape.append(shape)
    predict_request = agent_pb2.PredictRequest()
    predict_request.name = model_name
    predict_request.tensors.append(image_tensor)
    predict_response = agent_client.Predict(predict_request)
    return predict_response

def main():
    try:
        unload_model('your-model')
    except:
        pass
  
    print('LoadModel...', end='')
    try:
        load_model('your-model', model_path)
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('Model already loaded!')
        
    print('ListModels...', end='')
    try:
        print(list_models())
        print('done.')
        
    except Exception as e:
        print()
        print(e)
        print('List model failed!')
       
    print('Unload model...', end='')
    try:
        unload_model('your-model')
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('unload model failed!')

if __name__ == '__main__':
    main()
```

동일한 클라이언트 코드 예제를 사용하는 경우가 모델을 포함하는 AWS IoT Greengrass 구성 요소의 이름을 `model_path` 가리키는지 확인합니다.

gRPC 스텁을 생성하고 Hello World 코드를 준비하면 AWS IoT Greengrass V2 Hello World 구성 요소를 생성할 수 있습니다. 그렇게 하려면 다음을 수행하세요.
+ `edge_manager_python_example.py`, `agent_pb2_grpc.py`, `agent_pb2.py`을(를) Amazon S3 버킷에 업로드하고 Amazon S3 경로를 기록해 둡니다.
+  AWS IoT Greengrass V2 콘솔에서 프라이빗 구성 요소를 생성하고 구성 요소의 레시피를 정의합니다. 다음 레시피에 따라 Hello World 애플리케이션과 gRPC 스터브에 Amazon S3 URI를 지정합니다.

  ```
  ---
  RecipeFormatVersion: 2020-01-25
  ComponentName: com.sagemaker.edgePythonExample
  ComponentVersion: 1.0.0
  ComponentDescription: Sagemaker Edge Manager Python example
  ComponentPublisher: Amazon Web Services, Inc.
  ComponentDependencies:
    aws.greengrass.SageMakerEdgeManager:
      VersionRequirement: '>=1.0.0'
      DependencyType: HARD
  Manifests:
    - Platform:
        os: linux
        architecture: "/amd64|x86/"
      Lifecycle:
        install: |-
          apt-get install python3-pip
          pip3 install grpcio
          pip3 install grpcio-tools
          pip3 install protobuf
          pip3 install Pillow
        run:
          script: |- 
            python3 {artifacts:path}/edge_manager_python_example.py
      Artifacts:
        - URI: <code-s3-path>
        - URI: <pb2-s3-path>
        - URI: <pb2-grpc-s3-path>
  ```

Hello World 레시피 생성에 대한 자세한 내용은 AWS IoT Greengrass 설명서의 [첫 번째 구성 요소 생성을 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#create-first-component).

# 구성 요소를 디바이스에 배포합니다.
<a name="edge-greengrass-deploy-components"></a>

 AWS IoT 콘솔 또는를 사용하여 구성 요소를 배포합니다 AWS CLI.

## 구성 요소를 배포하려면(콘솔)
<a name="collapsible-section-gg-deploy-console"></a>

 AWS IoT 콘솔을 사용하여 AWS IoT Greengrass 구성 요소를 배포합니다.

1.  AWS IoT Greengrass 콘솔의 [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/) 탐색 메뉴에서 **배포를** 선택합니다.

1. **구성 요소** 페이지의 **퍼블릭 구성 요소** 탭에서 `aws.greengrass.SageMakerEdgeManager`을(를) 선택합니다.

1. `aws.greengrass.SageMakerEdgeManager` 페이지에서 **배포**를 선택합니다.

1. `Add to deployment`에서 다음 중 하나를 선택합니다.

   1. 이 구성 요소를 대상 디바이스의 기존 배포에 병합하려면 **기존 배포에 추가**를 선택한 다음 수정하려는 배포를 선택합니다.

   1. 대상 디바이스에서 새 배포를 생성하려면 **새 배포 생성**을 선택합니다. 디바이스에 기존 배포가 있는 경우 이 단계를 선택하면 기존 배포가 대체됩니다.

1. **대상 지정** 페이지에서 다음 작업을 수행합니다.

   1. **배포 정보** 아래에서 친숙한 배포 이름을 입력하거나 수정합니다.

   1. **배포 대상** 아래에서 배포 대상을 선택하고 **다음**을 선택합니다. 기존 배포 수정 시 배포 대상을 변경할 수 없습니다.

1. **구성 요소 선택** 페이지의 **내 구성 요소**에서 다음을 선택합니다.
   + com. **<CUSTOM-COMPONENT-NAME>
   + `aws.greengrass.SageMakerEdgeManager`
   + SagemakerEdgeManager.*<YOUR-PACKAGING-JOB>*

1. **구성 요소 구성** 페이지에서 **com.Greengrass.SageMakeRedgeManager**를 선택하고 다음을 수행합니다.

   1. **구성 요소 구성**을 선택합니다.

   1. **구성 업데이트** 아래에 있는 **병합할 구성**에 다음 구성을 입력합니다.

      ```
      {
          "DeviceFleetName": "device-fleet-name",
          "BucketName": "bucket-name"
      }
      ```

      *`device-fleet-name`*을(를) 생성한 엣지 디바이스 플릿 이름으로 바꾸고, *`bucket-name`*을(를) 디바이스 플릿과 연결된 Amazon S3 버킷 이름으로 바꿉니다.

   1. **확인**을 선택하고 **다음**을 선택합니다.

1. **고급 설정 구성** 페이지에서 기본 구성 설정을 유지하고 **다음**을 선택합니다.

1. **검토** 페이지에서 **배포**를 선택합니다.

## 구성 요소를 배포하려면(AWS CLI)
<a name="collapsible-section-gg-deploy-cli"></a>

1. ` deployment.json` 파일을 생성하여 SageMaker Edge Manager 구성 요소의 배포 구성을 정의합니다. 이 파일은 다음 예제와 비슷합니다.

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.SageMakerEdgeManager": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
           "merge": {
             "DeviceFleetName": "device-fleet-name",
             "BucketName": "bucket-name"
           }
         }
       },
       "com.greengrass.SageMakerEdgeManager.ImageClassification": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
       "com.greengrass.SageMakerEdgeManager.ImageClassification.Model": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
     }
   }
   ```
   + `targetArn` 필드에서 *`targetArn`*을(를) 다음 형식으로 배포 대상으로 지정할 사물 또는 사물 그룹의 Amazon 리소스 이름(ARN)으로 바꿉니다.
     + 사물: `arn:aws:iot:region:account-id:thing/thingName`
     + 사물 그룹: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + `merge` 필드에서 *`device-fleet-name`*을(를) 생성한 엣지 디바이스 플릿 이름으로 바꾸고, *`bucket-name`*을(를) 디바이스 플릿과 연결된 Amazon S3 버킷 이름으로 바꿉니다.
   + 각 구성 요소의 구성 요소 버전을 사용 가능한 최신 버전으로 바꿉니다.

1. 다음 명령을 실행하여 디바이스에 구성 요소를 배포합니다.

   ```
   aws greengrassv2 create-deployment \
       --cli-input-json file://path/to/deployment.json
   ```

배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 다음 단계에서는 구성 요소 로그를 확인하여 배포가 정상적으로 완료되었는지 확인하고 추론 결과를 확인합니다.

개별 디바이스 또는 디바이스 그룹에 구성 요소를 배포하는 방법에 대한 자세한 내용은 [디바이스에 AWS IoT Greengrass 구성 요소 배포를 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-deployments.html).