

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Enumere los modelos de activos en una puerta de enlace de AWS IoT SiteWise Edge
<a name="edge-apis-tutorial"></a>

Puede utilizar un subconjunto de los disponibles AWS IoT SiteWise APIs junto con los específicos de Edge APIs para interactuar con los modelos de activos y sus activos en Edge. Este tutorial le explicará cómo obtener credenciales temporales para una puerta de enlace de AWS IoT SiteWise Edge y cómo obtener una lista de los modelos de activos de la puerta de enlace de Edge. SiteWise 

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

En los pasos de este tutorial puede utilizar diversas herramientas. Para utilizar estas herramientas, asegúrese de tener instalados los requisitos previos correspondientes.

Necesitará lo siguiente para completar este tutorial:
+ Un [AWS IoT SiteWise Requisitos de la puerta de enlace autohospedada de Edge](configure-gateway-ggv2.md) implementado y en ejecución
+ Acceda a su puerta de enlace SiteWise Edge en la misma red a través del puerto 443.
+ [OpenSSL](https://www.openssl.org/) instalado
+ (AWS OpsHub para AWS IoT SiteWise) La [AWS IoT SiteWise aplicación AWS OpsHub para](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)
+ (curl) [curl](https://ec.haxx.se/install/) instalado
+ (Python) [urllib3](https://urllib3.readthedocs.io/en/stable/index.html) instalado
+ (Python) [Python3](https://www.python.org/downloads/) instalado
+ (Python) [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) instalado
+ (Python) [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)instalado

## Paso 1: Obtenga un certificado firmado por el servicio SiteWise Edge Gateway
<a name="edge-apis-tutorial-gateway-cert"></a>

Para establecer una conexión TLS con la APIs disponible en la puerta de enlace SiteWise Edge, necesita un certificado de confianza. Puede generar este certificado mediante OpenSSL AWS OpsHub o for. AWS IoT SiteWise

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

**nota**  
Necesita tener instalado [OpenSSL](https://www.openssl.org/) para ejecutar este comando.

Abre una terminal y ejecuta el siguiente comando para obtener un certificado firmado desde la puerta de enlace de SiteWise Edge. `<sitewise_gateway_ip>`Sustitúyala por la IP de la puerta de enlace SiteWise Edge.

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

Se puede usar AWS OpsHub para AWS IoT SiteWise. Para obtener más información, consulte [Administre las puertas de enlace SiteWise Edge](manage-gateways-ggv2.md).

------

En este tutorial se utiliza la ruta absoluta al certificado de puerta de enlace SiteWise Edge descargado. Ejecute el siguiente comando para exportar la ruta completa de su certificado, sustituyendo `<absolute_path_to_certificate>` por la ruta al certificado:

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

## Paso 2: Obtenga el nombre de host de la puerta de enlace SiteWise Edge
<a name="edge-apis-tutorial-gateway-hostname"></a>

**nota**  
Necesita tener instalado [OpenSSL](https://www.openssl.org/) para ejecutar este comando.

Para completar el tutorial, necesitará el nombre de host de su puerta de enlace SiteWise Edge. Para obtener el nombre de host de la puerta de enlace SiteWise Edge, ejecute lo siguiente y sustitúyalo por `<sitewise_gateway_ip>` la IP de la puerta de enlace SiteWise Edge:

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

Ejecute el siguiente comando para exportar el nombre de host para usarlo más adelante y `<your_edge_gateway_hostname>` sustitúyalo por el nombre de host de su SiteWise puerta de enlace Edge:

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

## Paso 3: Obtenga credenciales temporales para su SiteWise puerta de enlace Edge
<a name="edge-apis-tutorial-temporary-credentials"></a>

Ahora que tiene el certificado firmado y el nombre de host de su puerta de enlace SiteWise Edge, necesita obtener credenciales temporales para poder ejecutar APIs en la puerta de enlace. Puede obtener estas credenciales a través de la puerta AWS OpsHub de enlace SiteWise Edge AWS IoT SiteWise o directamente desde ella mediante APIs.

**importante**  
Las credenciales caducan cada 4 horas, por lo que debe obtenerlas justo antes de utilizarlas APIs en su puerta de enlace SiteWise Edge. No almacene las credenciales en caché durante más de 4 horas.

### Obtenga credenciales temporales utilizando AWS OpsHub para AWS IoT SiteWise
<a name="edge-apis-tutorial-temp-creds-opshub"></a>

**nota**  
Necesita tener instalada la [AWS IoT SiteWise aplicación AWS OpsHub for](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app).

Para utilizar AWS IoT SiteWise la aplicación AWS OpsHub para obtener sus credenciales temporales, haga lo siguiente:

1. Inicie sesión en la aplicación.

1. Seleccione **Configuración**.

1. En **Autenticación**, elija **Copiar credenciales**.

1. Amplíe la opción que se adapte a su entorno y elija **Copiar**.

1. Guarde las credenciales para utilizarlas más tarde.

### Obtenga credenciales temporales mediante la API de SiteWise Edge Gateway
<a name="edge-apis-tutorial-temp-creds-api"></a>

Para usar la API de puerta de enlace de SiteWise Edge para obtener las credenciales temporales, puede usar un script de Python o un curl, primero necesitará tener un nombre de usuario y una contraseña para su puerta de enlace de SiteWise Edge. Las puertas de enlace SiteWise Edge utilizan la autenticación y la autorización SigV4. Para obtener más información sobre cómo añadir usuarios, consulte [LDAP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) o [Grupo de usuarios de Linux](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app). Estas credenciales se utilizarán en los siguientes pasos para obtener las credenciales locales de la puerta de enlace SiteWise Edge necesarias para utilizarla. AWS IoT SiteWise APIs

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

**nota**  
Necesita tener [urllib3](https://urllib3.readthedocs.io/en/stable/index.html) y [Python3](https://www.python.org/downloads/) instalados.

**Para obtener las credenciales mediante Python**

1. Cree un archivo llamado **get\_credentials.py** y copie en él el siguiente código.

   ```
   '''
   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. Ejecute **get\_credentials.py** desde el terminal sustituyendo `<gateway_username>` y `<gateway_password>` por las credenciales que ha creado.

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

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

**nota**  
Necesita tener [curl](https://ec.haxx.se/install/) instalado.

**Para obtener las credenciales mediante curl**

1. Ejecute el siguiente comando desde el terminal sustituyendo <gateway\_username> y <gateway\_password> por las credenciales que ha creado.

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

   La respuesta debe ser similar a la siguiente:

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

1. Ejecute el siguiente comando desde el terminal.

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

------

## Paso 4: Obtenga una lista de los modelos de activos de la puerta de enlace SiteWise Edge
<a name="edge-apis-tutorial-get-asset-models"></a>

Ahora que tiene un certificado firmado, el nombre de host de la puerta de enlace SiteWise Edge y las credenciales temporales de la puerta de enlace SiteWise Edge, puede usar la `ListAssetModels` API para obtener una lista de los modelos de activos de la puerta de enlace SiteWise Edge.

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

**nota**  
Necesitas tener instalado [Python3 y [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)](https://www.python.org/downloads/). [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)

**Para obtener la lista de modelos de activos mediante Python**

1. Cree un archivo llamado **list\_asset\_model.py** y copie el siguiente código en él.

   ```
   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. Ejecute **list\_asset\_model.py** desde el terminal.

   ```
   python3 list_asset_model.py
   ```

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

**nota**  
Necesita tener [curl](https://ec.haxx.se/install/) instalado.

**Para obtener la lista de modelos de activos mediante curl**

Ejecute el siguiente comando desde el 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"
```

La respuesta debe ser similar a la siguiente:

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

------