【发布时间】:2022-12-07 07:25:10
【问题描述】:
尝试获取 ILambdaContext 对象 - 下面的示例和用例。我正在使用点网 6
public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{
internal static ILambdaContext Context;
public override async Task<APIGatewayProxyResponse> FunctionHandlerAsync(APIGatewayProxyRequest request, ILambdaContext lambdaContext)
{
Context = lambdaContext;
return await base.FunctionHandlerAsync(request, lambdaContext);
}
protected override void Init(IWebHostBuilder builder)
{
var variables = JsonConvert.SerializeObject(Context);
//var variables = JsonConvert.Serliaze
throw new Exception($"{variables}");
var environment = "Beta";// arr[arr.Length - 1];
//builder.UseStartup<Startup>();
builder.ConfigureAppConfiguration((c, b) =>
{
b.AddJsonFile("appsettings.json");
b.AddSystemsManager((source) =>
{
var awsOptions = new AWSOptions();
awsOptions.Region = RegionEndpoint.EUWest1;
source.Path = $"/common";
source.AwsOptions = awsOptions;
source.ReloadAfter = TimeSpan.FromMinutes(5);
});
b.AddSystemsManager((source) =>
{
var awsOptions = new AWSOptions();
awsOptions.Region = RegionEndpoint.EUWest1;
source.Path = $"/{environment}";
source.AwsOptions = awsOptions;
source.ReloadAfter = TimeSpan.FromMinutes(5);
});
}).UseStartup<Startup>();
}
}
我使用来自 here 的示例来尝试覆盖 FunctionHandlerAsync 入口点,但 Lambda 上下文为空。我也尝试过许多其他路径,但都失败了。
我的目标是从 lambda 上下文中获取别名以用作环境配置。我已经阅读了大部分互联网内容,但我仍然无法做到这一点。
【问题讨论】:
-
这个 lambda 函数的目的是什么?
Init在FunctionHandlerAsync之前调用,因此context在Init方法期间不可用。这就是为什么你越来越空?你能解释一下重写 Init 方法的目的是什么吗? -
这是你的处理程序类吗?
-
如果您尝试使用 Lambda 函数运行 Web 应用程序,那么您需要了解 Lambda 函数并非用于此目的。你能解释一下你到底想达到什么目的吗? @daveBM
-
@Chetan Init 应该在 FunctionHandlerAsync 之后被调用,因为处理程序是方法中的入口点。我什至尝试将 ILambdaContext 序列化为 json,然后将其打印出来,但它在 FunctionHandlerAsync 方法中为 null
-
@Chetan 这是一个无状态的 webapi,我已经在 Lambda 中运行了一段时间。我基本上是在尝试获取函数的别名 var arr = Context.InvokedFunctionArn.Split(':'); var env= arr[arr.Length - 1];其中 InvokedFunctionArn 是“arn:aws:lambda:Region:AccId:function:FunctionName:Production”。此函数由 ApiGateway 调用
标签: c# .net aws-lambda