Erkunden und Ausführen von Linux- und PostgreSQL-Workloads
In dieser Einheit lernen Sie Folgendes:
- Stellen Sie ein Azure Blob Storage-Konto mithilfe einer Bicep-Vorlage bereit.
- Erstellen eines Blob Storage-Containers
- Migrieren Sie Bilder zum Blob Storage-Konto.
- Laden Sie
tailwind.sqlin das Blob Storage-Konto hoch. - Stellen Sie mithilfe der Azure-Befehlszeilenschnittstelle eine Verbindung mit der Azure-VM her.
- Laden Sie die Datei aus dem Speicherkonto herunter.
- Stellen Sie mit
psqleine Verbindung mit dem PostgreSQL-Server her, und importieren Sie eine SQL-Datei. - Führen Sie die Anwendung interaktiv über die Befehlszeile aus.
- Vergewissern Sie sich, dass die Anwendung ordnungsgemäß ausgeführt wird.
Bereitstellen eines Speicherkontos mithilfe von „deploy/vm-postgres.bicep“
Führen Sie auf dem lokalen Computer den folgenden Befehl aus:
az deployment group create \
--resource-group 240900-linux-postgres \
--template-file deploy/vm-postgres.bicep \
--parameters \
deployVm=false \
deployPostgres=false \
deployStorage=true
Hinzufügen des aktuellen Benutzers zur Rolle „Besitzer von Speicherblobdaten“
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
Erstellen des Containers „container1“ im Speicherkonto
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
Migrieren von Bildern zu einem Unterordner im Speicherkonto
az storage blob upload-batch \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--overwrite \
--destination container1/images \
--source app/data/images
Die folgende Ausgabe wird angezeigt:
[
{
"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\""
},
...
]
Hochladen von „app/data/postgres/tailwind.sql“ in das Speicherkonto
az storage blob upload \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--container-name container1 \
--file app/data/postgres/tailwind.sql \
--name tailwind.sql
Herstellen einer Verbindung mit der Azure-VM mithilfe des Befehls „az ssh“
az ssh vm \
--resource-group 240900-linux-postgres \
--name vm-1
Herunterladen der Datei „tailwind.sql“ aus dem Speicherkonto
Legen Sie die Bash-Variable STORAGE_ACCOUNT_NAME auf den Namen des Speicherkontos fest:
STORAGE_ACCOUNT_NAME=$(az storage account list \
--resource-group 240900-linux-postgres \
--query '[0].name' \
-o tsv)
echo "STORAGE_ACCOUNT_NAME: $STORAGE_ACCOUNT_NAME"
Laden Sie tailwind.sql mit dem Befehl az storage blob download auf die Azure-VM herunter:
az storage blob download \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--container-name container1 \
--file tailwind.sql \
--name tailwind.sql
Festlegen der Umgebungsvariablen für psql auf dem Remotecomputer
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
Importieren von „tailwind.sql“ mithilfe von psql
psql -f tailwind.sql
Herstellen einer Verbindung mit dem Postgres-Server zum Bestätigen des erfolgreichen Imports
psql
Auflisten der Tabellen
\dt
Die folgende Ausgabe wird angezeigt:
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)
Ausführen einer SQL-Abfrage zum Auflisten der Tabellen
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';
Die folgende Ausgabe wird angezeigt:
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)
Aktivieren des erweiterten Modus und Auswählen aus der Tabelle „products“
Aktivieren Sie an der Eingabeaufforderung postgres=> den erweiterten Modus:
\x
Wählen Sie etwas aus der Produkttabelle (products) aus:
select * from products;
Die folgende Aufforderung wird angezeigt:
postgres=> \x
Expanded display is on.
postgres=> select * from products;
Es wird eine Liste der Produkte angezeigt:
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 | ...
...
Drücken Sie die LEERTASTE, um die Ergebnisse seitenweise zu durchlaufen. Drücken Sie q, um die Seitenauswahl zu schließen.
Beenden von psql
\q
Interaktives Ausführen der Anwendung über die Befehlszeile
Wechseln Sie auf dem Remotecomputer in das Verzeichnis mit der Anwendung:
cd tailwind-traders-go/app
Führen Sie die Anwendung interaktiv über die Befehlszeile aus:
go run main.go app:serve
Die folgende Ausgabe wird angezeigt:
$ go run main.go app:serve
Listening on :8080
Suchen der öffentlichen IP-Adresse der VM
Rufen Sie die öffentliche IP-Adresse der VM ab:
IP_ADDRESS=$(az network public-ip show \
--resource-group 240900-linux-postgres \
--name vm-1-ip \
--query ipAddress \
--out tsv)
Geben Sie die URL am Terminal aus:
echo "Your URL is: http://${IP_ADDRESS}:8080"
In dieser Lerneinheit wird Port 8080 für interaktive Dev/Test-Zwecke verwendet. In der Produktion würden Sie Port 443 verwenden und ein TLS-Zertifikat erzwingen, um den Datenverkehr an den Endpunkt zu schützen.
Durchsuchen des öffentlichen API-Endpunkts
Öffnen Sie die URL in einem Webbrowser. Die folgende Ausgabe wird angezeigt:
{
"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": "..."
}
Alternativ können Sie mithilfe von curl eine Anforderung an den API-Endpunkt übermitteln:
curl "http://${IP_ADDRESS}:8080"
Dieser Endpunkt zeigt ein zufälliges Produkt aus der Datenbank an.
Anzeigen von Anforderungen, die am Terminal protokolliert wurden
Navigieren Sie zum Terminal zurück, an dem Sie die Anwendung interaktiv ausführen. Die Ausgabe enthält die Anforderung an den API-Endpunkt:
{"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"}
Wenn diese Anforderungen erfolgreich waren, haben Sie die Anwendungsworkload erfolgreich zu einer Azure-VM und Azure Database for PostgreSQL (Flexibler Server) migriert.
Bereinigen von Azure-Ressourcen
Nachdem Sie die Linux- und PostgreSQL-Workloads erkundet haben, bereinigen Sie die Ressourcen, um Kosten zu sparen.
Sie können die Ressourcengruppe 240900-linux-postgres manuell über das Azure-Portal löschen oder den folgenden Azure CLI-Befehl ausführen:
az group delete \
--name 240900-linux-postgres \
--yes \
--no-wait
Eine weitere Option besteht darin, die Vorlage empty.bicep zum Löschen der von der Datei vm-postgres.bicep erstellten Ressourcen zu verwenden. Wenn Sie az deployment group create mit --mode Complete ausführen, werden alle Ressourcen entfernt, die nicht von der Vorlage definiert wurden. Da empty.json keine Ressourcen enthält, werden mit diesem Befehl alle Ressourcen gelöscht.
az deployment group create \
--resource-group 240900-linux-postgres \
--template-file deploy/empty.bicep \
--mode Complete
Bei der Bereitstellung von empty.json bleibt die Ressourcengruppe 240900-linux-postgres erhalten, sodass Sie die Ressourcen erneut mit einem einzigen Befehl bereitstellen können.