

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel : Répertorier les modèles d'actifs sur unAWS IoT SiteWisePasserelle Edge
<a name="edge-apis-tutorial"></a>

Vous pouvez utiliser un sous-ensemble des AWS IoT SiteWise API disponibles ainsi que des API spécifiques à la périphérie pour interagir avec les modèles d'actifs et leurs actifs en périphérie. Ce didacticiel vous expliquera comment obtenir des informations d'identification temporaires sur une passerelle AWS IoT SiteWise Edge et comment obtenir une liste des modèles d'actifs sur la passerelle SiteWise Edge.

## Conditions préalables
<a name="edge-apis-tutorial-prerequisites"></a>

Dans les étapes de ce didacticiel, vous pouvez utiliser une variété d'outils. Pour utiliser ces outils, assurez-vous que les prérequis correspondants sont installés.

Pour suivre ce didacticiel, vous aurez besoin des éléments suivants :
+ Un déployé et en cours d'exécution [AWS IoT SiteWiseExigences relatives à la passerelle auto-hébergée Edge](configure-gateway-ggv2.md)
+ Accédez à votre passerelle SiteWise Edge sur le même réseau via le port 443.
+ [OpenSSL installé](https://www.openssl.org/)
+ (AWS OpsHubpourAWS IoT SiteWise) L'[AWS OpsHubAWS IoT SiteWiseapplication](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)
+ (curl) [curl](https://ec.haxx.se/install/) installé
+ (Python) [urllib3 installé](https://urllib3.readthedocs.io/en/stable/index.html)
+ (Python) [Python3 installé](https://www.python.org/downloads/)
+ (Python) [Boto3 installé](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ (Python) [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)installé

## Étape 1 : obtenir un certificat signé du service SiteWise Edge Gateway
<a name="edge-apis-tutorial-gateway-cert"></a>

Pour établir une connexion TLS avec les API disponibles sur la passerelle SiteWise Edge, vous avez besoin d'un certificat fiable. Vous pouvez générer ce certificat à l'aide d'un OpenSSL ou pourAWS OpsHub. AWS IoT SiteWise

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

**Note**  
[OpenSSL](https://www.openssl.org/) doit être installé pour exécuter cette commande.

Ouvrez un terminal et exécutez la commande suivante pour obtenir un certificat signé auprès de la passerelle SiteWise Edge. `<sitewise_gateway_ip>`Remplacez-le par l'adresse IP de la passerelle SiteWise Edge.

```
openssl s_client -connect {{<sitewise_gateway_ip>}}:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > GatewayCert.pem
```

------
#### [ AWS OpsHubforAWS IoT SiteWise ]

Vous pouvez utiliser AWS OpsHub pourAWS IoT SiteWise. Pour de plus amples informations, veuillez consulter [Gérer les passerelles SiteWise Edge](manage-gateways-ggv2.md).

------

Le chemin absolu vers le certificat de passerelle SiteWise Edge téléchargé est utilisé dans ce didacticiel. Exécutez la commande suivante pour exporter le chemin complet de votre certificat, en le `<absolute_path_to_certificate>` remplaçant par le chemin d'accès au certificat :

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

## Étape 2 : obtenir le nom d'hôte de votre passerelle SiteWise Edge
<a name="edge-apis-tutorial-gateway-hostname"></a>

**Note**  
[OpenSSL](https://www.openssl.org/) doit être installé pour exécuter cette commande.

Pour terminer le didacticiel, vous aurez besoin du nom d'hôte de votre passerelle SiteWise Edge. Pour obtenir le nom d'hôte de votre passerelle SiteWise Edge, exécutez ce qui suit, en le `<sitewise_gateway_ip>` remplaçant par l'adresse IP de la passerelle SiteWise Edge :

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

Exécutez la commande suivante pour exporter le nom d'hôte à utiliser ultérieurement, en le `<your_edge_gateway_hostname>` remplaçant par le nom d'hôte de votre passerelle SiteWise Edge :

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

## Étape 3 : obtenir des informations d'identification temporaires pour votre passerelle SiteWise Edge
<a name="edge-apis-tutorial-temporary-credentials"></a>

Maintenant que vous avez le certificat signé et le nom d'hôte de votre passerelle SiteWise Edge, vous devez obtenir des informations d'identification temporaires afin de pouvoir exécuter des API sur la passerelle. Vous pouvez obtenir ces informations d'identification via AWS OpsHub AWS IoT SiteWise ou directement depuis la passerelle SiteWise Edge à l'aide d'API.

**Important**  
Les informations d'identification expirent toutes les 4 heures. Vous devez donc les obtenir juste avant d'utiliser les API de votre passerelle SiteWise Edge. Ne mettez pas les informations d'identification en cache pendant plus de 4 heures.

### Obtenez des informations d'identification temporaires en utilisantAWS OpsHubforAWS IoT SiteWise
<a name="edge-apis-tutorial-temp-creds-opshub"></a>

**Note**  
Vous devez installer l'[AWS IoT SiteWiseapplication AWS OpsHub for](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app).

AWS OpsHubPour utiliser l'AWS IoT SiteWiseapplication afin d'obtenir vos informations d'identification temporaires, procédez comme suit :

1. Connectez-vous à l'application.

1. Cliquez sur **Paramètres**.

1. Pour **Authentification**, choisissez **Copier les informations d'identification**.

1. Développez l'option adaptée à votre environnement et choisissez **Copier**.

1. Enregistrez les informations d'identification pour les utiliser ultérieurement.

### Obtenez des informations d'identification temporaires à l'aide de l'API de passerelle SiteWise Edge
<a name="edge-apis-tutorial-temp-creds-api"></a>

Pour utiliser l'API de passerelle SiteWise Edge afin d'obtenir les informations d'identification temporaires, vous pouvez utiliser un script Python ou un curl. Vous devez d'abord disposer d'un nom d'utilisateur et d'un mot de passe pour votre passerelle SiteWise Edge. Les passerelles SiteWise Edge utilisent l'authentification et l'autorisation SigV4. Pour plus d'informations sur l'ajout d'utilisateurs, consultez [LDAP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) ou [groupe d'utilisateurs Linux](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app). Ces informations d'identification seront utilisées dans les étapes suivantes pour obtenir les informations d'identification locales sur votre passerelle SiteWise Edge qui sont nécessaires pour utiliser les AWS IoT SiteWise API.

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

**Note**  
Vous devez installer [urllib3 et [Python3](https://www.python.org/downloads/)](https://urllib3.readthedocs.io/en/stable/index.html).

**Pour obtenir les informations d'identification à l'aide de Python**

1. Créez un fichier appelé **get\_credentials.py** et copiez-y le code suivant.

   ```
   '''
   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 theAWS IoT SiteWiseEdge 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. Exécutez **get\_credentials.py** depuis le terminal en remplaçant `<gateway_username>` et en utilisant `<gateway_password>` les informations d'identification que vous avez créées.

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

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

**Note**  
Vous devez installer [Curl](https://ec.haxx.se/install/).

**Pour obtenir les informations d'identification à l'aide de curl**

1. Exécutez la commande suivante depuis le terminal en remplaçant <gateway\_username>et en utilisant <gateway\_password>les informations d'identification que vous avez créées.

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

   Les résultats doivent avoir l’aspect suivant :

   ```
   {
       "username": "sweuser",
       "accessKeyId": "<accessKeyId>",
       "secretAccessKey": "<secretAccessKey>",
       "sessionToken": "<sessionToken>",
       "sessionExpiryTime": "2022-11-17T04:51:40.927095Z",
       "authMechanism": "linux",
       "role": "edge-user"
   }
   ```

1. Exécutez la commande suivante à partir de votre terminal.

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

------

## Étape 4 : obtenir une liste des modèles d'actifs sur la passerelle SiteWise Edge
<a name="edge-apis-tutorial-get-asset-models"></a>

Maintenant que vous disposez d'un certificat signé, du nom d'hôte de votre passerelle SiteWise Edge et des informations d'identification temporaires pour votre passerelle SiteWise Edge, vous pouvez utiliser l'`ListAssetModels`API pour obtenir une liste des modèles d'actifs de votre passerelle SiteWise Edge.

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

**Note**  
Vous devez installer [Python3](https://www.python.org/downloads/) et [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html). [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)

**Pour obtenir la liste des modèles d'actifs à l'aide de Python**

1. Créez un fichier appelé **list\_asset\_model.py** et copiez-y le code suivant.

   ```
   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. Exécutez **list\_asset\_model.py** depuis le terminal.

   ```
   python3 list_asset_model.py
   ```

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

**Note**  
Vous devez installer [Curl](https://ec.haxx.se/install/).

**Pour obtenir la liste des modèles d'actifs à l'aide de curl**

Exécutez la commande suivante depuis le terminal.

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

Les résultats doivent avoir l’aspect suivant :

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

------