【问题标题】:How do I set a timeout for AWS V3 Dynamo Clients如何为 AWS V3 Dynamo 客户端设置超时
【发布时间】:2021-06-06 16:18:50
【问题描述】:

我已经开始为我的一些服务使用新的 AWS 版本 3 sdk。不幸的是,如何使用版本 2 sdk 中提供的模块化版本 3 代码中的某些功能并不总是很清楚。

要为非模块化 sdk 设置超时,您可以执行以下操作:

AWS.config.update({
     httpOptions: {
        connectTimeout: 10000,
        timeout: 10000
    }
 });

但是,当我想使用版本 3 sdk 并使用 Dynamo 客户端时,我明确尝试不使用全局 AWS 对象。据我所知,DynamoDBClient 的配置输入不接受 httpOptions,这是通常设置超时的地方。

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
const REGION = process.env.AWS_REGION;
const v3DynamoClient: DynamoDBClient = new DynamoDBClient({ region: REGION });

如何在 AWS V3 sdk 中为 DynamoDBClient 设置超时?

【问题讨论】:

    标签: amazon-dynamodb aws-sdk-js


    【解决方案1】:

    这是一个设置 TLS v1.2 选项的示例,应该会有所帮助:

    const https = require("https");
    const {NodeHttpHandler} = require("@aws-sdk/node-http-handler");
    const {DynamoDBClient} = require("@aws-sdk/client-dynamodb");
    const client = new DynamoDBClient({
      region: "us-west-2",
      requestHandler: new NodeHttpHandler({
        httpsAgent: new https.Agent({secureProtocol: 'TLSv1_2_method'})
      })
    });
    

    您应该可以将选项中的connectionTimeoutsocketTimeout 设置为NodeHttpHandler

    另外,值得一读的SDK v3 Developer Guide

    【讨论】:

    • 要补充一点,timeout 现在是 socketTimeoutconnectTimeoutconnectionTimeout。你可以阅读更多here
    【解决方案2】:

    这个link about upgrading 似乎有一个例子,在关于httpOptions 的部分。那里的示例中有一个明显的错字。直接看新的 AWS v3 代码,很明显不需要指定代理(如果代理没有通过,则有默认值)——所以这个例子就足够了。

    // Use default Https agent, but override the socket timeout
    const requestHandler = new NodeHttpHandler({
      connectionTimeout: 30000,
      socketTimeout: 30000,
    });
    
    const options = {
      region: AWS_REGION,
      maxAttempts: 2,
      requestHandler, // Use handler with alternate settings for timeouts
    };
    export const dynamodbClient = new DynamoDB(options);
    

    【讨论】:

    • 这对我不起作用,但我使用的是 DynamoDBClient 类而不是 DynamoDB 类。我正在使用 PutItemCommand 参数调用 DynamoDBClient.send 方法。我在 Lambda 中运行该函数,超时时间为 3 分钟,但 Lambda 在 DynamoDB 连接尝试之前超时。 new NodeHttpHandler({ connectionTimeout: 30000, socketTimeout: 30000 }).
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2011-03-09
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多