基于 Amazon 和西门子工业边缘的云边协同方案

0
0
{"value":"### **解决方案概述**\n\n#### **什么是边缘计算?**\n\n边缘计算,是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。\n\n边缘计算技术在工业场景的应用,成为了工厂数字化转型的必经之路。\n\n在工业场景中,边缘是最靠近现场数据源的层级,将数据进行采集和处理,并在本地进行运算和反馈。边缘计算可以将诸如预测性维护、质量检测等任务下沉到工业现场层,从而使工业控制领域得到进一步延伸和拓展。\n\n#### **为什么客户需要考虑工业边缘与云端的结合?**\n\n近年来,随着工厂数字化、智能化程度的提高,工业界越来越关注生产数据的价值,同时智能化生产也成为许多工业客户的切身诉求。而 IT 技术的迅猛发展也为实现上述目标提供了无限可能。将 IT 技术与 OT 技术相融合,促进工厂数字化、智能化程度的进一步提升,已然成为业界发展的趋势。\n\n在数字化转型过程中,工业现场往往面临以下挑战:\n\n- 将 AI/ML 等先进技术与传统工控设备结合有一定难度。\n- 工业现场数据来源广,数据量大,且实时性、安全性要求高。\n- 用户希望在应用 IOT、数据分析及 ML 的中新技术时,使用管理复杂度低但灵活度高的解决方案。\n\n为解决上述问题,工业客户不约而同地期待能够在生产设备端部署一套具备数据采集与处理能力,拥有足够计算能力,能够即插即用的解决方案。而近年来蓬勃发展的边缘计算技术,恰好满足了这一需求。\n\n#### **西门子工业边缘是什么?**\n\n西门子工业边缘是一种边缘解决方案,该方案可以帮助您充分挖掘机器和工厂数据的潜力,结合云端的能力生成新的业务模式从而提高您的竞争优势。\n\n#### **Amazon 与西门子工业边缘的云边协同方案优势是什么?**\n\n*++充分利用 Amazon 的数据分析和 ML 服务++*\n\n虽然边缘计算具有低延迟和数据本地化的优势,但本地计算和存储资源有限,无法支持数据分析和 AI/ML(有/无 GPU)等复杂计算场景,Amazon 可以解决这个问题。 Amazon 可以提供各种云原生的分析/ML 服务,如 Amazon SageMaker、Amazon Glue、Amazon EMR 等,充分发挥云端资源扩展的力量。\n\n![image.png](https://dev-media.amazoncloud.cn/016573efb6e6440bb58c50d95631a545_image.png)\n\n*++在AWS云端构建功能强大的数据湖++*\n\n本地设备或传感器每秒都会产生大量数据,但是边缘的存储容量有限,并且没有专业的工具来管理数据。 利用 Amazon 云存储服务(如 Amazon S3),客户可以高效构建集中且安全的数据湖。\n\n*++分布式、敏捷以及低管理复杂度++*\n\n使用 Industrial Edge 进行本地数据处理,同时可以通过 Amazon IOT Core、Amazon IOT SiteWise 等服务将数据快速上云并提供看板展示。针对 ML 场景,您可以轻松实现云端训练和边缘推理的最佳实践。边缘设备和应用程序通过西门子工业边缘集中管理减少了部署和维护支出,云上托管服务即开即用,降低运维工作量。\n\n*++降低存储和传输的成本++*\n\nIndustrial Edge 支持就近实时分析数据,无需将全部数据保存到云端,满足数据的实时性及本地合规的需求。 来自物联网设备的数据可以在本地进行预处理或脱敏后再发送到云端进行长期存储以及复杂的数据分析/建模等。\n\n#### **西门子工业边缘 Cloud Connector**\n\n利用云端的优势,对工业现场产生的海量数据进行分析与训练,或者实现云上的数据展示和存储,是许多工业用户的诉求。西门子工业边缘也为数据上云提供了解决方案。例如,使用西门子官方提供的 Cloud Connector,可以便捷地将设备产生的数据上传至云服务器。通过 Cloud Connector,您可以非常方便的连接到 Amazon 云(上传证书,输入 MQTT topic 名称以及消息队列的 URL 地址)。\n\n![image.png](https://dev-media.amazoncloud.cn/4746e498b0354a72ad88468e7742ba8d_image.png)\n\n除了通过西门子官方提供的 Cloud Connector 连接云服务器以外,西门子工业边缘设备也支持通过 Amazon 云提供的 SDK,自行开发云连接 APP,实现云——边——端的协同。\n\n### **解决方案技术架构**\n\n![image.png](https://dev-media.amazoncloud.cn/8f5d9d78b5ac4c41826015f5083186f0_image.png)\n\n*特别说明:此技术架构作为解决方案指导供客户使用,在实际的项目中会根据具体的需求进行选择,并非全部服务都必须使用。针对 IOT 数据接入,您可以只选择 IOT SiteWise、IOT Event 以及 IOT Core 服务。针对数据湖以及数据分析,您可以只选择 Amazon Kinesis、S3、Glue 以及 Athena。针对数据仓库,您在数据湖和分析的基础上增加 Redshift。针对 ML 场景,可以增加使用 SageMaker。最后,针对应用的 CI/CD,可以选择使用 CodeCommit 以及 CodeBuild 等。*\n\n1.在西门子工业边缘设备中运行的南向连接器支持不同协议连接到工厂中的设备或者网关。西门子工业边缘管理平台负责将南向连接器部署到工业边缘设备中并做集中的管理\n\n2.云连接器与 Amazon 云之间建立连接,通过 MQTT 协议以 TLS 加密的方式将数据传输到云端\n\n3.时序数据以流的方式注入到 Amazon 云的 IOT Core 服务,IOT Core 服务再通过不同的 IOT Rule 将数据转发到 Amazon IoT SiteWise、 Amazon Kinesis Data Streams 以及 Amazon IoT Events 等其它的云服务\n\n4.Amazon IoT Events 处理数据并基于业务逻辑触发事件通知\n\n5.Amazon Kinesis Data Firehose 将数据直接转储到 Amazon S3 桶中, Amazon Glue 对数据进行 ETL 处理后,提供给后续的 Amazon SageMaker 以及 Amazon Redshift 做数据消费\n\n6.基于 CodePipeline、CodeCommit 以及 CodeBuild 在云端构建 CI/CD 流水线,流水线中处理的工业边缘 API 和 Amazon IoT 作业将 Docker 映像和配置文件发布到西门子工业边缘管理平台。\n\n### **Demo 演示**\n验证 Amazon 与 Industry Edge 之间的集成。 Industry Edge 已经提供了一个云连接器,可以通过证书导入连接到 IOT Core。 IED 设备将在 IOT Core 中注册为事物。 通过该配置,Industry Edge 可以通过 MQTT 主题将数据传输到 Amazon。 数据在云端保存后,我们可以进一步存储、分析、显示甚至使用数据进行 ML。 西门子有一个模拟的智能农场环境,其中包含多个传感器来收集温度、湿度、设备状态等。 我们会将这些数据收集到云端并进一步处理数据。\n\n![image.png](https://dev-media.amazoncloud.cn/634790c79e2140018f11e791d836f62f_image.png)\n\n### **POC 架构**\n\n![image.png](https://dev-media.amazoncloud.cn/b043368c10fc4a9ab6d3b698569065a6_image.png)\n\n- 传感器数据从 Industry Edge(IED) 注入到 IOT Core,并通过 IOT Rule 转发到 IOT Sitewise。 原始数据(属性)和聚合数据(指标)都可以显示在自定义的 Sitewise 仪表板中。 原始数据也将每 5 分钟通过 Kinesis Firehose 传输到 S3,S3 作为数据湖长期存储原始/聚合/处理数据。\n- S3 中的原始数据(步骤1)由 Amazon Glue 进一步处理,表的结构由 Glue Crawler 自动生成。 通过 Glue 作业将数据格式从 CSV 转换为 Parquet,客户可以定义更复杂的 ETL 流程。 Parquet 格式的数据将再次被 Glue Crawler 解析。 所有步骤均由 Glue Workflows 完成编排,并自动每天执行一次。 客户可以在 Amazon Athena 中使用 SQL 语句查询无论数据格式是 CSV 还是 Parquet 的结果,对数据进行进一步处理。\n- Sagemaker 用作 ML 模型开发和训练,训练数据在前面的步骤中已被保存到 S3。模型的文件在训练工作完成后存储回 S3。 Industry Edge (IEM) 中管理的应用程序下载模型并将其部署在应用程序中。 最终用户可以使用此应用程序进行预测。\n\n### **配置步骤**\n\n#### **先决条件**\n\n- Amazon 云测试账号\n- 农作物培育箱和传感器(仅完整 Demo 需要)\n\n由于 Demo 的后续配置过程已通过 CloudFormation 实现自动化,我们推荐在培育箱中使用和如下内容相同的传感器或者模拟生成相同的配置。关于传感器和开关的具体配置,您可以联系 jiamin.wang@siemens.com\n\n已使用的传感器和开关:\n{“name”: “SoilTemp”, “id”: “101”, “dataType”: “Real”},\n\n{“name”: “Illumination”, “id”: “102”, “dataType”: “DInt”},\n\n{“name”: “AirTemp”, “id”: “103”, “dataType”: “Real”},\n\n{“name”: “SoilHumi”, “id”: “104”, “dataType”: “Real”},\n\n{“name”: “CO2”, “id”: “105”, “dataType”: “DInt”},\n\n{“name”: “AirHumidity”, “id”: “106”, “dataType”: “Real”},\n\n{“name”: “Auto_Manu”, “id”: “107”, “dataType”: “Bool”},\n\n{“name”: “Heating”, “id”: “108”, “dataType”: “Bool”},\n\n{“name”: “Pump”, “id”: “109”, “dataType”: “Bool”},\n\n{“name”: “Fan”, “id”: “110”, “dataType”: “Bool”},\n\n{“name”: “RedLight”, “id”: “111”, “dataType”: “Bool”},\n\n{“name”: “BlueLight”, “id”: “112”, “dataType”: “Bool”},\n\n{“name”: “WhiteLight”, “id”: “113”, “dataType”: “Bool”},\n\n{“name”: “FanManu”, “id”: “114”, “dataType”: “Bool”},\n\n{“name”: “WhiteLightManu”, “id”: “115”, “dataType”: “Bool”},\n\n{“name”: “RedLightManu”, “id”: “116”, “dataType”: “Bool”},\n\n{“name”: “PumpManu”, “id”: “117”, “dataType”: “Bool”},\n\n{“name”: “HeatingManu”, “id”: “118”, “dataType”: “Bool”},\n\n{“name”: “DAY”, “id”: “119”, “dataType”: “Byte”},\n\n{“name”: “BlueLightManu”, “id”: “120”, “dataType”: “Bool”},\n\n{“name”: “Month”, “id”: “121”, “dataType”: “Byte”},\n\n{“name”: “Year”, “id”: “122”, “dataType”: “Int”},\n\n{“name”: “AutoLightTime”, “id”: “123”, “dataType”: “Real”},\n\n{“name”: “LongDay”, “id”: “124”, “dataType”: “Bool”},\n\n{“name”: “ShortDay”, “id”: “125”, “dataType”: “Bool”},\n\n{“name”: “LightManualStop”, “id”: “126”, “dataType”: “Bool”},\n\n{“name”: “LightTime”, “id”: “127”, “dataType”: “Real”},\n\n{“name”: “LightHalfAuto”, “id”: “128”, “dataType”: “Bool”},\n\n{“name”: “AgeDays”, “id”: “129”, “dataType”: “Int”},\n\n{“name”: “SetAgeStart”, “id”: “130”, “dataType”: “Bool”}\n\n- 西门子 PLC 硬件及工业边缘软件 (仅完整 Demo 需要)\n\n如需在您的 Amazon 云测试账号中完整实现 Demo 的环境,请联系西门子工业边缘团队咨询如何获取西门子硬件(如 HMI,PLC 以及 IPC)以及工业边缘软件,并获得相应的部署支持。请联系 jiamin.wang@siemens.com\n\n#### **云资源准备**\n\n选择一: 如果您已经获取了西门子硬件以及工业边缘软件,请使用此 [CloudFormation 脚本](https://github.com/FrankieCheng/smartfarmdemo/blob/main/cfn/withoutEC2-20220513.yaml)在您的账号中自动创建并配置部分云资源。当 CloudFormation 执行成功后,您需要下载证书文件(.crt)和私钥文件(.key)到您的本地,然后将它们导入到工业边缘连接器(connector)。您也需要在工业边缘连接器中使用和 CloudFormation 中相同的消息 topic 名称。请联系 jiamin.wang@siemens.com 咨询如何导入文件到连接器。请注意您必须使用和前面章节介绍的相同的传感器/开关,否则您还需要在 CloudFormation 执行完毕后调整 [Sitewise](https://docs.amazonaws.cn/iot-sitewise/latest/userguide/what-is-sitewise.html) 和 [IOT Core](https://docs.amazonaws.cn/iot/latest/developerguide/iot-rule-actions.html) 两个部分的配置,使 Sitewise 中的模型配置以及 IOT Core 中的转发规则与您实际的传感器/开关 保持一致。\n\n*如何下载证书和私钥文件?*\n\n- 登录到您的 Amazon 云管理控制台切换到 CloudFormation 服务,从 Systems Manager – Parameter Store 中获取证书和私钥的内容\n\n![image.png](https://dev-media.amazoncloud.cn/d9b91b5d8c1d4cf0ae81ef5b859ab537_image.png)\n\n- 点击 ‘IoTCertificateKeyURL’ 和 ‘IoTCertificatePrivateKeyURL’ 的输出 URL,页面会被重定向到 Parameter Store\n\n![image.png](https://dev-media.amazoncloud.cn/a300a103507b456499d484bbcf7caf98_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/357b6335f48b48deb4a12f9c256efcb9_image.png)\n\n- 复制 ‘/smartfarm/certificatePem’ 对应的值并保存成文件 csr,复制 ‘/smartfarm/keyPair/PrivateKey’ 对应的值并保存成文件 privatekey.key\n\n选择二: 如果您只希望测试 Amazon 云端的部分,请在您的账号中使用此 CloudFormation 脚本。这个 CloudFormation 脚本会额外创建一个 EC2 虚拟机,此虚拟机会被用于模拟传感器生成和真实环境相同配置的数据格式并实时注入数据到 Amazon IOT 服务\n\n#### **测试 Amazon 云服务**\n\n#### **第一部分:IOT Core/Sitewise/Kinesis/S3**\n\nCloudFormation 执行成功后,会自动完成 IOT Core/Sitewise/Kinesis Firehose/S3 的配置。 您可以从 Amazon 云服务控制台检查配置。 我们只展示部分关键配置。\n\n*IOT Sitewise*\n\n模型架构:两层架构:Smart Farm 作为父层,各种类型的传感器/设备作为子层。 {Byte, DInt, Int} 匹配 Int,Real 匹配 Double,Bool 匹配 Bool。 最终会生成4个模型。 Smart Farm 模型包括其他三个。\n\n![image.png](https://dev-media.amazoncloud.cn/43e87a8d1b96415e8d97f344e9e4bf3e_image.png)\n\nAsset 架构:使用之前创建的模型为每一个传感器/开关创建一个资产,一共有30个资产会被创建,这些资产归属于 Smart_Farm资产。\n\n![image.png](https://dev-media.amazoncloud.cn/f47a87dfec4048cfab66c69eb52a020a_image.png)\n\n接下来我们需要配置后续在 Sitewise Dashboard 中使用的的告警\n\n- 选择您希望添加告警的模型并切换到 Alarm definitions\n\n![image.png](https://dev-media.amazoncloud.cn/b710995d66764d22b2c54aced33aa107_image.png)\n\n- 点击 Add Alarm 为土壤湿度和温度增加两个告警,输入告警的名称\n\n![image.png](https://dev-media.amazoncloud.cn/02eddd0b77594f6994197b119c7a31d8_image.png)\n\n- 选择需要监控的 property,我们选择 Max Val 作为 property,告警触发值为 SoilHumiNormal 的值,这个值在 Attribute 中已经定义好了。You can also define the severity of this alarm. 您也可以定义告警的 Severity。当土壤湿度大于 15% 时,告警会在您后续配置的 Dashboard 中触发并显示。\n\n![image.png](https://dev-media.amazoncloud.cn/801894eaa56b41fca8012d04357918c7_image.png)\n\n- 重复第 2 步和第 3 步创建另外一个告警。我们仍然使用 Max Val 作为 property,但使用 SoilTempNormal 作为 threshold\n\n![image.png](https://dev-media.amazoncloud.cn/6bb81a906a204d4092e702564dd22a1d_image.png)\n\n到目前为止,我们已经通过工业边缘设备 (IED) 中的云连接器成功地将数据从传感器加载到 Sitewise。 接下来,我们将制作一个仪表板来显示资产属性和指标。最终的示例仪表板将是这样的。\n\n![image.png](https://dev-media.amazoncloud.cn/622deb5de7d64c88bf01c3e99c375643_image.png)\n\n- 切换到 Sitewise 服务并点击 Portals\n\n![image.png](https://dev-media.amazoncloud.cn/fe5f6f5aea174364851cd792608c2420_image.png)\n\n- 点击 Assign users 添加 Portal administrator\n\n![image.png](https://dev-media.amazoncloud.cn/1a01ee5a5abd4c8cb97de2a49c54815e_image.png)\n\n- 选择您自己的 IAM 用户并点击 Assign administrators, 添加后就可以通过 URL 登录到 URL\n\n![image.png](https://dev-media.amazoncloud.cn/9828676cf74b4d6397426497895d2dab_image.png)\n\n- 在使用管理员用户权限登录到 Portal 后,您可以看到所有之前在 Sitewise 控制台中配置完成的模型和资产\n\n![image.png](https://dev-media.amazoncloud.cn/3237dd84d7224c0692de214660ff3d7e_image.png)\n\n- 接下来我们配置一个 Dashboard,切换到 Project 之后打开已经创建好的 Project 并点击 Create dashboard\n\n![image.png](https://dev-media.amazoncloud.cn/a56305bf6ac243beaebf6cde60eaf48c_image.png)\n\n- 您现在可以拖拽之前定义好的 properties 和 alarms。您可以定制您的 Visualization 甚至是可以为特定的 property 增加 Trend lines\n\n![image.png](https://dev-media.amazoncloud.cn/a75fbc762f77407e80e3441b7f0d0a82_image.png)\n\n- 关于如何配置 Sitewise Monitor 的更多细节,请访问 [link](https://docs.amazonaws.cn/en_us/iot-sitewise/latest/appguide/what-is-monitor-app.html)\n \n\n*Kinesis/S3*\n\n- 切换到 Kinesis Firehose 控制台并找到已经创建好的 delivery stream\n\n![image.png](https://dev-media.amazoncloud.cn/534f00d29f1c444db7371df094187990_image.png)\n\n- 检查 monitoring 确认是否有数据写入到 Kinesis, 您会看到类似如下的图形\n\n![image.png](https://dev-media.amazoncloud.cn/74f90b649f85455288a8904c82508559_image.png)\n\n- 最终,您会在 S3 桶中看到对象文件的生成。由于我们在 Buffer interval 中定义了默认 5 分钟,大约每 5 分钟会生成一个文件到 S3\n\n![image.png](https://dev-media.amazoncloud.cn/f39a3d5095ee4e91a6297e27fa9ddbf1_image.png)\n\n#### **第二部分: Glue/Athena**\n\n在本节中,我们将使用 Glue 和 Athena 处理数据湖(S3)中每日生成的数据。 我们将使用 Glue Crawler 生成数据模式并将数据自动导入 Glue 数据库。 然后我们可以使用 Athena 来查询和检查数据。 将在 Glue 中创建数据 ETL 作业,以将数据格式从 CSV 转换为 Parquet。 然后将创建另一个 Crawler 作业以基于 Parquet 文件生成新表。 之后,我们可以使用 Athena 查询 Parquet 格式的数据,并与 CSV 格式的性能进行比较。 最后,我们将使用 Glue Workflow 将两个爬虫作业和一个 ETL 作业 编排在一起,并每日自动触发工作流。 我们已经通过 CloudFormation 创建了两个 Crawler 作业,您只需要配置其它的部分。\n\n##### ***使用 Glue 管理 Metadata***\n\n- 切换到 Glue console 并选择 Crawler, 点击 Run crawler 运行名字前缀为 SmartFarmDataCrawler 的 crawler\n\n![image.png](https://dev-media.amazoncloud.cn/7b41621413464e3dbbdf81b118165677_image.png)\n\n- 作业运行完毕后,您可以查看运行的结果。正常情况下,您可以看到有 Tables added 或者 Tables updated 的记录\n\n![image.png](https://dev-media.amazoncloud.cn/548b37e435e8462daa5260d7ae82fb67_image.png)\n\n##### ***使用 Athena 查询数据***\n\n- 找到刚刚创建成功的 table 并点击 View data\n\n![image.png](https://dev-media.amazoncloud.cn/d80a480c26ac4a43a89f028999eb570c_image.png)\n\n- 您会被重定向到 Athena 控制台,Athenam 会自动生成一个 SQL 查询语句。请注意右上角 Workgroupd 中的配置不能为空。\n\n![image.png](https://dev-media.amazoncloud.cn/345470b56e7341edabe119ca493f89c5_image.png)\n\n- 接下来我们可以调整 SQL 语句,删除 ‘ limit 10 ’。查询运行成功后,记录 Run time 和 Data scanned\n\n![image.png](https://dev-media.amazoncloud.cn/66cd643a219f4c1da4fe7d14d1b53e79_image.png)\n\n##### ***使用 Glue 将数据格式从 CSV 转换成 Parquet***\n\n- 切换回 Glue 控制台并选择 Jobs\n\n![image.png](https://dev-media.amazoncloud.cn/32daa197d3244ac1ad49bd368b2155fc_image.png)\n\n- 点击 Add job,输入名称并选择有足够访问 S3 权限的 IAM 角色。我们已经创建好了一个 IAM 角色,名字的前缀为 prefix SiemensSmartFarm.。我们选择使用 Spark 2.4. 为 engine type。\n\n![image.png](https://dev-media.amazoncloud.cn/122d72086d5a44f387946c1410ac6c9b_image.png)\n\n- Glue 将帮助生成脚本,设置如下。 请注意,您必须启用 Job bookmark, 然后每次 ETL 作业将只处理 Glue 表中的每日增量数据,而不是所有数据。\n\n![image.png](https://dev-media.amazoncloud.cn/555829da9e694c96b8929e20f4004b73_image.png)\n\n- 选择您刚刚创建好的 table 作为 Data source\n\n![image.png](https://dev-media.amazoncloud.cn/7b7f7f6a0c1c483c8ca76d644cd87af7_image.png)\n\n- 我们需要创建一个新的 dataset,因此选择 Change schema\n\n![image.png](https://dev-media.amazoncloud.cn/4edd190a39314f59a76c1f89d9451900_image.png)\n\n- 选择 S3 作为 Data store,Format 是 Parquet,选择名称前缀为“ siemensesmartfarm-siemensindustryedgedemo ”的 S3 bucket 作为 Target path。请记住在选择 S3 存储桶后添加 “/rawdataparquet”。\n\n![image.png](https://dev-media.amazoncloud.cn/29606802fec0408d9ed127709d76053e_image.png)\n\n- 确认 schema 但无需更改任何内容\n\n![image.png](https://dev-media.amazoncloud.cn/b241abdb378849a09b907dbe2490c403_image.png)\n\n- 点击 Save job 并选择 edit script,您将被重定向到生成的代码,您可以修改代码以支持更复杂的逻辑。但是对于这个演示,无需更改任何内容,只需关闭页面即可。\n\n![image.png](https://dev-media.amazoncloud.cn/ec5dc001ae034530b50eda3fd81962ab_image.png)\n\n- 至此一个 ELT 作业配置完成,您可以点击 Run job 执行该作业\n\n![image.png](https://dev-media.amazoncloud.cn/ad89edf4d26a4f6bb8c40c453be65388_image.png)\n\n- 作业运行成功后,您可以看到相应的记录并在 S3 中找到对应的文件\n\n![image.png](https://dev-media.amazoncloud.cn/f64019a749eb4b15bea07d9475d0f9e6_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/627bb5a7c82b49619ae66243b8132110_image.png)\n\n##### ***配置第二个 Crawler 用于爬取 Parquet 文件***\n\n- 找到另一个名称前缀为“smartFarmDataCrawlerParquet”的 crawler 并运行该爬虫\n\n![image.png](https://dev-media.amazoncloud.cn/35dd537b54aa415795beacd1b32f0d7c_image.png)\n\n- job 执行后,会在同一个数据库下生成一张新表\n\n![image.png](https://dev-media.amazoncloud.cn/cb8036926a9b490b88378025edd2e432_image.png)\n\n- 运行 SQL 查询。如果比较 CSV 格式的结果(运行时间=3.553s, 扫描数据:3MB),性能从时间和数据大小都得到了优化。\n\n![image.png](https://dev-media.amazoncloud.cn/861d563a15594a47bc666a770541023c_image.png)\n\n##### ***使用 Glue Workflows 编排多个步骤***\n\n- 切换到 Workflows 并点击 Add workflow\n\n![image.png](https://dev-media.amazoncloud.cn/d2fa2d69896948a6bc93552ccb406b05_image.png)\n\n- 给它一个名字并将 Max concurrency 设置为 1,因为该 workflow 每天只执行一次\n\n![image.png](https://dev-media.amazoncloud.cn/4e7d2bbf14044428abc44234094954f0_image.png)\n\n- 选择 Add trigger 开始定义流程\n\n![image.png](https://dev-media.amazoncloud.cn/aa0561ef606d47319e1285ee45455f8e_image.png)\n\n- 新增一个 trigger, 输入名称并选择 Schedule 作为 Trigger type\n\n![image.png](https://dev-media.amazoncloud.cn/d4e3fe3f52dd4b629194c162f7dea867_image.png)\n\n- 将频率设置为 Daily,开始时间我们配置为 00:02,以便处理昨天生成的所有数据,然后单击 Add\n\n![image.png](https://dev-media.amazoncloud.cn/af11d565c36647af901a87e910d8545d_image.png)\n\n- 点击 Add node, 然后选择第一个用于处理原始数据(CSV)的爬虫\n\n![image.png](https://dev-media.amazoncloud.cn/989a13721d5f4bfeb9225f5a9a16ca69_image.png)\n\n- 点击 crawler 图标并增加下一个 trigger\n\n![image.png](https://dev-media.amazoncloud.cn/ee056fd0bf26475bb99ad3dc0b8abb23_image.png)\n\n- Trigger 的 type 选择 Event, 点击 Add\n\n![image.png](https://dev-media.amazoncloud.cn/a614b115255d45c4b414c8412de6092e_image.png)\n\n- 点击 Add node 添加一个 ETL 作业,该作业将数据格式从 CSV 转换成 Parquet\n\n![image.png](https://dev-media.amazoncloud.cn/859986d267b144cdad067363ecd921be_image.png)\n\n- 点击这个 ETL 作业的图标增加下一个 trigger\n\n![image.png](https://dev-media.amazoncloud.cn/84036e202c4c4462aa9ffe0393ac7afb_image.png)\n\n- 点击 Add trigger 增加下一个 trigger,属于一个名称并选择 Event 类型\n\n![image.png](https://dev-media.amazoncloud.cn/b95956064f5f4432874cd37df26ef45e_image.png)\n\n- 点击 Add node 添加我们之前创建的第二个爬虫作业。\n\n![image.png](https://dev-media.amazoncloud.cn/2070173156d94381a00066c333360762_image.png)\n\n- 最后,我们在 Workflow 中配置了完整的流程,工作流将每天自动触发。\n\n![image.png](https://dev-media.amazoncloud.cn/a5fee9ff37f24959bf4c333e5bcd0d0c_image.png)\n\n### **第三部分: Sagemaker**\n\n在温室作物的种植中,大多数人关注温室内气温湿度和土壤温湿度的变化,却往往忽略了温室内 CO2 浓度对作物生长的影响。能量转换过程-光合作用,因此科学测量温室内 CO2 浓度,通过温室通风、CO2 基肥的使用等方式合理调节 CO2 浓度,有利于农业增产增效。\n\n在本节中,我们将使用 Sagemaker 训练一个模型,该模型可以根据传感器的历史数据预测未来 10 分钟内的 CO2 浓度变化。模型文件将存储在 S3 存储桶中,您可以下载该文件并将其加载到托管在您的 Industry Edge 中的应用程序中以进行本地预测和监控。一旦 CO2 浓度变化趋势异常,用户可提前报警并执行相应动作。\n\n我们已经通过 CloudFormation 在 Sagemaker 中生成了两个 Jupyter Notebook 文件。您只需要打开它们并逐步执行代码。然后你可以检查预测。通过以下步骤开始使用 Sagemaker。\n\n- 打开 Sagemaker 控制台并选择 Notebook instances\n\n![image.png](https://dev-media.amazoncloud.cn/5d446b3f5dc74b0fb72e3f6193d181c7_image.png)\n\n- 单击 Open Jupyter,您将找到两个以 “.ipynb” 结尾的笔记本。您将使用 ipynb 分析和准备数据,然后使用 2_time_series_forecast-gluonts.ipynb 构建模型并检查预测。\n\n![image.png](https://dev-media.amazoncloud.cn/c641e2b12c9247569b0fe64bf52bb98d_image.png)\n\n- 打开 0_data_prepare.ipynb notebook,按照步骤执行代码。 请注意,您需要等到 2-3 天才能收集足够的数据用于训练和测试。\n\n![image.png](https://dev-media.amazoncloud.cn/b077f79326974c9996c4221c7bda83c3_image.png)\n\n*修改 S3 桶名称:*\n\n*训练任务定义:*\n\n- 您可以根据数据的时间范围对训练/测试/预测数据集进行分段。\n- 您可以定义预测频率,默认为 1 分钟\n- 您可以定义预测长度,默认为 10 分钟\n- 您可以选择预测目标,我们在这个演示中使用 CO2(id=105) 为例训练预测模型\n\n![image.png](https://dev-media.amazoncloud.cn/160b1cd670454144a6996f0a204573f0_image.png)\n\n- 打开 2_time_series_forecast-gluonts.ipynb\n\n*模型文件输出定义:*\n\n![image.png](https://dev-media.amazoncloud.cn/985d483b78e345dfb0277a08c43ecdc0_image.png)\n\n*选择 DeepAR 或 NPTS 作为预测器:*\n\n![image.png](https://dev-media.amazoncloud.cn/85b0154b601844fb813fdb05ec8a7651_image.png)\n\n在演示中,我们同时使用了 Sagemaker 内置算法 DeepAR 和 GluonTS 的 NPTS,并比较了预测结果。 用于模型训练的源数据位于 S3 存储桶中,但是您需要等待 2-3 天才能收集到足够的数据用于模型训练。 我们使用前 1 天的数据来预测当前代码中未来 10 分钟的趋势,您可以修改时间窗口。 从下图中您可以发现两种算法都可以正确预测趋势(蓝线是真实数据/红线是预测)。\n\n![image.png](https://dev-media.amazoncloud.cn/dcb31514693b4944a67f8baa4469b5af_image.png)\n\n### **总结**\n\n基于 Amazon 云和西门子工业边缘的云边协同方案是一个云和边缘协同的集成解决方案,客户可以从 Siemens Industry Edge 和 Amazon 云服务中获益。 客户可以在本地继续处理需要更低延迟和强制性数据本地化合规要求的数据或业务逻辑,同时利用丰富的云服务,包括 Amazon IOT、Data Lake、Data Analytics、AI/ML 和 CICD 等,通过托管服务提供扩展的计算和存储资源。 围绕这个方案,西门子和 Amazon 也会持续扩大云边生态,同时我们希望邀请越来越多的合作伙伴加入并共同完善这个生态。\n\n### **本篇作者**\n\n![image.png](https://dev-media.amazoncloud.cn/749dc17e526f46768eff4125d1f72083_image.png)\n\n#### **张子昂**\n\n西门子工业自动化边缘计算技术顾问,主要负责西门子工业边缘计算相关技术支持与项目开发。深耕于离散工业领域的数字化、智能化业务。目前致力于促进 IT,OT 融合,工厂数字化智能化转型, 如构建智慧农业领域的边缘计算解决方案,以西门子工业边缘为平台赋能传统农业。\n\n![image.png](https://dev-media.amazoncloud.cn/98be72055a8c4739974ef95f87806188_image.png)\n\n#### **魏羽**\n\nAmazon 高级解决方案架构师,在 IT 行业有从业超过 13 年的工作经验,其中超过 7 年作为公有云架构师角色帮助企业级客户完成业务上云的需求。当前在 Amazon 云主要负责若干世界 500 强中的制造业和高科技行业客户的上云规划和支持,技术上致力于推广 Amazon 云 IOT 和大数据分析相关技术在企业中的应用。在加入 Amazon 前,曾在华为、微软等公司任职,负责过华为云以及微软 Azure 云上的项目落地。\n\n![image.png](https://dev-media.amazoncloud.cn/2d4299d08bc2408c9f9545e806567c4f_image.png)\n\n#### **程红波**\n\nAmazon 解决方案架构师,负责企业级客户的架构咨询及设计优化,同时致力于容器和无服务器技术在国内和全球企业客户的应用和推广。拥有多个大型互联网项目的设计和开发经验,对公有云、基于云原生的微服务架构、敏捷开发等有深入的研究和热情。","render":"<h3><a id=\"_0\"></a><strong>解决方案概述</strong></h3>\n<h4><a id=\"_2\"></a><strong>什么是边缘计算?</strong></h4>\n<p>边缘计算,是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。</p>\n<p>边缘计算技术在工业场景的应用,成为了工厂数字化转型的必经之路。</p>\n<p>在工业场景中,边缘是最靠近现场数据源的层级,将数据进行采集和处理,并在本地进行运算和反馈。边缘计算可以将诸如预测性维护、质量检测等任务下沉到工业现场层,从而使工业控制领域得到进一步延伸和拓展。</p>\n<h4><a id=\"_10\"></a><strong>为什么客户需要考虑工业边缘与云端的结合?</strong></h4>\n<p>近年来,随着工厂数字化、智能化程度的提高,工业界越来越关注生产数据的价值,同时智能化生产也成为许多工业客户的切身诉求。而 IT 技术的迅猛发展也为实现上述目标提供了无限可能。将 IT 技术与 OT 技术相融合,促进工厂数字化、智能化程度的进一步提升,已然成为业界发展的趋势。</p>\n<p>在数字化转型过程中,工业现场往往面临以下挑战:</p>\n<ul>\n<li>将 AI/ML 等先进技术与传统工控设备结合有一定难度。</li>\n<li>工业现场数据来源广,数据量大,且实时性、安全性要求高。</li>\n<li>用户希望在应用 IOT、数据分析及 ML 的中新技术时,使用管理复杂度低但灵活度高的解决方案。</li>\n</ul>\n<p>为解决上述问题,工业客户不约而同地期待能够在生产设备端部署一套具备数据采集与处理能力,拥有足够计算能力,能够即插即用的解决方案。而近年来蓬勃发展的边缘计算技术,恰好满足了这一需求。</p>\n<h4><a id=\"_22\"></a><strong>西门子工业边缘是什么?</strong></h4>\n<p>西门子工业边缘是一种边缘解决方案,该方案可以帮助您充分挖掘机器和工厂数据的潜力,结合云端的能力生成新的业务模式从而提高您的竞争优势。</p>\n<h4><a id=\"Amazon__26\"></a><strong>Amazon 与西门子工业边缘的云边协同方案优势是什么?</strong></h4>\n<p><em><ins>充分利用 Amazon 的数据分析和 ML 服务</ins></em></p>\n<p>虽然边缘计算具有低延迟和数据本地化的优势,但本地计算和存储资源有限,无法支持数据分析和 AI/ML(有/无 GPU)等复杂计算场景,Amazon 可以解决这个问题。 Amazon 可以提供各种云原生的分析/ML 服务,如 Amazon SageMaker、Amazon Glue、Amazon EMR 等,充分发挥云端资源扩展的力量。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/016573efb6e6440bb58c50d95631a545_image.png\" alt=\"image.png\" /></p>\n<p><em><ins>在AWS云端构建功能强大的数据湖</ins></em></p>\n<p>本地设备或传感器每秒都会产生大量数据,但是边缘的存储容量有限,并且没有专业的工具来管理数据。 利用 Amazon 云存储服务(如 Amazon S3),客户可以高效构建集中且安全的数据湖。</p>\n<p><em><ins>分布式、敏捷以及低管理复杂度</ins></em></p>\n<p>使用 Industrial Edge 进行本地数据处理,同时可以通过 Amazon IOT Core、Amazon IOT SiteWise 等服务将数据快速上云并提供看板展示。针对 ML 场景,您可以轻松实现云端训练和边缘推理的最佳实践。边缘设备和应用程序通过西门子工业边缘集中管理减少了部署和维护支出,云上托管服务即开即用,降低运维工作量。</p>\n<p><em><ins>降低存储和传输的成本</ins></em></p>\n<p>Industrial Edge 支持就近实时分析数据,无需将全部数据保存到云端,满足数据的实时性及本地合规的需求。 来自物联网设备的数据可以在本地进行预处理或脱敏后再发送到云端进行长期存储以及复杂的数据分析/建模等。</p>\n<h4><a id=\"_Cloud_Connector_46\"></a><strong>西门子工业边缘 Cloud Connector</strong></h4>\n<p>利用云端的优势,对工业现场产生的海量数据进行分析与训练,或者实现云上的数据展示和存储,是许多工业用户的诉求。西门子工业边缘也为数据上云提供了解决方案。例如,使用西门子官方提供的 Cloud Connector,可以便捷地将设备产生的数据上传至云服务器。通过 Cloud Connector,您可以非常方便的连接到 Amazon 云(上传证书,输入 MQTT topic 名称以及消息队列的 URL 地址)。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/4746e498b0354a72ad88468e7742ba8d_image.png\" alt=\"image.png\" /></p>\n<p>除了通过西门子官方提供的 Cloud Connector 连接云服务器以外,西门子工业边缘设备也支持通过 Amazon 云提供的 SDK,自行开发云连接 APP,实现云——边——端的协同。</p>\n<h3><a id=\"_54\"></a><strong>解决方案技术架构</strong></h3>\n<p><img src=\"https://dev-media.amazoncloud.cn/8f5d9d78b5ac4c41826015f5083186f0_image.png\" alt=\"image.png\" /></p>\n<p><em>特别说明:此技术架构作为解决方案指导供客户使用,在实际的项目中会根据具体的需求进行选择,并非全部服务都必须使用。针对 IOT 数据接入,您可以只选择 IOT SiteWise、IOT Event 以及 IOT Core 服务。针对数据湖以及数据分析,您可以只选择 Amazon Kinesis、S3、Glue 以及 Athena。针对数据仓库,您在数据湖和分析的基础上增加 Redshift。针对 ML 场景,可以增加使用 SageMaker。最后,针对应用的 CI/CD,可以选择使用 CodeCommit 以及 CodeBuild 等。</em></p>\n<p>1.在西门子工业边缘设备中运行的南向连接器支持不同协议连接到工厂中的设备或者网关。西门子工业边缘管理平台负责将南向连接器部署到工业边缘设备中并做集中的管理</p>\n<p>2.云连接器与 Amazon 云之间建立连接,通过 MQTT 协议以 TLS 加密的方式将数据传输到云端</p>\n<p>3.时序数据以流的方式注入到 Amazon 云的 IOT Core 服务,IOT Core 服务再通过不同的 IOT Rule 将数据转发到 Amazon IoT SiteWise、 Amazon Kinesis Data Streams 以及 Amazon IoT Events 等其它的云服务</p>\n<p>4.Amazon IoT Events 处理数据并基于业务逻辑触发事件通知</p>\n<p>5.Amazon Kinesis Data Firehose 将数据直接转储到 Amazon S3 桶中, Amazon Glue 对数据进行 ETL 处理后,提供给后续的 Amazon SageMaker 以及 Amazon Redshift 做数据消费</p>\n<p>6.基于 CodePipeline、CodeCommit 以及 CodeBuild 在云端构建 CI/CD 流水线,流水线中处理的工业边缘 API 和 Amazon IoT 作业将 Docker 映像和配置文件发布到西门子工业边缘管理平台。</p>\n<h3><a id=\"Demo__72\"></a><strong>Demo 演示</strong></h3>\n<p>验证 Amazon 与 Industry Edge 之间的集成。 Industry Edge 已经提供了一个云连接器,可以通过证书导入连接到 IOT Core。 IED 设备将在 IOT Core 中注册为事物。 通过该配置,Industry Edge 可以通过 MQTT 主题将数据传输到 Amazon。 数据在云端保存后,我们可以进一步存储、分析、显示甚至使用数据进行 ML。 西门子有一个模拟的智能农场环境,其中包含多个传感器来收集温度、湿度、设备状态等。 我们会将这些数据收集到云端并进一步处理数据。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/634790c79e2140018f11e791d836f62f_image.png\" alt=\"image.png\" /></p>\n<h3><a id=\"POC__77\"></a><strong>POC 架构</strong></h3>\n<p><img src=\"https://dev-media.amazoncloud.cn/b043368c10fc4a9ab6d3b698569065a6_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>传感器数据从 Industry Edge(IED) 注入到 IOT Core,并通过 IOT Rule 转发到 IOT Sitewise。 原始数据(属性)和聚合数据(指标)都可以显示在自定义的 Sitewise 仪表板中。 原始数据也将每 5 分钟通过 Kinesis Firehose 传输到 S3,S3 作为数据湖长期存储原始/聚合/处理数据。</li>\n<li>S3 中的原始数据(步骤1)由 Amazon Glue 进一步处理,表的结构由 Glue Crawler 自动生成。 通过 Glue 作业将数据格式从 CSV 转换为 Parquet,客户可以定义更复杂的 ETL 流程。 Parquet 格式的数据将再次被 Glue Crawler 解析。 所有步骤均由 Glue Workflows 完成编排,并自动每天执行一次。 客户可以在 Amazon Athena 中使用 SQL 语句查询无论数据格式是 CSV 还是 Parquet 的结果,对数据进行进一步处理。</li>\n<li>Sagemaker 用作 ML 模型开发和训练,训练数据在前面的步骤中已被保存到 S3。模型的文件在训练工作完成后存储回 S3。 Industry Edge (IEM) 中管理的应用程序下载模型并将其部署在应用程序中。 最终用户可以使用此应用程序进行预测。</li>\n</ul>\n<h3><a id=\"_85\"></a><strong>配置步骤</strong></h3>\n<h4><a id=\"_87\"></a><strong>先决条件</strong></h4>\n<ul>\n<li>Amazon 云测试账号</li>\n<li>农作物培育箱和传感器(仅完整 Demo 需要)</li>\n</ul>\n<p>由于 Demo 的后续配置过程已通过 CloudFormation 实现自动化,我们推荐在培育箱中使用和如下内容相同的传感器或者模拟生成相同的配置。关于传感器和开关的具体配置,您可以联系 jiamin.wang@siemens.com</p>\n<p>已使用的传感器和开关:<br />\n{“name”: “SoilTemp”, “id”: “101”, “dataType”: “Real”},</p>\n<p>{“name”: “Illumination”, “id”: “102”, “dataType”: “DInt”},</p>\n<p>{“name”: “AirTemp”, “id”: “103”, “dataType”: “Real”},</p>\n<p>{“name”: “SoilHumi”, “id”: “104”, “dataType”: “Real”},</p>\n<p>{“name”: “CO2”, “id”: “105”, “dataType”: “DInt”},</p>\n<p>{“name”: “AirHumidity”, “id”: “106”, “dataType”: “Real”},</p>\n<p>{“name”: “Auto_Manu”, “id”: “107”, “dataType”: “Bool”},</p>\n<p>{“name”: “Heating”, “id”: “108”, “dataType”: “Bool”},</p>\n<p>{“name”: “Pump”, “id”: “109”, “dataType”: “Bool”},</p>\n<p>{“name”: “Fan”, “id”: “110”, “dataType”: “Bool”},</p>\n<p>{“name”: “RedLight”, “id”: “111”, “dataType”: “Bool”},</p>\n<p>{“name”: “BlueLight”, “id”: “112”, “dataType”: “Bool”},</p>\n<p>{“name”: “WhiteLight”, “id”: “113”, “dataType”: “Bool”},</p>\n<p>{“name”: “FanManu”, “id”: “114”, “dataType”: “Bool”},</p>\n<p>{“name”: “WhiteLightManu”, “id”: “115”, “dataType”: “Bool”},</p>\n<p>{“name”: “RedLightManu”, “id”: “116”, “dataType”: “Bool”},</p>\n<p>{“name”: “PumpManu”, “id”: “117”, “dataType”: “Bool”},</p>\n<p>{“name”: “HeatingManu”, “id”: “118”, “dataType”: “Bool”},</p>\n<p>{“name”: “DAY”, “id”: “119”, “dataType”: “Byte”},</p>\n<p>{“name”: “BlueLightManu”, “id”: “120”, “dataType”: “Bool”},</p>\n<p>{“name”: “Month”, “id”: “121”, “dataType”: “Byte”},</p>\n<p>{“name”: “Year”, “id”: “122”, “dataType”: “Int”},</p>\n<p>{“name”: “AutoLightTime”, “id”: “123”, “dataType”: “Real”},</p>\n<p>{“name”: “LongDay”, “id”: “124”, “dataType”: “Bool”},</p>\n<p>{“name”: “ShortDay”, “id”: “125”, “dataType”: “Bool”},</p>\n<p>{“name”: “LightManualStop”, “id”: “126”, “dataType”: “Bool”},</p>\n<p>{“name”: “LightTime”, “id”: “127”, “dataType”: “Real”},</p>\n<p>{“name”: “LightHalfAuto”, “id”: “128”, “dataType”: “Bool”},</p>\n<p>{“name”: “AgeDays”, “id”: “129”, “dataType”: “Int”},</p>\n<p>{“name”: “SetAgeStart”, “id”: “130”, “dataType”: “Bool”}</p>\n<ul>\n<li>西门子 PLC 硬件及工业边缘软件 (仅完整 Demo 需要)</li>\n</ul>\n<p>如需在您的 Amazon 云测试账号中完整实现 Demo 的环境,请联系西门子工业边缘团队咨询如何获取西门子硬件(如 HMI,PLC 以及 IPC)以及工业边缘软件,并获得相应的部署支持。请联系 jiamin.wang@siemens.com</p>\n<h4><a id=\"_159\"></a><strong>云资源准备</strong></h4>\n<p>选择一: 如果您已经获取了西门子硬件以及工业边缘软件,请使用此 <a href=\"https://github.com/FrankieCheng/smartfarmdemo/blob/main/cfn/withoutEC2-20220513.yaml\" target=\"_blank\">CloudFormation 脚本</a>在您的账号中自动创建并配置部分云资源。当 CloudFormation 执行成功后,您需要下载证书文件(.crt)和私钥文件(.key)到您的本地,然后将它们导入到工业边缘连接器(connector)。您也需要在工业边缘连接器中使用和 CloudFormation 中相同的消息 topic 名称。请联系 jiamin.wang@siemens.com 咨询如何导入文件到连接器。请注意您必须使用和前面章节介绍的相同的传感器/开关,否则您还需要在 CloudFormation 执行完毕后调整 <a href=\"https://docs.amazonaws.cn/iot-sitewise/latest/userguide/what-is-sitewise.html\" target=\"_blank\">Sitewise</a> 和 <a href=\"https://docs.amazonaws.cn/iot/latest/developerguide/iot-rule-actions.html\" target=\"_blank\">IOT Core</a> 两个部分的配置,使 Sitewise 中的模型配置以及 IOT Core 中的转发规则与您实际的传感器/开关 保持一致。</p>\n<p><em>如何下载证书和私钥文件?</em></p>\n<ul>\n<li>登录到您的 Amazon 云管理控制台切换到 CloudFormation 服务,从 Systems Manager – Parameter Store 中获取证书和私钥的内容</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/d9b91b5d8c1d4cf0ae81ef5b859ab537_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 ‘IoTCertificateKeyURL’ 和 ‘IoTCertificatePrivateKeyURL’ 的输出 URL,页面会被重定向到 Parameter Store</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/a300a103507b456499d484bbcf7caf98_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/357b6335f48b48deb4a12f9c256efcb9_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>复制 ‘/smartfarm/certificatePem’ 对应的值并保存成文件 csr,复制 ‘/smartfarm/keyPair/PrivateKey’ 对应的值并保存成文件 privatekey.key</li>\n</ul>\n<p>选择二: 如果您只希望测试 Amazon 云端的部分,请在您的账号中使用此 CloudFormation 脚本。这个 CloudFormation 脚本会额外创建一个 EC2 虚拟机,此虚拟机会被用于模拟传感器生成和真实环境相同配置的数据格式并实时注入数据到 Amazon IOT 服务</p>\n<h4><a id=\"_Amazon__179\"></a><strong>测试 Amazon 云服务</strong></h4>\n<h4><a id=\"IOT_CoreSitewiseKinesisS3_181\"></a><strong>第一部分:IOT Core/Sitewise/Kinesis/S3</strong></h4>\n<p>CloudFormation 执行成功后,会自动完成 IOT Core/Sitewise/Kinesis Firehose/S3 的配置。 您可以从 Amazon 云服务控制台检查配置。 我们只展示部分关键配置。</p>\n<p><em>IOT Sitewise</em></p>\n<p>模型架构:两层架构:Smart Farm 作为父层,各种类型的传感器/设备作为子层。 {Byte, DInt, Int} 匹配 Int,Real 匹配 Double,Bool 匹配 Bool。 最终会生成4个模型。 Smart Farm 模型包括其他三个。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/43e87a8d1b96415e8d97f344e9e4bf3e_image.png\" alt=\"image.png\" /></p>\n<p>Asset 架构:使用之前创建的模型为每一个传感器/开关创建一个资产,一共有30个资产会被创建,这些资产归属于 Smart_Farm资产。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/f47a87dfec4048cfab66c69eb52a020a_image.png\" alt=\"image.png\" /></p>\n<p>接下来我们需要配置后续在 Sitewise Dashboard 中使用的的告警</p>\n<ul>\n<li>选择您希望添加告警的模型并切换到 Alarm definitions</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/b710995d66764d22b2c54aced33aa107_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Add Alarm 为土壤湿度和温度增加两个告警,输入告警的名称</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/02eddd0b77594f6994197b119c7a31d8_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>选择需要监控的 property,我们选择 Max Val 作为 property,告警触发值为 SoilHumiNormal 的值,这个值在 Attribute 中已经定义好了。You can also define the severity of this alarm. 您也可以定义告警的 Severity。当土壤湿度大于 15% 时,告警会在您后续配置的 Dashboard 中触发并显示。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/801894eaa56b41fca8012d04357918c7_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>重复第 2 步和第 3 步创建另外一个告警。我们仍然使用 Max Val 作为 property,但使用 SoilTempNormal 作为 threshold</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/6bb81a906a204d4092e702564dd22a1d_image.png\" alt=\"image.png\" /></p>\n<p>到目前为止,我们已经通过工业边缘设备 (IED) 中的云连接器成功地将数据从传感器加载到 Sitewise。 接下来,我们将制作一个仪表板来显示资产属性和指标。最终的示例仪表板将是这样的。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/622deb5de7d64c88bf01c3e99c375643_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>切换到 Sitewise 服务并点击 Portals</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/fe5f6f5aea174364851cd792608c2420_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Assign users 添加 Portal administrator</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/1a01ee5a5abd4c8cb97de2a49c54815e_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>选择您自己的 IAM 用户并点击 Assign administrators, 添加后就可以通过 URL 登录到 URL</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/9828676cf74b4d6397426497895d2dab_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>在使用管理员用户权限登录到 Portal 后,您可以看到所有之前在 Sitewise 控制台中配置完成的模型和资产</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/3237dd84d7224c0692de214660ff3d7e_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>接下来我们配置一个 Dashboard,切换到 Project 之后打开已经创建好的 Project 并点击 Create dashboard</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/a56305bf6ac243beaebf6cde60eaf48c_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>您现在可以拖拽之前定义好的 properties 和 alarms。您可以定制您的 Visualization 甚至是可以为特定的 property 增加 Trend lines</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/a75fbc762f77407e80e3441b7f0d0a82_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>关于如何配置 Sitewise Monitor 的更多细节,请访问 <a href=\"https://docs.amazonaws.cn/en_us/iot-sitewise/latest/appguide/what-is-monitor-app.html\" target=\"_blank\">link</a></li>\n</ul>\n<p><em>Kinesis/S3</em></p>\n<ul>\n<li>切换到 Kinesis Firehose 控制台并找到已经创建好的 delivery stream</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/534f00d29f1c444db7371df094187990_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>检查 monitoring 确认是否有数据写入到 Kinesis, 您会看到类似如下的图形</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/74f90b649f85455288a8904c82508559_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>最终,您会在 S3 桶中看到对象文件的生成。由于我们在 Buffer interval 中定义了默认 5 分钟,大约每 5 分钟会生成一个文件到 S3</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/f39a3d5095ee4e91a6297e27fa9ddbf1_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"_GlueAthena_258\"></a><strong>第二部分: Glue/Athena</strong></h4>\n<p>在本节中,我们将使用 Glue 和 Athena 处理数据湖(S3)中每日生成的数据。 我们将使用 Glue Crawler 生成数据模式并将数据自动导入 Glue 数据库。 然后我们可以使用 Athena 来查询和检查数据。 将在 Glue 中创建数据 ETL 作业,以将数据格式从 CSV 转换为 Parquet。 然后将创建另一个 Crawler 作业以基于 Parquet 文件生成新表。 之后,我们可以使用 Athena 查询 Parquet 格式的数据,并与 CSV 格式的性能进行比较。 最后,我们将使用 Glue Workflow 将两个爬虫作业和一个 ETL 作业 编排在一起,并每日自动触发工作流。 我们已经通过 CloudFormation 创建了两个 Crawler 作业,您只需要配置其它的部分。</p>\n<h5><a id=\"_Glue__Metadata_262\"></a><em><strong>使用 Glue 管理 Metadata</strong></em></h5>\n<ul>\n<li>切换到 Glue console 并选择 Crawler, 点击 Run crawler 运行名字前缀为 SmartFarmDataCrawler 的 crawler</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/7b41621413464e3dbbdf81b118165677_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>作业运行完毕后,您可以查看运行的结果。正常情况下,您可以看到有 Tables added 或者 Tables updated 的记录</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/548b37e435e8462daa5260d7ae82fb67_image.png\" alt=\"image.png\" /></p>\n<h5><a id=\"_Athena__272\"></a><em><strong>使用 Athena 查询数据</strong></em></h5>\n<ul>\n<li>找到刚刚创建成功的 table 并点击 View data</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/d80a480c26ac4a43a89f028999eb570c_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>您会被重定向到 Athena 控制台,Athenam 会自动生成一个 SQL 查询语句。请注意右上角 Workgroupd 中的配置不能为空。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/345470b56e7341edabe119ca493f89c5_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>接下来我们可以调整 SQL 语句,删除 ‘ limit 10 ’。查询运行成功后,记录 Run time 和 Data scanned</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/66cd643a219f4c1da4fe7d14d1b53e79_image.png\" alt=\"image.png\" /></p>\n<h5><a id=\"_Glue__CSV__Parquet_286\"></a><em><strong>使用 Glue 将数据格式从 CSV 转换成 Parquet</strong></em></h5>\n<ul>\n<li>切换回 Glue 控制台并选择 Jobs</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/32daa197d3244ac1ad49bd368b2155fc_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Add job,输入名称并选择有足够访问 S3 权限的 IAM 角色。我们已经创建好了一个 IAM 角色,名字的前缀为 prefix SiemensSmartFarm.。我们选择使用 Spark 2.4. 为 engine type。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/122d72086d5a44f387946c1410ac6c9b_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>Glue 将帮助生成脚本,设置如下。 请注意,您必须启用 Job bookmark, 然后每次 ETL 作业将只处理 Glue 表中的每日增量数据,而不是所有数据。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/555829da9e694c96b8929e20f4004b73_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>选择您刚刚创建好的 table 作为 Data source</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/7b7f7f6a0c1c483c8ca76d644cd87af7_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>我们需要创建一个新的 dataset,因此选择 Change schema</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/4edd190a39314f59a76c1f89d9451900_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>选择 S3 作为 Data store,Format 是 Parquet,选择名称前缀为“ siemensesmartfarm-siemensindustryedgedemo ”的 S3 bucket 作为 Target path。请记住在选择 S3 存储桶后添加 “/rawdataparquet”。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/29606802fec0408d9ed127709d76053e_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>确认 schema 但无需更改任何内容</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/b241abdb378849a09b907dbe2490c403_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Save job 并选择 edit script,您将被重定向到生成的代码,您可以修改代码以支持更复杂的逻辑。但是对于这个演示,无需更改任何内容,只需关闭页面即可。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/ec5dc001ae034530b50eda3fd81962ab_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>至此一个 ELT 作业配置完成,您可以点击 Run job 执行该作业</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/ad89edf4d26a4f6bb8c40c453be65388_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>作业运行成功后,您可以看到相应的记录并在 S3 中找到对应的文件</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/f64019a749eb4b15bea07d9475d0f9e6_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/627bb5a7c82b49619ae66243b8132110_image.png\" alt=\"image.png\" /></p>\n<h5><a id=\"_Crawler__Parquet__330\"></a><em><strong>配置第二个 Crawler 用于爬取 Parquet 文件</strong></em></h5>\n<ul>\n<li>找到另一个名称前缀为“smartFarmDataCrawlerParquet”的 crawler 并运行该爬虫</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/35dd537b54aa415795beacd1b32f0d7c_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>job 执行后,会在同一个数据库下生成一张新表</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/cb8036926a9b490b88378025edd2e432_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>运行 SQL 查询。如果比较 CSV 格式的结果(运行时间=3.553s, 扫描数据:3MB),性能从时间和数据大小都得到了优化。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/861d563a15594a47bc666a770541023c_image.png\" alt=\"image.png\" /></p>\n<h5><a id=\"_Glue_Workflows__344\"></a><em><strong>使用 Glue Workflows 编排多个步骤</strong></em></h5>\n<ul>\n<li>切换到 Workflows 并点击 Add workflow</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/d2fa2d69896948a6bc93552ccb406b05_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>给它一个名字并将 Max concurrency 设置为 1,因为该 workflow 每天只执行一次</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/4e7d2bbf14044428abc44234094954f0_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>选择 Add trigger 开始定义流程</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/aa0561ef606d47319e1285ee45455f8e_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>新增一个 trigger, 输入名称并选择 Schedule 作为 Trigger type</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/d4e3fe3f52dd4b629194c162f7dea867_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>将频率设置为 Daily,开始时间我们配置为 00:02,以便处理昨天生成的所有数据,然后单击 Add</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/af11d565c36647af901a87e910d8545d_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Add node, 然后选择第一个用于处理原始数据(CSV)的爬虫</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/989a13721d5f4bfeb9225f5a9a16ca69_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 crawler 图标并增加下一个 trigger</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/ee056fd0bf26475bb99ad3dc0b8abb23_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>Trigger 的 type 选择 Event, 点击 Add</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/a614b115255d45c4b414c8412de6092e_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Add node 添加一个 ETL 作业,该作业将数据格式从 CSV 转换成 Parquet</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/859986d267b144cdad067363ecd921be_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击这个 ETL 作业的图标增加下一个 trigger</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/84036e202c4c4462aa9ffe0393ac7afb_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Add trigger 增加下一个 trigger,属于一个名称并选择 Event 类型</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/b95956064f5f4432874cd37df26ef45e_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>点击 Add node 添加我们之前创建的第二个爬虫作业。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/2070173156d94381a00066c333360762_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>最后,我们在 Workflow 中配置了完整的流程,工作流将每天自动触发。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/a5fee9ff37f24959bf4c333e5bcd0d0c_image.png\" alt=\"image.png\" /></p>\n<h3><a id=\"_Sagemaker_398\"></a><strong>第三部分: Sagemaker</strong></h3>\n<p>在温室作物的种植中,大多数人关注温室内气温湿度和土壤温湿度的变化,却往往忽略了温室内 CO2 浓度对作物生长的影响。能量转换过程-光合作用,因此科学测量温室内 CO2 浓度,通过温室通风、CO2 基肥的使用等方式合理调节 CO2 浓度,有利于农业增产增效。</p>\n<p>在本节中,我们将使用 Sagemaker 训练一个模型,该模型可以根据传感器的历史数据预测未来 10 分钟内的 CO2 浓度变化。模型文件将存储在 S3 存储桶中,您可以下载该文件并将其加载到托管在您的 Industry Edge 中的应用程序中以进行本地预测和监控。一旦 CO2 浓度变化趋势异常,用户可提前报警并执行相应动作。</p>\n<p>我们已经通过 CloudFormation 在 Sagemaker 中生成了两个 Jupyter Notebook 文件。您只需要打开它们并逐步执行代码。然后你可以检查预测。通过以下步骤开始使用 Sagemaker。</p>\n<ul>\n<li>打开 Sagemaker 控制台并选择 Notebook instances</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/5d446b3f5dc74b0fb72e3f6193d181c7_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>单击 Open Jupyter,您将找到两个以 “.ipynb” 结尾的笔记本。您将使用 ipynb 分析和准备数据,然后使用 2_time_series_forecast-gluonts.ipynb 构建模型并检查预测。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/c641e2b12c9247569b0fe64bf52bb98d_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>打开 0_data_prepare.ipynb notebook,按照步骤执行代码。 请注意,您需要等到 2-3 天才能收集足够的数据用于训练和测试。</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/b077f79326974c9996c4221c7bda83c3_image.png\" alt=\"image.png\" /></p>\n<p><em>修改 S3 桶名称:</em></p>\n<p><em>训练任务定义:</em></p>\n<ul>\n<li>您可以根据数据的时间范围对训练/测试/预测数据集进行分段。</li>\n<li>您可以定义预测频率,默认为 1 分钟</li>\n<li>您可以定义预测长度,默认为 10 分钟</li>\n<li>您可以选择预测目标,我们在这个演示中使用 CO2(id=105) 为例训练预测模型</li>\n</ul>\n<p><img src=\"https://dev-media.amazoncloud.cn/160b1cd670454144a6996f0a204573f0_image.png\" alt=\"image.png\" /></p>\n<ul>\n<li>打开 2_time_series_forecast-gluonts.ipynb</li>\n</ul>\n<p><em>模型文件输出定义:</em></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/985d483b78e345dfb0277a08c43ecdc0_image.png\" alt=\"image.png\" /></p>\n<p><em>选择 DeepAR 或 NPTS 作为预测器:</em></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/85b0154b601844fb813fdb05ec8a7651_image.png\" alt=\"image.png\" /></p>\n<p>在演示中,我们同时使用了 Sagemaker 内置算法 DeepAR 和 GluonTS 的 NPTS,并比较了预测结果。 用于模型训练的源数据位于 S3 存储桶中,但是您需要等待 2-3 天才能收集到足够的数据用于模型训练。 我们使用前 1 天的数据来预测当前代码中未来 10 分钟的趋势,您可以修改时间窗口。 从下图中您可以发现两种算法都可以正确预测趋势(蓝线是真实数据/红线是预测)。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/dcb31514693b4944a67f8baa4469b5af_image.png\" alt=\"image.png\" /></p>\n<h3><a id=\"_443\"></a><strong>总结</strong></h3>\n<p>基于 Amazon 云和西门子工业边缘的云边协同方案是一个云和边缘协同的集成解决方案,客户可以从 Siemens Industry Edge 和 Amazon 云服务中获益。 客户可以在本地继续处理需要更低延迟和强制性数据本地化合规要求的数据或业务逻辑,同时利用丰富的云服务,包括 Amazon IOT、Data Lake、Data Analytics、AI/ML 和 CICD 等,通过托管服务提供扩展的计算和存储资源。 围绕这个方案,西门子和 Amazon 也会持续扩大云边生态,同时我们希望邀请越来越多的合作伙伴加入并共同完善这个生态。</p>\n<h3><a id=\"_447\"></a><strong>本篇作者</strong></h3>\n<p><img src=\"https://dev-media.amazoncloud.cn/749dc17e526f46768eff4125d1f72083_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"_451\"></a><strong>张子昂</strong></h4>\n<p>西门子工业自动化边缘计算技术顾问,主要负责西门子工业边缘计算相关技术支持与项目开发。深耕于离散工业领域的数字化、智能化业务。目前致力于促进 IT,OT 融合,工厂数字化智能化转型, 如构建智慧农业领域的边缘计算解决方案,以西门子工业边缘为平台赋能传统农业。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/98be72055a8c4739974ef95f87806188_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"_457\"></a><strong>魏羽</strong></h4>\n<p>Amazon 高级解决方案架构师,在 IT 行业有从业超过 13 年的工作经验,其中超过 7 年作为公有云架构师角色帮助企业级客户完成业务上云的需求。当前在 Amazon 云主要负责若干世界 500 强中的制造业和高科技行业客户的上云规划和支持,技术上致力于推广 Amazon 云 IOT 和大数据分析相关技术在企业中的应用。在加入 Amazon 前,曾在华为、微软等公司任职,负责过华为云以及微软 Azure 云上的项目落地。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/2d4299d08bc2408c9f9545e806567c4f_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"_463\"></a><strong>程红波</strong></h4>\n<p>Amazon 解决方案架构师,负责企业级客户的架构咨询及设计优化,同时致力于容器和无服务器技术在国内和全球企业客户的应用和推广。拥有多个大型互联网项目的设计和开发经验,对公有云、基于云原生的微服务架构、敏捷开发等有深入的研究和热情。</p>\n"}
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭
contact-us