View a markdown version of this page

Conectar-se a bancos de dados do Amazon Neptune usando a autenticação do IAM com Python - Amazon Neptune

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

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