【问题标题】:Enabling PostGIS on AWS RDS PostgreSQL with Terraform使用 Terraform 在 AWS RDS PostgreSQL 上启用 PostGIS
【发布时间】:2021-03-18 18:57:02
【问题描述】:

找不到使用官方 aws_db_instance 资源激活 PostGIS 扩展的方法,是否有任何其他选项可以使用 Terraform 激活它?

【问题讨论】:

标签: postgresql terraform amazon-rds terraform-provider-aws


【解决方案1】:

您应该可以使用postgres 提供程序来做到这一点。不过,连接可能会很棘手。

provider "postgresql" {
  host             = aws_db_instance.app_rds.address
  port             = aws_db_instance.app_rds.port
  database         = "postgres"
  username         = aws_db_instance.app_rds.username
  password         = var.db_admin_password
  sslmode          = "require"
  expected_version = aws_db_instance.app_rds.engine_version
  superuser        = false
}

# Installs postgres PostGIS extension
resource "postgresql_extension" "postgis" {
  name = "postgis"
}

【讨论】:

  • 请注意,您还需要在 terraform 块中为 required_providers 提供 postgres。您可以在plugin's repository 中找到示例。
【解决方案2】:

提供者方法实际上只是使用提供的凭据连接到数据库实例,然后运行您请求的任何命令,例如创建扩展程序。如果您的 RDS 实例位于私有子网上,并且 Terraform 从其他地方(例如 Terraform Cloud)运行,则提供商将无法连接。安全最佳实践表明 you shouldn't make your database directly accessible from the internet,因此这种方法不适用于大多数人。

相反,您可以在与数据库交互的容器的设置代码中安装扩展。在我的例子中,我使用 Flask 来访问 RDS 实例,所以它已经有了凭据。我的数据库初始化现在看起来像这样:

from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

def create_app(config):
  app = Flask(__name__)

  db = SQLAlchemy()
  db.init_app(app)
  db.engine.execute("CREATE EXTENSION IF NOT EXISTS postgis")

  migrate = Migrate()
  migrate.init_app(app, db)

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2022-12-11
    • 2016-02-10
    • 2021-11-23
    • 2015-11-16
    相关资源
    最近更新 更多