Konfigurowanie obciążenia aplikacji systemu Linux

Ukończone

W trakcie tej lekcji wykonasz następujące czynności:

  • Konfigurowanie obciążenia aplikacji systemu Linux w celu nawiązania połączenia z usługą Azure Database for PostgreSQL przy użyciu przypisanej przez system tożsamości zarządzanej.
  • Połącz się z maszyną wirtualną platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
  • Zainstaluj niezbędne narzędzia.
  • Nawiąż połączenie z serwerem PostgreSQL przy użyciu polecenia psql.
  • Sklonuj repozytorium zawierające przykładową aplikację.
  • Uruchom aplikację i upewnij się, że może nawiązać połączenie z serwerem PostgreSQL przy użyciu tożsamości zarządzanej.

Pobieranie aktualnie zalogowanego użytkownika i identyfikatora maszyny wirtualnej

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)

Przypisywanie roli logowania administratora maszyny wirtualnej do użytkownika dla maszyny wirtualnej

Więcej informacji na temat ról uprzywilejowanych dla maszyn wirtualnych platformy Azure można przeczytać we wbudowanych rolach platformy Azure dla uprzywilejowanych.

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

Nawiązywanie połączenia z maszyną wirtualną platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure

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

Instalowanie narzędzia psql i języka Go na maszynie wirtualnej

Zaktualizuj listę pakietów:

sudo apt-get update

Zainstaluj klienta PostgreSQL i język Go (Golang) na maszynie wirtualnej:

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

Potwierdzanie wersji narzędzia psql

psql --version

Instalowanie interfejsu wiersza polecenia platformy Azure na maszynie wirtualnej

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

Zaloguj się do interfejsu wiersza polecenia platformy Azure przy użyciu przypisanej przez system tożsamości zarządzanej

az login --identity

Wyświetlane są następujące dane wyjściowe:

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

Nawiązywanie połączenia z serwerem PostgreSQL przy użyciu powłoki Bash i narzędzia psql

Uruchom następujące polecenia na maszynie zdalnej:

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

Po nawiązaniu połączenia zostanie wyświetlone następujące dane wyjściowe. \q Wprowadź polecenie, aby zakończyć pracę.

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

Klonowanie przykładowej aplikacji

Sklonuj przykładową aplikację Tailwind Traders (Go). Uruchom następujące polecenia na maszynie zdalnej:

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

Przejdź do katalogu aplikacji:

cd tailwind-traders-go/app/

Uruchom aplikację:

go run main.go

Dane wyjściowe powinny być podobne do następujących:

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

Nawiązywanie połączenia z serwerem PostgreSQL przy użyciu aplikacji Tailwind Traders (Go) :token target

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

Zamknij program psql i odłącz się od maszyny zdalnej

Zamknij :psql

\q

Odłącz się od maszyny zdalnej:

exit

Zasoby