构建应用程序映像 - AWS Panorama

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

构建应用程序映像

AWS Panorama Appliance 以从您构建的映像中导出的容器文件系统的形式运行应用程序。您可以在 Dockerfile 中指定应用程序的依赖项和资源,该 Dockerfile 使用 AWS Panorama 应用程序基础映像作为起点。

要构建应用程序映像,您可以使用 Docker 和 AWS Panorama 应用程序 CLI。本指南示例应用程序中的以下示例演示了这些用例。

packages/123456789012-SAMPLE_CODE-1.0/Dockerfile
FROM public.ecr.aws/panorama/panorama-application WORKDIR /panorama COPY . . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt

使用以下 Dockerfile 指令。

  • FROM - 加载应用程序基础映像 (public.ecr.aws/panorama/panorama-application)。

  • WORKDIR - 在映像上设置工作目录。/panorama 用于应用程序代码和相关文件。此设置仅在构建期间保留,不会影响应用程序运行时的工作目录 (/)。

  • COPY - 将文件从本地路径复制到映象中的路径。COPY . .将当前目录(程序包目录)中的文件复制到映象上的工作目录中。例如,应用程序代码是从 packages/123456789012-SAMPLE_CODE-1.0/application.py 复制到 /panorama/application.py 的。

  • RUN- 在构建期间对映像运行 shell 命令。通过在命令之间使用 &&,单个 RUN 操作可以按顺序运行多个命令。此示例更新 pip 程序包管理器,然后安装 requirements.txt 中列出的库。

您可以使用在构建时非常有用的其他指令,例如 ADDARG。向容器添加运行时系统信息的说明(例如 ENV)不适用于 AWS Panorama。AWS Panorama 不会从映像中运行容器。仅使用映像导出文件系统,然后将其传输到设备。

指定依赖项

requirements.txt 是一个 Python 要求文件,用于指定应用程序使用的库。示例应用程序使用 Open CV 和 AWS SDK for Python (Boto3)。

packages/123456789012-SAMPLE_CODE-1.0/requirements.txt
boto3==1.24.* opencv-python==4.6.*

Dockerfile 中的 pip install 命令会将这些库安装到 /usr/local/lib 下的 Python dist-packages 目录,以便您的应用程序代码可以将其导入。

本地存储

AWS Panorama 保留了用于存储应用程序的 /opt/aws/panorama/storage 目录。您的应用程序可以在此路径上创建和修改文件。在存储目录中创建的文件在重新启动后仍会保留。其他临时文件位置会在启动时清除。

构建映像资产

使用 AWS Panorama 应用程序 CLI 为应用程序包构建映像时,CLI 将在程序包目录中运行 docker build。这将生成一个包含应用程序代码的应用程序映像。然后,CLI 会创建一个容器,导出其文件系统,对其进行压缩,然后将其存储在 assets 文件夹中。

$ panorama-cli build-container --container-asset-name code_asset --package-path packages/123456789012-SAMPLE_CODE-1.0 docker build -t code_asset packages/123456789012-SAMPLE_CODE-1.0 --pull docker export --output=code_asset.tar $(docker create code_asset:latest) gzip -1 code_asset.tar { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "6f67xmpl32743ed0e60c151a02f2f0da1bf70a4ab9d83fe236fa32a6f9b9f808.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } Container asset for the package has been succesfully built at /home/user/aws-panorama-developer-guide/sample-apps/aws-panorama-sample/assets/6f67xmpl32743ed0e60c151a02f2f0da1bf70a4ab9d83fe236fa32a6f9b9f808.tar.gz

输出中的 JSON 数据块是资产定义,CLI 将其添加到程序包配置 (package.json) 中,并注册 AWS Panorama 服务。CLI 还会复制描述符文件,该文件指定了应用程序脚本的路径(应用程序的入口点)。

packages/123456789012-SAMPLE_CODE-1.0/descriptor.json
{ "runtimeDescriptor": { "envelopeVersion": "2021-01-01", "entry": { "path": "python3", "name": "/panorama/application.py" } } }

在资产文件夹中,描述符和应用程序映像以其 SHA-256 校验码命名。当在 Amazon S3 存储资产时,此名称用作该资产的唯一标识符。