我正在构建AspNetCore 3.1 Web API无服务器lambda应用程序。
我被告知,连接(例如:Redis连接)的初始化应在函数处理程序之外完成。这是为了更好地利用连接池。
Azure 团队也提出了同样的建议。https:/docs.microsoft.comen-usazureazure-cache-for-rediscache-dotnet-core-quickstart。
我很期待在使用Amazon.Lambda.AspNetCoreServer时,我们如何实现它。
响应或任何其他指针来解决这个问题是非常感激的。
所以作为一个例子。
namespace blankCsharp
{
public class Function
{
private static RedisClient redisClient; <<
static Function() {
initialize();
}
static async void initialize() {
AWSSDKHandler.RegisterXRayForAllServices();
redisClient = new RedisClient('1.2.3.4', 6379, 'username', 'password'); << initialised and reusable between invocations.
await callLambda();
}
public async Task<AccountUsage> FunctionHandler(SQSEvent invocationEvent, ILambdaContext context)
{
return redisClient.get('dhddhdhdud')
}
}
}
我相信这就是你要实现的目标。通过在initialize部分的设置,只要不是冷启动,它应该能够保持调用之间的连接。
你应该记住,默认情况下Lambda会穿越互联网,所以你的Redis KV存储需要公开托管。
如果你想私下运行,你需要考虑将Lambda迁移到一个私有子网中,方法是 将其连接到VPC上.