[小ネタ] AWS SDK for JavaScriptバージョン3 (V3)でtimeoutの設定を行う

2021.08.27

どうも!オペレーション部の西村祐二です。

Lambda内部でAWS SDKを使ってAWSサービスと通信する際にたまに応答がなかったりしてLambdaがタイムアウトすることがあります。そのときの対策としてSDKに対して適切なTimeout値を設定してリトライさせることで対処することをよくやります。

AWS SDK for JavaScript v2のTimeout値の設定方法は調べればたくさん情報が出てくるのですがv3についてはすぐに見つけられなかったので備忘録兼ねてブログに記載しておきます。

設定方法

ドキュメントに明確な設定方法の記載を見つけることができず、いろいろ探したところ、GitHubのレポジトリのv3へのアップグレードに関するドキュメントで設定方法を確認することができました。

aws-sdk-js-v3/UPGRADING.md at main · aws/aws-sdk-js-v3

const { Agent } = require("https");
const { Agent: HttpAgnet } = require("http");
const { NodeHttpHandler } = require("@aws-sdk/node-http-handler");
const dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    httpsAgent: new Agent({
      /*params*/
    }),
    connectionTimeout: /*number in milliseconds*/
    socketTimeout: /*number in milliseconds*/
  }),
});

AWSサービスを操作する(上記の例はDynamoDBを操作する)ためのClient作成時にrequestHandlerにconnectionTimeoutsocketTimeoutを設定したNodeHttpHandlerを指定することでTimeout値を設定することができます。また、単位がミリ秒なので5秒に設定したいときは5000とする必要があります。

NodeHttpHandlerのドキュメントは下記になります。

NodeHttpHandler | AWS SDK for JavaScript v3

さいごに

AWS SDK for JavaScriptバージョン 3 (V3)におけるtimeout値の設定方法について記載しました。

v3に関する情報はすぐに見つけられなかったので備忘録兼ねてブログにしました。

誰かの参考になれば幸いです。