写点什么

使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass

  • 2023-08-04
    天津
  • 本文字数:4439 字

    阅读完需:约 15 分钟

1.概述

亚马逊云科技提供了完备的 IoT 服务能力,涵盖设备服务、连接和控制服务以及云端分析服务,是快速构建安全可靠、可扩展的 IoT 平台的常见选择。Amazon 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

Amazon IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。使用 IoT Greengrass 来构建软件,使设备能够对其生成的数据进行本地操作,基于机器学习模型运行预测,以及过滤和聚合设备数据。可将 Amazon 服务扩展至物理设备,以便在边缘侧操作生成的数据,同时仍可将云用于管理、分析和持久存储。可确保设备不仅可以快速响应本地事件,还能在连接不稳定时正常运行。可以编写自定义软件,可在本地设备上运行的 Amazon Lambda 函数和容器应用。Amazon 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 代理将在边缘服务器上运行,在 Amazon 控制台 ECS 服务界面的 ECS 示例标签可以看到注册成功的外部实例。

5.2 部署 Greengrass

5.2.1 创建访问凭证

SSH 登录到边缘服务器,创建 greengrass 容器中访问 Amazon IoT Core 的访问凭证

vi /root/.aws/credentials
复制代码

输入以下内容,其中 <AWS_ACCESS_KEY_ID> <AWS_SECRET_ACCESS_KEY>需要替换为访问 AK、SK,如果为临时凭证还需要替换<AWS_SESSION_TOKEN>

aws_access_key_id     = <AWS_ACCESS_KEY_ID>aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>aws_session_token     = <AWS_SESSION_TOKEN
复制代码
5.2.2 定义任务

进入控制台 ECS 服务界面,从左侧导航菜单原则任务定义,选择创建新任务定义

进入控制台 ECS 服务界面,选择 EXTERNAL。

选择创建的任务角色,网络模式选择主机。

内存和 CPU 设置为 1024。

点击添加卷。

在弹出页面中添加 Amazon 访问凭证的径/root/.aws/credentials。

点击添加容器,进入容器添加画面。

输入容器名和映像地址 public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest。

输入访问 Amazon 凭证及 PROVISION 环境变量,值为 true。

设置存储挂载点,选择挂载卷,输入容器中 Amazon 凭证的挂载路径 /root/.aws/credentials,完成任务定义。

也可以通过 JSON 文件配置任务,代码如下。

{    "requiresCompatibilities": [        "EXTERNAL"    ],    "containerDefinitions": [        {            "name": "greengrassv2",            "image": "public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest",            "resourceRequirements": null,            "essential": true,            "portMappings": [],            "environment": [                {                    "name": "AWS_ACCESS_KEY_ID",                    "value": "<AWS_ACCESS_KEY_ID>"                },                {                    "name": "AWS_SECRET_ACCESS_KEY",                    "value": "<AWS_SECRET_ACCESS_KEY>"                },                {                    "name": "AWS_SESSION_TOKEN",                    "value": "<AWS_SESSION_TOKEN>"                },                {                    "name": "AWS_REGION",                    "value": "<AWS_REGION>"                },                {                    "name": "PROVISION",                    "value": "true"                }            ],            "environmentFiles": [],            "secrets": null,            "mountPoints": [                {                    "sourceVolume": "aws-credentials",                    "containerPath": "/root/.aws/credentials",                    "readOnly": ""                }            ],            "volumesFrom": null,            "hostname": null,            "user": null,            "workingDirectory": null,            "extraHosts": null,            "logConfiguration": null,            "ulimits": null,            "dockerLabels": null,            "dependsOn": null,            "repositoryCredentials": {                "credentialsParameter": ""            }        }    ],    "volumes": [        {            "host": {                "sourcePath": "/root/.aws/credentials"            },            "name": "aws-credentials"        }    ],    "networkMode": "host",    "memory": "1024",    "cpu": "1024",    "placementConstraints": [],    "family": "greengrassv2",    "taskRoleArn": "arn:aws:iam::804077508687:role/ECSTaskRole",    "executionRoleArn": "arn:aws:iam::804077508687:role/ECSTaskRole","tags": []}
复制代码
5.2.3 运行任务

在 ECS 服务界面的任务子页签中,选择运行新任务。

启动类型选择 EXTERNAL。


修改环境变量参数或保持任务定义的默认设置。

启动任务,可以看到任务列表里在边缘服务器上运行新的 greengrass 任务。

在 Amazon 控制台 IOT 的服务界面中,点击左侧导航菜单的 Greengrass 的核心设备,可以看到刚才注册成功的 Greengrass 核心设备。

5.3 部署示例应用

在本地终端,编写 Greengrass 组建 hello_world.py 脚本如下:

import sysimport datetime
message = "Hello, %s! Current time: %s." % (sys.argv[1], datetime.datetime.now())message += " Greetings from your first Greengrass component."# Print the message to stdout.print(message)
# Append the message to the log file.with open('/tmp/Greengrass_HelloWorld.log', 'a') as f: print(message, file=f)创建一个 S3存储桶用于存放 Greengrass 组件,存储桶名为 GREEGRASS-EXAMPLE-BUCKET。
aws s3 mb s3:// GREEGRASS-EXAMPLE-BUCKET aws s3 cp hello_world.py \ s3://GREEGRASS-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
复制代码

设置 IAM 权限,允许核心设备的 ECSTaskRole 访问 S3 存储桶中的组件对象。

从 Amazon 控制台进入 IoT 服务页面,点击 Greengrass 设备的组件,点击创建组件。

在创建组件页面中,选择 JSON 格式,输入组件配置信息。

配置信息代码如下:

{  "RecipeFormatVersion": "2020-01-25",  "ComponentName": "com.example.HelloWorld",  "ComponentVersion": "1.0.0",  "ComponentDescription": "My first Greengrass component.",  "ComponentPublisher": "Amazon",  "ComponentConfiguration": {    "DefaultConfiguration": {      "Message": "world"    }  },  "Manifests": [    {      "Platform": {        "os": "linux"      },      "Lifecycle": {        "Run": "python3 -u {artifacts:path}/hello_world.py '{configuration:/Message}'"      },      "Artifacts": [        {          "URI": "s3://GREENGRASS-DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"        }      ]    }  ]}
复制代码

在 Iot Greengrass 导航菜单,点击部署,进入部署页面。

输入部署名和,目标类型输入创建的 Greengrass 设备名,点击下一步。


选择已定义的 helloworld 组件,配置策略采用默认,完成部署创建。


部署完成后,可以在 Greengrass 设置的组件列表中看到已安装的组件。

SSH 登录 Greengrass 设备,进入 Greengrass 容器,通过以下命令可以查看输出信息。

tail -f /tmp/Greengrass_HelloWorld.log

6. 总结

本文介绍了基于 ECS Anywhere 的 IoT 平台参考架构,利用 ECS Anywhere 在边缘设备上容器化部署 Greengrass,并在 Greengrass 上部署组件,而从简化边缘设备管理和应用部署,用户可基于此扩展功能、构建基于容器的云边一体 IoT 平台。

本篇作者

姜可

亚马逊云科技资深解决方案架构师,负责协助客户业务系统上云的解决方案架构设计和咨询,现致力于 DevOps、IoT、机器学习相关领域的研究。在加入亚马逊云科技之前,曾在金融、制造、政府等行业耕耘多年,对相关行业解决方案和架构有很深的理解。


文章来源:https://dev.amazoncloud.cn/column/article/630a1502d4155422a4610a58?sc_medium=regulartraffic&amp;sc_campaign=crossplatform&amp;sc_channel=InfoQ

用户头像

还未添加个人签名 2019-09-17 加入

进入亚马逊云科技开发者网站,请锁定 https://dev.amazoncloud.cn 帮助开发者学习成长、交流,链接全球资源,助力开发者成功。

评论

发布
暂无评论
使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass_物联网_亚马逊云科技 (Amazon Web Services)_InfoQ写作社区