Ejercicio: Implementación de datos multiinquilino
Este ejercicio le guiará por los siguientes procesos:
- Instalación de Azure Database for PostgreSQL en el modelo de implementación de servidor
- Creación de una base de datos con datos de inventario de ejemplo
- Integración del servidor con Microsoft Entra ID.
- Implementación una aplicación sencilla basada en Node.js que consulta la base de datos mediante la autenticación de Microsoft Entra.
Nota:
En este ejercicio se muestra un enfoque simplificado para proporcionar compatibilidad con varios inquilinos mediante la emulación de la funcionalidad multiinquilino del modelo de implementación de Hiperescala de Azure Database for PostgreSQL. También proporciona un enfoque simplificado para implementar la autenticación de Microsoft Entra en escenarios multiinquilino, ya que se basa en la funcionalidad Microsoft Entra B2B. Microsoft Entra ID admite directamente aplicaciones multiinquilino, pero su cobertura detallada está fuera del ámbito de este módulo.
En este ejercicio, aprenderá a:
- Crear una instancia del servidor de Azure Database for PostgreSQL
- Conectarse al servidor de Azure Database for PostgreSQL
- Crear una base de datos y tablas de ejemplo
- Integración del servidor de Azure DB for PostgreSQL con Microsoft Entra ID.
- Registro de una aplicación con Microsoft Entra ID.
- Implementación de una aplicación sencilla basada en Node.js e integrada en Microsoft Entra.
- Validar la funcionalidad de la aplicación basada en Node.js
Requisitos previos
Para realizar este ejercicio, necesitará lo siguiente:
- Para completar el ejercicio Configuración de Microsoft Entra ID en la suscripción de Azure.
- Una cuenta de Microsoft o una cuenta de Microsoft Entra con el rol Administrador global en el inquilino de Microsoft Entra asociado a la suscripción de Azure y con el rol Propietario o Colaborador en la suscripción de Azure.
Advertencia
Use un entorno de prueba porque los ejercicios de este módulo realizan operaciones confidenciales que requieren privilegios administrativos elevados.
Creación de una instancia del servidor de Azure Database for PostgreSQL
En primer lugar, creará una instancia del servidor de Azure Database for PostgreSQL:
Si es necesario, abra un explorador web, vaya a Azure Portal e inicie sesión para acceder a la suscripción de Azure que está usando en este módulo.
Use el cuadro de texto Buscar recursos, servicios y documentos al principio de la página de Azure Portal para buscar Azure Database for PostgreSQL y, en la lista de resultados, en la sección Servicios, seleccione Azure Database for PostgreSQL.
En el panel Servidores de Azure Database for PostgreSQL, seleccione + Crear.
En el panel Seleccionar opción de implementación de Azure Database for PostgreSQL, en el icono Azure Database for PostgreSQL, en Tipo de recurso, seleccione Servidor único.
Seleccione Crear.
En la pestaña Básico de la hoja Servidor único, configure las siguientes opciones y después seleccione Revisión y creación, pero deje todas las demás opciones con sus valores predeterminados:
Configuración Configuración Subscription Seleccione el nombre de la suscripción de Azure que usará en este módulo. Resource group Cree un grupo de recursos denominado postgresql-db-RG. Nombre de servidor Escriba un nombre único que conste de letras minúsculas, dígitos o guiones y que comience por una letra. Origen de datos Seleccione Ninguno. Location Seleccione la región de Azure más cercana a la ubicación del entorno de laboratorio donde puede crear instancias de Azure Database for PostgreSQL. Versión Seleccione 11. Proceso y almacenamiento Seleccione el vínculo Configurar servidor. En la hoja Configurar, seleccione Básico, establezca el valor de Núcleo virtual en 1 y Almacenamiento en 5 GB y, luego, seleccione Aceptar. Nombre de usuario administrador Escriba Alumno. Contraseña Escriba <password>
a.En la pestaña Revisión y creación de la hoja Un solo servidor, seleccione Crear.
Espere a que se complete el aprovisionamiento. Esto puede tardar unos cinco minutos.
Nota:
El proceso de aprovisionamiento crea automáticamente una base de datos denominada postgres en el servidor de destino.
Conexión con el servidor de Azure Database for PostgreSQL
Con el servidor de Azure Database for PostgreSQL aprovisionado, se conectará a él mediante la herramienta psql.
En el panel Introducción a Microsoft.PostgreSQLServer.createPostgreSqlServer, seleccione Ir al recurso.
En el panel Implementación, en la sección Configuración del menú vertical, seleccione Seguridad de la conexión.
En la hoja Seguridad de la conexión, establezca Permitir el acceso a servicios de Azure en Sí, seleccione + Agregar IP de cliente, establezca Aplicar conexión SSL en DESHABILITADO y seleccione Guardar.
Nota:
Esta configuración permitirá conectarse a la base de datos desde el equipo y desde las aplicaciones que se ejecutan en Azure.
Nota:
La deshabilitación de la aplicación de SSL está pensada para simplificar los ejercicios posteriores. En general, debe mantener esta opción habilitada.
En la ventana del explorador en la que se muestra Azure Portal con el panel Implementación, seleccione Información general en el menú vertical.
En la sección Información esencial, identifique las entradas situadas junto a las etiquetas Nombre del servidor y Nombre de usuario de administrador y tome nota de sus valores.
Nota:
Tenga en cuenta que el nombre de usuario incluye el símbolo @ seguido del nombre de servidor que especificó en la tarea anterior.
En la ventana del explorador en la que se muestra Azure Portal con el panel Servidor único de Azure Database for PostgreSQL, en la sección Configuración del menú vertical, seleccione Cadenas de conexión.
En la lista de cadenas de conexión, copie el valor de la cadena de conexión psql y anótelo, para poder usarlo más adelante en este ejercicio.
Nota:
La cadena de conexión tiene la siguiente sintaxis, donde el marcador de posición
<server_name>
representa el nombre del servidor que identificó anteriormente en esta tarea:psql "host=<server_name>.postgres.database.azure.com port=5432 dbname={your_database} user=student@<server_name> password={your_password} sslmode=require"
En Azure Portal, abra una sesión de Bash de Cloud Shell. Para ello, seleccione su icono en la barra de herramientas que se encuentra junto al cuadro de texto de búsqueda.
Dentro de la sesión de Bash en el panel Cloud Shell, pegue el valor de la cadena de conexión psql desde el Portapapeles, modifíquelo para que coincida con el comando siguiente y ejecútelo para conectarse a la base de datos postgres hospedada en la instancia de servidor recién implementada de Azure Database for PostgreSQL. El valor del marcador de posición
<server_name>
ya estará incluido en la cadena de conexión que pegó desde el Portapapeles:psql "host=<server_name>.postgres.database.azure.com port=5432 dbname=postgres user=student@<server_name>.postgres.database.azure.com password=<enter your password> sslmode=require"
Nota:
Una vez que se haya conectado correctamente, aparecerá el símbolo del sistema
postgres=>
.
Creación de una base de datos y de tablas de ejemplo
En el panel Cloud Shell, en la consola de
postgres=>
, ejecute el siguiente comando para crear una nueva base de datos llamada cnamtinventory:CREATE DATABASE cnamtinventory;
Ejecute el siguiente comando para cambiar la conexión a la base de datos recién creada:
\c cnamtinventory
Ejecute el comando siguiente para crear una tabla de inquilinos:
CREATE TABLE tenants ( id bigserial PRIMARY KEY, name text NOT NULL, created_at TIMESTAMP DEFAULT NOW()::date, updated_at TIMESTAMP DEFAULT NOW()::date );
Ejecute el comando siguiente para crear una tabla de inventario:
CREATE TABLE inventory ( id bigserial, tenant_id bigint REFERENCES tenants (id), name VARCHAR(50), quantity INTEGER, date DATE NOT NULL DEFAULT NOW()::date, created_at TIMESTAMP DEFAULT NOW()::date, updated_at TIMESTAMP DEFAULT NOW()::date, PRIMARY KEY (tenant_id, id, date) ) PARTITION BY RANGE (date); CREATE TABLE inventory_default PARTITION OF inventory DEFAULT;
Nota:
Los datos se particionan en función del valor de la columna de fecha.
Ejecute el siguiente comando para comprobar que la tabla se ha creado correctamente:
\dt
Ejecute el siguiente comando para cargar datos de ejemplo en la tabla de inquilinos:
INSERT INTO tenants (id, name) VALUES (1, 'adatum'); INSERT INTO tenants (id, name) VALUES (2, 'contoso');
Ejecute el siguiente comando para cargar datos de ejemplo en la tabla de inventario:
INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (1, 1, 'yogurt', 200); INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (2, 1, 'milk', 100); INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (1, 2, 'yogurt', 20); INSERT INTO inventory (id, tenant_id, name, quantity) VALUES (2, 2, 'milk', 10);
Ejecute el siguiente comando para comprobar que la tabla de inventario contiene los datos insertados:
SELECT * FROM inventory;
Cierre el panel de Cloud Shell.
Integración del servidor de Azure DB for PostgreSQL con Microsoft Entra ID
Para integrar la instancia de servidor de Azure Database for PostgreSQL con Microsoft Entra ID, debe proporcionar una cuenta de usuario de Microsoft Entra como el administrador de Active Directory designado del servidor. Para ello, usará la cuenta de usuario adatumadmin1 que creó en la tarea anterior. Debe iniciar sesión en el servidor con esa cuenta de usuario. En ese momento, podrá crear usuarios de base de datos basados en Microsoft Entra ID y asignarles roles de base de datos. Usará los objetos adatumuser1, adatumgroup1 y contosouser1 de Microsoft Entra creados en el ejercicio anterior.
En la ventana del explorador en la que se muestra Azure Portal con la hoja del servidor de Azure Database for PostgreSQL, en la sección Configuración del menú vertical, seleccione Administrador de Active Directory y, después, en la barra de herramientas, seleccione Establecer administrador.
En la hoja Administrador de Active Directory, en la lista de cuentas de usuario de Microsoft Entra, seleccione la cuenta de usuario adatumadmin1 que creó en el ejercicio anterior, seleccione Seleccionar y, después, seleccione Guardar.
Abra otra ventana del explorador web en el modo de incógnito o InPrivate, vaya a Azure Portal e inicie sesión con la cuenta de usuario adatumadmin1 con la contraseña que creó en el ejercicio anterior.
En Azure Portal, abra Cloud Shell. Para ello, seleccione su icono en la barra de herramientas que se encuentra junto al cuadro de texto de búsqueda.
Cuando se le pida que seleccione Bash o PowerShell, seleccione Bash y, cuando aparezca el mensaje No tiene ningún almacenamiento montado, seleccione Create storage (Crear almacenamiento).
En la sesión de Bash del panel de Cloud Shell, ejecute los siguientes comandos para recuperar y mostrar un token de acceso de Microsoft Entra necesario para acceder a Azure Database for PostgreSQL:
FULL_TOKEN=$(az account get-access-token --resource-type oss-rdbms) echo $FULL_TOKEN
Nota:
El comando genera una salida que incluye un token codificado en Base 64, que identifica al usuario autenticado en el recurso de Azure Database for PostgreSQL.
La salida usa el siguiente formato:
{ "accessToken": "<placeholder for token value>", "expiresOn": "2021-05-21 18:22:44.000000", "subscription": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a", "tenant": "eeeeffff-4444-aaaa-5555-bbbb6666cccc", "tokenType": "Bearer" }
Ejecute el siguiente comando para establecer el valor de la variable PGPASSWORD en el valor del token de acceso de la salida del comando que ejecutó en el paso anterior:
export PGPASSWORD=$(echo $FULL_TOKEN | jq -r '.accessToken')
Ejecute el siguiente comando para conectarse a la base de datos cnamtinventory mediante la herramienta psql y mediante la autenticación de Microsoft Entra (reemplace el marcador de posición
<server_name>
por el nombre del servidor que identificó anteriormente en este ejercicio):DOMAIN_NAME=$(az rest --method GET --url 'https://management.azure.com/tenants?api-version=2020-01-01' --query "value[0].defaultDomain" -o tsv) psql "host=<server_name>.postgres.database.azure.com user=adatumadmin1@$DOMAIN_NAME@<server_name> dbname=cnamtinventory sslmode=require"
Nota:
Una vez que se haya conectado correctamente, aparecerá el símbolo del sistema
cnamtinventory=>
.En el símbolo del sistema
cnamtinventory=>
, ejecute el siguiente comando para crear un rol de base de datos correspondiente al grupo de Microsoft Entra adatumgroup1 que creó en el ejercicio anterior:CREATE ROLE "adatumgroup1" WITH LOGIN IN ROLE azure_ad_user;
Ejecute el siguiente comando para comprobar que los roles se han creado correctamente:
SELECT rolname FROM pg_roles;
Ejecute el comando siguiente para conceder los permisos SELECT en la tabla de inventario al grupo adatumgroup1 que creó en el ejercicio anterior:
GRANT SELECT ON inventory TO adatumgroup1;
Cierre la sesión de la cuenta de usuario adatumadmin1 y cierre la ventana del explorador web en modo de incógnito o InPrivate.
Registro de una aplicación con la Microsoft Entra ID
Para implementar una aplicación basada en Node.js de ejemplo que usa la autenticación de Microsoft Entra para acceder a una base de datos de Azure Database for PostgreSQL, debe crear un objeto de aplicación de Microsoft Entra y la entidad de seguridad correspondiente. Esto permitirá que la aplicación basada en Node.js suplante a los usuarios de Microsoft Entra al acceder a objetos de base de datos.
En el Azure Portal, use el cuadro de texto Buscar recursos, servicios y documentos para buscar Microsoft Entra ID y, en la lista de resultados, seleccione Microsoft Entra ID.
En la hoja de Microsoft Entra, en la sección Administrar del menú vertical, seleccione Registros de aplicaciones.
En la hoja Registros de aplicaciones, seleccione + Nuevo registro.
En la hoja Registrar una aplicación, en el cuadro de texto Nombre, escriba cna-app. En la sección Tipos de cuenta admitidos, asegúrese de que está seleccionada la opción Solo las cuentas de este directorio organizativo (solo de directorio predeterminado: inquilino único). En la sección URI de redirección (opcional), establezca la entrada Web en
http://localhost:8080/redirect
y, después, seleccione Registrar.Nota:
Tiene la opción de configurar la compatibilidad multiinquilino para las aplicaciones registradas de Microsoft Entra. Sin embargo, la cobertura detallada de este enfoque está fuera del ámbito de este módulo.
Nota:
Una vez implementada la aplicación, deberá modificar el valor de URI de redirección (opcional) para reflejar su dirección URL real.
En la hoja cna-app, revise la configuración resultante y anote los valores de Id. de la aplicación (cliente) y las propiedades de Id. de directorio (inquilino).
En la hoja cna-app, en la sección Administrar, seleccione Certificados y secretos y, después, + Nuevo secreto de cliente.
En la hoja Agregar un secreto de cliente, en el cuadro de texto Descripción, escriba cna-secret-0. Deje la entrada de la lista desplegable Expira con su valor predeterminado y seleccione Agregar.
De nuevo en la hoja cna-app | Certificados y secretos, copie el valor del secreto recién generado.
Nota:
Asegúrese de copiar el valor del secreto antes de salir de esta hoja, ya que en ese momento ya no podrá recuperarlo. Si esto sucede, cree otro secreto.
En la hoja cna-app | Certificados y secretos, en la sección Administrar del menú vertical, seleccione Permisos de API.
En el panel cna-app | Permisos de API seleccione + Agregar un permiso, en el panel Solicitud de permisos de API, seleccione la pestaña API usadas en mi organización, escriba Base de datos OSSRDBMS de Azure en el cuadro de texto y, después, en la lista de resultados, seleccione Base de datos OSSRDBMS de Azure.
En la hoja Solicitud de permisos de API, seleccione Permisos delegados, marque la casilla user_impersonation y, después, seleccione Agregar permisos.
De nuevo en el panel cna-app | Permisos de API, seleccione Conceder consentimiento de administrador para directorio predeterminado y, cuando se le pida que confirme, seleccione Sí.
En el panel cna-app | Permisos de API, compruebe que se han concedido los permisos.
Implementación de una aplicación sencilla basada en Node.js e integrada en Microsoft Entra
Con la aplicación registrada en el inquilino de Microsoft Entra, ahora puede continuar con su implementación.
En Azure Portal, inicie una sesión de Bash en Cloud Shell. Para ello, seleccione su icono en la barra de herramientas que se encuentra junto al cuadro de texto de búsqueda.
En la sesión de Bash del panel de Cloud Shell, ejecute los siguientes comandos para inicializar un proyecto de Node.js en un nuevo directorio:
mkdir -p cna-aadexpress && cd cna-aadexpress npm init -y
Ejecute los siguientes comandos para agregar los paquetes necesarios a la dependencia del proyecto:
npm install express npm install pg npm install @azure/msal-node
Ejecute el siguiente comando para crear un archivo denominado index.js en la raíz del proyecto:
touch ./index.js
Use el editor nano para abrir el archivo index.js y agregue el siguiente contenido. Creará un nombre de aplicación más adelante en esta unidad para reemplazar el marcador de posición
<webapp_name>
. Reemplace<client_id>
,<tenant_id>
,<client_secret>
y<server_name>
(excepto el sufijo.postgres.database.azure.com
) por sus valores reales, que anotó anteriormente en este ejercicio:Nota:
Los marcadores de posición
<client_id>
y<tenant_id>
corresponden a las propiedades Id. de aplicación (cliente) y Id. de directorio (inquilino) a las que se hizo referencia anteriormente en este ejercicio.// Import dependencies const express = require("express"); const msal = require('@azure/msal-node'); const pg = require('pg'); const port = process.env.PORT || 8080 // Initialize express const app = express(); app.use(express.json()); app.listen(port, () => console.log(`Sample app is listening on port ${port}!`)) // Authentication parameters const config = { auth: { clientId: "<client_id>", authority: "https://login.microsoftonline.com/<tenant_id>", clientSecret: "<client_secret>" }, system: { loggerOptions: { loggerCallback(loglevel, message, containsPii) { console.log(message); }, piiLoggingEnabled: false, logLevel: msal.LogLevel.Verbose, } } }; var outputrows = "" // Initialize MSAL Node object using authentication parameters const cca = new msal.ConfidentialClientApplication(config); app.get('/auth', (req, res) => { redirectUri = req.hostname.toLowerCase()=="localhost" ? "http://localhost:8080/redirect" : "https://<webapp_name>.azurewebsites.net/redirect"; // Construct a request object for auth code const authCodeUrlParameters = { scopes: ["https://ossrdbms-aad.database.windows.net/user_impersonation"], redirectUri: redirectUri, }; // Request auth code, then redirect cca.getAuthCodeUrl(authCodeUrlParameters) .then((response) => { res.redirect(response); }).catch((error) => res.send(error)); }); app.get('/redirect', (req, res) => { redirectUri = req.hostname.toLowerCase()=="localhost" ? "http://localhost:8080/redirect" : "https://<webapp_name>.azurewebsites.net/redirect"; // Use the auth code in redirect request to construct a token request object const tokenRequest = { code: req.query.code, scopes: ["https://ossrdbms-aad.database.windows.net/user_impersonation"], redirectUri: redirectUri, }; // Exchange the auth code for tokens cca.acquireTokenByCode(tokenRequest) .then((response) => { //res.send(response); var username = 'adatumgroup1'; var databasename = 'cnamtinventory'; var servername = '<server_name>'; var tablename = 'inventory'; process.env.PGPASSWORD = response.accessToken; const connectionString = `postgres://${username}@${servername}@${servername}.postgres.database.azure.com:5432/${databasename}?ssl=true`; res.write(connectionString + "\n\n"); res.write(response.accessToken + "\n\n"); const client = new pg.Client(connectionString); client.connect(err => { if (err) throw err; else { queryDatabase(response.account.name); } }); function queryDatabase(tenant_id) { console.log(`Running query to PostgreSQL server: ${servername}`); switch (tenant_id) { case "adatumuser1": id = "1"; break; case "contosouser1": id = "2"; break; } const query = `SELECT * FROM ${tablename} WHERE tenant_id = ${id};`; client.query(query) .then(qresponse => { const rows = qresponse.rows; rows.map(row => { var singlerow = `${JSON.stringify(row)}`; console.log(singlerow); outputrows += singlerow + "\n"; }); res.write(outputrows); res.end(); process.exit(); }) .catch(err => { console.log(err); }); } }).catch((error) => res.write(error)); });
Nota:
Una aplicación multiinquilino registrada en Microsoft Entra usa la dirección URL
authority: "https://login.microsoftonline.com/common"
de autoridad genérica, pero, en su caso, debe usar una dirección URL de inquilino único que incluya el identificador de inquilino.Nota:
Tenga en cuenta que, después de implementar la aplicación, deberá reemplazar el valor de URL de redireccionamiento por la URL de redireccionamiento real.
Use el editor Nano para editar el archivo package.json en la raíz del proyecto y reemplácelo por el siguiente contenido:
{ "name": "node-express", "version": "1.0.0", "description": "Node.js express sample", "main": "index.js", "scripts": { "start": "node index.js" }, "author": "", "license": "ISC", "dependencies": { "@azure/msal-node": "^1.1.0", "body-parser": "^1.19.0", "express": "^4.17.1", "http": "0.0.0", "morgan": "^1.10.0", "pg": "^8.6.0" } }
Validación de la funcionalidad de la aplicación basada en Node.js
Ya está listo para probar la funcionalidad de la aplicación web. En este momento, podría contenedorizarla, pero por razones de simplicidad, la implementará en una instancia de Azure App Service. Esto le ofrecerá una manera rápida de validar su funcionalidad y asegurarse de que su contenedorización es una opción viable.
En la sesión de Bash del panel de Cloud Shell, ejecute los siguientes comandos para crear un grupo de recursos que hospedará la aplicación web de Azure, en la que implementará la aplicación Express de Node.js:
RG1NAME=postgresql-db-RG LOCATION=$(az group show --resource-group $RG1NAME --query location --output tsv) RG2NAME=cna-aadexpress-RG az group create --name $RG2NAME --location $LOCATION
Ejecute los siguientes comandos para crear un plan de Azure App Service de nivel Gratis que hospedará la nueva aplicación web de Azure:
SPNAME=aadexpress-sp az appservice plan create --name $SPNAME --resource-group $RG2NAME --sku F1 --is-linux
Ejecute los siguientes comandos para crear la aplicación web de Azure basada en Node.js:
WEBAPPNAME=aadexpress$RANDOM$RANDOM az webapp create --name $WEBAPPNAME --resource-group $RG2NAME --plan $SPNAME --runtime "NODE|16-lts"
Ejecute los siguientes comandos para identificar el nombre de la aplicación web:
echo $WEBAPPNAME
Use el editor Nano para abrir el archivo index.js, reemplace dos marcadores de posición
<webapp_name>
por el nombre que identificó en el paso anterior, guarde los cambios y cierre el archivo.Nota:
Asegúrese de reemplazar ambos marcadores de posición
<webapp_name>
.Abra otra pestaña en la ventana del explorador web en la que se muestra Azure Portal, vaya a Azure Portal y, si se le solicita, inicie sesión para acceder a la suscripción de Azure que va a usar en este módulo.
En el Azure Portal, use el cuadro de texto Buscar recursos, servicios y documentos para buscar Microsoft Entra ID y, en la lista de resultados, seleccione Microsoft Entra ID.
En la hoja de Microsoft Entra, vaya a la hoja Registros de aplicaciones, seleccione la entrada cna-app y, en la sección Administrar del menú vertical, seleccione Autenticación.
En el panel cna-app | Autenticación, modifique el valor de URI de redirección para que coincida con la entrada que ha actualizado en el archivo index.js y guarde los cambios.
Vuelva a la pestaña del explorador web en la que se muestra la sesión de Bash en el panel de Cloud Shell y ejecute los siguientes comandos para inicializar el repositorio de Git local y confirme todos los cambios de la rama principal:
cd ~/cna-aadexpress git config --global user.email "user1@adatum.com" git config --global user.name "Adatum User1" git init git add -A git commit -m "Initial Commit"
Ejecute los siguientes comandos para configurar las credenciales de implementación de nivel de usuario:
DEPLOYMENTUSER=m06User$RANDOM DEPLOYMENTPASS=m06Pass$RANDOM$RANDOM az webapp deployment user set --user-name $DEPLOYMENTUSER --password $DEPLOYMENTPASS
Ejecute los siguientes comandos para identificar las credenciales de implementación de nivel de usuario y anote su valor, ya que lo necesitará más adelante en esta tarea:
echo $DEPLOYMENTUSER echo $DEPLOYMENTPASS
Ejecute los siguientes comandos para identificar la dirección URL de implementación de la aplicación web de Azure que usará como destino del comando
git push
:RG2NAME=cna-aadexpress-RG WEBAPPNAME=$(az webapp list --resource-group $RG2NAME --query "[0].name" --output tsv) DEPLOYMENTURL=$(az webapp deployment source config-local-git --name $WEBAPPNAME --resource-group $RG2NAME --output tsv)
Ejecute el siguiente comando para configurar el repositorio remoto denominado azure, que representa la dirección URL de implementación que identificó en el paso anterior:
git remote add azure $DEPLOYMENTURL
Ejecute los comandos siguientes para crear la rama test en función de la rama principal e inserte su contenido en la aplicación web de Azure (cuando se le solicite la contraseña que forma parte de las credenciales de implementación en el nivel de usuario que anotó anteriormente en esta tarea):
git checkout -b test git commit -a -m "testing" git push --set-upstream azure test
Cierre el panel de Cloud Shell.
Abra otra ventana del explorador web en el modo de incógnito o InPrivate, vaya a Azure Portal e inicie sesión con la cuenta de usuario adatumuser1 que creó en el ejercicio anterior.
En Azure Portal, use el cuadro de texto Buscar recursos, servicios y documentos que se encuentra al inicio de la página de Azure Portal para buscar App Services.
En la hoja App Services, en la lista de instancias de App Service, seleccione la entrada que representa la aplicación web de Azure recién implementada.
En la hoja que muestra las propiedades de la aplicación web, en la sección Información esencial, copie el valor de la URL del Dominio predeterminado.
Abra otra pestaña en la misma ventana del navegador y, en el cuadro de búsqueda, escriba https://, pegue la URL que acaba de copiar al portapapeles, agregue el sufijo /auth, y seleccione Entrar.
Nota:
La dirección URL debe tener el siguiente formato:
https://<webapp_name>.azurewebsites.net/auth
.Compruebe que la página web resultante contiene la información de autenticación de Microsoft Entra para el usuario que tiene la sesión iniciada actualmente (el resultado puede variar).
Results
Enhorabuena. Ha completado el segundo ejercicio de este módulo. En este ejercicio, instaló Azure Database for PostgreSQL en el modelo de implementación de un solo servidor, creó una base de datos con datos de inventario de ejemplo, integró el servidor con Microsoft Entra ID e implementó una aplicación sencilla basada en Node.js que consulta la base de datos mediante la autenticación de Microsoft Entra.