使用 postgres 在 AWS 上部署的 django 项目 - 如何创建数据库

Posted

技术标签:

【中文标题】使用 postgres 在 AWS 上部署的 django 项目 - 如何创建数据库【英文标题】:django project deployed on AWS using postgres - how to create a database 【发布时间】:2021-11-05 02:46:56 【问题描述】:

我有一个使用 awsebcli 在 AWS 上部署的 django 项目。

我需要提供一个数据库(postgres),一旦部署了环境,我就从控制台创建一个数据库 我想自动化这个过程,我尝试了一个配置文件

所以我尝试将其添加到项目的 .ebextensions 文件夹中的 django.config 文件中:

  aws:rds:dbinstance:
    DBAllocatedStorage: '5'
    DBDeletionPolicy: Delete
    DBEngine: postgres
    DBEngineVersion: 10.17
    DBInstanceClass: db.t2.micro
    DBPassword: PASSWORD_HERE
    DBUser: USERNAME_HERE
    MultiAZDatabase: false

但是这种方式并没有创建数据库。我必须从控制台创建它,然后使用终端(eb setenv)将数据库的端点和其他参数作为环境变量传递。

有没有办法解决这个问题并使部署自动化?

-----编辑----- 这是我完整的 django.config 文件

 option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: "personal_portfolio.settings"
    PYTHONPATH: "/var/app/current:$PYTHONPATH"
    AWS_STORAGE_BUCKET_NAME: "insert-bucketname"
    AWS_S3_REGION_NAME: "us-east-1"
    RDS_USERNAME: "xxxx"
    RDS_PASSWORD: "xxxx"
  aws:elasticbeanstalk:container:python:
    WSGIPath: "personal_portfolio.wsgi:application"
    NumProcesses: 3
    NumThreads: 20
  aws:elasticbeanstalk:environment:process:default:
    HealthCheckPath: "/about"
    MatcherHTTPCode: "200-499"
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /static: static
    /media: media
  aws:rds:dbinstance:
    DBAllocatedStorage: 5
    DBDeletionPolicy: Delete
    DBEngine: postgres
    DBEngineVersion: 10.17
    DBInstanceClass: db.t2.micro
    DBPassword: lorokpopen
    DBUser: postgres
    MultiAZDatabase: false
container_commands:
  01_makemigrations:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py makemigrations --noinput"
    leader_only: true
  02_migrate:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate --noinput"
    leader_only: true
  03_createsu:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py createsu"
  04_collectstatic:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py collectstatic --noinput"
    leader_only: true

【问题讨论】:

【参考方案1】:

你是先使用option_settings命名空间吗?

.ebextensions/db-instance-options.config

option_settings:
  aws:rds:dbinstance:
    DBAllocatedStorage: 100

如上所述: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html#using-features.managing.db.namespace

此页面列出了aws:rds:dbinstance 的所有值: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general-rdsdbinstance

现在,从一般的最佳实践来看,这非常适合开发和测试环境。但是,它并不适合生产环境,因为它将数据库实例的生命周期与应用程序环境的生命周期联系在一起。

您应该将您的数据库实例与您的环境分离,您可以通过 CloudFormation 或 CLI 在 Amazon RDS 中创建数据库实例,并配置您的应用程序以在启动时连接到它,就像您现在所做的那样

在这个页面中,aws 说了几件事: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html

查看 RDS Instance CloudFormation 定义: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html

【讨论】:

我编辑了插入完整配置文件的问题

以上是关于使用 postgres 在 AWS 上部署的 django 项目 - 如何创建数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何从 aws rds 导出 postgres 数据库

尝试将 AWS S3 数据库备份到 heroku postgres 时出现 403 错误

如何通过 eb cli (django postgres) 迁移 AWS RDS 数据库?

Postgres-xl 上的 PostGIS 扩展

如何使用 ssh 隧道将谷歌数据工作室连接到 AWS 上的 postgres 无服务器?

是否可以使用 PHP 的 PDO Postgres 驱动程序查询 AWS Redshift?