使用 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 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=CSDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/61481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VisualStudioWindows下 远程调试

前置条件 1、调试方与被调试方&#xff0c;以下简称调试方为A&#xff0c;被调试方为B。A与B双方能相互ping通 2、B需要运行RemoteDebugger服务&#xff0c;该程序位于C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Remote Debugger下。 我这里是安装…

扩散模型实战(二):扩散模型的发展

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型从最初的简单图像生成模型&#xff0c;逐步发展到替代原有的图像生成模型&#xff0c;直到如今开启 AI 作画的时代&#xff0c;发展速度可谓惊人。下面介绍一下2D图像生成相…

blender基础认识(选项开关、工具栏、视图等)

文章目录 引言一、大纲选项开关和保存启动文件1. 大纲选项1. 禁用选中2. 视图影藏3. 视图禁用4. 渲染禁用 2. 保存启动文件 二、工具栏和侧边栏1. 左侧工具栏2. 右侧工具栏 三、视图1. 视角2. 缩放3. 拖拽4. 摄像机视角5. 切换正交视图6. 局部视图7. 显示隐藏 四、添加删除物体…

2023/8/5总结

主要实现了&#xff1a; 举报&#xff1a; 内容管理搜索的实现 管理员界面 还有消息没写&#xff0c;以及一些小细节

插入排序【Java算法】

文章目录 1. 概念2. 思路3. 代码实现 1. 概念 通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应的位置并插入。 插入排序非常类似于整扑克牌。在开始摸牌时&#xff0c;左手是空的&#xff0c;牌面朝下放在桌上。接着&a…

程序员副业指南:怎样实现年入10w+的目标?

大家好&#xff0c;这里是程序员晚枫&#xff0c;全网同名。 今天给大家分享一个大家都感兴趣的话题&#xff1a;程序员可以做什么副业&#xff0c;年入十万&#xff1f; 01 推荐 程序员可以从事以下副业&#xff0c;以获得一年收入10w&#xff1a; 兼职编程&#xff1a;可…

数学知识(二)

一、裴蜀定理 对于任意整数a,b&#xff0c;一定存在非零整数x,y&#xff0c;使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…

铰接式车辆的横向动力学仿真提供车辆模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Opencv入门到项目实战】(四):图像梯度计算|Sobel算子|Scharr算子|Laplacian算子

文章目录 0.引言1. Sobel算子2. Scharr算子3. Laplacian算子 0.引言 在图像处理中&#xff0c;梯度是指图像中像素灰度变化的速率或幅度&#xff0c;我们先来看下面这张图 假设我们想要计算出A点的梯度&#xff0c;我们可以发现A点位于边缘点&#xff0c;A点左边为黑色&#x…

74. 搜索二维矩阵

题目链接&#xff1a;力扣 解题思路&#xff1a;因为矩阵整体上是有序的&#xff0c;所以可以先二分查找target在哪一行中&#xff0c;然后再次二分查找target在当前行的哪一列中。 具体算法如下&#xff1a; 对行使用二分查找&#xff1a; 初始值&#xff1a; int m matrix…

Mr. Cappuccino的第55杯咖啡——Mybatis一级缓存二级缓存

Mybatis一级缓存&二级缓存 概述一级缓存特点演示前准备效果演示在同一个SqlSession中在不同的SqlSession中 源代码怎么禁止使用一级缓存一级缓存在什么情况下会被清除 二级缓存特点演示前准备效果演示在不同的SqlSession中 源代码怎么关闭二级缓存 一级缓存&#xff08;Spr…

ad+硬件每日学习十个知识点(18)23.7.29 (LDO原理、LDO的补偿引脚)

文章目录 1.LDO名字介绍2.LDO的应用范围3.LDO的原理4.LDO输出端和输入端的差值至少满足多少V&#xff1f;怎么计算的&#xff1f;5.输出的误差和输出电流&#x1f446;&#xff08;右下角图像&#xff09;6.LDO一般会有个引脚是做补偿之用&#xff0c;datasheet会说明一个器件的…

C++20 协程(coroutine)入门

文章目录 C20 协程&#xff08;coroutine&#xff09;入门什么是协程无栈协程和有栈协程有栈协程的例子例 1例 2 对称协程与非对称协程无栈协程的模型无栈协程的调度器朴素的单线程调度器让协程学会等待Python 中的异步函数可等待对象M:N 调度器——C# 中的异步函数 小结 C20 中…

如何在 Ubuntu 上部署 ONLYOFFICE 协作空间社区版?

ONLYOFFICE 协作空间是一个在线协作平台&#xff0c;帮助您更好地与客户、业务合作伙伴、承包商及第三方进行文档协作。今天我们来介绍一下&#xff0c;如何在 Ubuntu 上安装协作空间的自托管版。 ONLYOFFICE 协作空间主要功能 使用 ONLYOFFICE 协作空间&#xff0c;您可以&am…

安全文件传输的重要性及其对企业的影响

在当今的信息时代&#xff0c;企业之间的文件传输已经成为日常工作的重要组成部分。无论是在商务合作、人力资源还是财务审计等方面&#xff0c;文件传输都发挥着关键的作用。然而&#xff0c;随着网络技术的发展&#xff0c;网络安全问题也日益突出&#xff0c;泄漏、篡改、丢…

复习之selinux的管理

一、什么是selinux? SELinux&#xff0c;Security Enhanced Linux 的缩写&#xff0c;也就是安全强化的 Linux&#xff0c;是由美国国家安全局&#xff08;NSA&#xff09;联合其他安全机构&#xff08;比如 SCC 公司&#xff09;共同开发的&#xff0c;旨在增强传统 Linux 操…

Jmeter 压测工具使用手册[详细]

1. jemter 简介 jmeter 是 apache 公司基于 java 开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简 单。因为 jmeter 是 java 开发的&#xff0c;所以运行的时候必须先…

paddlenlp:社交网络中多模态虚假媒体内容核查

初赛之环境配置篇 一、背景二、任务三、数据集1、初赛阶段2、评分标准 四、环境操作五、写在最后 一、背景 随着新媒体时代信息媒介的多元化发展&#xff0c;各种内容大量活跃在媒体内中&#xff0c;与此同时各类虚假信息也充斥着社交媒体&#xff0c;影响着公众的判断和决策。…