AWS Elastic Beanstalk 权限的最佳实践
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk 权限的最佳实践【英文标题】:Best Practice for AWS Elastic Beanstalk Permission 【发布时间】:2016-03-08 08:53:37 【问题描述】:我是 AWS Elastic Beanstalk 的新手,并且仍在学习它。请分享您知道的最佳实践。
“eb deploy
”将 Django 应用程序上传到 AWS。但是,“./manage makemigrations
”会出现 permission denied 像这样的错误
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/base.py", line 390, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/base.py", line 441, in execute
output = self.handle(*args, **options)
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/commands/makemigrations.py", line 143, in handle
self.write_migration_files(changes)
File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/commands/makemigrations.py", line 172, in write_migration_files
with open(writer.path, "wb") as fh:
PermissionError: [Errno 13] Permission denied: '/opt/python/bundle/3/app/myproj/myapp/migrations/0001_initial.py'
注意用户是 ec2-user,他只拥有对“/opt/python/bundle/3/app/myproj/myapp/migrations/
”的读取权限。使用 root 用户可以成功执行迁移,但是存在安全问题。
另一个类似的问题是,
ec2-user 没有对“/var/log/
”的 WRITE 访问权限,日志文件应存储在哪里?存储在/home/ec2-user
中?如果环境终止,主目录将被清除,对吗?
【问题讨论】:
【参考方案1】:您不应该在您的 EB 实例上调用 makemigrations。
makemigrations 是您在开发过程中调用的东西,然后将所有生成的文件(如“0001_initial.py”)置于版本控制之下,并作为eb deploy
的一部分进行部署。
在您的 .ebextensions 上,您只需要调用仅写入数据库的“迁移”(同时进行数据的实际迁移):
container_commands:
01_migrate:
command: "django-admin.py migrate --noinput"
leader_only: true
那里的一些示例还建议在您的 .ebextensions 上调用 collectstatics,但我建议不要这样做。假设您正在使用 django-storages 之类的东西并将所有静态数据存储在 S3(或更好的 CloudFront)上,那么最好在您自己的本地机器上调用 collectstatics 作为开发的一部分。例如
python manage.py collecstatics
eb deploy
我对日志问题没有真正的疑问。我只是使用 eb 日志,所以我只需将我想看到的内容打印到控制台,EB 会处理这些日志。但我确实知道您有权写入 /tmp 以便它可以成为日志的位置。
【讨论】:
以上是关于AWS Elastic Beanstalk 权限的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk 更改挂载目录的权限
如何将 chmod +x 权限添加到 AWS Elastic Beanstalk 平台挂钩?
AWS Elastic Beanstalk - .ebextensions
AWS Elastic Beanstalk - 多容器 Docker