

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 IAM 身分驗證搭配 Gremlin JavaScript 連線至 Amazon Neptune 資料庫
<a name="gremlin-javascript-iam-auth"></a>

## 概觀
<a name="gremlin-javascript-iam-auth-overview"></a>

 本指南示範如何使用 Gremlin JavaScript 驅動程式、Signature 第 4 版身分驗證和適用於 Javascript v3 的 AWS SDK 來連線至已啟用 IAM 身分驗證的 Amazon Neptune 資料庫。

## 先決條件
<a name="gremlin-javascript-iam-auth-prereqs"></a>
+  啟用 IAM 身分驗證的 Amazon Neptune 叢集。
+  節點 13 或更新版本 （請參閱 Gremlin JavaScript 的最低版本和適用於 [AWS Javascript v3 的 SDK](https://docs.aws.amazon.com//AWSJavaScriptSDK/v3/latest/introduction/#release-cadence))。
+  AWS 設定的登入資料 （透過環境變數、共用登入資料檔案或 IAM 角色）。

## 建立基本連線
<a name="gremlin-javascript-iam-auth-basic-connection"></a>

 使用下列程式碼範例做為如何使用 Gremlin JavaScript 驅動程式與 IAM 身分驗證建立基本連線的指引。

```
const { fromNodeProviderChain } = require('@aws-sdk/credential-providers');
const { getUrlAndHeaders } = require('gremlin-aws-sigv4/lib/utils');
const { loadConfig } = require("@smithy/node-config-provider");
const { NODE_REGION_CONFIG_FILE_OPTIONS, NODE_REGION_CONFIG_OPTIONS } = require("@smithy/config-resolver");

const gremlin = require('gremlin');
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const traversal = gremlin.process.AnonymousTraversalSource.traversal;

const DEFAULT_REGION = 'us-east-1';

const getCredentials = async () => {
    try {
        // Loads the default credential provider chain
        return await fromNodeProviderChain();
    } catch (e) {
        console.error("No credentials found", e);
        throw e;
    }
};

(main = async () => {
    console.log('Starting');

    const credentials = await getCredentials();
    try {
        // region set inside config profile or via AWS_REGION environment variable will be loaded
        credentials['region'] = await loadConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS)();
    } catch (e) {
        credentials['region'] = DEFAULT_REGION
    }

    const connInfo = getUrlAndHeaders(
        'you.cluster.endpoint.neptune.amazonaws.com',
        '8182',
        credentials,
        '/gremlin',
        'wss');

    const dc = new DriverRemoteConnection(connInfo['url'], {headers: connInfo['headers']});
    const g = traversal().withRemote(dc);

    const query = g.V().limit(5).count();
    const count = await query.next();
    console.log("Vertex count: " + count.value);

    await dc.close();
})

main();
```