Написал приложение .NET core 2 web api, используя шаблон функции Amazon Lambda.Написал несколько тестовых звонков с помощью почтальона.Все отлично работает с кодом ядра .NET, работающим локально.Загружен основной код .NET в функцию Lambda, изменен почтальон для вызова этого URL.Все отлично работает с кодом .NET, работающим внутри функции Lambda - локальный вызов с использованием Postman.
Теперь требуется вызывать основной код .NET внутри лямбда-функции - из кодовой линии aws.Невозможно заставить это работать
Когда Почтальон вызывает функцию лямбды - я вижу это в логах cloudwatch:
Lambda Deserialize Amazon.Lambda.APIGatewayEvents.APIGatewayProxyRequest:
{
"resource": "/{proxy+}",
"path": "/api/Rds/InstanceStatus",
"httpMethod": "GET",
, и этот вызов работает!Мой основной код .NET регистрирует следующее
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.Body = null
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.HttpMethod = GET
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.Path = /api/Rds/InstanceStatus
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.Resource = /{proxy+}
Примечание. Вы можете видеть, что объект LambdaEntryPoint заполняется перед вызовом моего основного кода .NET
Когда я пытаюсь дублировать этот же вызовиз codepipeline - я вижу это в логах cloudwatch:
Lambda Deserialize Amazon.Lambda.APIGatewayEvents.APIGatewayProxyRequest:
{
"CodePipeline.job": {
"id": "379d05fe-ec03-4ec9-8bce-59f31901aeb8",
"accountId": "109319094079",
"data": {
"actionConfiguration": {
"configuration": {
"FunctionName": "NexuIntRestServerless2-AspNetCoreFunction-T8Q5XCCN0FIC",
"UserParameters": "{\"resource\":\"/{proxy+}\",\"path\":\"/api/Rds/InstanceStatus\",\"httpMethod\":\"GET\"}"
}
},
Я попытался воспроизвести параметры в пользовательских параметрах codepipeline.Тем не менее, запись в журнале кода ядра .NET выглядит следующим образом:
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.Body = null
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.HttpMethod = null
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.Path = null
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.Resource = null
LOG_LEVEL_TRACE,Nexus.Rds.Restore.dll,1.0.0.0,Nexus.Rds.Restore.LambdaEntryPoint,FunctionHandlerAsync,APIGatewayProxyRequest.RequestContext = null
ПРИМЕЧАНИЕ: LambdaEntryPoint теперь имеет значение null, и выдается исключение - я предполагаю, потому что ядро .NET не знает, как маршрутизировать вызов:
One or more errors occurred. (Object reference not set to an instance of an object.): AggregateException
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at lambda_method(Closure , Stream , Stream , LambdaContextInternal )
at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction.MarshallRequest(InvokeFeatures features, APIGatewayProxyRequest apiGatewayRequest, ILambdaContext lambdaContext)
at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction.<FunctionHandlerAsync>d__13.MoveNext()
Есть идеи о том, как вызвать лямбда-функцию из Codepipeline?
Спасибо