亚马逊AWS官方博客
借助 AWS IoT Greengrass Docker Application Deployment 连接器将容器应用部署到 IoT 边缘
AWS IoT Greengrass 是将云功能扩展到本地设备的软件。这使得设备可以更靠近信息源来收集和分析数据,自主响应本地事件,同时在本地网络上彼此安全地通信。AWS IoT Greengrass 开发人员可以使用 AWS Lambda 函数和预构建的连接器来创建无服务器应用程序,这些应用程序将部署到设备上以进行本地执行。
AWS IoT Greengrass 近期发布了一个新特性, 使得在 AWS IoT Greengrass Core 上运行 Docker 映像更容易。Docker Application Deployment连接器使用 Docker Compose 从 docker-compose.yml 文件启动多容器 Docker 应用程序。具体而言,连接器运行 docker-compose 命令来管理单个核心设备上的 Docker 容器。连接器可以访问存储在 Docker 容器注册表中的 Docker 映像,包括 Amazon Elastic Container Registry (Amazon ECR)、Docker 中心和私有 Docker 信任的Registry.
通过使用Greengrass Docker Application Deployment连接器,你可以将在企业应用直接封装成容器部署到IoT边缘供设备调用,也可以将机器学习模型容器化后在边缘测提供推理等功能.同时企业也可以通过在Registry中更新容器镜像并结合版本更新的功能快速更新这些边缘设备上的应用.
下面我们通过一个简单示例展示如何将一个应用(NodeRed)容器化部署到AWS IoT Greengrass 核心中并使用连接器访问
先决条件
- 此功能需要AWS IoT Greengrass 核心软件 v1.10 以上版本
- Greengrass 核心中已安装Python3.7及以上版本,并已添加到 PATH 环境变量
- Greengrass 核心上已安装 Docker Engine v1.9.1 或更高版本
- Greengrass 核心上已安装 Docker Compose.
- AWS Cli具有S3,ECR,IoT等相应服务使用权限
构建运行环境
1.在边缘设备中部署AWS IoT GreenGrass 核心软件.
创建AWS IoT GreenGrass组和部署AWS IoT GreenGrass 核心软件过程可以参考https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/gg-core.html
如在创建和部署过程中发现问题请参阅 AWS IoT Greengrass 文档中的故障排除部分。
2.在边缘设备中安装Python 3.7及以上版本.
使用
在设备上安装Python3.7版本,使用
检查Python3 是否在PATH变量中.
3.在边缘设备中安装Docker Engine v1.9.1.
安装完成后启动docker服务并配置为ec2-user或其他用户增加运行权限
使用
4.在边缘设备中安装 Docker Compose.
使用如下命令进行安装
使用如下命令检查docker-compose的版本和安装情况
构建容器应用
1.构建容器镜像
容器镜像可以通过Docker file进行创建也可以直接通过Dockerhub等公共仓库拉取镜像
使用Docker file 创建Image的方法可以参考Docker官方文档
https://docs.docker.com/engine/reference/commandline/image_build/
此教程中我们直接从Docker拉取镜像
使用命令
拉取NodeRed官方镜像到本地并使用docker images命令确认镜像在本地
2.将容器进行推送至Amazon ECR
- 创建ECR 存储库
使用如下命令创建存储库
- 使用如下命令将本地镜像标记并上传至 ECR库中
同时记录AWS ECR 中Image URL路径
3.构建 Compose file
我们需要使用Compose 文件用于定义和运行多容器Docker 应用程序以及它们的配置。通过 Compose我们可以使用 YML 文件来配置应用程序需要的所有服务。
该教程中所使用到的Compose如下
将以上内容保存到Docker-compose-node-red.yml文件
并上传到一个S3存储桶中通过以上步骤我们完成了容器镜像及compose文件的的创建。
启用Docker Application Deployment连接器
在创建Docker Application Deployment连接器之前,我们需要确认创建的Greengrass组具有以下权限
- 从S3存储桶中读取的权限(具有s3:GetObject)
以下示例策略作为参考