当前位置: 首页 > news >正文

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

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 datetimemessage = "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=CSDN

相关文章:

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

1.概述 亚马逊云科技提供了完备的IoT服务能力&#xff0c;涵盖设备服务、连接和控制服务以及云端分析服务&#xff0c;是快速构建安全可靠、可扩展的 IoT 平台的常见选择。Amazon IoT Greengrass 边缘运行时和云服务&#xff0c;可帮助您在设备上构建、部署和管理 IoT 应用。A…...

pytorch Stream 多流处理

CUD Stream https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions 中指出在kenel的调用函数中最后一个可选参数表示该核函数处在哪个流之中。 - 参数Dg用于定义整个grid的维度和尺寸&#xff0c;即一个grid有多少个block。为dim3类型。…...

微信小程序选项卡切换(滑动切换,点击切换)

效果如下&#xff1a;可点击切换&#xff0c;滑动切换 代码如下 这个可以在项目用 index.wxml <view classtopTabSwiper><view classtab {{currentData 0 ? "tabBorer" : ""}} data-current "0" bindtapcheckCurrent>选项一&…...

安路FPGA的赋值报错——移位处理,加括号

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 在使用移位符号用来当作除以号使用时&#xff0c;发现如下问题 其中 cnt_8K 为偶数和奇数时输出的数据不一样 reg [10:0] cnt_8K; reg [10:0] ram1_addra; always(posedge clk_16M) begin if(ram_out_flag )begin if(…...

GO学习之 接口(Interface)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 文章目录 GO系列前言一、什么是…...

ansible常见模块的运用

ansible常见模块的运用 一&#xff1a;Ansible简介二&#xff1a;ansible 环境安装部署管理端安装 ansibleansible 目录结构配置主机清单配置密钥对验证 三&#xff1a;ansible 命令行模块1&#xff0e;command 模块在远程主机执行命令&#xff0c;不支持管道&#xff0c;重定向…...

合宙Air724UG LuatOS-Air script lib API--patch

patch Table of Contents patch patch.safeJsonDecode(s) (local函数 无法被外部调用) patch 模块功能&#xff1a;Lua补丁 patch.safeJsonDecode(s) (local函数 无法被外部调用) 封装自定义的json.decode接口 参数 名称 传入值类型 释义 s string json格式的字符串 返回值 t…...

pytorch求导

pytorch求导的初步认识 requires_grad tensor(data, dtypeNone, deviceNone, requires_gradFalse)requires_grad是torch.tensor类的一个属性。如果设置为True&#xff0c;它会告诉PyTorch跟踪对该张量的操作&#xff0c;允许在反向传播期间计算梯度。 x.requires_grad 判…...

Java基础异常详解

Java基础异常详解 文章目录 Java基础异常详解编译时异常&#xff08;Checked Exception&#xff09;&#xff1a;运行时异常&#xff08;Unchecked Exception&#xff09;: Java中的异常是用于处理程序运行时出现的错误或异常情况的一种机制。 异常本身也是一个类。 异常分为…...

vue3+vue-i18n 监听语言的切换

最近在用 vue3 做一个后台管理系统&#xff0c;之前是只考虑中文&#xff0c;现在加了个需求是多语言。 本来也不是太难的需求&#xff0c;但是我用的并不熟悉&#xff0c;并且除了页面展示不同的语言&#xff0c;需求是在切换语言的时候在几个页面中需要做出一些自定义的行为&…...

【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示

文章目录 总结01 递归删除结点02 删除结点03 反向输出04 删除最小值05 逆置06 链表递增排序07 删除区间值08 找公共结点09 增序输出链表10 拆分链表--尾插11 拆分链表--头插12 删除相同元素13 合并链表14 生成含有公共元素的链表C15 求并集16 判断子序列17 判断循环链表是否对称…...

娇滴滴的一朵花(Python实现)

目录 1 娇滴滴的她 2 Python代码实现 1 娇滴滴的她 娇滴滴。双眉敛破春山色。春山色。 为君含笑,为君愁蹙。多情别後无消息。 此时更有谁知得。谁知得。夜深无寐&#xff0c;度江横笛。 2 Python代码实现 import turtle from turtle import * turtle.title(春天送她一朵小花)…...

Android AccessibilityService研究

AccessibilityService流程分析 AccessibilityService开启方式AccessibilityService 开启原理 AccessibilityService开启方式 . 在Framework里直接添加对应用app 服务component。 loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,1); loadSetting(stmt, Settings.Se…...

华为OD机试(含B卷)真题2023 算法分类版,58道20个算法分类,如果距离机考时间不多了,就看这个吧,稳稳的

目录 一、数据结构1、线性表2、优先队列3、滑动窗口4、二叉树5、并查集6、栈 二、算法1、基础算法2、字符串3、图4、动态规划5、数学 三、漫画算法2&#xff1a;小灰的算法进阶参与方式 很多小伙伴问我&#xff0c;华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如…...

JMeter命令行执行+生成HTML报告

1、为什么用命令行模式 使用GUI方式启动jmeter&#xff0c;运行线程较多的测试时&#xff0c;会造成内存和CPU的大量消耗&#xff0c;导致客户机卡死&#xff1b; 所以一般采用的方式是在GUI模式下调整测试脚本&#xff0c;再用命令行模式执行&#xff1b; 命令行方式支持在…...

学习Boost二:从附录3来看编码习惯

附录C 关键字浅谈 在C11标准中&#xff08;C11.2.12&#xff09;总共定义了73个关键字&#xff08;keyword&#xff09;、2个“准”关键字&#xff08;identifiers with special meaning&#xff09;和11个操作符替代字&#xff08;alternative representation&#xff09;[1]。…...

STM32基础入门学习笔记:核心板 电路原理与驱动编程

文章目录&#xff1a; 一&#xff1a;LED灯操作 1.LED灯的点亮和熄灭 延迟闪烁 main.c led.c led.h BitAction枚举 2.LED呼吸灯&#xff08;灯的强弱交替变化&#xff09; main.c delay.c 3.按键控制LED灯 key.h key.c main.c 二&#xff1a;FLASH读写程序(有…...

最后一次模拟考试题解

哦我想这不用看都知道是为了水任务 T1 黑白染色 其实这题有原 什么手写体 md (指 markdown) 分析 首先这题如果你题目没看错的话 ,会发现其实他是 n m n \times m nm 让你求 n n n \times n nn 的区域内的点&#xff08;不会只有我一个人题目看错了罢 然后我们会发现…...

Mac 创建和删除 Automator 工作流程,设置 Terminal 快捷键

1. 创建 Automator 流程 本文以创建一个快捷键启动 Terminal 的自动操作为示例。 点击打开 自动操作&#xff1b; 点击 新建文稿 点击 快速操作 选择 运行 AppleScript 填入以下内容 保存名为 “Open Terminal” 打开 设置 > 键盘&#xff0c;选择 键盘快捷键 以此选择 服…...

2023华为OD机试真题B卷 Java 实现【最长的元音串】

前言 本题使用Java解答,如果需要Python代码,链接 题目 给定一个只由英文字母(a-z, A-Z)组成的字符串,找出其中最长的只包含元音字母(a, e, i, o, u, A, E, I, O, U)的子串,并返回其长度。如果不存在元音子串,则返回0。 输入: 一个由英文字母组成的字符串,长度大…...

Swift集成飞书生态:使用feishu-swift SDK实现高效开发

1. 项目概述&#xff1a;一个连接飞书与Swift生态的桥梁最近在折腾一个内部工具&#xff0c;需要把iOS App里的某些数据自动同步到飞书文档里&#xff0c;方便团队协作查看。一开始想用飞书官方API直接写&#xff0c;但发现Swift这边原生的HTTP请求和JSON处理起来有点啰嗦&…...

思源宋体TTF完全指南:7种字重免费解决中文排版难题

思源宋体TTF完全指南&#xff1a;7种字重免费解决中文排版难题 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目找不到合适的字体而烦恼吗&#xff1f;无论是网页设计…...

AI编程也开始“贵价提速”?Cursor上线Opus极速模式,官方却劝你:别开,真不值!

前言各位码农老铁们&#xff0c;最近有没有感觉写代码像在开手动挡老爷车——油门踩到底&#xff0c;AI还在“思考人生”&#xff1f;别急&#xff0c;Cursor贴心地给你装了个“涡轮增压”&#xff1a;Claude Opus 4.7 Fast mode&#xff0c;号称速度拉满、输出飞起&#xff01…...

Armv8-A内存模型特性寄存器详解与应用

1. Armv8-A内存模型特性寄存器概述在Armv8-A架构中&#xff0c;内存模型特性寄存器&#xff08;Memory Model Feature Registers&#xff0c;简称MMFR&#xff09;是一组关键的系统寄存器&#xff0c;用于描述处理器实现的内存管理功能特性。这些寄存器采用只读访问模式&#x…...

拆解MC1496乘法器:如何在没有现成库的Multisim里,手动封装一个调幅核心模块

从零构建MC1496乘法器&#xff1a;Multisim高阶封装与调幅电路实战指南 在电子设计领域&#xff0c;仿真软件自带的元件库往往无法满足所有需求。当我们需要使用MC1496这类经典模拟乘法器时&#xff0c;Multisim的默认库可能让人束手无策。本文将带您深入芯片内部结构&#xff…...

ChatGPT购物功能支持平台速查表,含响应延迟、支付闭环率、商品图识别准确率等5项硬指标实测数据

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT购物功能支持哪些平台 截至2024年&#xff0c;ChatGPT原生并不直接集成电商交易能力&#xff0c;但通过官方插件&#xff08;Plugins&#xff09;和第三方API集成&#xff0c;可在特定授权环境…...

跨镜跟踪技术白皮书:ReID瓶颈与镜像无感解决方案

跨镜跟踪技术白皮书&#xff1a;ReID瓶颈与镜像无感解决方案前言在数字孪生、视频孪生、全域安防感知等领域&#xff0c;跨镜跟踪作为全域连续感知、目标轨迹溯源的核心技术&#xff0c;已成为智慧园区、工业厂区、城市治理、交通枢纽等场景落地的关键支撑。当前&#xff0c;行…...

【STM32CubeMX实战】基于NRF24L01与HAL库构建稳定无线通信链路

1. NRF24L01无线模块基础认知 第一次接触NRF24L01这个火柴盒大小的模块时&#xff0c;我完全没想到它能在2.4GHz频段实现2Mbps的高速通信。这个由Nordic公司出品的射频芯片&#xff0c;特别适合嵌入式系统的无线通信需求。它的工作电压范围在1.9V到3.6V之间&#xff0c;实测在3…...

TimerBlox:基于电流基准的硬件定时新方案,替代555与MCU

1. 项目概述&#xff1a;重新认识定时电路的设计范式在嵌入式系统、电源管理、电机控制乃至各类信号发生器的设计中&#xff0c;定时功能几乎无处不在。无论是生成一个精确的PWM波去调节LED亮度&#xff0c;还是产生一个可调的时钟信号驱动VCO&#xff0c;亦或是需要一个精准的…...

Odrive多线程架构实战:如何为你的无刷电机项目定制启动流程与状态机

Odrive多线程架构实战&#xff1a;如何为你的无刷电机项目定制启动流程与状态机 在无刷电机控制领域&#xff0c;Odrive凭借其开源特性和强大的性能表现&#xff0c;已成为众多硬件开发者的首选平台。但当你需要将这套系统集成到自己的机器人关节、CNC主轴或无人机推进系统中时…...