物联网(AWS)A到Z
2020年的物联网社区很奇怪。
虽然很多人都在泛泛而谈,谈论物联网,但很难与任何人就支撑这个三字母缩写的具体服务进行深入交流。
因此,我想从在 AWS 上开发解决方案的角度,分享我对物联网 (IoT) 的理解。本指南不会包含您可能已经听腻了的流行词汇,例如“数字孪生”或“边缘计算”。相反,它将重点放在将这些流行词汇转化为现实的服务和模式上。
坦白说,要找到一个能涵盖所有功能的物联网服务,更别提AWS的服务了,已经相当困难了。这份清单更多的是为了突出目前物联网服务产品的一些组成部分,以及未来值得关注的发展方向。
🇦 - Alexa小工具
2014年亚马逊Alexa作为首个主流智能家居助手平台推出时,它为像我这样的人带来的种种可能性深深吸引了我。显然,我并非孤例,因为在接下来的几年里,我们看到新一代电子产品如雨后春笋般涌现,纷纷将虚拟助手融入到它们的销售策略中。
如今,语音助手功能几乎是所有家用电器上市的必备配置,然而,这种消费者需求也迫使硬件制造商在一个新兴且鱼龙混杂的领域中运营。并非所有公司都以技术为先,因此,当他们的团队被要求为家用电器配备联网功能时,出错的几率就非常大。正因如此,我认为亚马逊 Alexa 设备意义非凡。
小工具将过于复杂的架构转换为简单的蓝牙设备,去除了许多核心功能不需要的技术冗余,从而为最终用户提供价值。
示例
- Alexa Gadgets 简介 - 语音控制喂猫器- 使用 Alexa Gadgets 制作语音控制喂猫器。
🇧 -计费组
在 AWS 的物联网环境中,计费组的概念非常独特。通常情况下,计费基于账户级别,但您也可以选择使用标签和成本分配标签来更好地了解成本来源。
物联网服务的
理念是,可以对设备组进行标记,然后进行独立审计。这意味着团队可以对其预算负责。
注意:在 AWS 服务中,针对特定服务的计费组机制相当独特。我一直在思考 AWS IoT 为何如此特殊,需要拥有自己的计费组,并猜测这可能与企业倾向于将所有 IoT 设备集中到一个账户中有关。
🇨 -证书自动售货机
如果您曾经使用 AWS IoT Core 设置过新设备,那么您可能还记得在为设备创建新证书时那种不安的感觉。
我支持允许用户创建和管理自己的设备,但需要一套保障措施来确保一致性。因此,我强烈建议研究证书分发的方法。
证书发放是一个自动化过程,用于生成带有正确角色和策略的 X.509 证书,并安全地将这些证书移交给用户。
示例
- AWS IoT - 证书分发- 通过由 DynamoDB 支持的 API 网关端点自动生成 X.509 证书并附加相应的角色。
🇩 - 设备防御程序检测
Device Defender Detect通过解读物联网设备的云端和设备端指标,帮助您识别异常行为。Detect 依赖于设备上运行的代理程序来发布网络使用统计信息指标。这些统计信息与云端统计信息相结合,可以初步了解特定设备的安全状况。
Device Defender Detect 可以报告的一些典型安全事件包括:
- 拒绝服务攻击
- 参与僵尸网络
- 数据泄露
- 设备配置错误
- 远程管理端口已打开
示例
- Greengrass - Device Defender - Detect - AWS IoT Device Defender 提供了一套用于审计、检测和缓解 IoT 相关安全威胁的选项。
🇪 - 物联网增强型自定义授权器 | ⭐ 最爱 ⭐
物联网增强型自定义授权器是一颗未经雕琢的钻石。它属于那种能够解决非常棘手问题的服务,这个问题很难用语言描述,直到你亲身经历过需要为 MQTT 添加自定义授权的场景。
目前该服务仅在美国东部地区(us-east-1)处于 Beta 测试阶段,但我怀疑随着物联网的普及,该服务正式上线的需求将会变得更加明显。
我计划很快发布一篇关于这个话题的博客文章,如果你感兴趣的话,一定要在推特上关注我。
🇫 - Amazon FreeRTOS
物联网领域的一大优势在于可使用的设备芯片种类繁多。但这同时也使得为每个设备部署软件变得有些麻烦,因为每个芯片的运行方式略有不同,功能也各有差异。
解决这个问题的方案是FreeRTOS,它为设备提供了一个通用内核。亚马逊后来开始支持其自己的版本,称为Amazon FreeRTOS ,它可以帮助用户部署云就绪的嵌入式固件。
Amazon 捆绑并支持在 FreeRTOS 上运行的常用库,例如 WiFi、蓝牙低功耗、MQTT,并对其进行扩展,以便更好地与Greengrass和其他 AWS 云组件集成。
🇬 -绿草| ⭐ 最爱 ⭐
AWS IoT Greengrass是一项托管服务,可让您轻松管理边缘设备并与之通信。人们谈论边缘设备时,通常指的是最终将运行 Greengrass 的设备。
边缘设备能够处理来自周围传感器的传入数据,并根据这些指标进行触发、警报、记录和响应。Greengrass 是 AWS 提供的用于管理这些功能的服务。
Greengrass 还会为您管理边缘的 Lambda 和 Secrets Manager 版本,因此如果您的团队已经在使用无服务器架构,那么将该逻辑迁移到边缘就非常容易。
Greengrass 是我最喜欢的 AWS 服务,原因有很多,我过去也写过很多关于它的博客文章,所以我建议大家去看看!
示例
- Greengrass - 设备设置- 使用 CDK 进行 Greengrass 基础设置。
- Greengrass - 设备设置 - Raspberry Pi - Greengrass 针对 Raspberry Pi 的特定设置。
- Greengrass - Docker 部署- 使用 Greengrass 连接器将 Docker 配置部署到边缘
- Greengrass - Device Defender - Detect - AWS IoT Device Defender 提供了一套用于审计、检测和缓解 IoT 相关安全威胁的选项。
- Greengrass - 安全隧道- AWS IoT 安全隧道是一种托管代理,适用于位于远程站点安全防火墙后面的设备。
🇮 -工业物联网
我知道我说过不会使用流行语,但工业物联网(IIoT)确实是一个不容忽视的概念,而且AWS生态系统中也提供了相应的解决方案。我强烈推荐AWS IoT SiteWise的这一系列文章,其中以OPC-UA服务器为例,演示了如何从工业系统中提取数据流。
- 使用 AWS IoT SiteWise 大规模收集、整理、监控和分析工业数据(第 1 部分)
- 使用 AWS IoT SiteWise 大规模收集、整理、监控和分析工业数据(第二部分)
- 使用 AWS IoT SiteWise 大规模收集、整理、监控和分析工业数据(第 3 部分)
🇯 - AWS IoT工作
AWS IoT 作业可帮助您部署和管理要由您的 IoT 设备群执行的任务。作业是稍后将提到的空中下载 (OTA) 更新服务的基础,但它能够执行您希望在 IoT 定义中实现的任何任务。
注意:您的设备代码需要配置为处理来自以下 AWS 定义主题的传入作业请求。更多信息请参阅开发者指南。
$aws/things/MyThing/jobs/notify
$aws/things/MyThing/jobs/get/accepted
$aws/things/MyThing/jobs/get/rejected
$aws/things/MyThing/jobs/jobId/get/accepted
$aws/things/MyThing/jobs/jobId/get/rejected
🇰 - Kinesis Streams
虽然Amazon Kinesis从技术上讲并不属于 AWS IoT 服务的一部分,但由于它能够摄取海量数据流并从中提取有意义的信息,因此被使用 AWS IoT 的团队大量使用。
物联网项目中一种非常常见的架构是利用 Kinesis 数据分析,并根据趋势进行实时事件处理。以下是 AWS 解决方案提供的一个架构示例。
🇱 - AWS IoT日志记录
默认情况下,AWS IoT 不会记录任何日志!这是有意为之,但如果您像我一样是普通用户,您可能希望启用日志记录功能以获得更好的可见性。
您可以通过前往相应 AWS IoT 区域的设置来启用AWS IoT 日志记录到 CloudWatch。
编辑Logging设置并创建/指定具有以下策略的角色。请注意 ,用户界面将自动引导您完成此角色的设置。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:PutMetricFilter",
"logs:PutRetentionPolicy"
],
"Resource": [
"arn:aws:logs:*:123456789012:log-group:*:log-stream:*"
]
}
]
}
... trust policy ...
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
现在,如果您在名为“日志组”的 CloudWatch 下查看日志AWSIotLogsV2流,您应该会看到日志流。
🇲 - MQTT
MQTT是所有使用 AWS IoT(或者说所有物联网平台)的设备之间通信的基础。AWS 提供的物联网服务只是对下方所示通用架构的一种抽象。
AWS 版本的 MQTT 能够很好地集成许多您期望从 AWS 服务中获得的传统功能,例如基于规则的事件、IAM 授权和日志记录。此外,它还是一个完全托管的代理,而且几乎免费。
🇴 -空中下载(OTA) 更新
空中下载 (OTA) 更新至关重要,尤其是在如今必须无缝地修补漏洞或安全缺陷的情况下。
AWS IoT 空中更新利用AWS IoT 作业将固件或代码更新交付到现场部署的设备。
如果您使用过 AWS IoT Greengrass,您也会知道,设备上的 Greengrass 补丁也是通过空中下载 (OTA) 更新(基于 IoT 作业)完成的。以下示例展示了如何启动 Greengrass 核心 OTA 更新;FreeRTOS OTA 的更新模式也非常相似。
AWS_REGION="us-east-1"
ACCOUNT_ID=$(aws sts get-caller-identity | jq -r '.Account')
THING_NAME="thing_name"
THING_OS="raspbian" # ubuntu, amazon_linux, raspbian, openwrt
THING_ARCH="armv7l" # armv7l, armv6l, x86_64, aarch64
THING_SOFTWARE="core" # core, ota_agent
otaUpdateRole=$(aws cloudformation describe-stacks --stack-name greengrass-cdk \
--query 'Stacks[0].Outputs[?OutputKey==`otaUpdateRole`].OutputValue' \
--region ${AWS_REGION} \
--output text)
aws greengrass create-software-update-job \
--region ${AWS_REGION} \
--update-targets-architecture ${THING_ARCH} \
--update-targets arn:aws:iot:${AWS_REGION}:${ACCOUNT_ID}:thing/${THING_NAME} \
--update-targets-operating-system ${THING_OS} \
--software-to-update ${THING_SOFTWARE} \
--update-agent-log-level DEBUG \
--s3-url-signer-role ${otaUpdateRole}
🇵 -政策
策略是使用 AWS IoT 证书为设备分配权限的方式。策略文档与IAM策略非常相似,因为它提供了一组对其他 AWS 服务执行操作的权限。
下面提供了一个策略声明示例,该示例将应用权限,允许物联网设备订阅名称格式为 `<topic_name>` 的主题,some/+/topic其中 ` +<topic_name>` 是通配符。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:topicfilter/some/+/topic"
]
}
]
}
🇷 - AWS RoboMaker
AWS RoboMaker是一项主要由托管人员提供的服务,用于在机器人上部署和运行ROS 软件包。RoboMaker 乍看之下可能显得小众,但随着机器人行业的扩张,管理向现场设备推送软件的机制将变得至关重要。
RoboMaker 不仅可以部署 ROS 软件包,还可以通过运行托管的Gazebo、rqt和rviz来进行仿真。
如果你是一名机器人专家,这一切应该会让你非常兴奋!
示例
- AWS RoboMaker - 机器人仿真入门指南- 一份不错的入门指南,帮助初学者快速上手整个 RoboMaker 套件。
- AWS RoboMaker - Raspberry Pi Bootstrap - 更面向初学者,重点是在 Raspberry Pi 上设置 ROS 和 RoboMaker。
🇸 - 设备阴影
设备影子经常被夸大为数字孪生,但实际上它只是一种保存设备状态的机制。
状态数据采用 JSON 格式,设备或 AWS IoT 均可读取和写入该状态数据。
示例
- AWS Sumerian Magic Cube - 设备阴影用于存储设备的方向状态,然后使用Amazon Sumerian以可视化的方式显示此数据。
🇹 - 安全隧道| ⭐ 最爱 ⭐
如果您曾经将物联网设备部署到现场并执行过OTA(空中更新),您就会知道,糟糕的固件部署可能会损坏硬件设备的核心部件,这是非常令人担忧的。
想象一下,如果有一项服务可以始终运行,并能让你重新访问设备,那该有多好!AWS 安全隧道就是这样一项服务,它运行一个本地代理,并安全地将你连接回你的设备。
示例
- Greengrass - 安全隧道- 使用 AWS IoT 安全隧道服务的权威指南。
🇻 - 计算机视觉
由于边缘计算对带宽和实时视频流传输到远程位置的延迟要求较高,计算机视觉已成为边缘计算中非常常见的应用模式。您或许会惊讶地发现,AWS DeepLens作为 Greengrass 核心设备运行,以便管理部署在其边缘的模型。
如果您计划开展一个使用边缘视频的物联网项目,我强烈建议您了解一下适用于 AWS IoT Greengrass 的 ML 对象检测连接器。
🇼 - WebSockets
AWS IoT 可以通过 MQTT 经由 WebSocket 和 HTTPS 连接,从而在 Web 浏览器等环境中提供更大的使用灵活性。
Amplify 框架通过MqttOverWSProvider对这些 WebSocket 风格的连接提供了极佳的支持。这意味着您的 Web 应用程序可以直接连接到 AWS IoT 主题并发布/订阅数据。
概括
您是否正在使用 AWS IoT,或者在 IoT 领域进行其他有趣的尝试?我非常想了解!无论成功与否,都欢迎您在Twitter 上联系我 @nathangloverAUS,我们一起探讨。
文章来源:https://dev.to/t04glovern/the-a-to-z-of-internet-of-things-aws-26i9












