首页 > 其他分享 >使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass

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

时间:2023-08-04 16:44:26浏览次数:46  
标签:IoT aws Greengrass Amazon Anywhere ECS

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 中的组件和应用。

image.png

5.构建步骤

(本文将用一台 EC2 服务器模拟边缘服务器,操作系统为 ubuntu20,机型为 T3.large ,磁盘 EBS50G。)

使用 ECS Anywhere 在边缘部署 IoT Greengrass 及应用, 具体构建步骤如下:

  • 部署 ECS Anywhere
  • 部署 Greengrass
  • 部署应用

5.1部署 ECS Anywhere

ECS Anywhere 部署架构图如下所示。

image.png

5.1.1 创建 ECS 集群

进入 ECS 服务,点击创建集群。

image.png

选择 EC2 Linux+ 联网模版。

image.png

输入集群名,可以选择创建空集群或者创建有实例的集群。

image.png

如果为非空集群,实例数量输入 2,网络设置可选已有 VPC 和子网,也可以新建 VPC 。其他设置默认,点击创建集群。

image.png

5.1.2 注册边缘服务器

进入新创建的 ECS 集群,选择 ECS 实例子页签,点击注册 External 实例。

image.png

选择实例数量,实例角色新建,点击生成注册命令。

image.png

复制注册命令。

image.png

以 root 身份运行脚本将在边缘服务器上安装ECS代理和SSM代理。

image.png

执行完毕后,SSM 代理和 ECS 代理将在边缘服务器上运行,在 Amazon 控制台 ECS 服务界面的 ECS 示例标签可以看到注册成功的外部实例。

image.png

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 服务界面,从左侧导航菜单原则任务定义,选择创建新任务定义

image.png

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

image.png

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

image.png

内存和 CPU 设置为 1024。

image.png

点击添加卷。

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

也可以通过 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 服务界面的任务子页签中,选择运行新任务。

image.png

启动类型选择 EXTERNAL。

image.png

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

image.png

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

image.png

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

image.png

5.3 部署示例应用

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

 
import sys
import 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 设备的组件,点击创建组件。

image.png

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

image.png

配置信息代码如下:

{
  "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 导航菜单,点击部署,进入部署页面。

image.png

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

image.png

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

image.png

image.png

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

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

tail -f /tmp/Greengrass_HelloWorld.log

6. 总结

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

本篇作者

image.png

姜可

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

文章来源:

https://dev.amazoncloud.cn/column/article/630a1502d4155422a4610a58?sc_medium=regulartraffic&amp;sc_campaign=crossplatform&amp;sc_channel=bokey

标签:IoT,aws,Greengrass,Amazon,Anywhere,ECS
From: https://www.cnblogs.com/AmazonwebService/p/17606384.html

相关文章

  • 一键获取测试脚本,轻松验证 TDengine 3.0 IoT 场景下 TSBS 测试报告
    不久前,基于TSBS,我们发布了TDengine3.0测试报告系列第一期——《DevOps场景下TDengine3.0对比测试报告》,报告验证了TDengine基于时序数据场景所设计的独特架构,在DevOps场景下带来的性能优势以及成本控制水平。本期我们继续探寻在IoT场景下,TDengine对比TimescaleDB、......
  • 聚焦 TimescaleDB VS TDengine 性能对比报告,IoT 场景下全面分析写入与查询
    基于第三方基准性能测试平台TSBS(TimeSeriesBenchmarkSuite)标准数据集,TDengine 团队在TSBS的IoT场景中,预设了五种规模的卡车车队基础数据集,在相同的AWS云环境下对时序数据库(TimeSeriesDatabase) TDengine3.0 和TimescaleDB2.10.1进行了对比分析。本文将会从写入......
  • Amazon Aurora Serverless v2 正式发布:针对要求苛刻的工作负载的即时扩展
    我们非常兴奋地宣布,AmazonAuroraServerlessv2 现已面向AuroraPostgreSQL和MySQL正式发布。AuroraServerless是一种面向 AmazonAurora 的按需自动扩展配置,可让您的数据库根据应用程序的需求扩展或缩减容量。亚马逊云科技开发者社区为开发者们提供全球的开发技术......
  • patriotic 集群管理
    2022-05-05346安装环境主机名ip角色cs1192.168.43.10etcd、patroni、postgresqlcs2192.168.43.11etcd、patroni、postgresqlcs3192.168.43.12etcd、patroni、postgresql工具简介及功能EtcdEtcd是一款基于Raft算法和协议开发的分布式key-value......
  • 亚马逊云科技发布基于Amazon Graviton3E的Hpc7g和C7gn实例
    亚马逊云科技宣布两款基于最新一代自研芯片AmazonGraviton3E的新实例AmazonElasticComputeCloud(AmazonEC2)Hpc7g和AmazonEC2C7gn正式可用。 其中,Hpc7g实例专为计算和网络密集型高性能计算(HPC)工作负载而构建,让用户能够在多达数万个CPU核心的高性能计算集群中进行复杂的计算。......
  • AI飙车!亚马逊云科技Amazon DeepRacer大赛帮助学生快速get云技能
    亚马逊云科技AmazonDeepRacer比赛既是一场比拼速度和技术的游戏,也是一种学习人工智能的方式,参赛选手不仅能边玩边学,还有可能成长为技术大牛。而且,它可不只是一场让年轻人打call的比赛,更是亚马逊云科技与高校共建云人才生态的重头戏。不少才华横溢的年轻人,就通过这个比赛踏上了前沿......
  • IoToS-App 0.6.0 移动端业务实现 文档开源
    IoTOS-App v0.6.0    本次更新主要适配移动端卡号查询、智能诊断、用量记录、批量业务办理、会话记录功能实现。   www.iotos.top文档页面网站源代码已开源,感兴趣的可用于搭建简单文档网站等,vue、markdown、html语法适配。文档网站源码地址:  https://gitee.com/c......
  • boost asio多线程模式-IOThreadPool
    今天给大家介绍asio多线程模式的第二种,之前我们介绍了IOServicePool的方式,一个IOServicePool开启n个线程和n个iocontext,每个线程内独立运行iocontext,各个iocontext监听各自绑定的socket是否就绪,如果就绪就在各自线程里触发回调函数。为避免线程安全问题,我们将网络数据封装为逻辑......
  • 在 Amazon EMR 上构建实时数据湖
    前言当公司业务发展遇到瓶颈时,业务分析师以及决策者们总会希望通过交叉分析大量的业务数据和用户行为数据,以解答“为什么利润会下滑?”“为什么库存周转变慢了?”等问题,最终整点“干货”出来从而促进业务发展。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有......
  • AIRIOT可视化组态引擎如何应用于物联业务场景中
    在物联网的业务应用场景中,可视化组态是一个必不可少的功能需求。不同的行业场景,都需要将物联设备采集的数据和业务场景状态进行直观的可视化展示,供使用者进行分析或决策。如工艺流程用能监测、3D场景构建、能耗趋势场景报警联动、重点设备视频接入、重点数据移动监测、计划用能终......