

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: Inventarmodelle auf einem AWS IoT SiteWise Edge-Gateway auflisten
<a name="edge-apis-tutorial"></a>

Sie können eine Teilmenge der verfügbaren AWS IoT SiteWise APIs sowie Edge-spezifische Elemente verwenden, APIs um mit Asset-Modellen und ihren Assets am Edge zu interagieren. In diesem Tutorial erfahren Sie, wie Sie temporäre Anmeldeinformationen für ein AWS IoT SiteWise Edge-Gateway abrufen und eine Liste der Asset-Modelle auf dem SiteWise Edge-Gateway abrufen.

## Voraussetzungen
<a name="edge-apis-tutorial-prerequisites"></a>

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

Zum Durcharbeiten dieses Tutorials ist Folgendes erforderlich:
+ Ein bereitgestelltes und laufendes [AWS IoT SiteWise Anforderungen an das selbst gehostete Edge-Gateway](configure-gateway-ggv2.md)
+ Zugriff auf Ihr SiteWise Edge-Gateway im selben Netzwerk über Port 443.
+ [OpenSSL installiert](https://www.openssl.org/)
+ (AWS OpsHub für AWS IoT SiteWise) Die [AWS OpsHub für die Anwendung AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)
+ (curl) [curl](https://ec.haxx.se/install/) ist installiert
+ (Python) [urllib3 installiert](https://urllib3.readthedocs.io/en/stable/index.html)
+ (Python) [Python3 installiert](https://www.python.org/downloads/)
+ (Python) [Boto3 installiert](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ (Python) [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)installiert

## Schritt 1: Besorgen Sie sich ein signiertes Zertifikat für den SiteWise Edge-Gateway-Service
<a name="edge-apis-tutorial-gateway-cert"></a>

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

------
#### [ OpenSSL ]

**Anmerkung**  
Um diesen Befehl ausführen zu können, muss [OpenSSL](https://www.openssl.org/) installiert sein.

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um ein signiertes Zertifikat vom SiteWise Edge-Gateway abzurufen. `<sitewise_gateway_ip>`Ersetzen Sie es durch 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 verwenden AWS IoT SiteWise. Weitere Informationen finden Sie unter [SiteWise Edge-Gateways verwalten](manage-gateways-ggv2.md).

------

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

```
export PATH_TO_CERTIFICATE='<absolute_path_to_certificate>'
```

## Schritt 2: Holen Sie sich Ihren SiteWise Edge-Gateway-Hostnamen
<a name="edge-apis-tutorial-gateway-hostname"></a>

**Anmerkung**  
Um diesen Befehl ausführen zu können, muss [OpenSSL](https://www.openssl.org/) installiert sein.

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 den folgenden Befehl aus und `<sitewise_gateway_ip>` ersetzen Sie ihn durch 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 für die spätere Verwendung zu exportieren und ihn durch den Hostnamen Ihres SiteWise Edge-Gateways zu `<your_edge_gateway_hostname>` ersetzen:

```
export GATEWAY_HOSTNAME='<your_edge_gateway_hostname>'
```

## Schritt 3: Besorgen Sie sich temporäre Anmeldeinformationen für Ihr Edge-Gateway SiteWise
<a name="edge-apis-tutorial-temporary-credentials"></a>

Nachdem Sie das signierte Zertifikat und den Hostnamen Ihres SiteWise Edge-Gateways haben, benötigen Sie temporäre Anmeldeinformationen, damit Sie APIs auf dem Gateway arbeiten können. Sie können diese Anmeldeinformationen AWS OpsHub für AWS IoT SiteWise oder direkt vom SiteWise Edge-Gateway abrufen, indem Sie APIs.

**Wichtig**  
Die Anmeldeinformationen laufen alle 4 Stunden ab. Sie sollten sich die Anmeldeinformationen daher kurz vor der Verwendung APIs auf Ihrem SiteWise Edge-Gateway besorgen. Speichern Sie Anmeldeinformationen nicht länger als 4 Stunden im Cache.

### Holen Sie sich temporäre Anmeldeinformationen mithilfe AWS OpsHub von AWS IoT SiteWise
<a name="edge-apis-tutorial-temp-creds-opshub"></a>

**Anmerkung**  
Sie müssen die [AWS OpsHubAWS IoT SiteWise FOR-Anwendung](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) installiert haben.

Gehen Sie wie folgt vor, um AWS OpsHub für die AWS IoT SiteWise Anwendung Ihre temporären Anmeldeinformationen abzurufen:

1. Loggen Sie sich in die Anwendung ein.

1. Wählen Sie **Einstellungen** aus.

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

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

1. Speichern Sie die Anmeldeinformationen für die spätere Verwendung.

### Rufen Sie mithilfe der SiteWise Edge-Gateway-API temporäre Anmeldeinformationen ab
<a name="edge-apis-tutorial-temp-creds-api"></a>

Um die SiteWise Edge-Gateway-API zum Abrufen der temporären Anmeldeinformationen zu verwenden, können Sie ein Python-Skript oder Curl verwenden. Zunächst benötigen Sie einen Benutzernamen und ein Passwort für Ihr SiteWise Edge-Gateway. Die SiteWise Edge-Gateways verwenden die SigV4-Authentifizierung und -Autorisierung. Weitere Informationen zum Hinzufügen von Benutzern finden Sie unter [LDAP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) - oder [Linux-Benutzerpool](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app). Diese Anmeldeinformationen werden in den folgenden Schritten verwendet, um die lokalen Anmeldeinformationen auf Ihrem SiteWise Edge-Gateway abzurufen, die für die AWS IoT SiteWise APIs Verwendung von erforderlich sind.

------
#### [ Python ]

**Anmerkung**  
Sie müssen [urllib3 und [Python3](https://www.python.org/downloads/)](https://urllib3.readthedocs.io/en/stable/index.html) installiert haben.

**Um die Anmeldeinformationen mit Python abzurufen**

1. Erstellen Sie eine Datei namens **get\$1credentials.py** und kopieren Sie den folgenden Code hinein.

   ```
   '''
   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:])
   ```

1. Führen Sie **get\$1credentials.py** vom Terminal aus `<gateway_username>` und `<gateway_password>` ersetzen Sie die von Ihnen erstellten Anmeldeinformationen.

   ```
   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](https://ec.haxx.se/install/) installiert haben.

**Um die Anmeldeinformationen mit Curl zu erhalten**

1. Führen Sie den folgenden Befehl vom Terminal aus <gateway\$1username>und <gateway\$1password>ersetzen Sie dabei die von Ihnen erstellten Anmeldeinformationen.

   ```
   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"
   }
   ```

1. 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: Rufen Sie eine Liste der Asset-Modelle auf dem SiteWise Edge-Gateway ab
<a name="edge-apis-tutorial-get-asset-models"></a>

Da 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 mithilfe der `ListAssetModels` API eine Liste der Asset-Modelle auf Ihrem SiteWise Edge-Gateway abrufen.

------
#### [ Python ]

**Anmerkung**  
Sie benötigen [Python3, [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)](https://www.python.org/downloads/) und müssen installiert sein. [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)

**Um die Liste der Asset-Modelle mit Python abzurufen**

1. Erstellen Sie eine Datei mit dem Namen **list\$1asset\$1model.py** und kopieren Sie dann den folgenden Code hinein.

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

1. Führen Sie **list\$1asset\$1model.py** vom Terminal aus.

   ```
   python3 list_asset_model.py
   ```

------
#### [ curl ]

**Anmerkung**  
Sie müssen [curl](https://ec.haxx.se/install/) installiert haben.

**Um die Liste der Asset-Modelle abzurufen, die Curl verwenden**

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
}
```

------