Я собирал лямбда-функцию в AWS, которая использует следующие элементы: S3, SQS, SNS и KMS.При переключении между юнит-тестами и реальными лямбда-тестами я написал общий метод для возврата интерфейса IAmazonService, этот интерфейс выглядит следующим образом:
public static T GetAmazonClient<T>(ILambdaContext context) where T : IAmazonService, new()
{
T client = default(T);
try
{
if (context.GetType() == typeof(TestLambdaContext))
{
Console.WriteLine("I am a unit test and I will have to build a profile");
//Build the profile for my unit test
client = ClientObjectIhaveBuilt;
}
else
{
Console.WriteLine("I am a Lambda instance and I should inherit my credentials");
client = (T)Activator.CreateInstance(typeof(T));
}
}
catch (Exception ex)
{
//Some logging happens here with the exception
}
Console.WriteLine(JsonConvert.SerializeObject(client));
return client;
}
Тогда в моем коде я могу сделать что-то вроде этого
using (var sqsClient = AmazonClientHelper.GetAmazonClient<AmazonSQSClient>(context))
{
var request = new ChangeMessageVisibilityRequest(SQSURL, message.ReceiptHandle, timeout);
Console.WriteLine("Extending Visibility of SQS Entry");
var response = await sqsClient.ChangeMessageVisibilityAsync(request);
}
В модульном тестировании это работало абсолютно нормально, я могу получать сообщения, читать из S3 и все остальное, что я хочу сделать, но при размещении в AWS Lambda, похоже, не создает нужные клиентские учетные записи,
Я разместил это в своей собственной тестовой учетной записи AWS, и он работал от начала до конца, но при загрузке его в учетную запись моей компании я обнаружил, что созданные объекты клиента не создаются должным образом, выходные данные объекта клиента вСериализатор JSON в конце - это пустой объект без URL-адреса службы или учетных данных (это может быть правильно, но выглядит подозрительно)
Наши клиенты выходят из строя при первом затруднении, когда мы пытаемся расширить видимость наших элементов SQS;Клиент пытается расширить видимость, но мы сталкиваемся с запросом отмененной операции.
Примечание: сидите спокойно, я пытаюсь получить копию трассировки стека и сериализованный вывод клиента