

终止支持通知：2026 年 5 月 31 日， AWS 将终止对的支持。 AWS Panorama 2026 年 5 月 31 日之后，您将无法再访问 AWS Panorama 控制台或 AWS Panorama 资源。有关更多信息，请参阅[AWS Panorama 终止支持](https://docs.aws.amazon.com/panorama/latest/dev/panorama-end-of-support.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 部署应用程序
<a name="applications-deploy"></a>

要部署应用程序，您可以使用 AWS Panorama 应用程序 CLI 将其导入您的账户，构建容器，上传和注册资产，然后创建应用程序实例。本主题详细介绍了其中的每个步骤，并介绍后台操作。

如果您尚未部署应用程序，请参阅 [入门 AWS Panorama](panorama-gettingstarted.md) 以获取演练。

有关定制和扩展示例应用程序的详细信息，请参阅 [构建 AWS Panorama 应用程序](panorama-development.md)。

**Topics**
+ [安装 AWS Panorama 应用程序 CLI](#applications-deploy-install)
+ [导入应用程序](#applications-deploy-import)
+ [构建容器映像](#applications-deploy-build)
+ [导入模型](#applications-deploy-model)
+ [上传应用程序资产](#applications-deploy-package)
+ [使用 AWS Panorama 控制台部署应用程序](#applications-manage-deploy)
+ [自动化应用程序部署](#applications-deploy-automate)

## 安装 AWS Panorama 应用程序 CLI
<a name="applications-deploy-install"></a>

要安装 AWS Panorama 应用程序 CLI 和 AWS CLI，请使用 pip。

```
$ pip3 install --upgrade awscli panoramacli
```

要使用 AWS Panorama 应用程序 CLI 构建应用程序映像，您需要使用 Docker。在 Linux 上，还需要 `qemu` 和相关系统库。有关安装和配置 AWS Panorama 应用程序 CLI 的更多信息，请参阅项目 GitHub 存储库中的自述文件。

****
+ [gitub。 com/aws/aws-panorama-cli](https://github.com/aws/aws-panorama-cli)

有关使用在 Windows 中设置构建环境的说明 WSL2，请参阅[在 Windows 中设置开发环境](applications-devenvwindows.md)。

## 导入应用程序
<a name="applications-deploy-import"></a>

如果您正在使用示例应用程序或第三方提供的应用程序，请使用 AWS Panorama 应用程序 CLI 导入该应用程序。

```
my-app$ panorama-cli import-application
```

此命令使用您的账户 ID 重命名应用程序软件包。软件包名称以其部署账户的账户 ID 开头。将应用程序部署到多个账户时，必须为每个账户分别导入和打包应用程序。

例如，本指南的示例应用程序是一个代码包和一个模型包，每个包都以占位符账户 ID 命名。该`import-application`命令将它们重命名为使用 CLI 从您的工作空间凭据中推断出的账户 ID。 AWS 

```
/aws-panorama-sample
├── assets
├── graphs
│   └── my-app
│       └── [graph.json](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/graphs/my-app/graph.json)
└── packages
    ├── [123456789012-SAMPLE\$1CODE-1.0](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0)
    │   ├── Dockerfile
    │   ├── application.py
    │   ├── descriptor.json
    │   ├── package.json
    │   ├── requirements.txt
    │   └── squeezenet_classes.json
    └── [123456789012-SQUEEZENET\$1PYTORCH-1.0](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SQUEEZENET_PYTORCH-1.0)
        ├── descriptor.json
        └── package.json
```

在软件包目录名称和指代这些包的应用程序清单 (`graph.json`) 中，`123456789012` 将被替换为您的账户 ID。您可以致电`aws sts get-caller-identity`确认您的账户 ID AWS CLI。

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

## 构建容器映像
<a name="applications-deploy-build"></a>

您的应用程序代码打包在 Docker 容器映像中，其中包括您在 Dockerfile 中安装的应用程序代码和库。使用 AWS Panorama 应用程序 CLI `build-container` 命令构建 Docker 映像并导出文件系统映像。

```
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` 的 Docker 映像，并将文件系统导出到 `assets` 文件夹中的 `.tar.gz` 存档中。CLI 会根据应用程序 Dockerfile 所述，从 Amazon Elastic 容器注册表 (Amazon ECR) 中提取应用程序基础映像。

除容器存档外，CLI 还会为程序包描述符 (`descriptor.json`) 创建资产。两个文件都使用反映了原始文件哈希值的唯一标识符重命名。AWS Panorama 应用程序 CLI 还在程序包配置中添加了一个块，用于记录这两种资产的名称。这些名称会由设备在部署过程中使用。

**Example [packages/123456789012-SAMPLE\$1CODE-1.0/package.json](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/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`。

## 导入模型
<a name="applications-deploy-model"></a>

您的应用程序的资产文件夹中可能有模型存档，或者您可以单独下载。如果您有新模型、更新的模型或更新的模型描述符文件，请使用 `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
```

如果您只需要更新描述符文件，则可以复用资产目录中的现有模型。您可能需要更新描述符文件，以配置诸如浮点精度模式等功能。例如，以下脚本展示了如何使用示例应用程序执行该操作。

**Example [util-scripts/ .sh update-model-config](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/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 使用新的资产名称更新模型程序包配置，类似于在重建容器时更新应用程序代码包配置的方式。

## 上传应用程序资产
<a name="applications-deploy-package"></a>

要上传和注册应用程序资产，包括模型存档、容器文件系统存档及其描述符文件，请使用 `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](https://docs.aws.amazon.com/panorama/latest/api/API_DescribePackage.html)API 提供有关接入点的信息。CLI 将每个程序包的资产上传到为其提供的位置，并按照程序包配置描述的设置将其注册到 AWS Panorama 服务。

## 使用 AWS Panorama 控制台部署应用程序
<a name="applications-manage-deploy"></a>

您可以使用 AWS Panorama 控制台部署应用程序。在部署过程中，您可以选择将哪些摄像机视频流传递给应用程序代码，并配置应用程序开发人员提供的选项。

**部署应用程序**

1. 打开 AWS Panorama 控制台[已部署的应用程序](https://console.aws.amazon.com/panorama/home#deployed-applications)页面。

1. 选择**部署应用程序**。

1. 将应用程序清单的内容 `graph.json` 粘贴到文本编辑器中。选择**下一步**。

1. 输入名称和描述。

1. 选择**继续部署**。

1. 选择**开始部署**。

1. 如果您的应用程序[使用角色](permissions-application.md)，请从下拉菜单中选择。选择**下一步**。

1. 选择**选择设备**，然后选择您的设备。选择**下一步**。

1. 在**选择数据源**步骤中，选择**查看输入**，然后将摄像头流添加为数据源。选择**下一步**。

1. 在**配置**步骤中，配置开发人员定义的所有特定于应用程序的设置。选择**下一步**。

1. 选择**部署**，然后选择**完成**。

1. 在已部署的应用程序列表中，选择要监控其状态的应用程序。

部署过程需要 15 到 20 分钟。当应用程序启动时，设备的输出可能长时间处于空白状态。如果您遇到错误消息，请参阅 [故障排除](panorama-troubleshooting.md)。

## 自动化应用程序部署
<a name="applications-deploy-automate"></a>

您可以使用 [CreateApplicationInstance](https://docs.aws.amazon.com/panorama/latest/api/API_CreateApplicationInstance.html)API 自动执行应用程序部署过程。API 采用两个配置文件作为输入。应用程序清单说明了使用的程序包及其关系。第二个文件是覆盖文件，用于指定部署时对应用程序清单中值的覆盖。使用覆盖文件可以让您使用相同的应用程序清单，以不同的摄像机数据视频流部署应用程序，并配置其他应用程序的特定设置。

有关更多信息以及本主题中每个步骤的示例脚本，请参阅 [自动化应用程序部署](api-deploy.md)。