#python #amazon-web-services #amazon-s3 #boto3
Вопрос:
При попытке перечислить объекты с префиксом возвращается только 1 объект в моей Лямбде. Не уверен, чего не хватает.
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
try:
## Bucket to use
bucket = s3.Bucket(mybucket)
## List objects within a given prefix
for obj in bucket.objects.filter(Prefix='output/group1'):
print(obj.key)
Комментарии:
1. Ваш код неполон и не выполняется. Например
mybucket
, не назначается. Попробуйте протестировать код boto3 локально перед развертыванием в качестве лямбда-кода.2. Привет, Вольфганг .. У меня это определено, но я устранил эту строку при загрузке кода.
3. Кстати, я сталкиваюсь с какой-то другой проблемой, когда запускаю boto3 локально. Он не может найти мои учетные данные, даже если они присутствуют в файле учетных данных aws cli. я проверяю, существует ли мой профиль как в конфигурации, так и в учетных данных . Запускал aws configure несколько раз.
4. Этот код определяет функцию
lambda_handler
, но она никогда не вызывается. Где/как это называется?5. Где
Ответ №1:
Трудно понять, в чем именно заключается проблема, когда мы не видим допустимой функции или каких-либо возвращенных ошибок. Этот код работает для меня без проблем:
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = s3.Bucket('your-bucket-name')
for obj in bucket.objects.filter(Prefix='output/group1'):
print(obj.key)
lambda_handler('event','context')
Убедитесь, что в «выводе/группе 1» на самом деле содержится более 1 файла для возврата.
Комментарии:
1. Код выполняется без ошибок, но он не содержит списка всех объектов, только 1 объект с этим префиксом. Существует более 30 объектов с одинаковым префиксом.
2. @Райан, Вы уверены, что у вас есть доступ к этим конкретным ключам S3?
3. ДА. Я получаю случайный ключ, но не все ключи.
4. @Райан, код верен. Вы должны дважды проверить структуру корзины s3 и ее префиксы.
5. что происходит, когда вы добавляете завершающий / в префикс? ‘вывод/группа1/’