AWS-Parameters-and-Secrets-Lambda-Extension lambda 层间歇性超时

问题描述 投票:0回答:1

当使用 AWS 提供的 lambda 层通过扩展在本地主机上缓存机密时,在高吞吐量下,我注意到从本地主机获取缓存机密的请求偶尔会挂起,因此 lambda 间歇性超时(99.5% 成功,0.5% 错误)我)

获取秘密的非常标准的代码(在nodeJs中):

const getAWSCachedSecretsMgrSecret = async secretName => {
    try {
        const { AWS_SESSION_TOKEN } = process.env;
        const headers = { 'X-Aws-Parameters-Secrets-Token': AWS_SESSION_TOKEN };
        const SECRETS_EXTENSION_HTTP_PORT = 2773;

        const secretsExtensionEndpoint = `http://localhost:${SECRETS_EXTENSION_HTTP_PORT}/secretsmanager/get?secretId=${secretName}`;

        const response = await fetch(secretsExtensionEndpoint, {
            method: 'GET',
            headers
        });

        if (!response.ok) throw new Error(`Error in getAWSCachedSecretsMgrSecret! status: ${response?.status}. Text: ${JSON.stringify(response?.text())}`);

        const data = await response.json();
        const parsed = JSON.parse(data.SecretString);

        return parsed;
    } catch (error) {
        console.log(`error in getAWSCachedSecretsMgrSecret => ${error}`);
        throw error;
    }
};

module.exports = getAWSCachedSecretsMgrSecret;

在高吞吐量时,我注意到从本地主机获取缓存秘密的请求只是挂起,因此 lambda 偶尔会超时(99.5% 成功,对我来说 0.5% 错误)

这花了一些时间来理解(答案似乎不在我可以看到的堆栈溢出上)我的工作解决方案如下..

aws-lambda aws-secrets-manager aws-lambda-layers
1个回答
0
投票

我的快速解决方案是在 lambda 上设置一个环境变量:

PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS: 200  # or whatever you need, maybe 20 is fine for you

默认值(如果你不设置它,我相信最多 3 个到本地主机的连接)。

有更优雅的解决方案来手动管理连接并发性(即强制重复使用连接并确保最多 3 个),但是将 PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS 设置为更高的值将显示这是否是您的问题,如果您也遇到间歇性挂起/层超时.

好机会!

© www.soinside.com 2019 - 2024. All rights reserved.