gpt4 book ai didi

amazon-web-services - Nest JS 微服务 (lambda) 中的 AWS Secrets 管理器定期失败

转载 作者:行者123 更新时间:2023-12-05 02:39:52 30 4
gpt4 key购买 nike

我有一个用 NestJS 的微服务制作的 lambda 函数。它使用数据库连接,我正在使用 secret 服务为其获取连接详细信息。

这是我的应用模块:

@Module({
imports: [
ConfigModule,
TypeOrmModule.forRootAsync({
useClass: SecretsService,
inject: [],
imports: [ConfigModule],
}),
PropertyModule,
],
})
export class AppModule {}

这是一个 secret 服务(ConfigModule 的一部分):

import { Injectable } from '@nestjs/common';
import { SecretsManager } from 'aws-sdk';
import { GetSecretValueResponse } from 'aws-sdk/clients/secretsmanager';
import { MysqlConnectionOptions } from 'typeorm/driver/mysql/MysqlConnectionOptions';

@Injectable()
export class SecretsService /* 👁🔫🩸 */ {

private secretsManager: SecretsManager;

constructor() {
this.secretsManager = new SecretsManager();
}

async createTypeOrmOptions(): Promise<MysqlConnectionOptions> {
console.log('before getting secret');
const { SecretString }: GetSecretValueResponse =
await this.secretsManager.getSecretValue({ SecretId: 'rds/prod' }).promise();
const secret = JSON.parse(SecretString);
console.log('after getting a secret', SecretString);

return {
/* database config */
};
}
}

事实证明,代码并不总是到达“获得 secret 之后”的部分。以下是一些案例

我更改了代码中的某些内容并部署了新版本的 lambda,但它一直停留在“获取 secret 之前”。我等了 5 分钟,然后再次触发该功能,然后我等了 10 分钟。相同的结果。

然后我等了大约 20 分钟,请求就通过了。之后,我可以连续多次触发相同的功能,每次都看到“获得 secret 后”。

所以它其实不是周期性的失败,而是周期性的工作。似乎有某种限制和/或缓存,但我没有在代码中看到它。

请帮我解决这个问题。我怎样才能每次都得到我的 secret ?

最佳答案

从 AWS Lambda 访问 Secrets Manager 时,您应该使用客户端缓存和退避/重试。

有关更多信息,请参阅 Secrets Manager Best Practices .

关于amazon-web-services - Nest JS 微服务 (lambda) 中的 AWS Secrets 管理器定期失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68897564/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com