Configurare un carico di lavoro dell'applicazione Linux

Completato

In questa unità si apprenderà come:

  • Configurare un carico di lavoro dell'applicazione Linux per connettersi a un Database di Azure per PostgreSQL usando un'identità gestita assegnata dal sistema.
  • Connettersi alla macchina virtuale di Azure usando l'interfaccia della riga di comando di Azure.
  • Installare gli strumenti necessari.
  • Connettersi al server PostgreSQL usando psql.
  • Clonare il repository che contiene l'applicazione di esempio.
  • Eseguire l'applicazione e verificare che sia in grado di connettersi al server PostgreSQL usando l'identità gestita.

Ottenere l'utente attualmente connesso e l'ID della macchina virtuale

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)

Assegnare il ruolo Accesso amministratore macchina virtuale all'utente per la macchina virtuale

Per altre informazioni sui ruoli con privilegi nelle macchine virtuali di Azure, vedere Ruoli predefiniti di Azure per gli utenti con privilegi.

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

Connettersi alla macchina virtuale di Azure usando l'interfaccia della riga di comando di Azure

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

Installare psql e Go nella macchina virtuale

Aggiornare l'elenco dei pacchetti:

sudo apt-get update

Installare il client PostgreSQL e Go (Golang) nella macchina virtuale:

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

Confermare la versione di psql

psql --version

Installare l'interfaccia della riga di comando di Azure nella macchina virtuale

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

Accedere all'interfaccia della riga di comando di Azure usando l'identità gestita assegnata dal sistema

az login --identity

Viene visualizzato l'output seguente:

$ 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"
    }
  }
]

Connettersi al server PostgreSQL usando Bash e psql

Eseguire i comandi seguenti nel computer remoto:

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

Dopo la connessione, viene visualizzato l'output seguente. Digitare il comando \q per uscire.

$ 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
$ 

Clonare l'applicazione di esempio

Clonare l'applicazione di esempio Tailwind Traders (Go). Eseguire i comandi seguenti nel computer remoto:

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

Passare alla directory dell'applicazione:

cd tailwind-traders-go/app/

Eseguire l'applicazione:

go run main.go

L'output sarà simile al seguente:

$ 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`

Connettersi al server PostgreSQL usando l'app Tailwind Traders (Go):destinazione del token

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

Chiudere psql e disconnettersi dal computer remoto

Uscire da psql:

\q

Disconnettersi dal computer remoto:

exit

Risorse