

终止支持通知：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)。

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

# 管理 AWS Panorama 应用程序
<a name="panorama-applications"></a>

应用程序在 AWS Panorama 设备上运行，用于对视频流执行计算机视觉任务。您可以通过组合 Python 代码和机器学习模型来构建计算机视觉应用程序，然后通过互联网将它们部署到 AWS Panorama 设备上。应用程序可将视频发送到显示器，也可以使用 AWS SDK 将结果发送到 AWS 服务。

**Topics**
+ [部署应用程序](applications-deploy.md)
+ [在 AWS Panorama 控制台中管理应用程序](applications-manage.md)
+ [程序包配置](applications-packages.md)
+ [AWS Panorama 应用程序清单](applications-manifest.md)
+ [应用程序节点](applications-nodes.md)
+ [应用程序参数](applications-manifest-parameters.md)
+ [带覆盖功能的部署时配置](applications-overrides.md)

# 部署应用程序
<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)。

# 在 AWS Panorama 控制台中管理应用程序
<a name="applications-manage"></a>

使用 AWS Panorama 控制台管理已部署的应用程序。

**Topics**
+ [更新或复制应用程序](#applications-manage-clone)
+ [删除版本和应用程序](#applications-manage-delete)

## 更新或复制应用程序
<a name="applications-manage-clone"></a>

要更新应用程序，请使用**替换**选项。替换应用程序时，您可以更新其代码或模型。

**要更新应用程序**

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

1. 选择应用程序。

1. 选择**替换**。

1. 按照说明创建新版本或应用程序。

还有一个**克隆**选项，其作用类似于**替换**，但不会删除旧版本的应用程序。您可以使用此选项在不停止正在运行的版本的情况下测试对应用程序的更改，或重新部署已删除的版本。

## 删除版本和应用程序
<a name="applications-manage-delete"></a>

要清理未使用的应用程序版本，请将其从设备中删除。

**删除 应用程序**

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

1. 选择应用程序。

1. 选择**从设备中删除**。

# 程序包配置
<a name="applications-packages"></a>

当您使用 AWS Panorama 应用 CLI 命令 `panorama-cli package-application` 时，CLI 会将应用程序的资产上传到 Amazon S3 并将其注册到 AWS Panorama。资产包括二进制文件（容器映像和模型）和描述符文件，AWS Panorama 设备在部署期间下载这些文件。若要注册包的资产，请提供一个单独的包配置文件，用于定义包、其资产和接口。

以下示例显示了具有一个输入和一个输出的代码节点的包配置。视频输入提供对来自摄像头流式传输的图像数据的访问。输出节点将处理后的图像发送到显示器。

**Example packages/1234567890-SAMPLE\$1CODE-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": "3d9bxmplbdb67a3c9730abb19e48d78780b507f3340ec3871201903d8805328a.tar.gz",
                        "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json"
                    }
                ]
            }
        ],
        "interfaces": [
            {
                "name": "interface",
                "category": "business_logic",
                "asset": "code_asset",
                "inputs": [
                    {
                        "name": "video_in",
                        "type": "media"
                    }
                ],
                "outputs": [
                    {
                        "description": "Video stream output",
                        "name": "video_out",
                        "type": "media"
                    }
                ]
            }
        ]
    }
}
```

`assets` 部分指定 AWS Panorama 应用 CLI 上传到 Amazon S3 的构件的名称。如果您导入示例应用程序或来自其他用户的应用程序，则此部分可以为空，也可以引用不在您的帐户中的资产。当您运行 `panorama-cli package-application` 时，AWS Panorama 应用 CLI 会使用正确的值填充此部分。

# AWS Panorama 应用程序清单
<a name="applications-manifest"></a>

部署应用程序时，您需要提供一个名为应用程序清单的配置文件。此文件将应用程序定义为具有节点和边缘的图形。应用程序清单是应用程序源代码的一部分，存储在 `graphs` 目录中。

**Example graphs/aws-panorama-sample/graph.json**  

```
{
    "nodeGraph": {
        "envelopeVersion": "2021-01-01",
        "packages": [
            {
                "name": "123456789012::SAMPLE_CODE",
                "version": "1.0"
            },
            {
                "name": "123456789012::SQUEEZENET_PYTORCH_V1",
                "version": "1.0"
            },
            {
                "name": "panorama::abstract_rtsp_media_source",
                "version": "1.0"
            },
            {
                "name": "panorama::hdmi_data_sink",
                "version": "1.0"
            }
        ],
        "nodes": [
            {
                "name": "code_node",
                "interface": "123456789012::SAMPLE_CODE.interface"
            }
            {
                "name": "model_node",
                "interface": "123456789012::SQUEEZENET_PYTORCH_V1.interface"
            },
            {
                "name": "camera_node",
                "interface": "panorama::abstract_rtsp_media_source.rtsp_v1_interface",
                "overridable": true,
                "overrideMandatory": true,
                "decorator": {
                    "title": "IP camera",
                    "description": "Choose a camera stream."
                }
            },
            {
                "name": "output_node",
                "interface": "panorama::hdmi_data_sink.hdmi0"
            },
            {
                "name": "log_level",
                "interface": "string",
                "value": "INFO",
                "overridable": true,
                "decorator": {
                    "title": "Logging level",
                    "description": "DEBUG, INFO, WARNING, ERROR, or CRITICAL."
                }
            }
            ...
        ],
        "edges": [
            {
                "producer": "camera_node.video_out",
                "consumer": "code_node.video_in"
            },
            {
                "producer": "code_node.video_out",
                "consumer": "output_node.video_in"
            },
            {
                "producer": "log_level",
                "consumer": "code_node.log_level"
            }
        ]
    }
}
```

节点通过边缘连接，边缘指定了节点输入和输出之间的映射。一个节点的输出连接到另一个节点的输入，形成一个图形。

## JSON 架构
<a name="applications-manifest-schema"></a>

应用程序清单和覆盖文档的格式在 JSON 架构中定义。您可以在部署之前使用 JSON 架构来验证配置文档。JSON 架构可在本指南的 GitHub 存储库中找到。

****
+ **JSON 架构** — [aws-panorama-developer-guide/资源](https://github.com/awsdocs/aws-panorama-developer-guide/tree/main/resources)

# 应用程序节点
<a name="applications-nodes"></a>

节点包括模型、代码、相机流、输出和参数。节点有一个接口，用于定义其输入和输出。该接口可以在您账户中的程序包、AWS Panorama 提供的程序包或内置类型中定义。

在以下示例中，`code_node` 和 `model_node` 引用示例应用程序附带的示例代码和模型包。`camera_node` 使用 AWS Panorama 提供的软件包为您在部署期间指定的相机流创建占位符。

**Example graph.json - 节点**  

```
        "nodes": [
            {
                "name": "code_node",
                "interface": "123456789012::SAMPLE_CODE.interface"
            },
            {
                "name": "model_node",
                "interface": "123456789012::SQUEEZENET_PYTORCH_V1.interface"
            },
            {
                "name": "camera_node",
                "interface": "panorama::abstract_rtsp_media_source.rtsp_v1_interface",
                "overridable": true,
                "overrideMandatory": true,
                "decorator": {
                    "title": "IP camera",
                    "description": "Choose a camera stream."
                }
            }
      ]
```

## Edges
<a name="applications-manifest-edges"></a>

边缘将一个节点的输出映射到另一个节点的输入。在以下示例中，第一个边缘将相机流节点的输出映射到应用程序代码节点的输入。名称 `video_in` 和 `video_out` 在节点包的接口中定义。

**Example graph.json – 边缘**  

```
        "edges": [
            {
                "producer": "camera_node.video_out",
                "consumer": "code_node.video_in"
            },
            {
                "producer": "code_node.video_out",
                "consumer": "output_node.video_in"
            },
```

 在应用程序代码中，使用 `inputs` 和 `outputs` 属性从输入流中获取图像，并将图像发送到输出流。

**Example application.py – 视频输入和输出**  

```
    def process_streams(self):
        """Processes one frame of video from one or more video streams."""
        frame_start = time.time()
        self.frame_num += 1
        logger.debug(self.frame_num)
        # Loop through attached video streams
        streams = self.inputs.video_in.get()
        for stream in streams:
            self.process_media(stream)
        ...
        self.outputs.video_out.put(streams)
```

## 抽象节点
<a name="applications-manifest-abstract"></a>

在应用程序清单中，抽象节点是指由 AWS Panorama 定义的程序包，您可以将其用作应用程序清单中的占位符。AWS Panorama 提供两种类型的抽象节点。

****
+ **相机流** – 选择应用程序在部署期间使用的相机流。

  *软件包名称* – `panorama::abstract_rtsp_media_source`

  *接口名称* – `rtsp_v1_interface`
+ **HDMI 输出** – 指示应用程序输出视频。

  *软件包名称* – `panorama::hdmi_data_sink`

  *接口名称* – `hdmi0`

以下示例显示了一组基本的包、节点和边缘，用于处理相机流并将视频输出到显示器的应用程序。相机节点使用 AWS Panorama 中 `abstract_rtsp_media_source` 包的接口，可以接受多个相机流作为输入。引用 `hdmi_data_sink` 的输出节点允许应用程序代码访问从设备的 HDMI 端口输出的视频缓冲区。

**Example graph.json – 抽象节点**  

```
{
    "nodeGraph": {
        "envelopeVersion": "2021-01-01",
        "packages": [
            {
                "name": "123456789012::SAMPLE_CODE",
                "version": "1.0"
            },
            {
                "name": "123456789012::SQUEEZENET_PYTORCH_V1",
                "version": "1.0"
            },
            {
                "name": "panorama::abstract_rtsp_media_source",
                "version": "1.0"
            },
            {
                "name": "panorama::hdmi_data_sink",
                "version": "1.0"
            }
        ],
        "nodes": [
            {
                "name": "camera_node",
                "interface": "panorama::abstract_rtsp_media_source.rtsp_v1_interface",
                "overridable": true,
                "decorator": {
                    "title": "IP camera",
                    "description": "Choose a camera stream."
                }
            },
            {
                "name": "output_node",
                "interface": "panorama::hdmi_data_sink.hdmi0"
            }
        ],
        "edges": [
            {
                "producer": "camera_node.video_out",
                "consumer": "code_node.video_in"
            },
            {
                "producer": "code_node.video_out",
                "consumer": "output_node.video_in"
            }
        ]
    }
}
```

# 应用程序参数
<a name="applications-manifest-parameters"></a>

参数是具有基本类型的节点，可以在部署期间覆盖。参数可以具有默认值和*修饰器*，用于指示应用程序用户如何配置它。

**参数类型**
+ `string` – 字符串。例如，`DEBUG`。
+ `int32` – 整数。例如，`20`
+ `float32` – 浮点数。例如，`47.5`
+ `boolean` – `true` 或 `false`。

下面的示例演示两个参数，一个字符串和一个数字，它们作为输入发送到代码节点。

**Example graph.json – 参数**  

```
        "nodes": [
            {
                "name": "detection_threshold",
                "interface": "float32",
                "value": 20.0,
                "overridable": true,
                "decorator": {
                    "title": "Threshold",
                    "description": "The minimum confidence percentage for a positive classification."
                }
            },
            {
                "name": "log_level",
                "interface": "string",
                "value": "INFO",
                "overridable": true,
                "decorator": {
                    "title": "Logging level",
                    "description": "DEBUG, INFO, WARNING, ERROR, or CRITICAL."
                }
            }
            ...
        ],
        "edges": [
            {
                "producer": "detection_threshold",
                "consumer": "code_node.threshold"
            },
            {
                "producer": "log_level",
                "consumer": "code_node.log_level"
            }
            ...
        ]
    }
```

可以直接在应用程序清单中修改参数，也可以在部署时提供具有替代的新值。有关更多信息，请参阅 [带覆盖功能的部署时配置](applications-overrides.md)。

# 带覆盖功能的部署时配置
<a name="applications-overrides"></a>

您可以在部署期间配置参数和抽象节点。如果您使用 AWS Panorama 控制台进行部署，则可以为每个参数指定一个值，并选择相机流式传输作为输入。如果您使用 AWS Panorama API 部署应用程序，则可以使用覆盖文档指定这些设置。

覆盖文档在结构上与应用程序清单类似。对于具有基本类型的参数，您可以定义一个节点。对于相机流式传输，您可以定义映射到已注册相机流式传输的节点和包。然后，为每个节点定义一个覆盖，该覆盖指定它所替换的应用程序清单中的节点。

**Example overrides.json**  

```
{
    "nodeGraphOverrides": {
        "nodes": [
            {
                "name": "my_camera",
                "interface": "123456789012::exterior-south.exterior-south"
            },
            {
                "name": "my_region",
                "interface": "string",
                "value": "us-east-1"
            }
        ],
        "packages": [
            {
                "name": "123456789012::exterior-south",
                "version": "1.0"
            }
        ],
        "nodeOverrides": [
            {
                "replace": "camera_node",
                "with": [
                    {
                        "name": "my_camera"
                    }
                ]
            },
            {
                "replace": "region",
                "with": [
                    {
                        "name": "my_region"
                    }
                ]
            }
        ],
        "envelopeVersion": "2021-01-01"
    }
}
```

在前面的示例中，该文档定义了一个字符串参数和一个抽象相机节点的覆盖。`nodeOverrides` 告诉 AWS Panorama 本文档中的哪些节点会覆盖应用程序清单中的哪些节点。