

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menghubungkan ke database Amazon Neptunus menggunakan otentikasi IAM dengan Python
<a name="iam-auth-connecting-python"></a>

`boto3``neptunedata`Klien 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
<a name="iam-auth-connecting-python-prereqs"></a>
+ Python 3.x
+ `boto3`Perpustakaan: `pip install boto3`
+ AWS kredensil yang dikonfigurasi melalui metode standar apa pun (variabel lingkungan, file AWS konfigurasi, profil instance, atau peran eksekusi Lambda)
+ Kebijakan IAM yang memungkinkan `neptune-db:*` tindakan di cluster Neptunus Anda

## Menghubungkan dengan kredensi default
<a name="iam-auth-connecting-python-default"></a>

Pendekatan ini berfungsi ketika `boto3` dapat menyelesaikan kredensil secara otomatis, seperti pada instans Amazon Elastic Compute Cloud dengan profil instans, dalam AWS Lambda fungsi, atau dengan profil yang dikonfigurasi. AWS 

Ganti URL endpoint dengan endpoint 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**

`boto3``neptunedata`Klien saat ini tidak mendukung SPARQL. Untuk mengirim kueri SPARQL ke database IAM-enabled Neptunus, tandatangani permintaan secara manual dengan menggunakan Signature Version 4 dengan utilitas penandatanganan permintaan dan library (). `botocore` `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())
```

**catatan**  
Contoh ini digunakan `botocore.session.Session` untuk menyelesaikan AWS kredensyal secara otomatis dari variabel lingkungan, file AWS konfigurasi, profil instance, atau peran eksekusi Lambda. Anda tidak perlu mengatur kredensil secara eksplisit.

## Menggunakan kredensial sementara
<a name="iam-auth-connecting-python-temp-creds"></a>

Untuk akses lintas akun, sesi terbatas waktu, atau sebagai praktik terbaik keamanan untuk menghindari kredensi berumur panjang, gunakan AWS STS untuk mendapatkan kredensil sementara dan buat file. `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**  
Kredensyal sementara kedaluwarsa setelah interval tertentu (defaultnya adalah 1 jam) dan tidak diperbarui secara otomatis oleh klien. Untuk aplikasi yang berjalan lama, gunakan kredensi berbasis profil atau profil instance sebagai gantinya.

**SPARQL**

Karena `boto3` `neptunedata` klien saat ini tidak mendukung SPARQL, Anda harus menandatangani permintaan secara manual dengan kredensi 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
<a name="iam-auth-connecting-python-lambda"></a>

Di Lambda, peran eksekusi memberikan kredensyal secara otomatis melalui. `boto3` Contoh kredensyal default berfungsi tanpa modifikasi.

Untuk contoh Lambda lengkap dengan manajemen koneksi dan logika coba lagi, lihat. [AWS Lambda contoh fungsi untuk Amazon Neptunus](lambda-functions-examples.md)