Configuración de una carga de trabajo de aplicación Linux

Completado

En esta unidad, aprenderá a:

  • Configure una carga de trabajo de aplicación Linux para conectarse a Azure Database for PostgreSQL mediante una identidad administrada asignada por el sistema.
  • Conéctese a la máquina virtual de Azure mediante la CLI de Azure.
  • Instale las herramientas necesarias.
  • Conéctese al servidor de PostgreSQL mediante psql.
  • Clone el repositorio que contiene la aplicación de ejemplo.
  • Ejecute la aplicación y confirme que puede conectarse al servidor PostgreSQL mediante la identidad administrada.

Obtención del usuario que ha iniciado sesión actualmente y el identificador de máquina virtual

USER_ID=$(az ad signed-in-user show --query id --output tsv)
VM_ID=$(az vm show --resource-group 240900-linux-postgres --name vm-1 --query id --output tsv)

Asignación del rol de inicio de sesión de administrador de máquinas virtuales al usuario para la máquina virtual

Puede obtener más información sobre los roles con privilegios para máquinas virtuales de Azure en roles integrados de Azure para Privileged.

az role assignment create \
    --assignee $USER_ID \
    --scope $VM_ID \
    --role "Virtual Machine Administrator Login"

Conexión a la máquina virtual de Azure mediante la CLI de Azure

az ssh vm --resource-group 240900-linux-postgres --name vm-1

Instalación de psql y Go en la máquina virtual

Actualice la lista de paquetes:

sudo apt-get update

Instale el cliente PostgreSQL y Go (Golang) en la máquina virtual:

sudo apt-get install -y postgresql-client golang-go

Confirmación de la versión de psql

psql --version

Instalación de la CLI de Azure en la máquina virtual

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Inicie sesión en la CLI de Azure mediante la identidad administrada asignada por el sistema

az login --identity

Se mostrará la siguiente salida:

$ az login --identity
[
  {
    "environmentName": "AzureCloud",
    "homeTenantId": "b4c72be8-cae1-4584-be77-62b1e94ad0dc",
    "id": "57039e18-c12e-4c87-a3e8-bf497991699d",
    "isDefault": true,
    "managedByTenants": [],
    "name": "CloudNative",
    "state": "Enabled",
    "tenantId": "b4c72be8-cae1-4584-be77-62b1e94ad0dc",
    "user": {
      "assignedIdentityInfo": "MSI",
      "name": "systemAssignedIdentity",
      "type": "servicePrincipal"
    }
  }
]

Conexión al servidor PostgreSQL mediante Bash y psql

Ejecute los siguientes comandos en la máquina remota:

MANAGED_IDENTITY_NAME=240900-linux-postgres-identity
export AZURE_CLIENT_ID=$(az identity show --resource-group 240900-linux-postgres --name $MANAGED_IDENTITY_NAME --query "clientId" -o tsv)
PG_NAME=$(az postgres flexible-server list --resource-group 240900-linux-postgres --query "[0].name" -o tsv)

# Set psql environment variables
export PGHOST="${PG_NAME}.privatelink.postgres.database.azure.com"
export PGPASSWORD=$(curl -s "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=${AZURE_CLIENT_ID}" -H Metadata:true | jq -r .access_token)
export PGUSER=$MANAGED_IDENTITY_NAME
export PGDATABASE=postgres

# Log in by using psql
psql

Después de conectarse, aparece la salida siguiente. Escriba el comando \q para salir.

$ psql
psql (16.4 (Ubuntu 16.4-0ubuntu0.24.04.2))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=> \q
$ 

Clonación de la aplicación de ejemplo

Clone la aplicación de ejemplo, Tailwind Traders (Go). Ejecute los siguientes comandos en la máquina remota:

git clone https://github.com/Azure-Samples/tailwind-traders-go.git

Cambie al directorio de la aplicación:

cd tailwind-traders-go/app/

Ejecute la aplicación:

go run main.go

La salida debe ser similar a:

$ go run main.go
go: downloading github.com/magefile/mage v1.15.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0
go: downloading github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0
go: downloading github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2
go: downloading golang.org/x/crypto v0.26.0
go: downloading golang.org/x/net v0.28.0
go: downloading github.com/google/uuid v1.6.0
go: downloading github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
go: downloading github.com/kylelemons/godebug v1.1.0
go: downloading github.com/golang-jwt/jwt/v5 v5.2.1
go: downloading golang.org/x/text v0.17.0
Targets:
  app:connectionString    outputs a connection string for the database from env vars
  app:ping                pings the database
  app:serve               runs a web server for our application
  app:tables              lists the tables in the database
  app:token               gets a token using `azidentity.NewDefaultAzureCredential`

Conexión al servidor PostgreSQL mediante el destino de app:token de Tailwind Traders (Go)

MANAGED_IDENTITY_NAME=240900-linux-postgres-identity
export AZURE_CLIENT_ID=$(az identity show --resource-group 240900-linux-postgres --name $MANAGED_IDENTITY_NAME --query "clientId" -o tsv)
PG_NAME=$(az postgres flexible-server list --resource-group 240900-linux-postgres --query "[0].name" -o tsv)

# psql
export PGHOST="${PG_NAME}.privatelink.postgres.database.azure.com"
export PGPASSWORD=$(go run main.go app:token)
export PGUSER=$MANAGED_IDENTITY_NAME
export PGDATABASE=postgres

# Log in by using psql
psql

Salida de psql y desconexión de la máquina remota

Salir de psql:

\q

Desconecte de la máquina remota:

exit

Recursos