yoo*_*oon 1 django amazon-s3 boto amazon-web-services
我正在尝试将Django项目连接到AWS S3。
settings.py包含以下内容:
AWS_ACCESS_KEY_ID = #ID
AWS_SECRET_ACCESS_KEY = #Key
AWS_STORAGE_BUCKET_NAME = #Bucket
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'backend/static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Run Code Online (Sandbox Code Playgroud)
使用AmazonS3FullAccess创建IAM用户。 但是当我输入:
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
发生错误:
您已请求按照设置中的指定在目标位置收集静态文件。
这将覆盖现有文件!你确定你要这么做吗?
键入“是”以继续,或键入“否”以取消:是回溯(最近一次调用最后一次):在execute_from_command_line(sys.argv)中的文件“ manage.py”,第22行,文件“ / home / seokchan / server / mdocker” /lib/python3.5/site-packages/django/core/management/ init .py“,第381行,位于execute_from_command_line utility.execute()文件“ /home/seokchan/server/mdocker/lib/python3.5/site”中-packages / django / core / management / init“ .py”,行375,在执行self.fetch_command(subcommand).run_from_argv(self.argv)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/management/base”中.py“,第316行,位于run_from_argv self.execute(* args,** cmd_options)文件” /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/management/base.py “,第353行,在执行输出= self.handle(* args,** options)File“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands /collectstatic.py“,第188行,收集的句柄= self.collect()文件” /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic .py”,第114行,在收集处理程序(路径,prefixed_path,存储)中的文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py”,行353,在copy_file self.storage.save(前缀路径,源文件)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/files/storage.py”,第49行,保存后返回self ._save(名称,内容)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/storages/backends/s3boto3.py”,第506行,位于_save self._save_content(obj,content,参数=参数)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/storages/backends/s3boto3.py”,第521行,位于_save_content obj.upload_fileobj(content,ExtraArgs = put_parameters)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py”,行621,位于object_upload_fileobj ExtraArgs = ExtraArgs,Callback = Callback,Config = Config )在upload_fileobj中,文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py”第539行返回future.result()文件“ / home / seokchan / server /mdocker/lib/python3.5/site-packages/s3transfer/futures.py“,第106行,结果返回self._coordinator.result()文件” /home/seokchan/server/mdocker/lib/python3.5/ “ site-packages / s3transfer / futures.py”,第265行,结果引发self._exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/tasks.py”,第126行,在在在/home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py“,行621,在object_upload_fileobj ExtraArgs = ExtraArgs,Callback = Callback,Config = Config)文件“ / home / seokchan / server / mdocker / lib / python3.5 / site-packages / boto3 / s3 / inject.py“,行539,在upload_fileobj中返回future.result()文件” / home / seokchan / server / mdocker / lib / python3 .5 / site-packages / s3transfer / futures.py“,第106行,结果返回self._coordinator.result()文件” /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/ futures.py”,第265行,结果是提高self._exception文件,“ / home / seokchan / server / mdocker / lib / python3.5 / site-packages / s3transfer / tasks.py”,第126行,在/home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py“,行621,在object_upload_fileobj ExtraArgs = ExtraArgs,Callback = Callback,Config = Config)文件“ / home / seokchan / server / mdocker / lib / python3.5 / site-packages / boto3 / s3 / inject.py“,行539,在upload_fileobj中返回future.result()文件” / home / seokchan / server / mdocker / lib / python3 .5 / site-packages / s3transfer / futures.py“,第106行,结果返回self._coordinator.result()文件” /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/ futures.py”,第265行,结果是提高self._exception文件,“ / home / seokchan / server / mdocker / lib / python3.5 / site-packages / s3transfer / tasks.py”,第126行,在5 / site-packages / boto3 / s3 / inject.py“,行621,在object_upload_fileobj ExtraArgs = ExtraArgs,Callback = Callback,Config = Config)文件“ /home/seokchan/server/mdocker/lib/python3.5/site”中-packages / boto3 / s3 / inject.py“,第539行,位于upload_fileobj中,返回future.result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py” ,第106行,结果返回self._coordinator.result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py”,第265行,结果引发self。 _exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/tasks.py”,第126行,在5 / site-packages / boto3 / s3 / inject.py“,行621,在object_upload_fileobj ExtraArgs = ExtraArgs,Callback = Callback,Config = Config)文件“ /home/seokchan/server/mdocker/lib/python3.5/site”中-packages / boto3 / s3 / inject.py“,第539行,位于upload_fileobj中,返回future.result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py” ,第106行,结果返回self._coordinator.result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py”,第265行,结果引发self。 _exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/tasks.py”,第126行,在Callback = Callback,Config = Config)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py”,行539,在upload_fileobj中返回future.result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py”,第106行,结果返回self._coordinator.result()文件“ / home / seokchan / server / mdocker” /lib/python3.5/site-packages/s3transfer/futures.py“,第265行,结果引发self._exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/ task.py“,第126行,在Callback = Callback,Config = Config)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/boto3/s3/inject.py”,行539,在upload_fileobj中返回future.result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py”,第106行,结果返回self._coordinator.result()文件“ / home / seokchan / server / mdocker” /lib/python3.5/site-packages/s3transfer/futures.py“,第265行,结果引发self._exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/ task.py“,第126行,在result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py”,第106行,结果返回self._coordinator.result()文件“ / home / seokchan /server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py“,第265行,结果引发self._exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-包/s3transfer/tasks.py”,第126行,在result()文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py”,第106行,结果返回self._coordinator.result()文件“ / home / seokchan /server/mdocker/lib/python3.5/site-packages/s3transfer/futures.py“,第265行,结果引发self._exception文件“ /home/seokchan/server/mdocker/lib/python3.5/site-包/s3transfer/tasks.py”,第126行,在5 / site-packages / s3transfer / tasks.py“,第126行,在5 / site-packages / s3transfer / tasks.py“,第126行,在呼叫 返回self._execute_main(kwargs)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/tasks.py”,行_execute_main中的第150行return_value = self._main(** kwargs) _main client.put_object(Bucket = bucket,Key = key,Body = body,*中的文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/s3transfer/upload.py”,第692行) * extra_args)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/botocore/client.py”,第357行,在_api_call返回self._make_api_call(operation_name,kwargs)文件“ / home / seokchan / server / mdocker / lib / python3.5 / site-packages / botocore / client.py“,行661,在_make_api_call中引发error_class(parsed_response,operation_name)botocore.exceptions.ClientError:调用PutObject操作时发生错误(AccessDenied):访问被拒绝
因此,我编辑了存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow All",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::<bucket name>/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是错误仍然发生。如何解决此错误?
我正在关注的教程在这一步没有显示任何错误。(https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project .html)
小智 11
如果有人仍然遇到这些问题,问题出在 AWS S\xc2\xa3 存储桶上,您可以通过在 s3 存储桶上启用 ACL 来解决该问题。要做到这一点,
\nObject Ownership
并单击“编辑”这对我有用:
In my S3 bucket -> Permissions Tab -> click Block public access -> Edit -> untick Block all public access -> Save
和
In my AWS IAM settings -> Users Tab (under Access Management) -> <my-user> -> Add Permissions -> add AmazonS3FullAccess
这授予用户(由 AWS id 和 AWS 密钥标识)控制我的 s3 存储桶的访问权限
归档时间: |
|
查看次数: |
1477 次 |
最近记录: |