免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

AWS Greengrass – 在互连设备上运行 AWS Lambda 函数

  • 2019-11-18
  • 本文字数:2735 字

    阅读完需:约 9 分钟

AWS Greengrass – 在互连设备上运行 AWS Lambda 函数

正如我当时指出的那样,许多 AWS 客户希望在现场收集和处理数据,而现场的网络连接通常很慢,有时还时断时续,并不可靠。利用 Greengrass,他们可以在基于现场的小型简单设备上应用 AWS 编程模型。它建立在 AWS IoTAWS Lambda 的基础上,支持访问 AWS Cloud 中不断增加的各种服务。


利用 Greengrass,您可以访问在现场运行的计算、消息收发、数据缓存和同步服务,这些服务并不依赖与 AWS 区域的稳定高带宽连接。您可以在 Python 2.7 中编写 Lambda 函数,并将其从云部署到 Greengrass 设备,同时使用 Device Shadows 来维护状态。您的设备和外设可以使用本地消息收发互相通信,后者并不通过云进行传递。


现已公开发布


今天我们将在 US East (Northern Virginia) 和 US West (Oregon) 区域公开发布 Greengrass。在预览版本中,AWS 客户已成功获得 Greengrass 的实践操作体验,并开始围绕它构建应用程序和业务。在后文中,我将分享一些早期的成功案例。


Greengrass 核心代码可在每台设备上运行。它允许您在设备上部署和运行 Lambda 应用程序,支持通过安全网络传递本地 MQTT 消息,并可确保设备和云之间的对话通过安全连接完成。Greengrass 核心还支持安全的无线软件更新,包括 Lambda 函数。它包括消息代理、Lambda 运行时、Thing Shadows 实现和部署代理。Greengrass 核心和可选的其他设备共同组成 Greengrass 组。该组包括配置数据、Greengrass 核心的设备和身份列表、Lambda 函数列表以及一组定义消息应发往何处的订阅。在部署过程中,所有这些信息都将复制到 Greengrass 核心设备。


您的 Lambda 函数可以使用三个不同软件开发工具包中的 API:


适用于 Python 的 AWS 软件开发工具包 – 该软件开发工具包允许您的代码与 Amazon Simple Storage Service (S3)Amazon DynamoDBAmazon Simple Queue Service (SQS), 和其他 AWS 服务交互。


AWS IoT 设备软件开发工具包 – 该软件开发工具包 (适用于 Node.js、Python、Java 和 C++) 可帮助您将硬件设备连接到 AWS IoT。C++ 软件开发工具包具有几项额外功能,包括对 Greengrass Discovery Service 的访问权和支持根 CA 下载。


AWS Greengrass 核心软件开发工具包 – 该软件开发工具包提供的 API 允许本地调用其他 Lambda 函数,发布消息和使用 Thing Shadows。


您可以在启用了 OverlayFS 和用户命名空间功能的 x86 和 ARM 设备 (具有版本 4.4.11 或更高版本 Linux 内核) 上运行 Greengrass 核心。虽然大部分 Greengrass 部署将针对专业化的工业级硬件,但您也可以在 Raspberry Pi 或 EC2 实例上运行 Greengrass 核心进行开发和测试。


在本文中,我使用了附加到 BrickPi 的 Raspberry Pi,它通过 WiFi 连接到我的家庭网络:



Raspberry Pi、BrickPi、盒子和所有其他部件均在 BrickPi 3 初学者工具包中提供。您需要一些 Linux 命令行专业知识和一定的动手能力将所有这一切组装起来,不过如果我都能做到,您肯定也可以。


Greengrass 的实际使用


我可以从控制台、API 或 CLI 访问 Greengrass。我将使用控制台。Greengrass 控制台的简介页面允许我定义组,添加 Greengrass 核心,并向组中添加设备:



单击 Get Started,然后单击 Use easy creation



然后为组命名:



并为第一个 Greengrass 核心命名:



准备好后,单击 Create Group and Core



这将运行几秒钟,然后提供可供下载的安全资源 (两个密钥和一个证书) 以及 Greengrass 核心:



我下载这些安全资源并将它们放到一个安全的地方,然后选择并下载所需版本的 Greengrass 核心软件 (适用于我的 Raspberry Pi 的 ARMv7l),最后单击 Finish


现在我打开 Pi 的电源,并将安全资源和软件复制到其中 (我将它们放在一个 S3 存储桶中,并使用 wget下载它们)。这是此时的外壳程序历史记录:



重要更新:正如我在 AWS 安全团队的一位细心的同事指出的那样,这不是向设备分发密钥的好方法。我本来可以使用 AWS CLI 从加密的存储桶中下载,通过剪切和粘贴复制它们,或者使用 USB 闪存盘。


我按照用户指南中的说明创建新用户和组,然后运行 rpi-update 脚本,并安装几个程序包,包括 sqlite3openssl几次重启后,我就可以继续了!


接下来,仍然遵循指示,解压缩 Greengrass 核心软件,并将安全资源移动到其最终目的地 (/greengrass/configuration/certs),在这个过程中为它们指定通用名称。目录看起来如下所示:



下一步是将核心与 AWS IoT 事物关联起来。返回到控制台,点击浏览组和 Greengrass 核心,找到 Thing ARN:



将证书名称和 Thing ARN 插入到 config.json 文件中,同时填充缺失的 iotHostggHost部分:



启动 Greengrass 守护程序 (这是我的第二次尝试;第一次我把其中一个路径名称拼错了):



在命令行中度过愉快的时光后 (这让我回想起了使用 Unix v7 和 BSD 4.2 的日子),现在是时候再次转到视觉界面了!访问我的 AWS IoT 控制面板,看到我的 Greengrass 核心正在与 IoT 建立连接:



我转到 Lambda 控制台并使用 Python 2.7 运行时创建一个 Lambda 函数 (IAM 角色在这里无关紧要):



以常用方式发布函数,然后跳转到 Greengrass 控制台,单击我的组,并选择添加一个 Lambda 函数:



然后选择要部署的版本:



我还将此函数配置为长期存在而不是按需提供:



我的代码会将消息发布到 AWS IoT,所以我通过指定源和目标来创建一个订阅:



我还在订阅上设置一个主题筛选条件 (hello/world):



确认完成的设置并保存我的订阅,现在我已准备就绪,可以部署代码了。重新访问我的组,单击 Deployments,并从 Actions 菜单中选择 Deploy



选择 Automatic detection 以便继续:



由于这是我的第一个部署,我需要创建一个服务级角色,以便为 Greengrass 授予访问其他 AWS 服务的权限。直接单击 Grant permission



可以看到每个部署的状态:



代码现在已在我的 Pi 上运行!它向主题 hello/world 发布消息;我可以通过转到 IoT 控制台,单击“Test”并订阅该主题,来查看这些消息:



消息如下所示:



完成所有设置工作后,我可以通过上传、发布和部署代码的新版本来进行迭代开发。我计划使用 BrickPi 来控制一些 LEGO Technic 电动车,并发布从一些传感器收集的数据。敬请关注相关文章!


Greengrass 定价


作为 AWS 免费套餐的一部分,您可以在三台设备上免费运行一年 Greengrass 核心。在下一级别 (3 到 10,000 台设备),有两个选项可用:


  • 即付即用 – 每台设备每个月 0.16 USD。

  • 年度承诺 – 每台设备每年 1.49 USD,节省 17.5% 的成本。


如果您想在 10,000 台以上的设备上运行 Greengrass 核心,或者想做出更长期的承诺,请与我们联系;有关所有定价模型的详细信息,请参阅 Greengrass 定价页面。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-greengrass-run-aws-lambda-functions-on-connected-devices/


2019-11-18 08:00378

评论

发布
暂无评论
发现更多内容

2022 智能云边开源峰会|Kyligence 邀您“云”上相约

Kyligence

人工智能 云原生 边缘计算 开源峰会

java培训班学习后怎样才能找到工作

小谷哥

Postman如何做接口测试:导入 swagger 接口文档

和牛

测试 Postman

盒马销量预测核心算法的技术演进

阿里技术

大数据 算法

EMAS Serverless搭建《私人云相册》小程序赢中秋好礼

移动研发平台EMAS

小程序 阿里云 Serverless 中秋节 云相册

Web Service 接口怎么测试

和牛

Python 接口 测试 Web Service

一不小心晋级“CCF国际AIOps挑战赛”决赛?

天翼云开发者社区

INFINI 产品更新啦 20220815

极限实验室

elasticsearch infini gateway INFINI Labs 新版本/特性发布 INFINI Console

旅游吗?腾云驾雾的那种

天翼云开发者社区

建设医共体,患者有“医”靠!

天翼云开发者社区

未来源码丨会写代码的AI开源了!C语言写得比Codex还要好,掌握12种编程语言丨CMU

MobTech袤博科技

c 开源 AI

分布式系统架构设计

C++后台开发

数据库 分布式 后端开发 C/C++后台开发 C/C++开发

深度学习公式推导(2):激活函数与偏置

老崔说架构

我们还需要 SRE 吗?

Bytebase

DevOps SRE developer

架构实战营毕业总结

Geek_Q

SPI:Java的高可扩展利器

华为云开发者联盟

Java 开发

Go-Excelize API源码阅读(十一)—— GetActiveSheetIndex()

Regan Yue

Go 开源 源码刨析 8月日更 8月月更

零基础前端培训学习有用吗

小谷哥

十年数智求索路,餐饮SaaS头部企业客如云如何走向盈利

ToB行业头条

家电上云后,智能家居如何构建场景化应用

华为云开发者联盟

云计算 后端 IoT 智能家居

如何管理您的知识库?

Geek_da0866

前端培训中怎么提升开发技术水平?

小谷哥

大数据软件开发哪里的培训比较好

小谷哥

如何维护您的知识库?

Geek_da0866

AWS Greengrass – 在互连设备上运行 AWS Lambda 函数_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章