Учитывая следующий (сжатый) код MVC Web API Controller (. NET core 2.1), опубликованный в виде стека Lambda без сервера, который вызывается из API Gateway через прокси, проект, созданный из стандартного AWS SDK-приложения без сервера template:
[Route("Upsert")]
[HttpPost]
public async Task<...return type> Post([FromBody] <...object type> request)
{
var res = <...return type>;
try
{
LambdaLogger.Log("upsert getting Slot Version");
// get Slot values
var client = new AmazonLexModelBuildingServiceClient(<...region endpoint>);
LambdaLogger.Log($"client version: {client.Config.ServiceVersion}");
LambdaLogger.Log("Awaiting GetSlotTypeAsync");
var getSlotTypeResult = await client.GetSlotTypeAsync(
new GetSlotTypeRequest
{
Name = "<name>",
Version = "$LATEST"
}
);
res.Message = $"Slot version {getSlotTypeResult.Version}";
LambdaLogger.Log($"upsert returning {res.Message}");
}
catch (Exception ex)
{
LambdaLogger.Log($"exception: {ex.Message}\r\nRequest: {request}");
throw;
}
return res;
}
}
Ожидание никогда не завершается и время ожидания шлюза API (504). Все остальные конечные точки в проекте работают должным образом (хотя ни одна из них не является асин c). Это работает, как и ожидалось, локально (в LocalEntryPoint).
Журналы Cloudwatch (соответствующая часть):
16:53:19 START RequestId: f2b92729-3757-4878-802a-bd1209f292d5 Version: 72
16:53:19 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request starting POST 16:53:19
...
16:53:19 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Executing action method ...Post (<...API name>) - Validation state: Valid
16:53:19 upsert getting Slot Version
16:53:20 client version: 2017-04-19
16:53:20 Awaiting GetSlotTypeAsync
16:53:49 END RequestId: f2b92729-3757-4878-802a-bd1209f292d5 <-- e.g. timeout
Я уверен, что упускаю что-то простое и очевидное, но я начинаю 2-й день расследования ...
Большое спасибо за любую информацию, которую может предоставить сообщество.