Zappa S3 Django Media Upload Times Out
Я пытаюсь настроить Zappa и Django, чтобы иметь возможность загружать медиафайлы, но я получаю странную ошибку разрешения, которая недостаточно специфична для отладки.
Когда я захожу в админку Django и загружаю файл с несколькими kbs в модель, я получаю:
{"message": "Endpoint request timed out"}
После дальнейшего изучения с помощью zappa dev tail
[1649077754253] [DEBUG] 2022-04-04T13:09:14.253Z b43408d4-f54d-4187-ab31-af6caf6dcddd Certificate path: /var/task/certifi/cacert.pem
[1649077754254] [DEBUG] 2022-04-04T13:09:14.254Z b43408d4-f54d-4187-ab31-af6caf6dcddd Starting new HTTPS connection (1): bucket-static-media.s3.us-east-2.amazonaws.com:443
[1649077783696] 2022-04-04T13:09:43.695Z b43408d4-f54d-4187-ab31-af6caf6dcddd Task timed out after 30.03 seconds
После того, как задача завершается, я делаю предположение, что это какие-то неправильно настроенные разрешения между S3 и Lambda. Однако я не могу понять, в чем дело.
Если я посмотрю на разрешение ZappaLambdaExecutionRole: У него есть политика под названием zappa-permissions, которая имеет разрешения S3 для всех действий для всех ресурсов.
VPC, связанный с лямбда-функцией:
vpc-b7e14cdc (XXX.XX.0.0/16) | По умолчанию
Подсети:
subnet-1ed00575 (XXX.XX.0.0/20) | us-east-2a
subnet-f2cfcc88 (XXX.XX.16.0/20) | us-east-2b
subnet-4cc2a900 (XXX.XX.32.0/20) | us-east-2c
Для группы безопасности:
Правила входящих сообщений sgr-033b1c122d9c8fd4b - HTTPS TCP 443 Исходящие правила Все
Я даже создал конечную точку VPC на S3 global, которая подключается к группе безопасности.
Django Model
class File(models.model):
file = models.FileField(upload_to='/media')
И конфигурация django-storages:
AWS_ACCESS_KEY_ID = "XXXXXXXXXX"
AWS_SECRET_ACCESS_KEY = "XXXXXXXXXX"
AWS_STORAGE_BUCKET_NAME = "XXX-XXXX-XXXX"
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_QUERYSTRING_AUTH = False
AWS_DEFAULT_ACL= 'public-read-write'
AWS_LOCATION = 'static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'
DEFAULT_FILE_STORAGE = 'ZZZ.storages.MediaStore'
А также пользовательское хранилище:
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStore(S3Boto3Storage):
location = 'media'
file_overwrite = False
Политика в отношении ведер также очень открыта.
{
"Version": "2012-10-17",
"Id": "Policy1648838107975",
"Statement": [
{
"Sid": "Stmt1648838106826",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:*"
],
"Resource": "arn:aws:s3:::XXX-XXXX-XXXX/*"
}
]
}
Что еще я могу упустить?