Explorer et exécuter des charges de travail Linux et PostgreSQL
Dans cette unité, vous allez :
- Déployer un compte Stockage Blob Azure en utilisant un modèle Bicep.
- Créez un conteneur Stockage Blob.
- Migrer des images vers le compte de stockage Blob.
- Chargez
tailwind.sqlsur le compte Stockage Blob. - Vous connecter à la machine virtuelle Azure en utilisant Azure CLI.
- Téléchargez le fichier à partir du compte de stockage.
- Vous connecter au serveur PostgreSQL en utilisant
psqlet importer un fichier SQL. - Exécutez l’application de manière interactive via la ligne de commande.
- Vérifier que l’application s’exécute correctement.
Déployer un compte de stockage en utilisant deploy/vm-postgres.bicep
Exécutez la commande suivante sur votre ordinateur local :
az deployment group create \
--resource-group 240900-linux-postgres \
--template-file deploy/vm-postgres.bicep \
--parameters \
deployVm=false \
deployPostgres=false \
deployStorage=true
Ajouter l’utilisateur actuel au rôle Propriétaire des données blob du stockage
STORAGE_ACCOUNT_ID=$(az storage account list \
--resource-group 240900-linux-postgres \
--query '[0].id' \
-o tsv)
USER_ID=$(az ad signed-in-user show \
--query id \
-o tsv)
az role assignment create \
--role "Storage Blob Data Owner" \
--assignee $USER_ID \
--scope $STORAGE_ACCOUNT_ID
Créer un conteneur appelé container1 dans le compte de stockage
STORAGE_ACCOUNT_NAME=$(az storage account list \
--resource-group 240900-linux-postgres \
--query '[0].name' \
-o tsv)
echo "STORAGE_ACCOUNT_NAME: $STORAGE_ACCOUNT_NAME"
az storage container create \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--name container1
Migrer des images vers le compte de stockage dans un sous-dossier
az storage blob upload-batch \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--overwrite \
--destination container1/images \
--source app/data/images
Vous obtenez la sortie suivante :
[
{
"Blob": "https://storageji2dbe.blob.core.windows.net/container1/images/wrench_set.jpg",
"Last Modified": "...",
"Type": "image/jpeg",
"eTag": "\"0x8DCE0CA938AF41B\""
},
{
"Blob": "https://storageji2dbe.blob.core.windows.net/container1/images/planer.jpg",
"Last Modified": "...",
"Type": "image/jpeg",
"eTag": "\"0x8DCE0CA939DF18B\""
},
...
]
Charger l’application/les données/postgres/tailwind.sql sur le compte de stockage
az storage blob upload \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--container-name container1 \
--file app/data/postgres/tailwind.sql \
--name tailwind.sql
Se connecter à la machine virtuelle Azure en utilisant la commande az ssh
az ssh vm \
--resource-group 240900-linux-postgres \
--name vm-1
Télécharger le fichier tailwind.sql à partir du compte de stockage
Définissez la variable Bash STORAGE_ACCOUNT_NAME sur le nom du compte de stockage :
STORAGE_ACCOUNT_NAME=$(az storage account list \
--resource-group 240900-linux-postgres \
--query '[0].name' \
-o tsv)
echo "STORAGE_ACCOUNT_NAME: $STORAGE_ACCOUNT_NAME"
Téléchargez tailwind.sql sur la machine virtuelle Azure à l’aide de la commande az storage blob download :
az storage blob download \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--container-name container1 \
--file tailwind.sql \
--name tailwind.sql
Définir les variables d’environnement pour psql sur l’ordinateur distant
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
Importer tailwind.sql en utilisant psql
psql -f tailwind.sql
Se connecter au serveur Postgres pour confirmer que l’importation a réussi
psql
Répertorier les tables
\dt
Vous obtenez la sortie suivante :
postgres=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------------------+-------+--------------------------------
public | cart_items | table | 240900-linux-postgres-identity
public | checkouts | table | 240900-linux-postgres-identity
public | collections | table | 240900-linux-postgres-identity
public | collections_products | table | 240900-linux-postgres-identity
public | customers | table | 240900-linux-postgres-identity
public | delivery_methods | table | 240900-linux-postgres-identity
public | product_types | table | 240900-linux-postgres-identity
public | products | table | 240900-linux-postgres-identity
public | shipment_items | table | 240900-linux-postgres-identity
public | shipments | table | 240900-linux-postgres-identity
public | store_inventory | table | 240900-linux-postgres-identity
public | stores | table | 240900-linux-postgres-identity
public | suppliers | table | 240900-linux-postgres-identity
public | supply_orders | table | 240900-linux-postgres-identity
(14 rows)
Exécuter une requête SQL qui liste les tables
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';
Vous obtenez la sortie suivante :
postgres=> SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';
table_name
----------------------
collections
stores
customers
cart_items
product_types
products
suppliers
collections_products
checkouts
shipments
delivery_methods
shipment_items
store_inventory
supply_orders
(14 rows)
Activer le mode développé et sélectionner dans la table des produits
À l’invite postgres=>, activez le mode développé :
\x
Sélectionnez depuis la table produits :
select * from products;
L’invite suivante s’affiche :
postgres=> \x
Expanded display is on.
postgres=> select * from products;
Un listing de produits s’affiche :
id | 1
product_type_id | 1
supplier_id | 2
sku | brush_cleaner
name | Meltdown Brush Cleaner
price | 12.99
description | We all leave our brushes sitting around, full of old dry paint. Don't worry! The Meltdown Brush Cleaner can remove just about anything.
image | brush_cleaner.jpg
digital | f
unit_description | 1 - 10oz Jar
package_dimensions | 4x8x2
weight_in_pounds | 3.2
reorder_amount | 10
status | in-stock
requires_shipping | t
warehouse_location | Zone 1, Shelf 12, Slot 6
created_at | ...
updated_at | ...
...
Sélectionnez la barre d’espace pour parcourir les résultats. Appuyez sur q pour quitter le sélecteur de pages.
Quitter psql
\q
Exécuter l’application de manière interactive via la ligne de commande
Sur l’ordinateur distant, accédez au répertoire qui contient l’application :
cd tailwind-traders-go/app
Exécutez l’application de manière interactive depuis la ligne de commande :
go run main.go app:serve
Vous obtenez la sortie suivante :
$ go run main.go app:serve
Listening on :8080
Rechercher l’adresse IP publique de la machine virtuelle
Obtenez l’adresse IP publique de la machine virtuelle :
IP_ADDRESS=$(az network public-ip show \
--resource-group 240900-linux-postgres \
--name vm-1-ip \
--query ipAddress \
--out tsv)
Affichez l’URL dans le terminal :
echo "Your URL is: http://${IP_ADDRESS}:8080"
Cette unité utilise le port 8080 à des fins interactives de développement/test. En production, vous utiliseriez le port 443 et exigeriez un certificat TLS pour permettre de sécuriser le trafic vers le point de terminaison.
Parcourir le point de terminaison de l'API publique
Ouvrez l’URL dans un navigateur web. Vous obtenez la sortie suivante :
{
"id": 5,
"product_type_id": 1,
"supplier_id": 2,
"sku": "drafting_tools",
"name": "Bespoke Drafting Set",
"price": 45,
"description": "Build your next bridge (or tunnel) using our Bespoke Drafting Set. Everyone drives across *regular* bridges everyday - but they'll rememeber yours - because it's _bespoke_.",
"image": "drafting_tools.jpg",
"digital": false,
"unit_description": "Tools and carrying case",
"package_dimensions": "5x10x3",
"weight_in_pounds": "1.2",
"reorder_amount": 10,
"status": "in-stock",
"requires_shipping": true,
"warehouse_location": "Zone 1, Shelf 4, Slot 1",
"created_at": "...",
"updated_at": "..."
}
Vous pouvez également effectuer une requête au point de terminaison de l’API en utilisant curl :
curl "http://${IP_ADDRESS}:8080"
Ce point de terminaison affiche un produit aléatoire de la base de données.
Afficher les demandes enregistrées dans le terminal
Revenez au terminal où vous exécutez l’application de manière interactive. La sortie affiche la requête vers le point de terminaison de l’API :
{"time":"...","level":"INFO","msg":"httpLog","remoteAddr":"[::1]:58592","method":"GET","url":"/"}
{"time":"...","level":"INFO","msg":"httpLog","remoteAddr":"[::1]:59414","method":"GET","url":"/"}
{"time":"...","level":"INFO","msg":"httpLog","remoteAddr":"[::1]:59414","method":"GET","url":"/favicon.ico"}
Si ces requêtes réussissent, vous avez correctement migré la charge de travail de l’application vers une machine virtuelle Azure et Azure Database pour PostgreSQL (serveur flexible).
Nettoyage des ressources Azure
Après avoir terminé d’explorer les charges de travail Linux et PostgreSQL, nettoyez les ressources pour économiser des coûts.
Vous pouvez supprimer le groupe de ressources 240900-linux-postgres manuellement via le Portail Azure ou exécuter la commande Azure CLI suivante :
az group delete \
--name 240900-linux-postgres \
--yes \
--no-wait
Une autre option consiste à utiliser le modèle empty.bicep pour supprimer les ressources créées par le fichier vm-postgres.bicep. Exécuter az deployment group create avec --mode Complete supprime toutes les ressources que le modèle ne définit pas. empty.json n’ayant pas de ressources, la commande supprime chaque ressource.
az deployment group create \
--resource-group 240900-linux-postgres \
--template-file deploy/empty.bicep \
--mode Complete
Déployer empty.json laisse le groupe de ressources 240900-linux-postgres intact afin de pouvoir redéployer les ressources en n’utilisant qu’une seule commande.