Ejercicio: configuración de la extensión pgvector en Azure PostgreSQL para su uso con Spring AI

Completado

En este ejercicio, creará una instancia de servidor flexible de Azure Database para PostgreSQL, habilitará la extensión pgvector, y creará la estructura de base de datos necesaria para su uso con la abstracción Spring AI VectorStore.

Inicio de sesión en Azure a través de la CLI de Azure

Use el comando siguiente para iniciar sesión en Azure:

az login

Establecer valores de parámetros

Use los siguientes comandos para establecer algunas variables de entorno. Estos valores se pasan a comandos posteriores para crear la base de datos y los recursos necesarios. Asegúrese de reemplazar los marcadores de posición <...> por sus propios valores. El <server-name> valor debe ser único globalmente en todas las instancias de Azure. Una manera sencilla de garantizar la unicidad consiste en usar una combinación de las iniciales, la fecha actual y algún identificador, por ejemplo, abc-031325-spring-ai-postgresql-server.

export RESOURCE_GROUP=<resource-group>
export LOCATION=<location>
export DB_SERVER_NAME=<server-name>

A continuación, use el siguiente comando para almacenar la dirección IP pública en una variable de entorno y mostrarla en la consola. Este valor se usa más adelante en esta unidad para limitar el acceso a la dirección IP externa del servidor PostgreSQL. Usando la dirección IP pública del equipo que está utilizando, solo su dirección IP puede acceder al servidor.

export PUBLIC_IP=$(curl -s ipinfo.io/ip)
echo "Start IP: $PUBLIC_IP"

Este comando debe funcionar en la mayoría de las distribuciones de Linux y en Git Bash. Si no funciona, también puede obtener la dirección IP pública mediante https://whatismyipaddress.com/

Nota:

La dirección IP puede cambiar. Si cambia, debe actualizar la regla de firewall correspondiente en consecuencia.

Creación de un grupo de recursos

Cree un grupo de recursos mediante el comando siguiente. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure.

az group create --name $RESOURCE_GROUP --location $LOCATION

Creación de instancias de servidor flexible de Azure Database for PostgreSQL

Use el comando siguiente para crear una instancia de base de datos con fines de desarrollo. El nivel ampliable es un nivel rentable para cargas de trabajo que no requieren un rendimiento coherente.

az postgres flexible-server create \
    --resource-group $RESOURCE_GROUP \
    --name $DB_SERVER_NAME \
    --location $LOCATION \
    --tier Burstable \
    --sku-name standard_b1ms \
    --active-directory-auth enabled \
    --public-access $PUBLIC_IP \
    --version 16

Este comando tarda unos minutos en completarse. Una vez completado, muestra una salida similar a la del ejemplo siguiente:

{
"connectionString": "postgresql://<admin-user>:<admin-password>@<name>.postgres.database.azure.com/None?sslmode=require",
"databaseName": null,
"firewallName": "FirewallIPAddress_<timestamp>",
"host": "<name>.postgres.database.azure.com",
"id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<name>",
"location": "<region>",
"password": "<admin-password>",
"resourceGroup": "<resource-group>",
"skuname": "<sku-name>",
"username": "<admin-user>",
"version": "<version>"
}

Solo con fines de prueba, use el comando siguiente para crear una regla de firewall para permitir el acceso a un intervalo IP más amplio:

az postgres flexible-server firewall-rule create \
    --resource-group $RESOURCE_GROUP \
    --name $DB_SERVER_NAME \
    --rule-name allowiprange \
    --start-ip-address 0.0.0.0 \
    --end-ip-address 255.255.255.255

Conceder acceso de administrador a su ID de Entra

Use el siguiente comando para obtener object id para su Entra ID:

export USER_OBJECT_ID=$(az ad signed-in-user show \
    --query id \
    --output tsv \
    | tr -d '\r')

Use el siguiente comando para conceder acceso de administrador a su id. de Entra:

az postgres flexible-server ad-admin create \
    --resource-group $RESOURCE_GROUP \
    --server-name $DB_SERVER_NAME \
    --object-id $USER_OBJECT_ID \
    --display-name azureuser

Permitir las extensiones necesarias para pgvector

Para poder habilitar las extensiones requeridas por pgvector, debe permitirlas mediante el siguiente comando:

az postgres flexible-server parameter set \
    --resource-group $RESOURCE_GROUP \
    --server-name $DB_SERVER_NAME \
    --name azure.extensions \
    --value vector,hstore,uuid-ossp

Validación de la conectividad con la base de datos

Use el siguiente comando para obtener el nombre de host completo del servidor de bases de datos:

export PGHOST=$(az postgres flexible-server show \
    --resource-group $RESOURCE_GROUP \
    --name $DB_SERVER_NAME \
    --query fullyQualifiedDomainName \
    --output tsv \
    | tr -d '\r')

Use el siguiente comando para obtener un token de acceso para el identificador de usuario:

export PGPASSWORD="$(az account get-access-token \
    --resource https://ossrdbms-aad.database.windows.net \
    --query accessToken \
    --output tsv)"

Use el siguiente comando para conectarse a la base de datos:

psql "host=$PGHOST dbname=postgres user=azureuser sslmode=require"

La salida siguiente es típica:

psql (14.13, server 16.4)
 WARNING: psql major version 14, server major version 16.
         Some psql features might not work.
 SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
 Type "help" for help.

postgres=>

Una vez creada esta regla, puede actualizarla mediante az postgres flexible-server firewall-rule update.

Resumen de la unidad

Ahora tiene una base de datos PostgreSQL habilitada para vectores que proporciona funcionalidades de búsqueda de similitud de vectores.