#postgresql #terraform #amazon-rds #terraform-provider-aws
#postgresql #terraform #amazon-rds #terraform-поставщик-aws
Вопрос:
Не могу найти способ активировать расширение PostGIS с помощью официального ресурса aws_db_instance, есть ли какие-либо другие варианты его активации с помощью Terraform?
Комментарии:
1. Для других, пытающихся помочь — я предполагаю , что речь идет о наличии эквивалента Terraform docs.aws.amazon.com/AmazonRDS/latest/UserGuide /…
Ответ №1:
Вы должны быть в состоянии сделать это с помощью postgres
provider. Однако это может быть сложно с подключением.
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"
}
Комментарии:
1. Обратите внимание, что вам также необходимо предоставить postgres
required_providers
в вашемterraform
блоке. Вы можете найти пример в репозитории плагина .
Ответ №2:
Подход поставщика эффективно просто подключается к экземпляру базы данных с предоставленными учетными данными, а затем выполняет любые команды, которые вы запрашиваете, например, создание расширения. Если ваш экземпляр RDS находится в частной подсети, а Terraform запускается из другого места (например, из облака Terraform), поставщик не сможет подключиться. В рекомендациях по безопасности говорится, что вы не должны делать свою базу данных доступной напрямую из Интернета, поэтому этот подход не будет работать для большинства людей.
Вместо этого вы можете установить расширение в коде настройки для контейнера, который взаимодействует с базой данных. В моем случае я использовал 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)