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

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

运行Amazon IoT Greengrass在 Docker 容器中使用手动资源调配

本教程介绍如何安装和运行Amazon IoT Greengrass手动配置的 Docker 容器中的核心软件Amazon资源的费用。

先决条件

要完成本教程,您需要:

  • 一个 Amazon Web Services 账户。如果没有,请参阅设置Amazon Web Services 账户

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT GreengrassDocker 映像。本教程介绍如何拉取Amazon IoT GreengrassDocker Hub 中的 Docker 镜像。您还可以将Amazon IoT GreengrassDocker 镜像从 Amazon Elastic Container Registry (Amazon ECR) 中,从Amazon IoT GreengrassDockerfile.

  • 运行 Docker 容器的主机必须满足以下要求:

    • 具有互联网连接的基于 Linux 的操作系统。

    • Docker 引擎版本 18.09 或更高版本。

    • (可选)Docker Compose1.22 或更高版本。只有当您想使用 Docker 撰写 CLI 运行 Docker 映像时才需要 Docker 撰写。

检索Amazon IoT终端

获取Amazon IoT您的终端节点Amazon Web Services 账户,然后保存它们以便以后使用。您的设备使用这些终端节点连接到Amazon IoT. 执行以下操作:

  1. 获取Amazon IoT你的数据终端节点Amazon Web Services 账户.

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    如果请求成功,响应类似于以下示例。

    { "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com" }
  2. 获取Amazon IoT您的凭证终端节点Amazon Web Services 账户.

    aws iot describe-endpoint --endpoint-type iot:CredentialProvider

    如果请求成功,响应类似于以下示例。

    { "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com" }

创建Amazon IoT事情

Amazon IoT 事情表示连接到的设备和逻辑实体Amazon IoT. Greengrass 核心设备Amazon IoTthing. 当你将设备注册为Amazon IoT事情,该设备可以使用数字证书进行身份验证Amazon.

在本部分中,您将创建Amazon IoT表示设备的事物。

创建Amazon IoT事情

  1. 创建Amazon IoT为您的设备创建事物。在开发计算机上,运行以下命令。

    • Replace我的 GreenGrasscore要使用的东西名称。此名称也是您的 Greengrass 核心设备的名称。

      注意

      事物名称不能包含冒号(:) 字符。

    aws iot create-thing --thing-name MyGreengrassCore

    如果请求成功,响应类似于以下示例。

    { "thingName": "MyGreengrassCore", "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42" }
  2. (可选)添加Amazon IoT将事物转换到新的或现有事物组。您可以使用事物组来管理 Greengrass 核心设备的队列。将软件组件部署到设备时,可以定位单个设备或设备组。您可以使用活动的 Greengrass 部署将设备添加到事物组中,以便将该事物组的软件组件部署到该设备。执行以下操作:

    1. (可选)创建Amazon IoT事物组。

      • Replace我的 GreenGrassCoregGroup使用要创建的事物组的名称。

        注意

        事物组名称不能包含冒号(:) 字符。

      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup

      如果请求成功,响应类似于以下示例。

      { "thingGroupName": "MyGreengrassCoreGroup", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup", "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa" }
    2. 添加Amazon IoT事物组。

      • Replace我的 GreenGrasscore您的名称Amazon IoTthing.

      • Replace我的 GreenGrassCoregGroup使用事物组的名称。

      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup

      如果请求成功,命令没有任何输出。

创建事物证书

当你将设备注册为Amazon IoT事情,该设备可以使用数字证书进行身份验证Amazon. 此证书允许设备与通信Amazon IoT和Amazon IoT Greengrass.

在本节中,您将创建并下载设备可用于连接到的证书Amazon.

创建事物证书

  1. 创建一个文件夹,在其中下载证书Amazon IoTthing.

    mkdir greengrass-v2-certs
  2. 创建并下载证书Amazon IoTthing.

    aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key

    如果请求成功,响应类似于以下示例。

    { "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificatePem": "-----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw 3rrszlaEXAMPLE= -----END CERTIFICATE-----", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n" } }

    保存证书的 Amazon 资源名称 (ARN) 以便以后配置证书。

配置事物证书

将事物证书附加到Amazon IoT您之前创建的事物,并添加Amazon IoT将策略定义到证书Amazon IoT核心设备的权限。

配置事物的证书

  1. 将证书附加到Amazon IoTthing.

    • Replace我的 GreenGrasscore您的名称Amazon IoTthing.

    • 将证书 Amazon 资源名称 (ARN) 替换为您在上一步中创建的证书的 ARN。

    aws iot attach-thing-principal --thing-name MyGreengrassCore --principal arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

    如果请求成功,命令没有任何输出。

  2. 创建并附加Amazon IoT定义Amazon IoT使用 Greengrass 核心设备的权限。以下策略允许访问所有 MQTT 主题和 Greengrass 操作,因此您的设备可以与需要新 Greengrass 操作的自定义应用程序和 future 的更改一起使用。您可以基于自己的使用案例来限制此策略。有关更多信息,请参阅 最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备

    如果你之前设置过 Greengrass 核心设备,你可以连接它Amazon IoT策略而不是创建一个新的。

    执行以下操作:

    1. 创建一个包含Amazon IoTGreengrass 核心设备所需的策略文档。

      例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

      nano greengrass-v2-iot-policy.json

      将以下 JSON 复制到该文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect", "greengrass:*" ], "Resource": [ "*" ] } ] }
    2. 创建Amazon IoT策略文档中的策略。

      • ReplaceGreenGrassv2IOT 政策使用要创建的策略的名称。

      aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json

      如果请求成功,响应类似于以下示例。

      { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Subscribe\", \"iot:Receive\", \"iot:Connect\", \"greengrass:*\" ], \"Resource\": [ \"*\" ] } ] }", "policyVersionId": "1" }
    3. 将附加到Amazon IoT的策略Amazon IoT事情的证书。

      • ReplaceGreenGrassv2IOT 政策使用要附加的策略的名称。

      • 将目标 ARN 替换为您的证书的 ARNAmazon IoTthing.

      aws iot attach-policy --policy-name GreengrassV2IoTThingPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

      如果请求成功,命令没有任何输出。

创建令牌交换角色

Greengrass 核心设备使用 IAM 服务角色,称为令牌交换角色,授权呼叫Amazon服务。该设备使用Amazon IoT凭证提供商以获得临时性Amazon此角色的凭据,允许设备与Amazon IoT,将日志发送到亚马逊 CloudWatch 从 Amazon S3 中记录和下载自定义组件工件。有关更多信息,请参阅 授权核心设备与Amazon服务

你使用Amazon IoT 角色别名为 Greengrass 核心设备配置令牌交换角色。角色别名使您能够更改设备的令牌交换角色,但保持设备配置不变。有关更多信息,请参阅 。授予直接呼叫权限Amazon服务中的Amazon IoT Core开发人员指南.

在本部分中,您创建令牌交换 IAM 角色和Amazon IoT指向角色的角色别名。如果您已经设置了 Greengrass 核心设备,则可以使用其令牌交换角色和角色别名,而不是创建新的。然后,你配置你的设备Amazon IoT使用那个角色和别名的东西。

创建令牌交换 IAM 角色

  1. 创建 IAM 角色,您的设备可用作令牌交换角色。执行以下操作:

    1. 创建包含令牌交换角色所需的信任策略文档的文件。

      例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

      nano device-role-trust-policy.json

      将以下 JSON 复制到该文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 使用信任策略文档创建令牌交换角色。

      • ReplaceGreenGrassv2Token Exchange 角色使用要创建的 IAM 角色的名称。

      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json

      如果请求成功,响应类似于以下示例。

      { "Role": { "Path": "/", "RoleName": "GreengrassV2TokenExchangeRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole", "CreateDate": "2021-02-06T00:13:29+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }
    3. 创建一个文件,其中包含令牌交换角色所需的访问策略文档。

      例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

      nano device-role-access-policy.json

      将以下 JSON 复制到该文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
      注意

      此访问策略不允许访问 S3 存储桶中的组件工件。要部署在 Amazon S3 中定义项目的自定义组件,您必须向角色添加权限,以允许核心设备检索组件项目。有关更多信息,请参阅 允许访问 S3 存储桶以获取组件项目

      如果您还没有用于组件工件的 S3 存储桶,则可以稍后在创建存储桶后添加这些权限。

    4. 从策略文档中创建 IAM 策略。

      • ReplaceGreenGrassv2Token 交易所角色访问使用要创建的 IAM 策略的名称。

      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json

      如果请求成功,响应类似于以下示例。

      { "Policy": { "PolicyName": "GreengrassV2TokenExchangeRoleAccess", "PolicyId": "ANPAZ2YMUHYHACI7C5Z66", "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-02-06T00:37:17+00:00", "UpdateDate": "2021-02-06T00:37:17+00:00" } }
    5. 将 IAM 策略附加到令牌交换角色。

      • ReplaceGreenGrassv2Token Exchange 角色使用 IAM 角色的名称。

      • 将策略 ARN 替换为您在上一步中创建的 IAM 策略的 ARN。

      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess

      如果请求成功,命令没有任何输出。

  2. 创建Amazon IoT指向令牌交换角色的角色别名。

    • ReplaceGreenGrassCoore 令牌交换器角色别名使用要创建的角色别名的名称。

    • 将角色 ARN 替换为您在上一步中创建的 IAM 角色的 ARN。

    aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole

    如果请求成功,响应类似于以下示例。

    { "roleAlias": "GreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" }
    注意

    要创建角色别名,您必须有权将令牌交换 IAM 角色传递给Amazon IoT. 如果您在尝试创建角色别名时收到错误消息,请检查Amazon用户拥有此权限。有关更多信息,请参阅 。授予用户权限以将角色传递给Amazon服务中的Amazon Identity and Access Management用户指南.

  3. 创建并附加Amazon IoT允许您的 Greengrass 核心设备使用角色别名代入令牌交换角色的策略。如果您之前设置过 Greengrass 核心设备,则可以附加其角色别名Amazon IoT策略而不是创建一个新的。执行以下操作:

    1. (可选)创建一个包含Amazon IoT角色别名所需的策略文档。

      例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

      nano greengrass-v2-iot-role-alias-policy.json

      将以下 JSON 复制到该文件中。

      • 将资源 ARN 替换为角色别名的 ARN。

      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" } ] }
    2. 创建Amazon IoT策略文档中的策略。

      • ReplaceGreenGrassCoore 令牌交换罗利亚斯政策名称为Amazon IoT策略要创建的。

      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json

      如果请求成功,响应类似于以下示例。

      { "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy", "policyDocument": "{ \"Version\":\"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": \"iot:AssumeRoleWithCertificate\", \"Resource\": \"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\" } ] }", "policyVersionId": "1" }
    3. 将附加到Amazon IoT的策略Amazon IoT事情的证书。

      • ReplaceGreenGrassCoore 令牌交换罗利亚斯政策使用角色别名称Amazon IoT政策。

      • 将目标 ARN 替换为您的证书的 ARNAmazon IoTthing.

      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

      如果请求成功,命令没有任何输出。

将证书下载到设备

之前,您将设备的证书下载到开发计算机。在本部分中,您下载 Amazon 根证书颁发机构 (CA) 证书。然后,如果你计划运行Amazon IoT GreengrassDocker 中的核心软件与开发计算机不同的计算机上,您可以将证书复制到该主机上。这些区域有:Amazon IoT Greengrass核心软件使用这些证书连接到Amazon IoT云服务。

将证书下载到设备

  1. 在开发计算机上,下载 Amazon 根证书颁发机构 (CA) 证书。Amazon IoT默认情况下,证书与亚马逊的根 CA 证书关联。

    Linux or Unix
    sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
    Windows Command Prompt (CMD)
    curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
    PowerShell
    iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
  2. 如果你计划运行Amazon IoT GreengrassDocker 中的核心软件与开发计算机不同的设备上,请将证书复制到主机。如果在开发计算机和主机上启用了 SSH 和 SCP,则可以使用scp在开发计算机上传输证书的命令。Replace设备 IP 地址使用主机的 IP 地址。

    scp -r greengrass-v2-certs/ device-ip-address:~

创建配置文件

  1. 在主机上,创建一个放置配置文件的文件夹。

    mkdir ./greengrass-v2-config
  2. 使用文本编辑器创建名为config.yaml中的./greengrass-v2-configfolder。

    例如,您可以运行以下命令来使用 GNU nano 创建config.yaml.

    nano ./greengrass-v2-config/config.yaml
  3. 将以下 YAML 内容复制到该文件中。此部分配置文件指定了系统参数和 Greengrass 核心参数。

    --- system: certificateFilePath: "/tmp/certs/device.pem.crt" privateKeyPath: "/tmp/certs/private.pem.key" rootCaPath: "/tmp/certs/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "MyGreengrassCore" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "nucleus-version" configuration: awsRegion: "region" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com" iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"

    然后,替换以下值:

    • /tmp /Cert. 启动容器时,将下载的证书挂载到的 Docker 容器中的目录。

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

    • 我的 GreenGrasscore. Amazon IoT 事物的名称。

    • 核心版. 的版本Amazon IoT Greengrass要安装的核心软件。此值必须与您下载的 Docker 镜像或 Dockerfile 的版本匹配。如果你下载了 Greengrass Docker 图像latest标签,请使用docker inspect image-id以查看映像版本。

    • 领域. 这些区域有:Amazon Web Services 区域你在哪里创建Amazon IoT资源的费用。还必须为AWS_REGION在您的环境变量环境文件.

    • GreenGrassCoore 令牌交换器角色别名. 令牌交换角色别名。

    • 设备数据前缀. 您的前缀Amazon IoT数据终端节点。

    • 设备凭据前缀. 您的前缀Amazon IoT凭据终端节点。

创建环境文件

本教程使用环境文件来设置将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。您还可以使用-e要么--env争论在您的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=false COMPONENT_DEFAULT_USER=ggc_user:ggc_group INIT_CONFIG=/tmp/config/config.yaml

    然后,替换以下值。

    • /绿草/v2. 根文件夹的路径来安装Amazon IoT GreengrassCore 软件。

    • 领域. 这些区域有:Amazon Web Services 区域你在哪里创建Amazon IoT资源的费用。您必须指定相同的值awsRegion你的中的配置参数配置文件.

    • /tmp/config/. 启动 Docker 容器时装载配置文件的文件夹。

    注意

    您可以将DEPLOY_DEV_TOOLS环境变量true部署Greengrass CLI 组件,这使您能够在 Docker 容器内开发自定义组件。我们建议您只在开发环境中使用此组件,而不要在生产环境中使用。此组件提供了对生产环境中通常不需要的信息和操作的访问权限。通过将此组件仅部署到需要的核心设备,遵循最低特权原则。

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

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

Docker
  1. 运行以下命令以下命令以提取最新的Amazon IoT Greengrass来自 Amazon ECR 公共的 Docker 镜像。

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

    docker run --rm --init -it --name aws-iot-greengrass \ -v path/to/greengrass-v2-config:/tmp/config/:ro \ -v path/to/greengrass-v2-certs:/tmp/certs:ro \ --env-file .env \ -p 8883 \ amazon/aws-iot-greengrass:latest

    此示例命令使用以下参数:docker 运行

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

    • --init. 在容器中使用 init 进程。

      注意

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

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

    • --name. 运行名为的容器aws-iot-greengrass

    • -v. 将卷挂载到 Docker 容器中,以使配置文件和证书文件可供使用Amazon IoT Greengrass在容器内运行。

    • --env-file. (可选)指定环境文件以设置将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。仅当您创建了环境文件设置环境变量。如果您没有创建环境文件,可以使用--env直接在 Docker run 命令中设置环境变量的参数。

    • -p. (可选)将 8883 容器端口发布到主机。如果你想通过 MQTT 连接和通信,这个参数是必需的,因为Amazon IoT Greengrass使用端口 8883 进行 MQTT 流量。要打开其他端口,请使用额外的-p参数。

    注意

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

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

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

    nano docker-compose.yml
    注意

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

  2. 将以下内容添加到 “撰写” 文件中。您的文件应类似于以下示例。此示例指定了您从 Docker Hub 下载的 Greengrass Docker 映像。如果您使用来自其他来源的 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: - /path/to/greengrass-v2-config:/tmp/config/:ro - /path/to/greengrass-v2-certs:/tmp/certs:ro env_file: .env ports: - "8883:8883"

    此示例 Compose 文件中的以下参数是可选的:

    • ports— 将 8883 个容器端口发布到主机。如果您想通过 MQTT 进行连接和通信,则必须使用此参数,因为Amazon IoT Greengrass使用端口 8883 进行 MQTT 流量。

    • env_file— 指定环境文件以设置将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。只有在创建时,此参数是必需的。环境文件设置环境变量。如果您没有创建环境文件,则可以使用环境参数以直接在 Compose 文件中设置变量。

    注意

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

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

    docker-compose -f docker-compose.yml up

后续步骤

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

docker ps

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

docker exec -it container-id /bin/bash

有关创建简单组件的信息,请参阅第 4 步:在您的设备上开发和测试组件教程:Amazon IoT Greengrass V2 入门

注意

当您使用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 目录。有关更多信息,请参阅 在 Docker 容器之外保留 Greengrass 日志

若要停止运行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 执行问题排查.