【问题标题】: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"
}
【解决方案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)