Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menghubungkan ke database Amazon Neptune menggunakan otentikasi IAM dengan Python
boto3neptunedataKlien menyediakan cara paling sederhana untuk terhubung ke database IAM-enabled Neptunus dari Python. Klien menangani penandatanganan Signature Version 4 secara otomatis, jadi Anda tidak perlu menandatangani permintaan sendiri.
Prasyarat
Python 3.x
Per
boto3pustakaan:pip install boto3AWS kredenSIAL dikonfigurasi melalui metode standar apa pun (variabel lingkungan, file AWS konfigurasi, profil instance, atau peran eksekusi Lambda)
Kebijakan IAM yang memungkinkan
neptune-db:*tindakan pada cluster Neptunus Anda
Menghubungkan dengan kredentif default
Pendekatan ini berfungsi ketika boto3 dapat menyelesaikan kredenSIAL secara otomatis, seperti pada instans Amazon Elastic Compute Cloud dengan profil instans, dalam AWS Lambda fungsi, atau dengan AWS profil yang dikonfigurasi.
Ganti URL titik akhir dengan titik akhir cluster Neptunus Anda.
Gremlin dan 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
boto3neptunedataKlien saat ini tidak mendukung SPARQL. Untuk mengirim kueri SPARQL ke database IAM-enabled Neptune, tanda tangani permintaan secara manual dengan menggunakan Signature Version 4 dengan utilitas botocore penandatanganan permintaan dan requests library (). 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())
catatan
Contoh ini digunakan botocore.session.Session untuk menyelesaikan AWS kredenSIAL secara otomatis dari variabel lingkungan, file AWS konfigurasi, profil instance, atau peran eksekusi Lambda. Anda tidak perlu mengatur kredenSIAL secara eksplisit.
Menggunakan kredensial sementara
Untuk akses lintas akun, sesi terbatas waktu, atau sebagai praktik terbaik keamanan untuk menghindari kredenSIAL berumur panjang, gunakan AWS STS untuk mendapatkan kredenSIAL sementara dan membuat. boto3.Session
Gremlin dan 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'])
catatan
KredenSIAL sementara kedaluwarsa setelah interval tertentu (defaultnya adalah 1 jam) dan tidak diperbarui secara otomatis oleh klien. Untuk aplikasi yang berjalan lama, gunakan kredenSIAL berbasis profil atau profil instance sebagai gantinya.
SPARQL
Karena boto3 neptunedata klien saat ini tidak mendukung SPARQL, Anda harus menandatangani permintaan secara manual dengan kredenSIAL sementara.
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())
Menggunakan dengan AWS Lambda
Di Lambda, peran eksekusi menyediakan kredenSIAL secara otomatis melaluiboto3. Contoh kredenSIAL default berfungsi tanpa modifikasi.
Untuk contoh Lambda lengkap dengan manajemen koneksi dan logika coba ulang, lihat. AWS Lambda contoh fungsi untuk Amazon Neptunus