Как настроить AWS s3 для загрузки файла экземпляра AWS ec2 с помощью Django - PullRequest
0 голосов
/ 06 ноября 2019

В настоящее время я работаю над проектом Django на сервере AWS EC2, на котором в качестве ОС установлен RHEL8. Моя среда AWS настроена для хранения как статических, так и мультимедийных файлов в S3. Моя модель приложения django использует ImageField для загрузки изображения и сохранения в S3. При попытке сохранить изображение в S3 через мое приложение django, я в настоящее время получаю ошибку соединения HTTP 500 с отказом в разрешении, и проблема не в моем приложении django, так как я тестировал точно такое же приложение с теми же конфигурациями (setting.py) намой локальный хост и я можем успешно загрузить как статические файлы, так и мультимедийные файлы на s3. Почему это работает на моем локальном хосте, а не в моем экземпляре EC2? Эта проблема связана с подключением к S3 через EC2 при загрузке изображения, так как у меня не было проблем с загрузкой статических файлов в S3 из моего экземпляра EC2.

При устранении неисправности вышеупомянутой проблемы я хотел исключить, чтопроблема была связана с моим приложением django, возможно, моим файлом settings.py. Я установил точно такой же проект django на свой локальный компьютер (ноутбук) и смог загрузить как статические файлы, так и файл изображения в мое хранилище S3 через мое приложение django. В результате у моего экземпляра EC2 возникают проблемы с подключением к моей корзине s3, особенно при загрузке изображения из моего приложения django, поэтому моя проблема связана с моей конфигурацией AWS с S3 (разрешения) или EC2 (wsgi). Не уверен, с чего начать.

s3 Политика Bucket для корзины Testerstorage

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::testerstorage",
            "arn:aws:s3:::testerstorage/*"
        ]
    }
]
}

s3 Конфигурация CORS

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
 <CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>6000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
 </CORSRule>
</CORSConfiguration>

Ошибка трассировки

  Internal Server Error: /admin/photoapp/photo/add/
  Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 171, in _new_conn
      (self._dns_host, self.port), self.timeout, **extra_kw)
  File "/usr/lib/python3.6/site-packages/urllib3/util/connection.py", line 79, in create_connection
       raise err
  File "/usr/lib/python3.6/site-packages/urllib3/util/connection.py", line 69, in create_connection
       sock.connect(sa)
  PermissionError: [Errno 13] Permission denied

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/botocore/httpsession.py", line 263, in send
       chunked=self._chunked(request.headers),
  File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
       _stacktrace=sys.exc_info()[2])
  File "/usr/lib/python3.6/site-packages/urllib3/util/retry.py", line 343, in increment
       raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3.6/site-packages/urllib3/packages/six.py", line 693, in reraise
       raise value
  File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
       chunked=chunked)
  File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 343, in _make_request
       self._validate_conn(conn)
  File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 849, in _validate_conn
       conn.connect()
  File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 314, in connect
       conn = self._new_conn()
  File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 180, in _new_conn
       self, "Failed to establish a new connection: %s" % e)

  urllib3.exceptions.NewConnectionError: <botocore.awsrequest.AWSHTTPSConnection object at 0x7f3a7f847240>: Failed to establish a new connection:

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
  File "/usr/local/lib64/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
       response = get_response(request)
  File "/usr/local/lib64/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
       response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib64/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
       response = wrapped_callback(request, *callback_args, 
  **callback_kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/contrib/admin/options.py", line 606, in wrapper
       return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
       response = view_func(request, *args, **kwargs)
  File "/usr/local/lib64/python3.6/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
       response = view_func(request, *args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...