Tutorial: Abrufen einer Liste von Komponentenmodellen auf einem SiteWise Edge-Gateway - AWS IoT SiteWise

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Abrufen einer Liste von Komponentenmodellen auf einem SiteWise Edge-Gateway

Sie können eine Teilmenge der verfügbaren AWS IoT SiteWise APIs zusammen mit Edge-spezifischen APIs verwenden, um mit Komponentenmodellen und ihren Komponenten am Edge zu interagieren. Dieses Tutorial führt Sie durch das Abrufen temporärer Anmeldeinformationen für ein AWS IoT SiteWise Edge-Gateway und das Abrufen einer Liste der Komponentenmodelle auf dem SiteWise Edge-Gateway.

Voraussetzungen

In den Schritten dieses Tutorials können Sie eine Vielzahl von Tools verwenden. Um diese Tools zu verwenden, stellen Sie sicher, dass Sie die entsprechenden Voraussetzungen installiert haben.

Zum Durcharbeiten dieses Tutorials ist Folgendes erforderlich:

Schritt 1: Abrufen eines vom SiteWise Edge-Gateway-Service signierten Zertifikats

Um eine TLS-Verbindung zu den im SiteWise Edge-Gateway verfügbaren APIs herzustellen, benötigen Sie ein vertrauenswürdiges Zertifikat. Sie können dieses Zertifikat mit einer OpenSSL oder AWS OpsHub für generierenAWS IoT SiteWise.

OpenSSL
Anmerkung

Sie müssen OpenSSL installiert haben, um diesen Befehl auszuführen.

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um ein signiertes Zertifikat vom SiteWise Edge-Gateway abzurufen. Ersetzen Sie durch <sitewise_gateway_ip> die IP des SiteWise Edge-Gateways.

openssl s_client -connect <sitewise_gateway_ip>:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > GatewayCert.pem
AWS OpsHub for AWS IoT SiteWise

Sie können AWS OpsHub für verwendenAWS IoT SiteWise. Weitere Informationen finden Sie unter Verwalten von SiteWise Edge-Gateways.

Der absolute Pfad zum heruntergeladenen SiteWise Edge-Gateway-Zertifikat wird in diesem Tutorial verwendet. Führen Sie den folgenden Befehl aus, um den vollständigen Pfad Ihres Zertifikats zu exportieren und durch <absolute_path_to_certificate> den Pfad zum Zertifikat zu ersetzen:

export PATH_TO_CERTIFICATE='<absolute_path_to_certificate>'

Schritt 2: Abrufen Ihres SiteWise Edge-Gateway-Hostnamens

Anmerkung

Sie müssen OpenSSL installiert haben, um diesen Befehl auszuführen.

Um das Tutorial abzuschließen, benötigen Sie den Hostnamen Ihres SiteWise Edge-Gateways. Um den Hostnamen Ihres SiteWise Edge-Gateways abzurufen, führen Sie Folgendes aus und ersetzen Sie durch <sitewise_gateway_ip> die IP des SiteWise Edge-Gateways:

openssl s_client -connect <sitewise_gateway_ip>:443 </dev/null 2>/dev/null | grep -Po 'CN = \K.*'| head -1

Führen Sie den folgenden Befehl aus, um den Hostnamen zur späteren Verwendung zu exportieren. Ersetzen Sie dabei durch <your_edge_gateway_hostname> den Hostnamen Ihres SiteWise Edge-Gateways:

export GATEWAY_HOSTNAME='<your_edge_gateway_hostname>'

Schritt 3: Abrufen temporärer Anmeldeinformationen für Ihr SiteWise Edge-Gateway

Nachdem Sie nun das signierte Zertifikat und den Hostnamen Ihres SiteWise Edge-Gateways haben, müssen Sie temporäre Anmeldeinformationen abrufen, damit Sie APIs auf dem Gateway ausführen können. Sie können diese Anmeldeinformationen über AWS OpsHub für AWS IoT SiteWise oder direkt über das SiteWise Edge-Gateway mithilfe von APIs abrufen.

Wichtig

Anmeldeinformationen laufen alle 4 Stunden ab. Daher sollten Sie die Anmeldeinformationen kurz vor der Verwendung der APIs auf Ihrem SiteWise Edge-Gateway abrufen. Zwischenspeichern Sie Anmeldeinformationen nicht länger als 4 Stunden.

Abrufen temporärer Anmeldeinformationen mit AWS OpsHub für AWS IoT SiteWise

Anmerkung

Sie müssen die AWS OpsHub für die AWS IoT SiteWise Anwendung installiert haben.

Gehen Sie wie folgt vor, um AWS OpsHub für die AWS IoT SiteWise Anwendung zum Abrufen Ihrer temporären Anmeldeinformationen zu verwenden:

  1. Melden Sie sich bei der Anwendung an.

  2. Wählen Sie Settings (Einstellungen) aus.

  3. Wählen Sie für Authentifizierung die Option Anmeldeinformationen kopieren aus.

  4. Erweitern Sie die Option, die zu Ihrer Umgebung passt, und wählen Sie Kopieren aus.

  5. Speichern Sie die Anmeldeinformationen zur späteren Verwendung.

Abrufen temporärer Anmeldeinformationen mithilfe der SiteWise Edge-Gateway-API

Um die temporären Anmeldeinformationen mit der SiteWise Edge-Gateway-API abzurufen, können Sie ein Python-Skript oder curl verwenden. Zuerst benötigen Sie einen Benutzernamen und ein Passwort für Ihr SiteWise Edge-Gateway. Die SiteWise Edge-Gateways verwenden SigV4-Authentifizierung und -Autorisierung. Weitere Informationen zum Hinzufügen von Benutzern finden Sie unter LDAP -oder Linux-Benutzerpool. Diese Anmeldeinformationen werden in den folgenden Schritten verwendet, um die lokalen Anmeldeinformationen auf Ihrem SiteWise Edge-Gateway abzurufen, die für die Verwendung der AWS IoT SiteWise APIs benötigt werden.

Python
Anmerkung

Sie müssen urllib3 und Python3 installiert haben.

So rufen Sie die Anmeldeinformationen mit Python ab
  1. Erstellen Sie eine Datei namens get_credentials.py und kopieren Sie den folgenden Code in diese Datei.

    ''' The following demonstrates how to get the credentials from the SiteWise Edge gateway. You will need to add local users or connect your system to LDAP/AD https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#create-user-pool Example usage: python3 get_credentials.py -e https://<gateway_hostname> -c <path_to_certificate> -u '<gateway_username>' -p '<gateway_password>' -m '<method>' ''' import urllib3 import json import urllib.parse import sys import os import getopt """ This function retrieves the AWS IoT SiteWise Edge gateway credentials. """ def get_credentials(endpoint,certificatePath, user, password, method): http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs= certificatePath) encoded_body = json.dumps({ "username": user, "password": password, "authMechanism": method, }) url = urllib.parse.urljoin(endpoint, "/authenticate") response = http.request('POST', url, headers={'Content-Type': 'application/json'}, body=encoded_body) if response.status != 200: raise Exception(f'Failed to authenticate! Response status {response.status}') auth_data = json.loads(response.data.decode('utf-8')) accessKeyId = auth_data["accessKeyId"] secretAccessKey = auth_data["secretAccessKey"] sessionToken = auth_data["sessionToken"] region = "edge" return accessKeyId, secretAccessKey, sessionToken, region def print_help(): print('Usage:') print(f'{os.path.basename(__file__)} -e <endpoint> -c <path/to/certificate> -u <user> -p <password> -m <method> -a <alias>') print('') print('-e, --endpoint edge gateway endpoint. Usually the Edge gateway hostname.') print('-c, --cert_path path to downloaded gateway certificate') print('-u, --user Edge user') print('-p, --password Edge password') print('-m, --method (Optional) Authentication method (linux, winnt, ldap), default is linux') sys.exit() def parse_args(argv): endpoint = "" certificatePath = None user = None password = None method = "linux" try: opts, args = getopt.getopt(argv, "he:c:u:p:m:", ["endpoint=","cert_path=", "user=", "password=", "method="]) except getopt.GetoptError: print_help() for opt, arg in opts: if opt == '-h': print_help() elif opt in ("-e", "--endpoint"): endpoint = arg elif opt in ("-u", "--user"): user = arg elif opt in ("-p", "--password"): password = arg elif opt in ("-m", "--method"): method = arg.lower() elif opt in ("-c", "--cert_path"): certificatePath = arg if method not in ['ldap', 'linux', 'winnt']: print("not valid method parameter, required are ldap, linux, winnt") print_help() if (user == None or password == None): print("To authenticate against edge user, password have to be passed together, and the region has to be set to 'edge'") print_help() if(endpoint == ""): print("You must provide a valid and reachable gateway hostname") print_help() return endpoint,certificatePath, user, password, method def main(argv): # get the command line args endpoint, certificatePath, user, password, method = parse_args(argv) accessKeyId, secretAccessKey, sessionToken, region=get_credentials(endpoint, certificatePath, user, password, method) print("Copy and paste the following credentials into the shell, they are valid for 4 hours:") print(f"export AWS_ACCESS_KEY_ID={accessKeyId}") print(f"export AWS_SECRET_ACCESS_KEY={secretAccessKey}") print(f"export AWS_SESSION_TOKEN={sessionToken}") print(f"export AWS_REGION={region}") print() if __name__ == "__main__": main(sys.argv[1:])
  2. Führen Sie get_credentials.py vom Terminal aus, indem Sie <gateway_username> und <gateway_password> durch die von Ihnen erstellten Anmeldeinformationen ersetzen.

    python3 get_credentials.py -e https://$GATEWAY_HOSTNAME -c $PATH_TO_CERTIFICATE -u '<gateway_username>' -p '<gateway_password>' -m 'linux'
curl
Anmerkung

Sie müssen curl installiert haben.

So rufen Sie die Anmeldeinformationen mit curl ab
  1. Führen Sie den folgenden Befehl vom Terminal aus aus, indem Sie <gateway_username> und <gateway_password> durch die von Ihnen erstellten Anmeldeinformationen ersetzen.

    curl --cacert $PATH_TO_CERTIFICATE --location \ -X POST https://$GATEWAY_HOSTNAME:443/authenticate \ --header 'Content-Type: application/json' \ --data-raw '{ "username": "<gateway_username>", "password": "<gateway_password>", "authMechanism": "linux" }'

    Die Antwort sollte wie folgt aussehen:

    { "username": "sweuser", "accessKeyId": "<accessKeyId>", "secretAccessKey": "<secretAccessKey>", "sessionToken": "<sessionToken>", "sessionExpiryTime": "2022-11-17T04:51:40.927095Z", "authMechanism": "linux", "role": "edge-user" }
  2. Führen Sie im Terminal den folgenden Befehl aus:

    export AWS_ACCESS_KEY_ID=<accessKeyId> export AWS_SECRET_ACCESS_KEY=<secretAccessKey> export AWS_SESSION_TOKEN=<sessionToken> export AWS_REGION=edge

Schritt 4: Abrufen einer Liste der Komponentenmodelle auf dem SiteWise Edge-Gateway

Nachdem Sie nun über ein signiertes Zertifikat, Ihren SiteWise Edge-Gateway-Hostnamen und temporäre Anmeldeinformationen für Ihr SiteWise Edge-Gateway verfügen, können Sie die ListAssetModels-API verwenden, um eine Liste der Komponentenmodelle auf Ihrem SiteWise Edge-Gateway abzurufen.

Python
Anmerkung

Python3, Boto3 und müssen BotoCore installiert sein.

So rufen Sie die Liste der Komponentenmodelle mit Python ab
  1. Erstellen Sie eine Datei namens list_asset_model.py und kopieren Sie den folgenden Code in diese Datei.

    import json import boto3 import botocore import os # create the client using the credentials client = boto3.client("iotsitewise", endpoint_url= "https://"+ os.getenv("GATEWAY_HOSTNAME"), region_name=os.getenv("AWS_REGION"), aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"), aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"), aws_session_token=os.getenv("AWS_SESSION_TOKEN"), verify=os.getenv("PATH_TO_CERTIFICATE"), config=botocore.config.Config(inject_host_prefix=False)) # call the api using local credentials response = client.list_asset_models() print(response)
  2. Führen Sie list_asset_model.py vom Terminal aus.

    python3 list_asset_model.py
curl
Anmerkung

Sie müssen curl installiert haben.

So rufen Sie die Liste der Komponentenmodelle mit curl ab

Führen Sie den folgenden Befehl vom Terminal aus.

curl \ --request GET https://$GATEWAY_HOSTNAME:443/asset-models \ --cacert $PATH_TO_CERTIFICATE \ --aws-sigv4 "aws:amz:edge:iotsitewise" \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ -H "x-amz-security-token:$AWS_SESSION_TOKEN"

Die Antwort sollte wie folgt aussehen:

{ "assetModelSummaries": [ { "arn": "arn:aws:iotsitewise:{region}:{account-id}:asset-model/{asset-model-id}", "creationDate": 1.669245291E9, "description": "This is a small example asset model", "id": "{asset-model-id}", "lastUpdateDate": 1.669249038E9, "name": "Some Metrics Model", "status": { "error": null, "state": "ACTIVE" } }, . . . ], "nextToken": null }