У меня есть две среды. Один, я запускаю с рабочего стола, а другой - с Ams-лямбды. Оба из них являются питоном. Код, который у меня есть на моей машине:
import boto3
s3 = boto3.resource('s3')
bucket = 'my-bucket'
obj = s3.Object(bucket,'test.txt')
try:
text = obj.get()['Body'].read().decode()
print("file exists"))
except s3.meta.client.exceptions.NoSuchKey:
print("key does not exist")
Когда я запускаю это, все работает отлично, как и предполагалось.
Когда я запускаю это на лямбду, я получаю
Произошла ошибка (AccessDenied) при вызове операции GetObject: Access Denied
Мои права на лямбду правильные, так что не может быть, поскольку все работает, когда файл существует. Я удаляю файл при каждом запуске, поэтому он не имеет никакого отношения к порядку запуска моего тестового кода. Для отладки я сделал это:
except Exception as e:
print(e)
Как в моем лямбда-коде, так и в локальном коде, чтобы увидеть, что является настоящей ошибкой
На моей локальной машине ошибка:
Произошла ошибка (NoSuchKey) при вызове операции GetObject: указанный ключ не существует.
Когда я запускаю его на своей лямбде, это
Произошла ошибка (AccessDenied) при вызове операции GetObject: доступ запрещен
Почему я получаю разные сообщения об ошибках, и как я могу объяснить это без ленивого решения «кроме всех исключений»? Спасибо
Это CFT для моей лямбды
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
],
"Resource": {
"Fn::Sub": "arn:aws:s3:::my-bucket/*"
}
}