Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Herstellen einer Verbindung zu Amazon Neptune Neptune-Datenbanken mithilfe der IAM-Authentifizierung mit Python
Der boto3 neptunedata Client bietet die einfachste Möglichkeit, von Python aus eine Verbindung zu einer IAM-fähigen Neptune-Datenbank herzustellen. Der Client verarbeitet das Signieren mit Signature Version 4 automatisch, sodass Sie Anfragen nicht selbst signieren müssen.
Voraussetzungen
Python 3.x
Die
boto3Bibliothek:pip install boto3AWS Anmeldeinformationen, die mit einer beliebigen Standardmethode konfiguriert wurden (Umgebungsvariablen, AWS Konfigurationsdatei, Instanzprofil oder Lambda-Ausführungsrolle)
Eine IAM-Richtlinie, die
neptune-db:*Aktionen auf Ihrem Neptune-Cluster ermöglicht
Verbindung mit Standardanmeldedaten herstellen
Dieser Ansatz funktioniert, wenn Anmeldeinformationen automatisch aufgelöst werden boto3 können, z. B. auf Amazon Elastic Compute Cloud-Instances mit Instanzprofilen, in AWS Lambda Funktionen oder mit konfigurierten AWS Profilen.
Ersetzen Sie die Endpunkt-URL durch Ihren Neptune-Cluster-Endpunkt.
Gremlin und 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
Der boto3 neptunedata Client unterstützt SPARQL derzeit nicht. Um SPARQL-Abfragen an eine IAM-fähige Neptune-Datenbank zu senden, signieren Sie Anfragen manuell, indem Sie Signature Version 4 mit den Dienstprogrammen zur botocore Anforderungssignierung und der Bibliothek () verwenden. 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())
Anmerkung
In diesem Beispiel botocore.session.Session werden AWS Anmeldeinformationen automatisch aus Umgebungsvariablen, AWS Konfigurationsdateien, Instanzprofilen oder Lambda-Ausführungsrollen aufgelöst. Sie müssen die Anmeldeinformationen nicht explizit festlegen.
Verwenden temporärer Anmeldeinformationen
Verwenden Sie für kontoübergreifenden Zugriff, zeitlich begrenzte Sitzungen oder als bewährte Sicherheitsmethode zur Vermeidung langlebiger Anmeldeinformationen, temporäre Anmeldeinformationen abzurufen und eine AWS STS zu erstellen. boto3.Session
Gremlin und 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'])
Anmerkung
Temporäre Anmeldeinformationen laufen nach einem bestimmten Intervall ab (die Standardeinstellung ist 1 Stunde) und werden vom Client nicht automatisch aktualisiert. Verwenden Sie für Anwendungen mit langer Laufzeit stattdessen profilbasierte Anmeldeinformationen oder Instanzprofile.
SPARQL
Da der boto3 neptunedata Client SPARQL derzeit nicht unterstützt, müssen Sie Anfragen manuell mit den temporären Anmeldeinformationen signieren.
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())
Verwenden mit AWS Lambda
In Lambda stellt die Ausführungsrolle Anmeldeinformationen automatisch bereit. boto3 Das Beispiel für Standardanmeldedaten funktioniert ohne Änderung.
Ein vollständiges Lambda-Beispiel mit Verbindungsmanagement und Wiederholungslogik finden Sie unter. AWS Lambda Funktionsbeispiele für Amazon Neptune