IDT for AWS IoT Greengrass V2 をダウンロードする - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IDT for AWS IoT Greengrass V2 をダウンロードする

このトピックでは、 AWS IoT Greengrass V2 AWS IoT Device Tester 用のダウンロードオプションについて説明します。次のいずれかのソフトウェアダウンロードリンクを使用するか、指示に従ってプログラムで IDT をダウンロードできます。

ソフトウェアをダウンロードすると、AWS IoT Device Tester ライセンス契約に同意したと見なされます。

注記

複数のユーザーが NFS ディレクトリや Windows ネットワーク共有フォルダなどの共有場所から IDT を実行することはお勧めしません。IDT パッケージをローカルドライブに展開し、ローカルワークステーションで IDT バイナリを実行することをお勧めします。

IDT を手動でダウンロードする

このトピックでは、IDT for AWS IoT Greengrass V2 のサポートされているバージョンを一覧表示します。ベストプラクティスとして、ターゲットバージョンの AWS IoT Greengrass V2 をサポートする最新バージョンの IDT for V AWS IoT Greengrass V2を使用することをお勧めします。の新しいリリースでは、IDT for AWS IoT Greengrass V2 の新しいバージョンをダウンロードする必要がある AWS IoT Greengrass 場合があります。IDT for AWS IoT Greengrass V2 が使用している AWS IoT Greengrass のバージョンと互換性がない場合、テスト実行を開始すると通知を受け取ります。

の IDT v4.9.4 AWS IoT Greengrass
サポートされている AWS IoT Greengrass バージョン:
IDT ソフトウェアダウンロード:
  • テストスイート GGV2Q_2.5.4 for Linux を使用した IDT v4.9.4

  • IDT v4.9.4 とテストスイート GGV2Q_2.5.4 for macOS

  • テストスイート GGV2Q_2.5.4 for Windows を使用した IDT v4.9.4

リリースノート:
  • AWS IoT Greengrass Core ソフトウェアバージョン 2.12.0、2.11.0、2.10.0、および 2.9.5 を実行しているデバイスのデバイス検証と認定を有効にします。

  • ストリームマネージャーと機械学習テストグループを削除します。

追加のメモ:
  • デバイスが HSM を使用しており、nucleus 2.10.x を使用している場合は、Greengrass nucleus バージョン 2.11.0 以降に移行します。

テストスイートのバージョン:
GGV2Q_2.5.4
  • 2024.05.03 をリリース

IDT をプログラムでダウンロード

IDT には、プログラムで IDT をダウンロードできる URL の取得に使用できる API オペレーションが用意されています。この API オペレーションを使用して、IDT が最新バージョンであることを確認することもできます。この API オペレーションには、以下のエンドポイントがあります。

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

この API オペレーションを呼び出すには、iot-device-tester:LatestIdt アクションを実行するための権限が必要です。 AWS 署名を含めて、 をサービス名iot-device-testerとして使用します。

API リクエスト

HostOs – ホストマシンのオペレーティングシステム。次のオプションから選択します。
  • mac

  • linux

  • windows

TestSuiteType – テストスイートのタイプ。次のオプションを選択します。

GGV2 – IDT for AWS IoT Greengrass V2

ProductVersion

(オプション) Greengrass nucleus のバージョン。サービスは、Greengrass nucleus のそのバージョンと互換性のある最新バージョンの 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_ID に保存した認証情報および AWS_SECRET_ACCESS_KEY 環境変数が使用されます。セキュリティのベストプラクティスに従い、認証情報はコードに保存しないでください。

例: cURL バージョン 7.75.0 以降を使用したダウンロード (Mac および Linux)

cURL バージョン 7.75.0 以降の場合、aws-sigv4 フラグを使用して API リクエストに署名できます。この例では、レスポンスからのダウンロード URL の解析に jq を使用します。

警告

aws-sigv4 フラグでは、curl GET リクエストのクエリパラメータが HostOs/ProductVersion/TestSuiteType または HostOs/TestSuiteType の順序である必要があります。注文が一致しない場合、API ゲートウェイから正規文字列の署名が一致しないというエラーが発生します。

オプションの パラメータProductVersionが含まれている場合は、AWS IoT Device Tester 「 for AWS IoT Greengrass V2 のサポートされているバージョン」に記載されているように、サポートされている製品バージョンを使用する必要があります。

  • us-west-2 を に置き換えます AWS リージョン。リージョンコードの一覧については、「リージョンエンドポイント」を参照してください。

  • linux をホストマシンのオペレーティングシステムに置き換えます。

  • 2.5.3 を 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
例: 以前のバージョンの cURL を使用したダウンロード (Mac および Linux)

次の cURL コマンドは、署名して計算する AWS 署名とともに使用できます。署名に署名して計算する方法の詳細については AWS 、AWS 「 API リクエストの署名」を参照してください。

  • linux をホストマシンのオペレーティングシステムに置き換えます。

  • タイムスタンプ20220210T004606Z などの日付と時刻に置き換えます。

  • 日付20220210 などの日付に置き換えます。

  • AWSRegionに置き換えます AWS リージョン。リージョンコードの一覧については、「リージョンエンドポイント」を参照してください。

  • を、生成したAWS 署名AWSSignatureに置き換えます。

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 リクエストライブラリを使用しています。この例は、 AWS 全般のリファレンス の AWS API リクエストに署名する Python の例から適用されています。

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