Мне нужно отправить только определенные c файлы, содержащие указанный c атрибут (метаданные) из моего ведра s3 в SQS. Я не уверен, как это лучше всего сделать. Поскольку в SQS нет ни опции фильтра, ни SNS.
EDIT: я следовал инструкциям и подключил лямбда-выражение с s3 для отправки сообщений в sqs, но все равно что-то не так. SQS сообщает «Сообщение в полете» вместо полученного сообщения. Я не вижу сообщение, когда ищу сообщения.
public async Task<SendMessageResponse> FunctionHandler(S3Event evnt, ILambdaContext context)
{
Task<SendMessageResponse> sendMessageResponse;
var s3Event = evnt.Records?[0].S3;
try
{
var meta = "x-amz-meta-ml-score";
SendMessageRequest sendMessageRequest = new SendMessageRequest();
var response = await this.S3Client.GetObjectMetadataAsync(s3Event.Bucket.Name, s3Event.Object.Key);
foreach (string metadata in response.Metadata.Keys)
{
if (metadata == meta)
{
sendMessageRequest.QueueUrl = myQueueUrl;
sendMessageRequest.MessageBody = evnt.ToString();
sendMessageRequest.MessageBody = s3Event.ToString();
//sendMessageResponse = await SQSCleint.SendMessageAsync(sendMessageRequest);
}
}
return await this.SQSCleint.SendMessageAsync(sendMessageRequest);
}
catch(Exception e)
{
context.Logger.LogLine($"Error getting object {s3Event.Object.Key} from bucket {s3Event.Bucket.Name}. Make sure they exist and your bucket is in the same region as this function.");
context.Logger.LogLine(e.Message);
context.Logger.LogLine(e.StackTrace);
throw;
}
}