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/*"
        }
    ]
}

Что еще я могу упустить?

Вернуться на верх