애플리케이션 배포 - AWS Panorama

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

애플리케이션 배포

애플리케이션을 배포하려면 AWS Panorama Application CLI를 사용하여 계정으로 애플리케이션을 가져오고, 컨테이너를 빌드하고, 자산을 업로드 및 등록하고, 애플리케이션 인스턴스를 생성합니다. 이 주제에서는 각 단계를 자세히 살펴보고 백그라운드에서 어떤 작업이 수행되는지 설명합니다.

아직 애플리케이션을 배포하지 않은 경우 자세한 내용은 AWS Panorama 시작하기 단원을 참조하십시오.

샘플 애플리케이션을 사용자 지정하고 확장하는 방법에 대한 자세한 내용은 AWS Panorama 애플리케이션 빌드 단원을 참조하십시오.

AWS Panorama Application CLI 설치

AWS Panorama Application CLI와 AWS CLI를 설치하려면 pip를 사용합니다.

$ pip3 install --upgrade awscli panoramacli

AWS Panorama Application CLI로 애플리케이션 이미지를 빌드하려면 Docker가 필요합니다. Linux에서는 qemu와 관련 시스템 라이브러리도 필요합니다. AWS Panorama Application CLI의 설치 및 구성에 대한 자세한 내용은 프로젝트의 GitHub 리포지토리에 있는 README 파일을 참조하십시오.

WSL2를 사용하여 Windows에서 빌드 환경을 설정하기 위한 지침은 Windows에서 개발 환경 설정 단원을 참조하십시오.

애플리케이션 가져오기

샘플 애플리케이션 또는 타사에서 제공한 애플리케이션으로 작업하는 경우, AWS Panorama Application CLI를 사용하여 애플리케이션을 가져오십시오.

my-app$ panorama-cli import-application

이 명령은 애플리케이션 패키지의 이름을 계정 ID로 바꿉니다. 패키지 이름은 패키지가 배포되는 계정의 계정 ID로 시작합니다. 애플리케이션을 여러 계정에 배포하는 경우 각 계정별로 애플리케이션을 가져와 패키징해야 합니다.

예를 들어, 이 설명서의 샘플 애플리케이션에는 코드 패키지와 모델 패키지가 있으며, 각각 플레이스홀더 계정 ID로 이름이 지정되어 있습니다. 이 import-application 명령은 CLI가 작업 영역의 AWS 보안 인증 정보에서 추론하는 계정 ID를 사용하도록 이름을 바꿉니다.

/aws-panorama-sample ├── assets ├── graphs │   └── my-app │   └── graph.json └── packages    ├── 123456789012-SAMPLE_CODE-1.0    │   ├── Dockerfile    │   ├── application.py    │   ├── descriptor.json    │   ├── package.json    │   ├── requirements.txt    │   └── squeezenet_classes.json    └── 123456789012-SQUEEZENET_PYTORCH-1.0    ├── descriptor.json    └── package.json

123456789012는 패키지 디렉토리 이름과 이를 참조하는 애플리케이션 매니페스트(graph.json)에서 계정 ID로 대체됩니다. AWS CLI를 사용하여 aws sts get-caller-identity를 호출하면 계정 ID를 확인할 수 있습니다.

$ aws sts get-caller-identity { "UserId": "AIDAXMPL7W66UC3GFXMPL", "Account": "210987654321", "Arn": "arn:aws:iam::210987654321:user/devenv" }

컨테이너 이미지 빌드

애플리케이션 코드는 Dockerfile에 설치한 애플리케이션 코드와 라이브러리가 포함된 Docker 컨테이너 이미지에 패키징됩니다. AWS Panorama Application CLI build-container 명령을 사용하여 도커 이미지를 구축하고 파일 시스템 이미지를 내보냅니다.

my-app$ panorama-cli build-container --container-asset-name code_asset --package-path packages/210987654321-SAMPLE_CODE-1.0 { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } Container asset for the package has been succesfully built at assets/5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz

이 명령은 code_asset라는 이름의 도커 이미지를 생성하고 파일 시스템을 assets 폴더의 .tar.gz 아카이브로 내보냅니다. CLI는 애플리케이션의 Dockerfile에 지정된 대로 Amazon Elastic Container Registry(Amazon ECR)에서 애플리케이션 기본 이미지를 가져옵니다.

CLI는 컨테이너 아카이브 외에도 패키지 설명자(descriptor.json)에 대한 자산을 생성합니다. 두 파일 모두 원본 파일의 해시를 반영하는 고유 식별자로 이름이 바뀝니다. 또한 AWS Panorama Application CLI는 두 자산의 이름을 기록하는 블록을 패키지 구성에 추가합니다. 이러한 이름은 배포 프로세스 중에 어플라이언스에서 사용됩니다.

packages/123456789012-SAMPLE_CODE-1.0/package.json – 자산 블록 포함
{ "nodePackage": { "envelopeVersion": "2021-01-01", "name": "SAMPLE_CODE", "version": "1.0", "description": "Computer vision application code.", "assets": [ { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } ], "interfaces": [ { "name": "interface", "category": "business_logic", "asset": "code_asset", "inputs": [ { "name": "video_in", "type": "media" },

build-container 명령에 지정된 코드 자산의 이름은 패키지 구성의 asset 필드 값과 일치해야 합니다. 앞의 예에서는 두 값이 모두 code_asset입니다.

모델 가져오기

애플리케이션의 자산 폴더에 모델 아카이브가 있거나 별도로 다운로드한 모델 아카이브가 있을 수 있습니다. 새 모델, 업데이트된 모델 또는 업데이트된 모델 설명자 파일이 있는 경우 add-raw-model 명령을 사용하여 해당 파일을 가져오십시오.

my-app$ panorama-cli add-raw-model --model-asset-name model_asset \ --model-local-path my-model.tar.gz \ --descriptor-path packages/210987654321-SQUEEZENET_PYTORCH-1.0/descriptor.json \ --packages-path packages/210987654321-SQUEEZENET_PYTORCH-1.0

설명자 파일만 업데이트해야 하는 경우 자산 디렉토리에 있는 기존 모델을 재사용할 수 있습니다. 부동 소수점 정밀도 모드와 같은 기능을 구성하려면 설명자 파일을 업데이트해야 할 수 있습니다. 예를 들어, 다음 스크립트는 샘플 앱으로 이 작업을 수행하는 방법을 보여줍니다.

util-scripts/update-model-config.sh
#!/bin/bash set -eo pipefail MODEL_ASSET=fd1axmplacc3350a5c2673adacffab06af54c3f14da6fe4a8be24cac687a386e MODEL_PACKAGE=SQUEEZENET_PYTORCH ACCOUNT_ID=$(ls packages | grep -Eo '[0-9]{12}' | head -1) panorama-cli add-raw-model --model-asset-name model_asset --model-local-path assets/${MODEL_ASSET}.tar.gz --descriptor-path packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/descriptor.json --packages-path packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0 cp packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/package.json packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/package.json.bup

모델 패키지 디렉토리의 디스크립터 파일에 대한 변경 사항은 CLI로 다시 가져올 때까지 적용되지 않습니다. CLI는 컨테이너를 다시 빌드할 때 애플리케이션 코드 패키지의 구성을 업데이트하는 방식과 유사하게 새 자산 이름을 사용하여 모델 패키지 구성을 업데이트합니다.

애플리케이션 자산 업로드

모델 아카이브, 컨테이너 파일 시스템 아카이브 및 설명자 파일을 포함하는 애플리케이션 자산을 업로드하고 등록하려면 package-application 명령을 사용하십시오.

my-app$ panorama-cli package-application Uploading package SQUEEZENET_PYTORCH Patch version for the package 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 Deregistering previous patch version e845xmpl8ea0361eb345c313a8dded30294b3a46b486dc8e7c174ee7aab29362 Asset fd1axmplacc3350a5c2673adacffab06af54c3f14da6fe4a8be24cac687a386e.tar.gz already exists, ignoring upload upload: assets/87fbxmpl6f18aeae4d1e3ff8bbc6147390feaf47d85b5da34f8374974ecc4aaf.json to s3://arn:aws:s3:us-east-2:212345678901:accesspoint/panorama-210987654321-6k75xmpl2jypelgzst7uux62ye/210987654321/nodePackages/SQUEEZENET_PYTORCH/binaries/87fbxmpl6f18aeae4d1e3ff8bbc6147390feaf47d85b5da34f8374974ecc4aaf.json Called register package version for SQUEEZENET_PYTORCH with patch version 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 ...

자산 파일 또는 패키지 구성에 변경 사항이 없는 경우 CLI는 이를 건너뜁니다.

Uploading package SAMPLE_CODE Patch Version ca91xmplca526fe3f07821fb0c514f70ed0c444f34cb9bd3a20e153730b35d70 already registered, ignoring upload Register patch version complete for SQUEEZENET_PYTORCH with patch version 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 Register patch version complete for SAMPLE_CODE with patch version ca91xmplca526fe3f07821fb0c514f70ed0c444f34cb9bd3a20e153730b35d70 All packages uploaded and registered successfully

CLI는 각 패키지의 자산을 사용자 계정별 Amazon S3 액세스 포인트에 업로드합니다. AWS Panorama는 사용자를 대신하여 액세스 포인트를 관리하고 DescribePackage API를 통해 정보를 제공합니다. CLI는 각 패키지의 자산을 해당 패키지에 제공된 위치에 업로드하고 패키지 구성에 설명된 설정을 사용하여 AWS Panorama 서비스에 등록합니다.

AWS Panorama 콘솔을 사용하여 애플리케이션 배포

AWS Panorama 콘솔을 사용하여 애플리케이션을 배포할 수 있습니다. 배포 프로세스 중에 애플리케이션 코드로 전달할 카메라 스트림을 선택하고 애플리케이션 개발자가 제공하는 옵션을 구성합니다.

애플리케이션을 배포하려면
  1. AWS Panorama 콘솔 배포 애플리케이션 페이지를 엽니다.

  2. 애플리케이션 배포를 선택합니다.

  3. 애플리케이션 매니페스트의 콘텐츠 graph.json를 텍스트 편집기에 붙여넣습니다. 다음을 선택합니다.

  4. 이름 및 설명을 입력합니다.

  5. 배포로 진행을 선택합니다.

  6. 배포 시작을 선택합니다.

  7. 애플리케이션에서 역할을 사용하는 경우 드롭다운 메뉴에서 선택합니다. 다음을 선택합니다.

  8. 디바이스 선택을 선택한 다음 어플라이언스를 선택합니다. 다음을 선택합니다.

  9. 데이터 소스 선택 단계에서 입력 보기를 선택하고 카메라 스트림을 데이터 소스로 추가합니다. 다음을 선택합니다.

  10. 구성 단계에서 개발자가 정의한 애플리케이션별 설정을 구성합니다. 다음을 선택합니다.

  11. 배포를 선택한 다음 완료를 선택합니다.

  12. 배포된 애플리케이션 목록에서 상태를 모니터링할 애플리케이션을 선택합니다.

배포 프로세스는 15~20분이 걸립니다. 애플리케이션이 시작되는 동안 어플라이언스의 출력이 오랫동안 비어 있을 수 있습니다. 오류가 발생하는 경우 문제 해결 단원을 참조하십시오.

애플리케이션 배포 자동화

CreateApplicationInstance API를 사용하여 애플리케이션 배포 프로세스를 자동화할 수 있습니다. API는 두 개의 구성 파일을 입력으로 받습니다. 애플리케이션 매니페스트는 사용된 패키지와 그 관계를 지정합니다. 두 번째 파일은 애플리케이션 매니페스트 값의 배포 시 재정의를 지정하는 오버라이드 파일입니다. 오버라이드 파일을 사용하면 동일한 애플리케이션 매니페스트를 사용하여 다양한 카메라 스트림과 함께 애플리케이션을 배포하고 기타 애플리케이션별 설정을 구성할 수 있습니다.

이 주제의 각 단계에 대한 자세한 내용 및 예제 스크립트는 애플리케이션 배포 자동화 단원을 참조하십시오.