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 Neptune habilitada para IAM desde Python. El cliente gestiona automáticamente la firma de la versión 4 de Signature, 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 función de ejecución de Lambda)
Una política de IAM que permite realizar
neptune-db:*acciones en su 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 final por el punto final 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 Neptune habilitada para IAM, firme las solicitudes manualmente mediante Signature Version 4 con las utilidades de firma de solicitudes y botocore 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 acceder a varias cuentas, realizar sesiones con un límite de tiempo o, como medida de seguridad recomendada para evitar que las credenciales duren mucho tiempo, utilícelas 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 después de un intervalo específico (el valor predeterminado es de 1 hora) y el cliente no las actualiza automáticamente. En el caso de las aplicaciones de ejecución prolongada, utilice credenciales basadas en perfiles o perfiles de instancia en su lugar.
SPARQL
Como el boto3 neptunedata cliente no es compatible actualmente con 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 AWS Lambda with
En Lambda, la función de ejecución proporciona credenciales automáticamente de forma automática. 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