亚马逊AWS官方博客
使用Amazon ECS Anywhere在边缘部署AWS IoT Greengrass
1.概述
亚马逊云科技提供了完备的IoT服务能力,涵盖设备服务、连接和控制服务以及云端分析服务,是快速构建安全可靠、可扩展的IoT平台的常见选择。AWS IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。Amazon ECS Anywhere提供的混合云容器服务。
本文将提出一种基于ECS Anywhere构建容器化云边统一管理的IoT平台参考架构,介绍了如何利用ECS Anywhere在边缘设备上容器化部署Greengrass,并在Greengrass上部署组件,帮助用户简化IoT设备管理,从而构建云边一体的IoT平台。
2.ECS Anywhere
Amazon Elastic Container Service (ECS) Anywhere是亚马逊云科技自研的容器管理平台ECS的扩展功能,将云端的容器管理能力延伸到本地数据中心和边缘端,是利用容器技术构建云边一体IoT平台的理想选择。ECS Anywhere 为用户提供了一个完全托管的容器编排服务,使客户能够使用与目前在 Amazon ECS 中所用的相同 API、集群管理、工作负载计划、监控和部署流水线在本地运行和管理容器化应用程序。通过将服务器或实例连接到托管 Amazon ECS 控制平面,客户可以在自己的基础设施上使用 Amazon ECS Anywhere。使用 Amazon ECS Anywhere,客户可以在任何客户管理的实例上部署和管理容器化应用程序,而无需在本地手动安装、操作和管理容器编排软件。
3.IoT Greengrass
AWS IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。使用IoT Greengrass来构建软件,使设备能够对其生成的数据进行本地操作,基于机器学习模型运行预测,以及过滤和聚合设备数据。可将 AWS 服务扩展至物理设备,以便在边缘侧操作生成的数据,同时仍可将云用于管理、分析和持久存储。可确保设备不仅可以快速响应本地事件,还能在连接不稳定时正常运行。可以编写自定义软件,可在本地设备上运行的 AWS Lambda 函数和容器应用。AWS IoT Greengrass也可运行在容器中。
4.基于ECS Anywhere的IoT平台参考架构
在ECS中统一管理服务端和边缘端的设备和容器任务,通过ECS Anywhere在边缘端容器中部署Greengrass和其他边缘应用,通过云端IoT控制台管理连接Greengrass,管理Greengrass中的组件和应用。
5.构建步骤
(本文将用一台EC2服务器模拟边缘服务器,操作系统为ubuntu20,机型为T3.large,磁盘EBS50G。)
使用ECS Anywhere在边缘部署IoT Greengrass及应用, 具体构建步骤如下:
- 部署ECS Anywhere
- 部署Greengrass
- 部署应用
5.1部署ECS Anywhere
ECS Anywhere部署架构图如下所示。
5.1.1 创建ECS集群
进入ECS服务,点击创建集群。
选择EC2 Linux+联网模版。
输入集群名,可以选择创建空集群或者创建有实例的集群。
如果为非空集群,实例数量输入2,网络设置可选已有VPC和子网,也可以新建VPC。其他设置默认,点击创建集群。
5.1.2 注册边缘服务器
进入新创建的ECS集群,选择ECS实例子页签,点击注册External实例。
选择实例数量,实例角色新建,点击生成注册命令。
复制注册命令。
以root身份运行脚本将在边缘服务器上安装ECS代理和SSM代理。
执行完毕后,SSM代理和ECS代理将在边缘服务器上运行,在AWS控制台ECS服务界面的ECS示例标签可以看到注册成功的外部实例。
5.2 部署Greengrass
5.2.1创建访问凭证
SSH登录到边缘服务器,创建greengrass容器中访问AWS IoT Core的访问凭证,
输入以下内容,其中<AWS_ACCESS_KEY_ID>
和<AWS_SECRET_ACCESS_KEY>
需要替换为访问AK、SK,如果为临时凭证还需要替换<AWS_SESSION_TOKEN>
5.2.2定义任务
进入控制台ECS服务界面,从左侧导航菜单原则任务定义,选择创建新任务定义。
进入控制台ECS服务界面,选择EXTERNAL。
选择创建的任务角色,网络模式选择主机。
内存和CPU设置为1024。
点击添加卷。
在弹出页面中添加AWS访问凭证的路径/root/.aws/credentials。
点击添加容器,进入容器添加画面。
输入容器名和映像地址public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest。
输入访问AWS凭证及PROVISION环境变量,值为true。
设置存储挂载点,选择挂载卷,输入容器中AWS凭证的挂载路径/root/.aws/credentials,完成任务定义。
也可以通过JSON文件配置任务,代码如下。
5.2.3 运行任务
在ECS服务界面的任务子页签中,选择运行新任务。
启动类型选择EXTERNAL。
修改环境变量参数或保持任务定义的默认设置。
启动任务,可以看到任务列表里在边缘服务器上运行新的greengrass任务。
在AWS控制台IOT的服务界面中,点击左侧导航菜单的Greengrass的核心设备,可以看到刚才注册成功的Greengrass核心设备。
5.3 部署示例应用
在本地终端,编写Greengrass组建hello_world.py脚本如下:
创建一个S3存储桶用于存放Greengrass组件,存储桶名为GREEGRASS-EXAMPLE-BUCKET
。
设置IAM权限,允许核心设备的ECSTaskRole访问 S3 存储桶中的组件对象。
从AWS控制台进入IoT服务页面,点击Greengrass设备的组件,点击创建组件。
在创建组件页面中,选择JSON格式,输入组件配置信息。
配置信息代码如下:
在Iot Greengrass导航菜单,点击部署,进入部署页面。
输入部署名和,目标类型输入创建的Greengrass设备名,点击下一步。
选择已定义的helloworld组件,配置策略采用默认,完成部署创建。
部署完成后,可以在Greengrass设置的组件列表中看到已安装的组件。
SSH登录Greengrass设备,进入Greengrass容器,通过以下命令可以查看输出信息。
tail -f /tmp/Greengrass_HelloWorld.log
6. 总结
本文介绍了基于ECS Anywhere的IoT平台参考架构,利用ECS Anywhere在边缘设备上容器化部署Greengrass,并在Greengrass上部署组件,而从简化边缘设备管理和应用部署,用户可基于此扩展功能、构建基于容器的云边一体IoT平台。