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
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
Python 3.x
A
boto3biblioteca:pip install boto3AWS 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
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
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
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