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.
Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python
El boto3 neptunedata cliente proporciona la forma más sencilla de conectarse a una base de datos de Neptune desde Python. IAM-enabled El cliente gestiona la firma de Signature Version 4 automáticamente, por lo que no es necesario que firme las solicitudes usted mismo.
Requisitos previos
Python 3.x
La
boto3biblioteca:pip install boto3AWS credenciales configuradas mediante cualquier método estándar (variables de entorno, archivo de AWS configuración, perfil de instancia o rol de ejecución de Lambda)
Una política de IAM que permite realizar
neptune-db:*acciones en tu clúster de Neptune
Conectarse con las credenciales predeterminadas
Este enfoque funciona cuando se boto3 pueden resolver las credenciales automáticamente, como en las instancias de Amazon Elastic Compute Cloud con perfiles de instancia, en AWS Lambda funciones o con AWS perfiles configurados.
Sustituya la URL del punto de enlace por el punto de enlace del clúster de Neptune.
Gremlin y 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
El boto3 neptunedata cliente no es compatible actualmente con SPARQL. Para enviar consultas de SPARQL a una base de datos de IAM-enabled Neptune, firme las solicitudes manualmente mediante la versión 4 de Signature con las utilidades de firma de botocore solicitudes y la 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 ejemplo se utiliza botocore.session.Session para resolver automáticamente AWS las credenciales de las variables de entorno, los archivos de AWS configuración, los perfiles de instancia o las funciones de ejecución de Lambda. No es necesario establecer las credenciales de forma explícita.
Uso de credenciales temporales
Para el acceso entre cuentas, las sesiones de tiempo limitado o como práctica recomendada de seguridad para evitar que las credenciales duren mucho, utilízalas AWS STS para obtener credenciales temporales y crear una. boto3.Session
Gremlin y 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
Las credenciales temporales caducan tras un intervalo específico (el valor predeterminado es de 1 hora) y el cliente no las actualiza automáticamente. Para las aplicaciones que se ejecutan durante mucho tiempo, utilice en su lugar credenciales basadas en perfiles o perfiles de instancia.
SPARQL
Como el boto3 neptunedata cliente no admite actualmente SPARQL, debe firmar las solicitudes manualmente con las credenciales temporales.
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())
Using with AWS Lambda
En Lambda, la función de ejecución proporciona las credenciales automáticamente. boto3 El ejemplo de credenciales predeterminadas funciona sin modificaciones.
Para ver un ejemplo completo de Lambda con administración de conexiones y lógica de reintentos, consulte. AWS Lambda ejemplos de funciones para Amazon Neptune