

 [AWS SDK for JavaScript V3 API リファレンスガイド](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)では、 AWS SDK for JavaScript バージョン3 (V3) のすべての API オペレーションについて詳しく説明します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Node.js の考慮事項
<a name="node-js-considerations"></a>

Node.js コードは JavaScript ですが、Node.js AWS SDK for JavaScript での の使用は、ブラウザスクリプトでの SDK の使用とは異なる場合があります。一部の API メソッドは Node.js で動作しますが、ブラウザスクリプトでは動作しません。また、その逆も生じます。また、一部の API をうまく使用するには、`File System (fs)` モジュールなどの他の Node.js モジュールをインポートして使用するなど、一般的な Node.js コーディングパターンに精通している必要があります。

**注記**  
AWS では、開発にアクティブ LTS バージョンの Node.js を使用することをお勧めします。

## 組み込み Node.js モジュールの使用
<a name="node-common-modules"></a>

Node.js では、インストールしなくても使用できる一連の組み込みモジュールを提供します。これらのモジュールを使用するには、モジュール名を指定するために `require` メソッドを使ってオブジェクトを作成します。たとえば、組み込みの HTTP モジュールを含めるには、次のようにします。

```
import http from 'http';
```

モジュールのメソッドを、そのオブジェクトのメソッドであるかのように呼び出します。たとえば、次に示すのは HTML ファイルを読み込むコードです。

```
// include File System module
import fs from "fs"; 
// Invoke readFile method 
fs.readFile('index.html', function(err, data) {
  if (err) {
    throw err;
  } else {
    // Successful file read
  }
});
```

Node.js が提供するすべての組み込みモジュールの完全なリストについては、Node.js ウェブサイトの「[Node.js のドキュメント](https://nodejs.org/api/modules.html)」を参照してください。

## npm パッケージの使用
<a name="node-npm-packages"></a>

組み込みのモジュールに加えて、Node.js パッケージマネージャーの`npm`から、サードパーティーコードを含めたり、組み込んだりすることもできます。これは、オープンソースの Node.js パッケージとそれらのパッケージをインストールするためのコマンドラインインターフェイスのリポジトリです。`npm` の詳細と現在利用可能なパッケージのリストについては、[https://www.npmjs.com](https://www.npmjs.com) を参照してください。使用できる追加の Node.js パッケージについて、[GitHub のこちら](https://github.com/sindresorhus/awesome-nodejs)で学ぶこともできます。

# Node.js で maxSockets を設定する
<a name="node-configuring-maxsockets"></a>

Node.js では、オリジンあたりの最大接続数を設定できます。` maxSockets` が設定されている場合、低レベルの HTTP クライアントはリクエストをキューに入れ、利用可能になったときに、ソケットに割り当てます。

これにより、一度に特定のオリジンへの同時リクエスト数の上限を設定できます。この値を小さくすると、受信したスロットリングエラーまたはタイムアウトエラーの数を減らすことができます。ただし、ソケットが使用可能になるまでリクエストがキューに入れられるため、メモリ使用量も増加する可能性があります。

次の例は、DynamoDB クライアント用に`maxSockets`を設定する方法を示しています。

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import https from "https";    
let agent = new https.Agent({
  maxSockets: 25
});

let dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    requestTimeout: 3_000,
    httpsAgent: agent
  });
});
```

値または `Agent` オブジェクトを指定しない場合、SDK for JavaScript は `maxSockets` の値として 50 を使用します。`Agent` オブジェクトを指定すると、その `maxSockets` 値が使用されます。Node.js で `maxSockets` を設定する方法の詳細については、[Node.js のオンラインドキュメント](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets)を参照してください。

の v3.521.0 以降では AWS SDK for JavaScript、次の[短縮構文](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#new-in-v35210)を使用して を設定できます`requestHandler`。

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient({
  requestHandler: {
    requestTimeout: 3_000,
    httpsAgent: { maxSockets: 25 },
  },
});
```

# Node.js で Keep-alive を使用して接続を再利用する
<a name="node-reusing-connections"></a>

デフォルトの Node.js HTTP/HTTPS エージェントは新しいリクエストがあるたびに新しい TCP 接続を作成します。新しい接続を確立するコストを回避するために、 は*デフォルトで* TCP 接続を AWS SDK for JavaScript 再利用します。

Amazon DynamoDB クエリなどの短期間のオペレーションでは、TCP 接続を設定する際のレイテンシーのオーバーヘッドが、オペレーション自体よりも大きくなる可能性があります。さらに、保管時の DynamoDB 暗号化は と統合されているため[AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)、データベースからのレイテンシーがオペレーションごとに新しい AWS KMS キャッシュエントリを再確立しなければならない場合があります。 [https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)

TCP 接続を再利用しない場合は、DynamoDB クライアントの次の例に示すように、サービスクライアントごとに `keepAlive` でこれらの接続の再利用を無効にすることもできます。

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";

const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpsAgent: new Agent({ keepAlive: false })
    })
});
```

`keepAlive`が有効になっている場合、TCPキープアライブパケットの初期遅延を`keepAliveMsecs`に設定することもできます。これは、デフォルトでは1000ミリ秒(ms)です。詳細については、[Node.js のドキュメント](https://nodejs.org/api/http.html#new-agentoptions)を参照してください。

# Node.js 用のプロキシの設定
<a name="node-configuring-proxies"></a>

インターネットに直接接続できない場合、SDK for JavaScript は サードパーティーの HTTP エージェントを介した HTTP または HTTPS プロキシの使用をサポートします。

サードパーティーの HTTP エージェントを検索するには、[npm](https://www.npmjs.com/)で「HTTP プロキシ」を検索します。

サードパーティーの HTTP エージェントプロキシをインストールするには、コマンドプロンプトで次のように入力します。ここでは*PROXY*（プロキシ）は`npm`パッケージの名前です。

```
npm install PROXY --save
```

アプリケーションでプロキシを使用するには、DynamoDBクライアントの次の例に示すように、`httpAgent`と ` httpsAgent`プロパティを使用します。

```
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { HttpsProxyAgent } from "hpagent";
const agent = new HttpsProxyAgent({ proxy: "http://internal.proxy.com" });
const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpAgent: agent,
        httpsAgent: agent
    }),
});
```

**注記**  
`httpAgent`は`httpsAgent`と同じではなく、クライアントからのほとんどの呼び出しは `https` になるため、両方を設定する必要があります。

# Node.js で証明書バンドルを登録する
<a name="node-registering-certs"></a>

Node.js のデフォルトの信頼ストアには、 AWS のサービスへのアクセスに必要な証明書が含まれています 場合によっては、特定の証明書セットのみを含めることが望ましい場合があります。

この例では、指定された証明書が提供されない限り、接続を拒否する ` https.Agent` を作成するためにディスク上の特定の証明書が使用されます。新しく作成された`https.Agent`は、その次に、DynamoDB クライアントによって使用されます。

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";
import { readFileSync } from "fs";
const certs = [readFileSync("/path/to/cert.pem")];
const agent = new Agent({
  rejectUnauthorized: true,
  ca: certs
});
const dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    httpAgent: agent,
    httpsAgent: agent
  })
});
```