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

0
0
{"value":"### **1.概述**\n亚马逊云科技提供了完备的IoT服务能力,涵盖设备服务、连接和控制服务以及云端分析服务,是快速构建安全可靠、可扩展的 IoT 平台的常见选择。Amazon IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。[Amazon ECS Anywhere](https://aws.amazon.com/cn/ecs/anywhere/?trk=cndc-detail)提供的混合云容器服务。\n\n本文将提出一种基于 ECS Anywhere 构建容器化云边统一管理的IoT平台参考架构,介绍了如何利用 ECS Anywhere 在边缘设备上容器化部署 Greengrass,并在 Greengrass 上部署组件,帮助用户简化 IoT 设备管理,从而构建云边一体的 IoT 平台。\n\n### **2.ECS Anywhere**\n[Amazon Elastic Container Service](https://aws.amazon.com/cn/ecs/?trk=cndc-detail) (ECS) Anywhere 是亚马逊云科技自研的容器管理平台 ECS 的扩展功能,将云端的容器管理能力延伸到本地数据中心和边缘端,是利用容器技术构建云边一体 IoT 平台的理想选择。ECS Anywhere 为用户提供了一个完全托管的容器编排服务,使客户能够使用与目前在 [Amazon ECS](https://aws.amazon.com/cn/ecs/?trk=cndc-detail) 中所用的相同 API、集群管理、工作负载计划、监控和部署流水线在本地运行和管理容器化应用程序。通过将服务器或实例连接到托管 [Amazon ECS](https://aws.amazon.com/cn/ecs/?trk=cndc-detail) 控制平面,客户可以在自己的基础设施上使用 [Amazon ECS Anywhere](https://aws.amazon.com/cn/ecs/anywhere/?trk=cndc-detail)。使用 [Amazon ECS Anywhere](https://aws.amazon.com/cn/ecs/anywhere/?trk=cndc-detail),客户可以在任何客户管理的实例上部署和管理容器化应用程序,而无需在本地手动安装、操作和管理容器编排软件。\n\n### **3.IoT Greengrass**\nAmazon IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。使用 IoT Greengrass 来构建软件,使设备能够对其生成的数据进行本地操作,基于[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型运行预测,以及过滤和聚合设备数据。可将 Amazon 服务扩展至物理设备,以便在边缘侧操作生成的数据,同时仍可将云用于管理、分析和持久存储。可确保设备不仅可以快速响应本地事件,还能在连接不稳定时正常运行。可以编写自定义软件,可在本地设备上运行的 Amazon Lambda 函数和容器应用。Amazon IoT Greengrass 也可运行在容器中。\n\n### **4.基于 ECS Anywhere 的 IoT 平台参考架构**\n在 ECS 中统一管理服务端和边缘端的设备和容器任务,通过 ECS Anywhere 在边缘端容器中部署 Greengrass 和其他边缘应用,通过云端 IoT 控制台管理连接 Greengrass,管理 Greengrass 中的组件和应用。\n\n![image.png](https://dev-media.amazoncloud.cn/9679c7e0d6364c73a2ca4ae659779bca_image.png)\n\n#### **5.构建步骤**\n(本文将用一台 EC2 服务器模拟边缘服务器,操作系统为 ubuntu20,机型为 T3.large ,磁盘 EBS50G。)\n\n使用 ECS Anywhere 在边缘部署 IoT Greengrass 及应用, 具体构建步骤如下:\n\n- 部署 ECS Anywhere\n- 部署 Greengrass\n- 部署应用\n\n#### **5.1部署 ECS Anywhere**\nECS Anywhere 部署架构图如下所示。\n\n![image.png](https://dev-media.amazoncloud.cn/167267f8022949a9ad7c1db6c3c3c7b6_image.png)\n\n##### **5.1.1 创建 ECS 集群**\n\n进入 ECS 服务,点击创建集群。\n\n![image.png](https://dev-media.amazoncloud.cn/ad6f7608a9634a98ae58d026cd72bf23_image.png)\n\n选择 EC2 Linux+ 联网模版。\n\n![image.png](https://dev-media.amazoncloud.cn/517764340008489a87aee48373cd0d6b_image.png)\n\n输入集群名,可以选择创建空集群或者创建有实例的集群。\n\n![image.png](https://dev-media.amazoncloud.cn/137b4310a33645cca80496575e0a1d59_image.png)\n\n如果为非空集群,实例数量输入 2,网络设置可选已有 VPC 和子网,也可以新建 VPC 。其他设置默认,点击创建集群。\n\n![image.png](https://dev-media.amazoncloud.cn/cd2fd9a27c9845e293ba14e8a83b1ade_image.png)\n\n##### **5.1.2 注册边缘服务器**\n\n进入新创建的 ECS 集群,选择 ECS 实例子页签,点击注册 External 实例。\n\n![image.png](https://dev-media.amazoncloud.cn/eb1a029325fa4c1c99c57c2bd96c2a74_image.png)\n\n选择实例数量,实例角色新建,点击生成注册命令。\n\n![image.png](https://dev-media.amazoncloud.cn/9a68cacc7b08425aa3ab274150006537_image.png)\n\n复制注册命令。\n\n![image.png](https://dev-media.amazoncloud.cn/2bdf36b8449841daae9843c835073af0_image.png)\n\n以 root 身份运行脚本将在边缘服务器上安装ECS代理和SSM代理。\n\n![image.png](https://dev-media.amazoncloud.cn/334b97e0665c4ef0aec890c3078e7edf_image.png)\n\n执行完毕后,SSM 代理和 ECS 代理将在边缘服务器上运行,在 Amazon 控制台 ECS 服务界面的 ECS 示例标签可以看到注册成功的外部实例。\n\n![image.png](https://dev-media.amazoncloud.cn/6045e8c597b3436391b4c64faa8ab24c_image.png)\n\n#### **5.2 部署 Greengrass**\n\n##### **5.2.1创建访问凭证**\n\nSSH登录到边缘服务器,创建 greengrass 容器中访问 Amazon IoT Core 的访问凭证\n\n```\\nvi /root/.aws/credentials\\n```\n\n输入以下内容,其中```\\n<AWS_ACCESS_KEY_ID>```和```\\n<AWS_SECRET_ACCESS_KEY>```需要替换为访问 AK、SK,如果为临时凭证还需要替换```<AWS_SESSION_TOKEN>```\n\n```\\naws_access_key_id = <AWS_ACCESS_KEY_ID>\\naws_secret_access_key = <AWS_SECRET_ACCESS_KEY>\\naws_session_token = <AWS_SESSION_TOKEN\\n```\n\n##### **5.2.2定义任务**\n\n进入控制台 ECS 服务界面,从左侧导航菜单原则任务定义,选择创建新任务定义\n\n![image.png](https://dev-media.amazoncloud.cn/8bfd5bf441af475bae1571e70adaa3e0_image.png)\n\n进入控制台 ECS 服务界面,选择 EXTERNAL。\n\n![image.png](https://dev-media.amazoncloud.cn/a5f668e452e041a8b12d0080c47c936a_image.png)\n\n选择创建的任务角色,网络模式选择主机。\n\n![image.png](https://dev-media.amazoncloud.cn/0be986e8949a48f983edc88a39d5b089_image.png)\n\n内存和 CPU 设置为 1024。\n\n![image.png](https://dev-media.amazoncloud.cn/4eafa9704a3f41f0949dd88746cc04c1_image.png)\n\n点击添加卷。\n\n![image.png](https://dev-media.amazoncloud.cn/83bc9a7d9f414757b22c7d3d7b088ac1_image.png)\n\n在弹出页面中添加 Amazon 访问凭证的径/root/.aws/credentials。\n\n![image.png](https://dev-media.amazoncloud.cn/931bb05be6d4462e849399bf25a696d3_image.png)\n\n点击添加容器,进入容器添加画面。\n\n![image.png](https://dev-media.amazoncloud.cn/6794f056eb824b2b8d7d80c669a36dbc_image.png)\n\n输入容器名和映像地址 public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest。\n\n![image.png](https://dev-media.amazoncloud.cn/a96b29403c2540f0b8b71d76750e39c4_image.png)\n\n输入访问 Amazon 凭证及 PROVISION 环境变量,值为 true。\n\n![image.png](https://dev-media.amazoncloud.cn/0dd36826a5a74610aa3b79b50feeeb52_image.png)\n\n设置存储挂载点,选择挂载卷,输入容器中 Amazon 凭证的挂载路径 /root/.aws/credentials,完成任务定义。\n\n![image.png](https://dev-media.amazoncloud.cn/0e3dfebbc5ff4588b4949b26549788d4_image.png)\n\n也可以通过 JSON 文件配置任务,代码如下。\n\n```\\n{\\n \\"requiresCompatibilities\\": [\\n \\"EXTERNAL\\"\\n ],\\n \\"containerDefinitions\\": [\\n {\\n \\"name\\": \\"greengrassv2\\",\\n \\"image\\": \\"public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest\\",\\n \\"resourceRequirements\\": null,\\n \\"essential\\": true,\\n \\"portMappings\\": [],\\n \\"environment\\": [\\n {\\n \\"name\\": \\"AWS_ACCESS_KEY_ID\\",\\n \\"value\\": \\"<AWS_ACCESS_KEY_ID>\\"\\n },\\n {\\n \\"name\\": \\"AWS_SECRET_ACCESS_KEY\\",\\n \\"value\\": \\"<AWS_SECRET_ACCESS_KEY>\\"\\n },\\n {\\n \\"name\\": \\"AWS_SESSION_TOKEN\\",\\n \\"value\\": \\"<AWS_SESSION_TOKEN>\\"\\n },\\n {\\n \\"name\\": \\"AWS_REGION\\",\\n \\"value\\": \\"<AWS_REGION>\\"\\n },\\n {\\n \\"name\\": \\"PROVISION\\",\\n \\"value\\": \\"true\\"\\n }\\n ],\\n \\"environmentFiles\\": [],\\n \\"secrets\\": null,\\n \\"mountPoints\\": [\\n {\\n \\"sourceVolume\\": \\"aws-credentials\\",\\n \\"containerPath\\": \\"/root/.aws/credentials\\",\\n \\"readOnly\\": \\"\\"\\n }\\n ],\\n \\"volumesFrom\\": null,\\n \\"hostname\\": null,\\n \\"user\\": null,\\n \\"workingDirectory\\": null,\\n \\"extraHosts\\": null,\\n \\"logConfiguration\\": null,\\n \\"ulimits\\": null,\\n \\"dockerLabels\\": null,\\n \\"dependsOn\\": null,\\n \\"repositoryCredentials\\": {\\n \\"credentialsParameter\\": \\"\\"\\n }\\n }\\n ],\\n \\"volumes\\": [\\n {\\n \\"host\\": {\\n \\"sourcePath\\": \\"/root/.aws/credentials\\"\\n },\\n \\"name\\": \\"aws-credentials\\"\\n }\\n ],\\n \\"networkMode\\": \\"host\\",\\n \\"memory\\": \\"1024\\",\\n \\"cpu\\": \\"1024\\",\\n \\"placementConstraints\\": [],\\n \\"family\\": \\"greengrassv2\\",\\n \\"taskRoleArn\\": \\"arn:aws:iam::804077508687:role/ECSTaskRole\\",\\n \\"executionRoleArn\\": \\"arn:aws:iam::804077508687:role/ECSTaskRole\\",\\n\\"tags\\": []\\n}\\n```\n\n##### **5.2.3 运行任务**\n\n在 ECS 服务界面的任务子页签中,选择运行新任务。\n\n![image.png](https://dev-media.amazoncloud.cn/60e1f5d19ae445f4ba911196f157f973_image.png)\n\n启动类型选择 EXTERNAL。\n\n![image.png](https://dev-media.amazoncloud.cn/49b8ab12d5ec4438a2568d5b0202baf4_image.png)\n\n修改环境变量参数或保持任务定义的默认设置。\n\n![image.png](https://dev-media.amazoncloud.cn/cd2e5a0b91e846ff9a7e07229a83769e_image.png)\n\n启动任务,可以看到任务列表里在边缘服务器上运行新的 greengrass \n任务。\n\n![image.png](https://dev-media.amazoncloud.cn/447257cc191a4f56859d623a90782d15_image.png)\n\n在 Amazon 控制台 IOT 的服务界面中,点击左侧导航菜单的Greengrass 的核心设备,可以看到刚才注册成功的 Greengrass 核心设备。\n\n![image.png](https://dev-media.amazoncloud.cn/e3ee7d4730da4affad4aa8a55abd7acf_image.png)\n\n#### **5.3 部署示例应用**\n\n在本地终端,编写 Greengrass 组建 hello_world.py 脚本如下:\n\n```\\nimport sys\\nimport datetime\\n\\nmessage = \\"Hello, %s! Current time: %s.\\" % (sys.argv[1], datetime.datetime.now())\\nmessage += \\" Greetings from your first Greengrass component.\\"\\n# Print the message to stdout.\\nprint(message)\\n\\n# Append the message to the log file.\\nwith open('/tmp/Greengrass_HelloWorld.log', 'a') as f:\\n print(message, file=f)\\n创建一个 S3存储桶用于存放 Greengrass 组件,存储桶名为 GREEGRASS-EXAMPLE-BUCKET。\\n\\naws s3 mb s3:// GREEGRASS-EXAMPLE-BUCKET \\naws s3 cp hello_world.py \\\\\\n s3://GREEGRASS-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py\\n```\n\n设置 IAM 权限,允许核心设备的 ECSTaskRole 访问 S3 存储桶中的组件对象。\n\n从 Amazon 控制台进入 IoT 服务页面,点击 Greengrass 设备的组件,点击创建组件。\n\n![image.png](https://dev-media.amazoncloud.cn/bb65c910f56342188adec8801df0eb96_image.png)\n\n在创建组件页面中,选择 JSON 格式,输入组件配置信息。\n\n![image.png](https://dev-media.amazoncloud.cn/d120b93de5384c8fa54ab00e20e4c809_image.png)\n\n配置信息代码如下:\n\n```\\n{\\n \\"RecipeFormatVersion\\": \\"2020-01-25\\",\\n \\"ComponentName\\": \\"com.example.HelloWorld\\",\\n \\"ComponentVersion\\": \\"1.0.0\\",\\n \\"ComponentDescription\\": \\"My first Greengrass component.\\",\\n \\"ComponentPublisher\\": \\"Amazon\\",\\n \\"ComponentConfiguration\\": {\\n \\"DefaultConfiguration\\": {\\n \\"Message\\": \\"world\\"\\n }\\n },\\n \\"Manifests\\": [\\n {\\n \\"Platform\\": {\\n \\"os\\": \\"linux\\"\\n },\\n \\"Lifecycle\\": {\\n \\"Run\\": \\"python3 -u {artifacts:path}/hello_world.py '{configuration:/Message}'\\"\\n },\\n \\"Artifacts\\": [\\n {\\n \\"URI\\": \\"s3://GREENGRASS-DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py\\"\\n }\\n ]\\n }\\n ]\\n}\\n```\n\n在 Iot Greengrass 导航菜单,点击部署,进入部署页面。\n\n![image.png](https://dev-media.amazoncloud.cn/951ce218f4764fdf902aff2c85717531_image.png)\n\n输入部署名和,目标类型输入创建的 Greengrass 设备名,点击下一步。\n\n![image.png](https://dev-media.amazoncloud.cn/8404088e73cb42348f69a38343541815_image.png)\n\n选择已定义的 helloworld 组件,配置策略采用默认,完成部署创建。\n\n![image.png](https://dev-media.amazoncloud.cn/a9601f31157240f6a031ec1b63135dcb_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/0b041c62b30445468863609a63c4d823_image.png)\n\n部署完成后,可以在 Greengrass 设置的组件列表中看到已安装的组件。\n\nSSH 登录 Greengrass 设备,进入 Greengrass 容器,通过以下命令可以查看输出信息。\n\ntail -f /tmp/Greengrass_HelloWorld.log\n\n### **6. 总结**\n\n本文介绍了基于 ECS Anywhere 的 IoT 平台参考架构,利用 ECS Anywhere 在边缘设备上容器化部署 Greengrass,并在 Greengrass 上部署组件,而从简化边缘设备管理和应用部署,用户可基于此扩展功能、构建基于容器的云边一体 IoT 平台。\n\n### **本篇作者**\n\n![image.png](https://dev-media.amazoncloud.cn/a058e9d1fe0e437289227f2999e41ec9_image.png)\n\n#### **姜可**\n\n亚马逊云科技资深解决方案架构师,负责协助客户业务系统上云的解决方案架构设计和咨询,现致力于 DevOps、IoT、[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)相关领域的研究。在加入亚马逊云科技之前,曾在金融、制造、政府等行业耕耘多年,对相关行业解决方案和架构有很深的理解。","render":"<h3><a id=\\"1_0\\"></a><strong>1.概述</strong></h3>\\n<p>亚马逊云科技提供了完备的IoT服务能力,涵盖设备服务、连接和控制服务以及云端分析服务,是快速构建安全可靠、可扩展的 IoT 平台的常见选择。Amazon IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。Amazon ECS Anywhere提供的混合云容器服务。</p>\n<p>本文将提出一种基于 ECS Anywhere 构建容器化云边统一管理的IoT平台参考架构,介绍了如何利用 ECS Anywhere 在边缘设备上容器化部署 Greengrass,并在 Greengrass 上部署组件,帮助用户简化 IoT 设备管理,从而构建云边一体的 IoT 平台。</p>\n<h3><a id=\\"2ECS_Anywhere_5\\"></a><strong>2.ECS Anywhere</strong></h3>\\n<p>Amazon Elastic Container Service (ECS) Anywhere 是亚马逊云科技自研的容器管理平台 ECS 的扩展功能,将云端的容器管理能力延伸到本地数据中心和边缘端,是利用容器技术构建云边一体 IoT 平台的理想选择。ECS Anywhere 为用户提供了一个完全托管的容器编排服务,使客户能够使用与目前在 Amazon ECS 中所用的相同 API、集群管理、工作负载计划、监控和部署流水线在本地运行和管理容器化应用程序。通过将服务器或实例连接到托管 Amazon ECS 控制平面,客户可以在自己的基础设施上使用 Amazon ECS Anywhere。使用 Amazon ECS Anywhere,客户可以在任何客户管理的实例上部署和管理容器化应用程序,而无需在本地手动安装、操作和管理容器编排软件。</p>\n<h3><a id=\\"3IoT_Greengrass_8\\"></a><strong>3.IoT Greengrass</strong></h3>\\n<p>Amazon IoT Greengrass 边缘运行时和云服务,可帮助您在设备上构建、部署和管理 IoT 应用。使用 IoT Greengrass 来构建软件,使设备能够对其生成的数据进行本地操作,基于机器学习模型运行预测,以及过滤和聚合设备数据。可将 Amazon 服务扩展至物理设备,以便在边缘侧操作生成的数据,同时仍可将云用于管理、分析和持久存储。可确保设备不仅可以快速响应本地事件,还能在连接不稳定时正常运行。可以编写自定义软件,可在本地设备上运行的 Amazon Lambda 函数和容器应用。Amazon IoT Greengrass 也可运行在容器中。</p>\n<h3><a id=\\"4_ECS_Anywhere__IoT__11\\"></a><strong>4.基于 ECS Anywhere 的 IoT 平台参考架构</strong></h3>\\n<p>在 ECS 中统一管理服务端和边缘端的设备和容器任务,通过 ECS Anywhere 在边缘端容器中部署 Greengrass 和其他边缘应用,通过云端 IoT 控制台管理连接 Greengrass,管理 Greengrass 中的组件和应用。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/9679c7e0d6364c73a2ca4ae659779bca_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"5_16\\"></a><strong>5.构建步骤</strong></h4>\\n<p>(本文将用一台 EC2 服务器模拟边缘服务器,操作系统为 ubuntu20,机型为 T3.large ,磁盘 EBS50G。)</p>\n<p>使用 ECS Anywhere 在边缘部署 IoT Greengrass 及应用, 具体构建步骤如下:</p>\n<ul>\\n<li>部署 ECS Anywhere</li>\n<li>部署 Greengrass</li>\n<li>部署应用</li>\n</ul>\\n<h4><a id=\\"51_ECS_Anywhere_25\\"></a><strong>5.1部署 ECS Anywhere</strong></h4>\\n<p>ECS Anywhere 部署架构图如下所示。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/167267f8022949a9ad7c1db6c3c3c7b6_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"511__ECS__30\\"></a><strong>5.1.1 创建 ECS 集群</strong></h5>\\n<p>进入 ECS 服务,点击创建集群。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/ad6f7608a9634a98ae58d026cd72bf23_image.png\\" alt=\\"image.png\\" /></p>\n<p>选择 EC2 Linux+ 联网模版。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/517764340008489a87aee48373cd0d6b_image.png\\" alt=\\"image.png\\" /></p>\n<p>输入集群名,可以选择创建空集群或者创建有实例的集群。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/137b4310a33645cca80496575e0a1d59_image.png\\" alt=\\"image.png\\" /></p>\n<p>如果为非空集群,实例数量输入 2,网络设置可选已有 VPC 和子网,也可以新建 VPC 。其他设置默认,点击创建集群。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/cd2fd9a27c9845e293ba14e8a83b1ade_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"512__48\\"></a><strong>5.1.2 注册边缘服务器</strong></h5>\\n<p>进入新创建的 ECS 集群,选择 ECS 实例子页签,点击注册 External 实例。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/eb1a029325fa4c1c99c57c2bd96c2a74_image.png\\" alt=\\"image.png\\" /></p>\n<p>选择实例数量,实例角色新建,点击生成注册命令。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/9a68cacc7b08425aa3ab274150006537_image.png\\" alt=\\"image.png\\" /></p>\n<p>复制注册命令。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/2bdf36b8449841daae9843c835073af0_image.png\\" alt=\\"image.png\\" /></p>\n<p>以 root 身份运行脚本将在边缘服务器上安装ECS代理和SSM代理。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/334b97e0665c4ef0aec890c3078e7edf_image.png\\" alt=\\"image.png\\" /></p>\n<p>执行完毕后,SSM 代理和 ECS 代理将在边缘服务器上运行,在 Amazon 控制台 ECS 服务界面的 ECS 示例标签可以看到注册成功的外部实例。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6045e8c597b3436391b4c64faa8ab24c_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"52__Greengrass_70\\"></a><strong>5.2 部署 Greengrass</strong></h4>\\n<h5><a id=\\"521_72\\"></a><strong>5.2.1创建访问凭证</strong></h5>\\n<p>SSH登录到边缘服务器,创建 greengrass 容器中访问 Amazon IoT Core 的访问凭证</p>\n<pre><code class=\\"lang-\\">vi /root/.aws/credentials\\n</code></pre>\\n<p>输入以下内容,其中<code> &lt;AWS_ACCESS_KEY_ID&gt;</code>和<code> &lt;AWS_SECRET_ACCESS_KEY&gt;</code>需要替换为访问 AK、SK,如果为临时凭证还需要替换<code>&lt;AWS_SESSION_TOKEN&gt;</code></p>\\n<pre><code class=\\"lang-\\">aws_access_key_id = &lt;AWS_ACCESS_KEY_ID&gt;\\naws_secret_access_key = &lt;AWS_SECRET_ACCESS_KEY&gt;\\naws_session_token = &lt;AWS_SESSION_TOKEN\\n</code></pre>\\n<h5><a id=\\"522_90\\"></a><strong>5.2.2定义任务</strong></h5>\\n<p>进入控制台 ECS 服务界面,从左侧导航菜单原则任务定义,选择创建新任务定义</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/8bfd5bf441af475bae1571e70adaa3e0_image.png\\" alt=\\"image.png\\" /></p>\n<p>进入控制台 ECS 服务界面,选择 EXTERNAL。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/a5f668e452e041a8b12d0080c47c936a_image.png\\" alt=\\"image.png\\" /></p>\n<p>选择创建的任务角色,网络模式选择主机。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0be986e8949a48f983edc88a39d5b089_image.png\\" alt=\\"image.png\\" /></p>\n<p>内存和 CPU 设置为 1024。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/4eafa9704a3f41f0949dd88746cc04c1_image.png\\" alt=\\"image.png\\" /></p>\n<p>点击添加卷。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/83bc9a7d9f414757b22c7d3d7b088ac1_image.png\\" alt=\\"image.png\\" /></p>\n<p>在弹出页面中添加 Amazon 访问凭证的径/root/.aws/credentials。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/931bb05be6d4462e849399bf25a696d3_image.png\\" alt=\\"image.png\\" /></p>\n<p>点击添加容器,进入容器添加画面。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6794f056eb824b2b8d7d80c669a36dbc_image.png\\" alt=\\"image.png\\" /></p>\n<p>输入容器名和映像地址 public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/a96b29403c2540f0b8b71d76750e39c4_image.png\\" alt=\\"image.png\\" /></p>\n<p>输入访问 Amazon 凭证及 PROVISION 环境变量,值为 true。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0dd36826a5a74610aa3b79b50feeeb52_image.png\\" alt=\\"image.png\\" /></p>\n<p>设置存储挂载点,选择挂载卷,输入容器中 Amazon 凭证的挂载路径 /root/.aws/credentials,完成任务定义。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0e3dfebbc5ff4588b4949b26549788d4_image.png\\" alt=\\"image.png\\" /></p>\n<p>也可以通过 JSON 文件配置任务,代码如下。</p>\n<pre><code class=\\"lang-\\">{\\n &quot;requiresCompatibilities&quot;: [\\n &quot;EXTERNAL&quot;\\n ],\\n &quot;containerDefinitions&quot;: [\\n {\\n &quot;name&quot;: &quot;greengrassv2&quot;,\\n &quot;image&quot;: &quot;public.ecr.aws/q3k3q7c1/aws-iot-greengrass-v2:latest&quot;,\\n &quot;resourceRequirements&quot;: null,\\n &quot;essential&quot;: true,\\n &quot;portMappings&quot;: [],\\n &quot;environment&quot;: [\\n {\\n &quot;name&quot;: &quot;AWS_ACCESS_KEY_ID&quot;,\\n &quot;value&quot;: &quot;&lt;AWS_ACCESS_KEY_ID&gt;&quot;\\n },\\n {\\n &quot;name&quot;: &quot;AWS_SECRET_ACCESS_KEY&quot;,\\n &quot;value&quot;: &quot;&lt;AWS_SECRET_ACCESS_KEY&gt;&quot;\\n },\\n {\\n &quot;name&quot;: &quot;AWS_SESSION_TOKEN&quot;,\\n &quot;value&quot;: &quot;&lt;AWS_SESSION_TOKEN&gt;&quot;\\n },\\n {\\n &quot;name&quot;: &quot;AWS_REGION&quot;,\\n &quot;value&quot;: &quot;&lt;AWS_REGION&gt;&quot;\\n },\\n {\\n &quot;name&quot;: &quot;PROVISION&quot;,\\n &quot;value&quot;: &quot;true&quot;\\n }\\n ],\\n &quot;environmentFiles&quot;: [],\\n &quot;secrets&quot;: null,\\n &quot;mountPoints&quot;: [\\n {\\n &quot;sourceVolume&quot;: &quot;aws-credentials&quot;,\\n &quot;containerPath&quot;: &quot;/root/.aws/credentials&quot;,\\n &quot;readOnly&quot;: &quot;&quot;\\n }\\n ],\\n &quot;volumesFrom&quot;: null,\\n &quot;hostname&quot;: null,\\n &quot;user&quot;: null,\\n &quot;workingDirectory&quot;: null,\\n &quot;extraHosts&quot;: null,\\n &quot;logConfiguration&quot;: null,\\n &quot;ulimits&quot;: null,\\n &quot;dockerLabels&quot;: null,\\n &quot;dependsOn&quot;: null,\\n &quot;repositoryCredentials&quot;: {\\n &quot;credentialsParameter&quot;: &quot;&quot;\\n }\\n }\\n ],\\n &quot;volumes&quot;: [\\n {\\n &quot;host&quot;: {\\n &quot;sourcePath&quot;: &quot;/root/.aws/credentials&quot;\\n },\\n &quot;name&quot;: &quot;aws-credentials&quot;\\n }\\n ],\\n &quot;networkMode&quot;: &quot;host&quot;,\\n &quot;memory&quot;: &quot;1024&quot;,\\n &quot;cpu&quot;: &quot;1024&quot;,\\n &quot;placementConstraints&quot;: [],\\n &quot;family&quot;: &quot;greengrassv2&quot;,\\n &quot;taskRoleArn&quot;: &quot;arn:aws:iam::804077508687:role/ECSTaskRole&quot;,\\n &quot;executionRoleArn&quot;: &quot;arn:aws:iam::804077508687:role/ECSTaskRole&quot;,\\n&quot;tags&quot;: []\\n}\\n</code></pre>\\n<h5><a id=\\"523__210\\"></a><strong>5.2.3 运行任务</strong></h5>\\n<p>在 ECS 服务界面的任务子页签中,选择运行新任务。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/60e1f5d19ae445f4ba911196f157f973_image.png\\" alt=\\"image.png\\" /></p>\n<p>启动类型选择 EXTERNAL。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/49b8ab12d5ec4438a2568d5b0202baf4_image.png\\" alt=\\"image.png\\" /></p>\n<p>修改环境变量参数或保持任务定义的默认设置。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/cd2e5a0b91e846ff9a7e07229a83769e_image.png\\" alt=\\"image.png\\" /></p>\n<p>启动任务,可以看到任务列表里在边缘服务器上运行新的 greengrass<br />\\n任务。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/447257cc191a4f56859d623a90782d15_image.png\\" alt=\\"image.png\\" /></p>\n<p>在 Amazon 控制台 IOT 的服务界面中,点击左侧导航菜单的Greengrass 的核心设备,可以看到刚才注册成功的 Greengrass 核心设备。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/e3ee7d4730da4affad4aa8a55abd7acf_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"53___233\\"></a><strong>5.3 部署示例应用</strong></h4>\\n<p>在本地终端,编写 Greengrass 组建 hello_world.py 脚本如下:</p>\n<pre><code class=\\"lang-\\">import sys\\nimport datetime\\n\\nmessage = &quot;Hello, %s! Current time: %s.&quot; % (sys.argv[1], datetime.datetime.now())\\nmessage += &quot; Greetings from your first Greengrass component.&quot;\\n# Print the message to stdout.\\nprint(message)\\n\\n# Append the message to the log file.\\nwith open('/tmp/Greengrass_HelloWorld.log', 'a') as f:\\n print(message, file=f)\\n创建一个 S3存储桶用于存放 Greengrass 组件,存储桶名为 GREEGRASS-EXAMPLE-BUCKET。\\n\\naws s3 mb s3:// GREEGRASS-EXAMPLE-BUCKET \\naws s3 cp hello_world.py \\\\\\n s3://GREEGRASS-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py\\n</code></pre>\\n<p>设置 IAM 权限,允许核心设备的 ECSTaskRole 访问 S3 存储桶中的组件对象。</p>\n<p>从 Amazon 控制台进入 IoT 服务页面,点击 Greengrass 设备的组件,点击创建组件。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/bb65c910f56342188adec8801df0eb96_image.png\\" alt=\\"image.png\\" /></p>\n<p>在创建组件页面中,选择 JSON 格式,输入组件配置信息。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/d120b93de5384c8fa54ab00e20e4c809_image.png\\" alt=\\"image.png\\" /></p>\n<p>配置信息代码如下:</p>\n<pre><code class=\\"lang-\\">{\\n &quot;RecipeFormatVersion&quot;: &quot;2020-01-25&quot;,\\n &quot;ComponentName&quot;: &quot;com.example.HelloWorld&quot;,\\n &quot;ComponentVersion&quot;: &quot;1.0.0&quot;,\\n &quot;ComponentDescription&quot;: &quot;My first Greengrass component.&quot;,\\n &quot;ComponentPublisher&quot;: &quot;Amazon&quot;,\\n &quot;ComponentConfiguration&quot;: {\\n &quot;DefaultConfiguration&quot;: {\\n &quot;Message&quot;: &quot;world&quot;\\n }\\n },\\n &quot;Manifests&quot;: [\\n {\\n &quot;Platform&quot;: {\\n &quot;os&quot;: &quot;linux&quot;\\n },\\n &quot;Lifecycle&quot;: {\\n &quot;Run&quot;: &quot;python3 -u {artifacts:path}/hello_world.py '{configuration:/Message}'&quot;\\n },\\n &quot;Artifacts&quot;: [\\n {\\n &quot;URI&quot;: &quot;s3://GREENGRASS-DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py&quot;\\n }\\n ]\\n }\\n ]\\n}\\n</code></pre>\\n<p>在 Iot Greengrass 导航菜单,点击部署,进入部署页面。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/951ce218f4764fdf902aff2c85717531_image.png\\" alt=\\"image.png\\" /></p>\n<p>输入部署名和,目标类型输入创建的 Greengrass 设备名,点击下一步。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/8404088e73cb42348f69a38343541815_image.png\\" alt=\\"image.png\\" /></p>\n<p>选择已定义的 helloworld 组件,配置策略采用默认,完成部署创建。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/a9601f31157240f6a031ec1b63135dcb_image.png\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0b041c62b30445468863609a63c4d823_image.png\\" alt=\\"image.png\\" /></p>\n<p>部署完成后,可以在 Greengrass 设置的组件列表中看到已安装的组件。</p>\n<p>SSH 登录 Greengrass 设备,进入 Greengrass 容器,通过以下命令可以查看输出信息。</p>\n<p>tail -f /tmp/Greengrass_HelloWorld.log</p>\n<h3><a id=\\"6__318\\"></a><strong>6. 总结</strong></h3>\\n<p>本文介绍了基于 ECS Anywhere 的 IoT 平台参考架构,利用 ECS Anywhere 在边缘设备上容器化部署 Greengrass,并在 Greengrass 上部署组件,而从简化边缘设备管理和应用部署,用户可基于此扩展功能、构建基于容器的云边一体 IoT 平台。</p>\n<h3><a id=\\"_322\\"></a><strong>本篇作者</strong></h3>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/a058e9d1fe0e437289227f2999e41ec9_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"_326\\"></a><strong>姜可</strong></h4>\\n<p>亚马逊云科技资深解决方案架构师,负责协助客户业务系统上云的解决方案架构设计和咨询,现致力于 DevOps、IoT、机器学习相关领域的研究。在加入亚马逊云科技之前,曾在金融、制造、政府等行业耕耘多年,对相关行业解决方案和架构有很深的理解。</p>\n"}
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭