Exploración y ejecución de cargas de trabajo de Linux y PostgreSQL
En esta unidad, aprenderá a:
- Implemente una cuenta de Azure Blob Storage mediante una plantilla de Bicep.
- Cree un contenedor de Blob Storage.
- Migre imágenes a la cuenta de Blob Storage.
- Cargue
tailwind.sql
en la cuenta de Blob Storage. - Conéctese a la máquina virtual de Azure mediante la CLI de Azure.
- Descargue el archivo de la cuenta de almacenamiento.
- Conéctese al servidor PostgreSQL mediante
psql
e importe un archivo SQL. - Ejecute la aplicación de forma interactiva a través de la línea de comandos.
- Confirme que la aplicación se ejecute correctamente.
Implementación de una cuenta de almacenamiento mediante deploy/vm-postgres.bicep
Ejecute el siguiente comando en el equipo local:
az deployment group create \
--resource-group 240900-linux-postgres \
--template-file deploy/vm-postgres.bicep \
--parameters \
deployVm=false \
deployPostgres=false \
deployStorage=true
Agregue el usuario actual al rol Propietario de datos de blobs de almacenamiento
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
Cree un contenedor denominado "container1" en la cuenta de almacenamiento
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
Migre de imágenes a la cuenta de almacenamiento en una subcarpeta
az storage blob upload-batch \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--overwrite \
--destination container1/images \
--source app/data/images
Se mostrará la siguiente salida:
[
{
"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\""
},
...
]
Carga de app/data/postgres/tailwind.sql en la cuenta de almacenamiento
az storage blob upload \
--account-name $STORAGE_ACCOUNT_NAME \
--auth-mode login \
--container-name container1 \
--file app/data/postgres/tailwind.sql \
--name tailwind.sql
Conecte la máquina virtual de Azure mediante el comando az de SSH
az ssh vm \
--resource-group 240900-linux-postgres \
--name vm-1
Descargue el archivo tailwind.sql de la cuenta de almacenamiento
Establezca la variable de Bash STORAGE_ACCOUNT_NAME
en el nombre de la cuenta de almacenamiento:
STORAGE_ACCOUNT_NAME=$(az storage account list \
--resource-group 240900-linux-postgres \
--query '[0].name' \
-o tsv)
echo "STORAGE_ACCOUNT_NAME: $STORAGE_ACCOUNT_NAME"
Descargue tailwind.sql
en la máquina virtual de Azure mediante el comando 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
Establecimiento de las variables de entorno para psql en el equipo 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
Importe tailwind.sql mediante psql
psql -f tailwind.sql
Conéctese al servidor Postgres para confirmar que la importación se realizó correctamente
psql
Enumeración de las tablas
\dt
Se mostrará la siguiente salida:
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)
Ejecute una consulta SQL que enumere las tablas
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';
Se mostrará la siguiente salida:
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)
Active el modo expandido y seleccione de la tabla de productos
En el símbolo del sistema de postgres=>
, active el modo expandido:
\x
Seleccione de la tabla de productos:
select * from products;
Aparece el siguiente símbolo del sistema:
postgres=> \x
Expanded display is on.
postgres=> select * from products;
Aparece una lista de productos:
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 | ...
...
Seleccione la barra espaciadora para pasar las páginas de resultados. Escriba q
para salir de la paginación.
Salir de psql
\q
Ejecución de la aplicación de forma interactiva a través de la línea de comandos
En el equipo remoto, cambie al directorio que contiene la aplicación:
cd tailwind-traders-go/app
Ejecute la aplicación de forma interactiva desde la línea de comandos:
go run main.go app:serve
Se mostrará la siguiente salida:
$ go run main.go app:serve
Listening on :8080
Búsqueda de la dirección IP pública de la máquina virtual
Obtenga la dirección IP pública de la máquina virtual:
IP_ADDRESS=$(az network public-ip show \
--resource-group 240900-linux-postgres \
--name vm-1-ip \
--query ipAddress \
--out tsv)
Muestre la dirección URL en el terminal:
echo "Your URL is: http://${IP_ADDRESS}:8080"
Esta unidad usa el puerto 8080 para fines de desarrollo/pruebas interactivos. En producción, usaría el puerto 443 y requeriría un certificado TLS para ayudar a proteger el tráfico hacia el punto de conexión.
Examinar el punto de conexión de la API pública
Abra la dirección URL en un explorador web. Se mostrará la siguiente salida:
{
"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": "..."
}
Como alternativa, puede realizar una solicitud al punto de conexión de API mediante curl
:
curl "http://${IP_ADDRESS}:8080"
Este punto de conexión muestra un producto aleatorio de la base de datos.
Visualización de las solicitudes registradas en el terminal
Vuelva al terminal donde se ejecuta la aplicación de forma interactiva. La salida muestra la solicitud al punto de conexión de 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 estas solicitudes se realizan correctamente, ha migrado correctamente la carga de trabajo de la aplicación a una máquina virtual de Azure y Azure Database for PostgreSQL (servidor flexible).
Limpieza de los recursos de Azure
Después de que termine de explorar las cargas de trabajo de Linux y PostgreSQL, limpie los recursos para ahorrar costos.
Puede eliminar el grupo de recursos 240900-linux-postgres
manualmente a través de Azure Portal o ejecutar el siguiente comando de la CLI de Azure:
az group delete \
--name 240900-linux-postgres \
--yes \
--no-wait
Otra opción es usar la plantilla de empty.bicep
para eliminar los recursos que creó el archivo vm-postgres.bicep
. Ejecutar az deployment group create
con --mode Complete
quita los recursos que la plantilla no define. Dado que empty.json
no tiene recursos, el comando elimina todos los recursos.
az deployment group create \
--resource-group 240900-linux-postgres \
--template-file deploy/empty.bicep \
--mode Complete
La implementación de empty.json
deja intacto el grupo de recursos 240900-linux-postgres
, por lo que puede volver a implementar los recursos con un solo comando.