#c# #amazon-web-services #amazon-s3 #aws-lambda
Вопрос:
Я пытаюсь написать лямбду для запуска FFMPEG в лямбде AWS. Я делал это раньше на другом рабочем месте, поэтому знаю, что это возможно.
В журнале показано, что я создаю временный URL-адрес для чтения файла, он обрабатывается с помощью FFMPEG, я передаю вывод в байт [], в котором отображаются данные, а затем пытаюсь выполнить запрос S3 putObject, который всегда завершается с этим сообщением:
Подпись запроса, которую мы рассчитали, не совпадает с предоставленной вами подписью. Проверьте свой ключ и способ подписи.
Клиент S3-это те же учетные данные, которые я постоянно использую автоматически для загрузки файлов в S3 с разных серверов в разных местах нашей компании. Я попробовал пару разных IAMs, но безрезультатно.
Я не пытаюсь сделать какую-либо подпись вообще. Я просто делаю это:
var putRequest = new PutObjectRequest { BucketName = m.Groups["bucket"].Value, Key = m.Groups["key"].Value, InputStream = new MemoryStream(Encoding.UTF8.GetBytes(data ?? "")), CannedACL = S3CannedACL.PublicRead, ContentType = MimeTypes.GetMimeType(Path.GetExtension(m.Groups["key"].Value)), DisablePayloadSigning = true, }; putRequest.Headers.ContentLength = data.Length; _context.Logger.LogLine($"Saving file to bucket '{putRequest.BucketName}' and key '{putRequest.Key}' and content type '{putRequest.ContentType}' and content length {putRequest.Headers.ContentLength}"); try { await _s3Client.PutObjectAsync(putRequest); } catch (AmazonS3Exception s3x) { _context.Logger.LogLine($"S3 Exception: {s3x.Message}"); }
Я проверил ведро и ключ, и они верны. Данные.длина больше 0. Тип контента — «аудио/mpeg», что правильно для .mp3. Данные должны быть записаны.
Моя лямбда работает под управлением AWSLambda_Full_Access со следующими дополнительными правами:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListStorageLensConfigurations", "s3:ListAccessPointsForObjectLambda", "s3:GetAccessPoint", "s3:PutAccountPublicAccessBlock", "s3:GetAccountPublicAccessBlock", "s3:ListAllMyBuckets", "s3:*", "s3:ListAccessPoints", "s3:ListJobs", "s3:PutStorageLensConfiguration", "s3:ListMultiRegionAccessPoints", "s3:CreateJob" ], "Resource": "*" } ] }
У кого-нибудь есть какие-нибудь идеи, что еще я могу упустить? Я застрял на этой проблеме уже более 3 дней и перепробовал все, что мог придумать, так что это должно быть что-то, о чем я не думаю.
Спасибо.
Комментарии:
1. Каковы ценности
m.Groups["bucket"].Value
и.Groups["key"].Value
в чем именно они заключаются?2. Используя те же учетные данные, сделайте что-нибудь более простое, например, перечислите корзину S3 или загрузите объект S3. Это работает?
3. Зачем использовать creds в лямбда-функции. Вы должны использовать роль IAM, у которой есть разрешения для запуска операций Amazon S3. Я знаю, что взаимодействие с Amazon S3 с помощью лямбда-функции, написанной на Java, не вызывает проблем.
4. возможно, в политике ресурсов вашей корзины S3 есть явный запрет
5. @ErmiyaEskandary {corpRedacted}радио и вывод.mp3.