Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Connessione ai database Amazon Neptune utilizzando l'autenticazione IAM con Python
Il boto3 neptunedata client fornisce il modo più semplice per connettersi a un database Neptune abilitato per IAM da Python. Il client gestisce automaticamente la firma della versione 4 di Signature, quindi non è necessario firmare personalmente le richieste.
Prerequisiti
Python 3.x
La
boto3libreria:pip install boto3AWS credenziali configurate tramite qualsiasi metodo standard (variabili di ambiente, file di AWS configurazione, profilo di istanza o ruolo di esecuzione Lambda)
Una policy IAM che consente
neptune-db:*azioni sul cluster Neptune
Connessione con credenziali predefinite
Questo approccio funziona quando boto3 è possibile risolvere automaticamente le credenziali, ad esempio su istanze Amazon Elastic Compute Cloud con profili di istanza, AWS Lambda funzioni o profili configurati. AWS
Sostituisci l'URL dell'endpoint con l'endpoint del 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
Il boto3 neptunedata client attualmente non supporta SPARQL. Per inviare query SPARQL a un database Neptune abilitato a IAM, firma le richieste manualmente utilizzando Signature Version 4 con le utilità di firma delle richieste e botocore la libreria (). 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
Questo esempio consente botocore.session.Session di risolvere automaticamente AWS le credenziali da variabili di ambiente, file di AWS configurazione, profili di istanza o ruoli di esecuzione Lambda. Non è necessario impostare le credenziali in modo esplicito.
Utilizzo di credenziali temporanee
Per l'accesso a più account, per sessioni a tempo limitato o come best practice di sicurezza per evitare credenziali di lunga durata, utilizza l'opzione per ottenere credenziali temporanee e AWS STS creare un. 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
Le credenziali temporanee scadono dopo un intervallo specificato (l'impostazione predefinita è 1 ora) e non vengono aggiornate automaticamente dal client. Per le applicazioni a esecuzione prolungata, utilizza invece credenziali basate sul profilo o profili di istanza.
SPARQL
Poiché il boto3 neptunedata client attualmente non supporta SPARQL, è necessario firmare le richieste manualmente con le credenziali temporanee.
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())
Utilizzo con AWS Lambda
In Lambda, il ruolo di esecuzione fornisce automaticamente le credenziali tramite. boto3 L'esempio di credenziali predefinite funziona senza modifiche.
Per un esempio completo di Lambda con gestione delle connessioni e logica dei tentativi, vedi. AWS Lambda esempi di funzioni per Amazon Neptune