下载适用于Amazon IoT Greengrass V2 的 IDT - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

下载适用于Amazon IoT Greengrass V2 的 IDT

本主题介绍了Amazon IoT Greengrass V2Amazon IoT Device Tester 的下载选项。您可以使用以下软件下载链接之一,也可以按照说明以编程方式下载 IDT。

下载该软件即表示您同意Amazon IoT Device Tester许可协议

注意

IDT 不支持由多个用户从共享位置(如 NFS 目录或 Windows 网络共享文件夹)运行。建议您将 IDT 包解压缩到本地驱动器,并在本地工作站上运行 IDT 二进制文件。

手动下载 IDT

本主题列出了 IDT forAmazon IoT Greengrass V2 的支持版本。作为最佳实践,我们建议您使用支持 V2 目标版本的最新版本的 IDT forAmazon IoT GreengrassAmazon IoT Greengrass V2。的新版本Amazon IoT Greengrass可能需要您下载新版本的 IDT forAmazon IoT Greengrass V2。如果 IDT forAmazon IoT Greengrass V2 与您正在使用的版本不兼容,则Amazon IoT Greengrass您在开始测试运行时会收到通知。

IDT v4.7.0 适用于Amazon IoT Greengrass
支持的Amazon IoT Greengrass版本:
IDT 软件下载:
  • IDT v4.7.0 搭载适用于 Linux 的测试套件 GGV2Q_2.5.0

  • IDT v4.7.0 搭载适用于 macOS 的测试套件 GGV2Q_2.5.0

  • IDT v4.7.0 搭载适用于 Windows 的测试套件 GGV2Q_2.5.0

发行说明:
  • 使您能够验证和认证运行Amazon IoT Greengrass核心软件版本 2.9.1、2.9.0、2.8.1、2.8.0、2.7.0 和 2.6.0 的设备。

  • 增加了对将 IDT 用户数据值存储在 ParameterAmazon Systems Manager Store 中并使用占位符语法将其提取到配置中的支持。

  • 次要错误修复。

测试套件版本:
GGV2Q_2.5.0
  • 2022.12.13 已发布

以编程方式下载 IDT

IDT 提供了一个 API 操作,您可以使用它来检索可通过编程方式下载 IDT 的 URL。还可以使用此 API 操作检查是否为 IDT 的最新版本。此 API 操作具有以下端点。

https://download.devicetester.iotdevicesecosystem.amazonaws.com/latestidt

要调用此 API 操作,您必须有权执行iot-device-tester:LatestIdt操作。包括您的Amazon签名并iot-device-tester用作服务名称。

API 请求

HostOs — 主机的操作系统。从以下选项中进行选择:
  • mac

  • linux

  • windows

TestSuiteType — 测试套件的类型。选择以下选项:

GGV2— 适用于Amazon IoT Greengrass V2 的 IDT

ProductVersion

(可选)Greengrass 核的版本。该服务返回该版本的 Greengrass 核心的最新兼容版本的 IDT。如果不指定此选项,则服务将返回 IDT 的最新版本。

API 响应

API 响应采用以下格式。DownloadURL包括一个 zip 文件。

{ "Success": True or False, "Message": Message, "LatestBk": { "Version": The version of the IDT binary, "TestSuiteVersion": The version of the test suite, "DownloadURL": The URL to download the IDT Bundle, valid for one hour } }

示例

您可以参考以下示例以编程方式下载 IDT。这些示例使用您存储在AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量中的证书。要遵循最佳安全实践,请不要将您的证书存储在代码中。

例 示例:使用 cURL 7.75.0 或更高版本(Mac 和 Linux)进行下载

如果您有 cURL 版本 7.75.0 或更高版本,则可以使用该aws-sigv4标志签署 API 请求。此示例使用 jq 解析响应中的下载 URL。

警告

aws-sigv4标志要求 curl GET 请求的查询参数按HostOs/ProductVersion/TestSuiteType或的顺序排列HostOs/TestSuiteType。不符合的订单将导致从 API Gateway 获取不匹配的规范字符串签名的错误。

如果包含可选参数ProductVersion,则必须使用支持的产品版本,如 Amazon IoT Greengrassv2 的Amazon IoT Device Tester支持版本中所述。

  • us-west-2 替换为您的版本Amazon Web Services 区域. 有关区域代码的列表,请参阅区域终端节点

  • linux 替换为主机的操作系统。

  • 用你的 nAmazon IoT Greengrass ucleus 版本替换 2.5.3

url=$(curl --request GET "https://download.devicetester.iotdevicesecosystem.amazonaws.com/latestidt?HostOs=linux&ProductVersion=2.5.3&TestSuiteType=GGV2" \ --user $AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY \ --aws-sigv4 "aws:amz:us-west-2:iot-device-tester" \ | jq -r '.LatestBk["DownloadURL"]') curl $url --output devicetester.zip
例 示例:使用早期版本的 cURL(Mac 和 Linux)进行下载

您可以将以下 cURL 命令与您Amazon签名和计算的签名一起使用。有关如何Amazon签名和计算签名的更多信息,请参阅对 AmazonAPI 请求进行签名。

  • linux 替换为主机的操作系统。

  • 时间戳替换为日期和时间,例如20220210T004606Z

  • 日期替换为日期,例如20220210

  • 替换AWSRegion为你的Amazon Web Services 区域. 有关区域代码的列表,请参阅区域终端节点

  • AWSSignature替换为您生成的Amazon签名

curl --location --request GET 'https://download.devicetester.iotdevicesecosystem.amazonaws.com/latestidt?HostOs=linux&TestSuiteType=GGV2' \ --header 'X-Amz-Date: Timestamp \ --header 'Authorization: AWS4-HMAC-SHA256 Credential=$AWS_ACCESS_KEY_ID/Date/AWSRegion/iot-device-tester/aws4_request, SignedHeaders=host;x-amz-date, Signature=AWSSignature'
例 示例:使用 Python 脚本进行下载

此示例使用 Python 请求库。此示例改编自 Python 示例,改编为《Amazon一般参考》中的Amazon API 请求签名

  • us-west-2 替换为您的区域。有关区域代码的列表,请参阅区域终端节点

  • linux 替换为主机的操作系统。

# Copyright 2010-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # This file is licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. A copy of the #License is located at # # http://aws.amazon.com/apache2.0/ # # This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS # OF ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. # See: http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html # This version makes a GET request and passes the signature # in the Authorization header. import sys, os, base64, datetime, hashlib, hmac import requests # pip install requests # ************* REQUEST VALUES ************* method = 'GET' service = 'iot-device-tester' host = 'download.devicetester.iotdevicesecosystem.amazonaws.com' region = 'us-west-2' endpoint = 'https://download.devicetester.iotdevicesecosystem.amazonaws.com/latestidt' request_parameters = 'HostOs=linux&TestSuiteType=GGV2' # Key derivation functions. See: # http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-python def sign(key, msg): return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest() def getSignatureKey(key, dateStamp, regionName, serviceName): kDate = sign(('AWS4' + key).encode('utf-8'), dateStamp) kRegion = sign(kDate, regionName) kService = sign(kRegion, serviceName) kSigning = sign(kService, 'aws4_request') return kSigning # Read AWS access key from env. variables or configuration file. Best practice is NOT # to embed credentials in code. access_key = os.environ.get('AWS_ACCESS_KEY_ID') secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY') if access_key is None or secret_key is None: print('No access key is available.') sys.exit() # Create a date for headers and the credential string t = datetime.datetime.utcnow() amzdate = t.strftime('%Y%m%dT%H%M%SZ') datestamp = t.strftime('%Y%m%d') # Date w/o time, used in credential scope # ************* TASK 1: CREATE A CANONICAL REQUEST ************* # http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html # Step 1 is to define the verb (GET, POST, etc.)--already done. # Step 2: Create canonical URI--the part of the URI from domain to query # string (use '/' if no path) canonical_uri = '/latestidt' # Step 3: Create the canonical query string. In this example (a GET request), # request parameters are in the query string. Query string values must # be URL-encoded (space=%20). The parameters must be sorted by name. # For this example, the query string is pre-formatted in the request_parameters variable. canonical_querystring = request_parameters # Step 4: Create the canonical headers and signed headers. Header names # must be trimmed and lowercase, and sorted in code point order from # low to high. Note that there is a trailing \n. canonical_headers = 'host:' + host + '\n' + 'x-amz-date:' + amzdate + '\n' # Step 5: Create the list of signed headers. This lists the headers # in the canonical_headers list, delimited with ";" and in alpha order. # Note: The request can include any headers; canonical_headers and # signed_headers lists those that you want to be included in the # hash of the request. "Host" and "x-amz-date" are always required. signed_headers = 'host;x-amz-date' # Step 6: Create payload hash (hash of the request body content). For GET # requests, the payload is an empty string (""). payload_hash = hashlib.sha256(('').encode('utf-8')).hexdigest() # Step 7: Combine elements to create canonical request canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash # ************* TASK 2: CREATE THE STRING TO SIGN************* # Match the algorithm to the hashing algorithm you use, either SHA-1 or # SHA-256 (recommended) algorithm = 'AWS4-HMAC-SHA256' credential_scope = datestamp + '/' + region + '/' + service + '/' + 'aws4_request' string_to_sign = algorithm + '\n' + amzdate + '\n' + credential_scope + '\n' + hashlib.sha256(canonical_request.encode('utf-8')).hexdigest() # ************* TASK 3: CALCULATE THE SIGNATURE ************* # Create the signing key using the function defined above. signing_key = getSignatureKey(secret_key, datestamp, region, service) # Sign the string_to_sign using the signing_key signature = hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest() # ************* TASK 4: ADD SIGNING INFORMATION TO THE REQUEST ************* # The signing information can be either in a query string value or in # a header named Authorization. This code shows how to use a header. # Create authorization header and add to request headers authorization_header = algorithm + ' ' + 'Credential=' + access_key + '/' + credential_scope + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature # The request can include any headers, but MUST include "host", "x-amz-date", # and (for this scenario) "Authorization". "host" and "x-amz-date" must # be included in the canonical_headers and signed_headers, as noted # earlier. Order here is not significant. # Python note: The 'host' header is added automatically by the Python 'requests' library. headers = {'x-amz-date':amzdate, 'Authorization':authorization_header} # ************* SEND THE REQUEST ************* request_url = endpoint + '?' + canonical_querystring print('\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++') print('Request URL = ' + request_url) response = requests.get(request_url, headers=headers) print('\nRESPONSE++++++++++++++++++++++++++++++++++++') print('Response code: %d\n' % response.status_code) print(response.text) download_url = response.json()["LatestBk"]["DownloadURL"] r = requests.get(download_url) open('devicetester.zip', 'wb').write(r.content)