

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: Listar modelos de ativos em um gateway AWS IoT SiteWise Edge
<a name="edge-apis-tutorial"></a>

Você pode usar um subconjunto do disponível AWS IoT SiteWise APIs junto com o específico da borda APIs para interagir com os modelos de ativos e seus ativos na borda. Este tutorial orientará você na obtenção de credenciais temporárias em um gateway do AWS IoT SiteWise Edge e na obtenção de uma lista dos modelos de ativos no gateway do SiteWise Edge.

## Pré-requisitos
<a name="edge-apis-tutorial-prerequisites"></a>

Nas etapas deste tutorial, você pode usar uma variedade de ferramentas. Para usar essas ferramentas, certifique-se de que você tem os pré-requisitos correspondentes instalados.

Para concluir este tutorial, você precisará do seguinte:
+ Um [AWS IoT SiteWise Requisitos de gateway auto-hospedado do Edge](configure-gateway-ggv2.md) implantado e em execução 
+ Acesso ao seu gateway SiteWise Edge na mesma rede pela porta 443.
+ [OpenSSL](https://www.openssl.org/) instalado
+ (AWS OpsHub para AWS IoT SiteWise) O [AWS IoT SiteWise aplicativo AWS OpsHub for](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) instalado [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)

## Etapa 1: Obter um certificado assinado pelo serviço SiteWise Edge Gateway
<a name="edge-apis-tutorial-gateway-cert"></a>

Para estabelecer uma conexão TLS com a APIs disponível no gateway SiteWise Edge, você precisa de um certificado confiável. Você pode gerar esse certificado usando um AWS OpsHub OpenSSL ou for. AWS IoT SiteWise

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

**nota**  
Você precisa do [OpenSSL](https://www.openssl.org/) instalado para executar esse comando.

Abra um terminal e execute o comando a seguir para obter um certificado assinado do gateway SiteWise Edge. `<sitewise_gateway_ip>`Substitua pelo IP do gateway 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 ]

Você pode usar AWS OpsHub para AWS IoT SiteWise. Para obter mais informações, consulte [Gerencie gateways SiteWise Edge](manage-gateways-ggv2.md).

------

O caminho absoluto para o certificado de gateway SiteWise Edge baixado é usado neste tutorial. Execute o comando a seguir para exportar o caminho completo do seu certificado, substitua `<absolute_path_to_certificate>` pelo caminho para o certificado:

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

## Etapa 2: Obtenha o nome de host SiteWise do gateway Edge
<a name="edge-apis-tutorial-gateway-hostname"></a>

**nota**  
Você precisa do [OpenSSL](https://www.openssl.org/) instalado para executar esse comando.

Para concluir o tutorial, você precisará do nome do host do seu gateway SiteWise Edge. Para obter o nome do host do seu gateway SiteWise Edge, execute o seguinte, `<sitewise_gateway_ip>` substituindo pelo IP do gateway SiteWise Edge:

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

Execute o comando a seguir para exportar o nome do host para uso posterior, `<your_edge_gateway_hostname>` substituindo-o pelo nome do host do seu gateway SiteWise Edge:

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

## Etapa 3: Obtenha credenciais temporárias para seu gateway SiteWise Edge
<a name="edge-apis-tutorial-temporary-credentials"></a>

Agora que você tem o certificado assinado e o nome do host do seu gateway SiteWise Edge, você precisa obter credenciais temporárias para poder executar APIs no gateway. Você pode obter essas credenciais AWS OpsHub por meio de AWS IoT SiteWise ou diretamente do gateway SiteWise Edge usando APIs.

**Importante**  
As credenciais expiram a cada 4 horas, então você deve obtê-las antes de usá-las APIs em seu SiteWise gateway Edge. Não armazene credenciais no cache por mais de 4 horas.

### Obtenha credenciais temporárias usando AWS OpsHub para AWS IoT SiteWise
<a name="edge-apis-tutorial-temp-creds-opshub"></a>

**nota**  
Você precisa do [AWS IoT SiteWise aplicativo AWS OpsHub for](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) instalado.

Para usar o AWS IoT SiteWise aplicativo AWS OpsHub para obter suas credenciais temporárias, faça o seguinte:

1. Faça login no aplicativo.

1. Escolha **Configurações**.

1. Em **Autenticação**, escolha **Copiar credenciais**.

1. Expanda a opção adequada ao seu ambiente e escolha **Copiar**.

1. Salve as credenciais para usar depois.

### Obtenha credenciais temporárias usando a API do SiteWise Edge Gateway
<a name="edge-apis-tutorial-temp-creds-api"></a>

Para usar a API do gateway do SiteWise Edge para obter as credenciais temporárias, você pode usar um script Python ou curl. Primeiro, você precisará ter um nome de usuário e uma senha para SiteWise o gateway do Edge. Os gateways SiteWise Edge usam autenticação e autorização SigV4. Para obter mais informações sobre como adicionar usuários, consulte [LDAP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) ou [grupo de usuários Linux](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app). Essas credenciais serão usadas nas etapas a seguir para obter as credenciais locais em seu gateway SiteWise Edge que são necessárias para usar o. AWS IoT SiteWise APIs

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

**nota**  
Você precisa ter [urllib3](https://urllib3.readthedocs.io/en/stable/index.html) e [Python3](https://www.python.org/downloads/) instalados.

**Para obter as credenciais usando Python**

1. Crie um arquivo chamado **get\_credentials.py** e copie o código a seguir nele.

   ```
   '''
   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. Execute o **get\_credentials.py** a partir do terminal substituindo `<gateway_username>` e `<gateway_password>` pelas credenciais que você criou.

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

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

**nota**  
Você precisa ter o [curl](https://ec.haxx.se/install/) instalado.

**Para obter as credenciais usando curl**

1. Execute o comando a seguir a partir do terminal substituindo <gateway\_username> e <gateway\_password> pelas credenciais que você criou.

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

   A resposta deve ser parecida com o seguinte:

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

1. Execute o seguinte comando no seu terminal.

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

------

## Etapa 4: Obtenha uma lista dos modelos de ativos no gateway SiteWise Edge
<a name="edge-apis-tutorial-get-asset-models"></a>

Agora que você tem um certificado assinado, o nome de host do gateway SiteWise Edge e credenciais temporárias do gateway SiteWise Edge, você pode usar a `ListAssetModels` API para obter uma lista dos modelos de ativos no gateway SiteWise Edge.

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

**nota**  
Você precisa do [Python3, do Boto3](https://www.python.org/downloads/) [e instalado](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html). [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)

**Para obter a lista de modelos de ativo usando Python**

1. Crie um arquivo chamado **list\_asset\_model.py** e copie o código a seguir nele.

   ```
   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. Execute o **list\_asset\_model.py** a partir do terminal.

   ```
   python3 list_asset_model.py
   ```

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

**nota**  
Você precisa ter o [curl](https://ec.haxx.se/install/) instalado.

**Para obter a lista de modelos de ativo usando curl**

Execute o comando a seguir no 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"
```

A resposta deve ser parecida com o seguinte:

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

------