

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á.

# Conectar-se a bancos de dados do Amazon Neptune usando a autenticação do IAM com Python
<a name="iam-auth-connecting-python"></a>

O `boto3` `neptunedata` cliente fornece a maneira mais simples de se conectar a um banco de dados Neptune habilitado para IAM a partir do Python. O cliente processa a assinatura do Signature Version 4 automaticamente, então você não precisa assinar as solicitações sozinho.

## Pré-requisitos
<a name="iam-auth-connecting-python-prereqs"></a>
+ Python 3.x
+ A `boto3` biblioteca: `pip install boto3`
+ AWS credenciais configuradas por meio de qualquer método padrão (variáveis de ambiente, arquivo de AWS configuração, perfil de instância ou função de execução do Lambda)
+ Uma política do IAM que permite `neptune-db:*` ações em seu cluster Neptune

## Conexão com credenciais padrão
<a name="iam-auth-connecting-python-default"></a>

Essa abordagem funciona quando é `boto3` possível resolver credenciais automaticamente, como em instâncias do Amazon Elastic Compute Cloud com perfis de instância, em AWS Lambda funções ou com perfis configurados AWS .

Substitua o URL do endpoint pelo endpoint do cluster Neptune.

**Gremlin e OpenCypher**

```
import boto3
from botocore.config import Config

cfg = Config(retries={"total_max_attempts": 1, "mode": "standard"}, read_timeout=None)

neptune = boto3.client('neptunedata', config=cfg,
    region_name='{{us-east-1}}',
    endpoint_url='https://{{your-neptune-endpoint}}:8182')

# Gremlin
resp = neptune.execute_gremlin_query(gremlinQuery='g.V().limit(1)')
print(resp['result'])

# openCypher
resp = neptune.execute_open_cypher_query(openCypherQuery='MATCH (n) RETURN n LIMIT 1')
print(resp['results'])
```

**SPARQL**

Atualmente, o `boto3` `neptunedata` cliente não oferece suporte ao SPARQL. Para enviar consultas SPARQL para um banco de dados Neptune habilitado para IAM, assine as solicitações manualmente usando o Signature Version 4 com os utilitários de assinatura de solicitações e `botocore` a biblioteca (). `requests` `pip install boto3 requests`

```
import requests
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest
from botocore.session import Session

endpoint = 'https://{{your-neptune-endpoint}}:8182'
region = '{{us-east-1}}'

query = 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 1'

request = AWSRequest(method='POST', url=f'{endpoint}/sparql/',
    data={'query': query})
SigV4Auth(Session().get_credentials(), 'neptune-db', region).add_auth(request)

resp = requests.post(f'{endpoint}/sparql/', headers=request.headers,
    data={'query': query})
print(resp.json())
```

**nota**  
Este exemplo é usado `botocore.session.Session` para resolver AWS credenciais automaticamente de variáveis de ambiente, arquivos de AWS configuração, perfis de instância ou funções de execução do Lambda. Você não precisa definir as credenciais explicitamente.

## Usar credenciais temporárias
<a name="iam-auth-connecting-python-temp-creds"></a>

Para acesso entre contas, sessões com limite de tempo ou como prática recomendada de segurança para evitar credenciais de longa duração, use AWS STS para obter credenciais temporárias e criar uma. `boto3.Session`

**Gremlin e OpenCypher**

```
import boto3
from botocore.config import Config

sts = boto3.client('sts')
creds = sts.assume_role(
    RoleArn='arn:aws:iam::{{123456789012}}:role/{{NeptuneRole}}',
    RoleSessionName='neptune-session'
)['Credentials']

session = boto3.Session(
    aws_access_key_id=creds['AccessKeyId'],
    aws_secret_access_key=creds['SecretAccessKey'],
    aws_session_token=creds['SessionToken'],
    region_name='{{us-east-1}}'
)

cfg = Config(retries={"total_max_attempts": 1, "mode": "standard"}, read_timeout=None)

neptune = session.client('neptunedata', config=cfg,
    endpoint_url='https://{{your-neptune-endpoint}}:8182')

# Gremlin
resp = neptune.execute_gremlin_query(gremlinQuery='g.V().limit(1)')
print(resp['result'])

# openCypher
resp = neptune.execute_open_cypher_query(openCypherQuery='MATCH (n) RETURN n LIMIT 1')
print(resp['results'])
```

**nota**  
As credenciais temporárias expiram após um intervalo especificado (o padrão é 1 hora) e não são atualizadas automaticamente pelo cliente. Para aplicativos de longa execução, use credenciais baseadas em perfil ou perfis de instância em vez disso.

**SPARQL**

Como o `boto3` `neptunedata` cliente atualmente não oferece suporte ao SPARQL, você deve assinar as solicitações manualmente com as credenciais temporárias.

```
import boto3
import requests
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest
from botocore.credentials import ReadOnlyCredentials

sts = boto3.client('sts')
creds = sts.assume_role(
    RoleArn='arn:aws:iam::{{123456789012}}:role/{{NeptuneRole}}',
    RoleSessionName='neptune-session'
)['Credentials']

endpoint = 'https://{{your-neptune-endpoint}}:8182'
region = '{{us-east-1}}'

query = 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 1'

request = AWSRequest(method='POST', url=f'{endpoint}/sparql/',
    data={'query': query})
SigV4Auth(ReadOnlyCredentials(
    creds['AccessKeyId'], creds['SecretAccessKey'], creds['SessionToken']
), 'neptune-db', region).add_auth(request)

resp = requests.post(f'{endpoint}/sparql/', headers=request.headers,
    data={'query': query})
print(resp.json())
```

## Usando com AWS Lambda
<a name="iam-auth-connecting-python-lambda"></a>

No Lambda, a função de execução fornece credenciais automaticamente por meio de. `boto3` O exemplo de credenciais padrão funciona sem modificações.

Para ver um exemplo completo do Lambda com gerenciamento de conexão e lógica de repetição, consulte. [AWS Lambda exemplos de funções para o Amazon Neptune](lambda-functions-examples.md)