기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이 주제에서는 for AWS IoT Greengrass V2를 다운로드하는 옵션에 AWS IoT Device Tester 대해 설명합니다. 다음 소프트웨어 다운로드 링크 중 하나를 사용하거나 지침에 따라 프로그래밍 방식으로 IDT를 다운로드할 수 있습니다.
소프트웨어를 다운로드하면 AWS IoT Device Tester IDT 라이선스 계약에 동의하는 것입니다.
참고
여러 사용자가 NFS 디렉터리 또는 Windows 네트워크 공유 폴더와 같은 공유 위치에서 IDT를 실행하는 것은 지원되지 않습니다. 로컬 드라이브에 IDT 패키지의 압축을 풀고 로컬 워크스테이션에서 IDT 바이너리를 실행하는 것이 좋습니다.
수동으로 IDT 다운로드
이 주제에서는 지원되는 버전의 IDT for AWS IoT Greengrass V2를 나열합니다. 가장 좋은 방법은 대상 버전의 AWS IoT Greengrass V2를 지원하는 최신 버전의 IDT for 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 버전:
-
-
Greengrass nucleus v2.12.0, v2.11.0, v2.10.0 및 v2.9.5
-
- IDT 소프트웨어 다운로드:
- 릴리스 정보:
-
-
AWS IoT Greengrass 코어 소프트웨어 버전 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년 5월 3일 릴리스
-
프로그래밍 방식으로 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
– AWS IoT Greengrass V2용 IDT - 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 요청에 서명할 수 있습니다. 이 예제에서는 jq
주의
aws-sigv4
플래그에는 curl GET 요청의 쿼리 파라미터가 HostOs/ProductVersion/TestSuiteType 또는 HostOs/TestSuiteType의 순서로 되어 있어야 합니다. 이 순서를 준수하지 않으면 API Gateway에서 표준 문자열에 대해 일치하지 않는 서명을 가져오는 오류가 발생합니다.
선택적 파라미터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)
서명 및 계산하는 AWS 서명과 함께 다음 cURL 명령을 사용할 수 있습니다. 서명 및 서명 계산 방법에 대한 자세한 내용은 API 요청 서명을 AWS 참조하세요. AWS
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 요청
-
-
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)