Elastic Beanstalk 上的 PostgreSQL (Amazon Linux 2)

Posted

技术标签:

【中文标题】Elastic Beanstalk 上的 PostgreSQL (Amazon Linux 2)【英文标题】:PostgreSQL on Elastic Beanstalk (Amazon Linux 2) 【发布时间】:2020-07-23 16:54:02 【问题描述】:

对于上一代的 Amazon Linux,我只需在 .ebextensions 中添加以下内容即可使用 PostgreSQL:

packages:
    yum:
        postgresql93-devel: []

现在,当我使用以下平台在 EB 上进行部署时: 在 64 位 Amazon Linux 2/3.0.0 上运行的 Python 3.7

我在部署时收到以下错误:

[ERROR] Error occurred during build: Yum does not have postgresql93-devel available for installation

因此无法部署,因为我需要连接到 RDS 中的 PostgreSQL 数据库。

我需要在 .ebextensions 中进行哪些配置?

【问题讨论】:

Amazon Linux 2 将一些软件包移至 amazon-linux-extras。这可能是其中一件事 Amazon Linux 1 没有amazon-linux-extras。它是 AL2 的新功能。这是一个很好的总结:aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras 【参考方案1】:

以下作品:

packages:
    yum:
        amazon-linux-extras: []

commands:
    01_postgres_activate:
        command: sudo amazon-linux-extras enable postgresql10
    02_postgres_install:
        command: sudo yum install -y postgresql-devel

【讨论】:

02_postgres_install 的内容放在一个配置文件中,该文件将使用包配置密钥(您为 amazon-linux-extras 执行的操作)执行,但它不起作用。必须作为命令执行。谢谢!! postgresql10 中的 10 是多少?是RDS的postgres版本吗?如果我的 RDS 中的 postgres 版本是 12.5,我应该声明 postgresql12 而不是 postgresql10?【参考方案2】:

postgresql93-devel 已经很老了。 The yum PostgreSQL repository 从 9.5 开始。根据您的需要,您可能希望至少升级到 9.5。 PostgreSQL 12 是最新的生产版本。

编辑

至于 @jordanm 的评论 - 没错,AWS Linux 2 环境确实有 PostgreSQL 9.2.24 可用。如果你对那个版本没问题,那么你可以安装postgresql-devel。将您的 .ebextensions 更改为运行:

packages:
    yum:
        postgresql-devel: []

这将为 9.2.24 安装 devel 包。

如果您想要一些更新的东西,那显然会更难。我无法让它适用于 devel 包。如果您将 .ebextensions 更改为包含类似(未经测试!):

container_commands:
    command: 'amazon-linux-extras install -y postgresql9.6'

然后您将获得 PostgreSQL 9.6,但它似乎没有可用的 devel 包。

似乎无法使用来自https://yum.postgresql.org/ 的 RPM,因为不支持 AWS Linux 2。尝试 CentOS 或 RHEL 会出错。

9.2 可用于您的环境吗?

【讨论】:

我尝试过:postgresql11-devel: [] 但也失败了 我也遇到了同样的问题【参考方案3】:

对我使用 Amazon Linus 1 有帮助的一点是,在插入 RDS 服务并将 Postgres 指定为驱动程序时,我根本不需要安装 Postgres。对于遇到这个问题的人来说,这只是一个想法。但也许只是尝试不显式安装 Postgres。

我还没有验证默认安装哪个版本。

【讨论】:

【参考方案4】:

此配置适用于 ElasticBeanstalk 环境(在 64 位 Amazon Linux 上运行的 Python 3.6)。在此之后,我能够使用 requirements.txt 安装 psycopg2

packages:
    yum:
        libicu-devel: []

commands:
    01_postgres_libs:
        command: rpm -ivh --force https://yum.postgresql.org/10/redhat/rhel-6.9-x86_64/postgresql10-libs-10.7-1PGDG.rhel6.x86_64.rpm
    02_postgres_install:
        command: rpm -ivh --force https://yum.postgresql.org/10/redhat/rhel-6.9-x86_64/postgresql10-10.7-1PGDG.rhel6.x86_64.rpm
    03_symink_pg_config:
        command: sudo ln -sf /usr/pgsql-10/bin/pg_config /usr/bin/pg_config
    04_postgres_devel:
        command: sudo rpm -ivh --force https://yum.postgresql.org/10/redhat/rhel-6.9-x86_64/postgresql10-devel-10.7-1PGDG.rhel6.x86_64.rpm

【讨论】:

以上是关于Elastic Beanstalk 上的 PostgreSQL (Amazon Linux 2)的主要内容,如果未能解决你的问题,请参考以下文章

Django API 在本地工作,但在部署在 Elastic Beanstalk 上时不工作

Elastic Beanstalk 上的 Cronjob 未运行

Elastic Beanstalk 上的 ElasticSearch

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

Elastic Beanstalk 上的 SSL

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?