运行Amazon IoT Greengrass在 Docker 容器中,具有自动资源调配 - Amazon IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

运行Amazon IoT Greengrass在 Docker 容器中,具有自动资源调配

本教程介绍如何安装和运行Amazon IoT GreengrassDocker 容器中的核心软件,并自动配置Amazon资源和地方发展工具. 您可以使用此开发环境来探索Amazon IoT Greengrass功能。

Prerequisites

要完成本教程,您需要满足以下条件。

配置 Amazon 凭证

在此步骤中,您将在主机上创建包含Amazon安全凭证。当您运行Amazon IoT GreengrassDocker 映像,您必须将包含此凭据文件的文件夹挂载到/root/.aws/在 Docker 容器中。这些区域有:Amazon IoT Greengrass安装程序使用这些凭据在Amazon Web Services 账户。有关安装程序自动配置资源所需的最小 IAM 策略的信息,请参阅安装程序用于配置资源的最小 IAM 策略

  1. 检索以下各项之一。

  2. 创建放置凭据文件的文件夹。

    mkdir ./greengrass-v2-credentials
  3. 使用文本编辑器创建名为credentials中的./greengrass-v2-credentialsfolder。

    例如,您可以运行以下命令来使用 GNU nano 创建credentials文件。

    nano ./greengrass-v2-credentials/credentials
  4. 添加您的Amazon凭证添加到credentials文件,格式如下。

    [default] aws_access_key_id = AKIAIOSFODNN7EXAMPLE aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

    Includeaws_session_token仅用于临时证书。

注意

从主机中删除凭据文件后启动Amazon IoT Greengrass容器。如果您不删除凭据文件,则您的Amazon凭证将保持挂载在容器中。有关更多信息,请参阅 运行Amazon IoT Greengrass容器中的核心软件

创建一个环境文件

本教程使用环境文件来设置环境变量,这些变量将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。您还可以使用-e或者--envargument在您的docker run命令在 Docker 容器中设置环境变量,也可以在一个environment数据块中的docker-compose.yml文件。

  1. 使用文本编辑器创建名为.env

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建.env在当前目录中。

    nano .env
  2. 将以下内容复制到文件中。

    GGC_ROOT_PATH=/greengrass/v2 AWS_REGION=region PROVISION=true THING_NAME=MyGreengrassCore THING_GROUP_NAME=MyGreengrassCoreGroup TES_ROLE_NAME=GreengrassV2TokenExchangeRole TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias COMPONENT_DEFAULT_USER=ggc_user:ggc_group DEPLOY_DEV_TOOLS=true

    然后,替换以下值。

    • /绿草/v2。Greengrass 根文件夹要用于安装。您可以使用GGC_ROOT环境变量来设置此值。

    • 区域。这些区域有:Amazon Web Services 区域您创建资源时所在的位置。

    • 我的绿色草原。Amazon IoT 事物的名称。如果事物不存在,安装程序将创建它。安装程序将下载证书以作为Amazon IoT事物。

    • 我的绿色草原。的名称Amazon IoT事物组。如果事物组不存在,安装程序会创建它并将事物添加到它中。如果事物组存在并且具有活动部署,则核心设备会下载并运行部署指定的软件。

    • 绿草 V2 代码交换器。替换为 IAM 令牌交换角色的名称,该角色允许 Greengrass 核心设备获取临时Amazon凭证。如果角色不存在,安装程序将创建该角色,并创建并附加名为绿草 V2 代码交换器访问。有关更多信息,请参阅 授权核心设备与Amazon服务

    • 绿色草芯代币交换别名。令牌交换角色别名。如果角色别名不存在,安装程序将创建该别名并将其指向您指定的 IAM 令牌交换角色。有关更多信息,请参阅

    注意

    设置DEPLOY_DEV_TOOLS环境变量true部署了本地开发工具,这些工具可以在 Docker 容器内部启用自定义组件开发。不要将此环境变量用于生产设备。

运行Amazon IoT Greengrass容器中的核心软件

本教程介绍如何将最新的Amazon IoT GreengrassDocker Hub 中的 Docker 镜像并启动 Docker 容器。您可以使用 Docker CLI 或 Docker 撰写 CLI 运行Amazon IoT GreengrassDocker 容器中的核心软件映像。

Docker
  1. 运行以下命令来拉取最新的Amazon IoT GreengrassDocker Hub 中的 Docker 镜像。

    docker pull amazon/aws-iot-greengrass:latest
  2. 运行以下命令来启动 Docker 容器。此命令运行您从 Docker 中心下载的 Greengrass 码头映像。如果您使用来自其他源的 Docker 映像,请将亚马逊/aws-Iot-绿草: 最新替换为 Docker 镜像的名称。

    docker run --rm --init -it --name aws-iot-greengrass \ -v ./greengrass-v2-credentials:/root/.aws/:ro \ --env-file .env \ amazon/aws-iot-greengrass:latest

    此示例命令使用以下参数码头运行

    • --rm。 在容器退出时清理容器。

    • --init。 在容器中使用初始化进程。

      注意

      这些区域有:--init是必需参数才能关闭Amazon IoT Greengrass当您停止 Docker 容器时的核心软件。

    • -it。 (可选)将 Docker 容器作为交互进程在前台运行。您可以将替换为-d参数来在分离模式下运行 Docker 容器。有关更多信息,请参阅 。分离与前景在 Docker 文档中。

    • --name。 运行名为aws-iot-greengrass

    • -v。 将卷挂载到 Docker 容器中,以使凭据文件可用于Amazon IoT Greengrass在容器内运行。有关卷的更多信息,请参阅Docker 文档

    • --env-file。 指定环境文件以设置将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。此参数仅在使用环境文件来设置环境变量

    注意

    要以更高的安全性运行 Docker 容器,可以使用--cap-drop--cap-add参数为您的容器有选择地启用 Linux 功能。有关更多信息,请参阅 。运行时权限和 Linux 功能在 Docker 文档中。

  3. 删除凭据文件./greengrass-v2-credentials

Docker Compose
  1. 使用文本编辑器创建 Docker 撰写文件,名为docker-compose.yml

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建docker-compose.yml在当前目录中。

    nano docker-compose.yml
    注意

    您也可以下载和使用最新版本的Amazon-提供的撰写文件来自GitHub

  2. 将以下内容添加到撰写文件中。您的文件应类似于以下示例。此示例指定您从 Docker 中心下载的 Greengrass 码头映像。如果您使用来自其他源的 Docker 映像,请将亚马逊/aws-Iot-绿草: 最新替换为 Docker 镜像的名称。

    version: '3.7' services: greengrass: init: true build: context: . container_name: aws-iot-greengrass image: amazon/aws-iot-greengrass:latest volumes: - ./greengrass-v2-credentials:/root/.aws/:ro
    注意

    要以更高的安全性运行 Docker 容器,您可以使用cap_dropcap_add为您的容器选择性地启用 Linux 功能。有关更多信息,请参阅 。运行时权限和 Linux 功能在 Docker 文档中。

  3. 运行以下命令,启动 Docker 容器。

    docker-compose --env-file .env -f docker-compose.yml up

    这些区域有:--env-file参数仅在使用环境文件来设置环境变量

  4. 删除凭据文件./greengrass-v2-credentials

后续步骤

Amazon IoT Greengrass核心软件现在正在 Docker 容器中运行。运行以下命令以检索当前运行容器的容器 ID。

docker ps

然后可运行以下命令来访问容器并浏览Amazon IoT Greengrass在容器内运行的核心软件。

docker exec -it container-id /bin/bash

有关创建简单组件的信息,请参阅创建您的第一个组件开始使用Amazon IoT GreengrassV2

注意

当您使用docker exec来运行 Docker 容器内的命令,那么这些命令不会记录在 Docker 日志中。要将命令记录到 Docker 日志中,请将交互式 shell 附加到 Docker 容器。有关更多信息,请参阅 将交互式 Shell 附加到 Docker 容器

这些区域有:Amazon IoT Greengrass核心日志文件称为greengrass.log并位于/greengrass/v2/logs。组件日志文件也位于同一个目录中。要将 Greengrass 日志复制到主机上的临时目录中,请运行以下命令:

docker cp container-id:/greengrass/v2/logs /tmp/logs

如果要在容器退出或被删除后保留日志,我们建议您只绑定装载/greengrass/v2/logs目录添加到主机上的临时日志目录,而不是挂载整个 Greengrass 目录。有关更多信息,请参阅 将 Greengrass 日志保留在 Docker 容器之外

停止运行中的Amazon IoT GreengrassDocker 容器,运行docker stop或者docker-compose -f docker-compose.yml stop。此操作发送SIGTERM添加到 Greengrass 进程,并关闭容器中启动的所有关联进程。Docker 容器被初始化为docker-init可执行文件作为进程 PID 1,这有助于删除剩余的僵尸进程。有关更多信息,请参阅 Docker 文档

有关解决与运行Amazon IoT Greengrass在 Docker 容器中,请参阅对 Docker 容器中的 Amazon IoT Greengrass 执行问题排查