Baixe o IDT para V2 AWS IoT Greengrass - AWS IoT Greengrass

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Baixe o IDT para V2 AWS IoT Greengrass

Este tópico descreve as opções de download AWS IoT Device Tester para a AWS IoT Greengrass V2. Você pode usar um dos links de download de software a seguir ou seguir as instruções para baixar o IDT de forma programática.

Ao baixar o software, você concorda com o Contrato AWS IoT Device Tester de Licença.

nota

O IDT não oferece suporte a execução por vários usuários em um local compartilhado, como um diretório NFS ou uma pasta compartilhada de rede do Windows. Recomendamos extrair o pacote do IDT para uma unidade local e executar o binário do IDT na estação de trabalho local.

Baixar IDT manualmente

Este tópico lista as versões suportadas do IDT para AWS IoT Greengrass V2. Como prática recomendada, recomendamos que você use a versão mais recente do IDT para AWS IoT Greengrass V2 que ofereça suporte à sua versão de destino da AWS IoT Greengrass V2. Novas versões do AWS IoT Greengrass podem exigir que você baixe uma nova versão do IDT para AWS IoT Greengrass V2. Você recebe uma notificação ao iniciar um teste se o IDT for AWS IoT Greengrass V2 não for compatível com a versão AWS IoT Greengrass que você está usando.

IDT v4.9.4 para AWS IoT Greengrass
AWS IoT Greengrass Versões suportadas:
Downloads de software IDT:
Notas de release:
  • Permite a validação e qualificação de dispositivos que executam as versões 2.12.0, 2.11.0, 2.10.0 e 2.9.5 do software AWS IoT Greengrass Core.

  • Remove o gerenciador de streams e os grupos de teste de aprendizado de máquina.

Notas adicionais:
  • Se seu dispositivo usa um HSM e você está usando o nucleus 2.10.x, migre para o Greengrass nucleus versão 2.11.0 ou posterior.

Versão do conjunto de testes:
GGV2Q_2.5.4
  • Lançado em 2024.05.03

Baixar IDT de maneira programada

O IDT fornece uma operação de API que você pode usar para recuperar um URL na qual é possível baixar o IDT de maneira programada. Você também pode usar essa operação de API para verificar se você tem a versão mais recente do IDT. Essa operação da API tem o seguinte endpoint.

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

Para chamar essa operação de API, você deve ter a permissão para executar a ação iot-device-tester:LatestIdt. Inclua sua AWS assinatura e use iot-device-tester como nome do serviço.

Solicitações de API

HostOs — O sistema operacional da máquina host. Escolha uma das seguintes opções:
  • mac

  • linux

  • windows

TestSuiteType — O tipo da suíte de testes. Escolha a seguinte opção:

GGV2— IDT para V2 AWS IoT Greengrass

ProductVersion

(Opcional) A versão do núcleo Greengrass. O serviço retorna a versão mais recente compatível do IDT para essa versão do núcleo Greengrass. Se você não especificar essa opção, o serviço retornará a versão mais recente do IDT.

Resposta da API

O resposta da API tem o seguinte formato. O arquivo DownloadURL inclui o arquivo 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 } }

Exemplos

Você pode consultar os exemplos a seguir para baixar o IDT de maneira programada. Esses exemplos usam credenciais que você armazena nas variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY. Para seguir as práticas recomendadas de segurança, não armazene suas credenciais em seu código.

exemplo Exemplo: faça download usando cURL versão 7.75.0 ou posterior (Mac e Linux)

Se você tiver a versão 7.75.0 ou posterior do cURL, poderá usar a sinalização aws-sigv4 para assinar a solicitação da API. Este exemplo usa jq para analisar o URL de download da resposta.

Atenção

A aws-sigv4 sinalização exige que os parâmetros de consulta da solicitação GET curl estejam na ordem de HostOs/ProductVersion/TestSuiteType ouHostOs/TestSuiteType. Pedidos que não estiverem em conformidade resultarão em um erro ao obter assinaturas incompatíveis para a string canônica do API Gateway.

Se o parâmetro opcional ProductVersion estiver incluído, você deverá usar uma versão de produto compatível, conforme documentado em Versões suportadas do AWS IoT Device Tester for AWS IoT Greengrass V2.

  • Substitua us-west-2 pelo seu. Região da AWS Para obter uma lista de códigos de região, consulte Endpoints regionais.

  • Substitua linux pelo sistema operacional da sua máquina host.

  • Substitua 2.5.3 pela sua versão do AWS IoT Greengrass nucleus.

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
exemplo Exemplo: faça download usando uma versão anterior do cURL (Mac e Linux)

Você pode usar o seguinte comando cURL com uma AWS assinatura que você assina e calcula. Para obter mais informações sobre como assinar e calcular uma AWS assinatura, consulte Assinatura de solicitações AWS da API.

  • Substitua linux pelo sistema operacional da sua máquina host.

  • Substitua Timestamp pela data e hora, como 20220210T004606Z.

  • Substitua a date pela data, como 20220210.

  • AWSRegionSubstitua pelo seu Região da AWS. Para obter uma lista de códigos de região, consulte Endpoints regionais.

  • AWSSignatureSubstitua pela AWS assinatura que você gera.

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'
exemplo Exemplo: faça o download usando um script Python

Este exemplo usa a biblioteca de solicitações do Python. Esse exemplo foi adaptado do exemplo do Python para assinar uma solicitação de AWS API na Referência AWS geral.

  • Substitua us-west-2 pela sua região. Para obter uma lista de códigos de região, consulte Endpoints regionais.

  • Substitua linux pelo sistema operacional da sua máquina host.

# 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)