|
| 1 | +# Crear la máquina virtual para la API en .NET |
| 2 | + |
| 3 | +Para esta pieza de la arquitectura de Tour of Heroes vamos a usar una máquina virtual que utilice como sistema operativo Ubuntu. Para este componente vamos a necesitas las siguientes variables: |
| 4 | + |
| 5 | +```bash |
| 6 | +# API VM on Azure |
| 7 | +API_VM_NAME="api-vm" |
| 8 | +API_VM_IMAGE="Ubuntu2204" |
| 9 | +API_VM_ADMIN_USERNAME="apiadmin" |
| 10 | +API_VM_ADMIN_PASSWORD="Api@dmin1232!" |
| 11 | +API_VM_NSG_NAME="api-vm-nsg" |
| 12 | +``` |
| 13 | + |
| 14 | +o si estás en Windows: |
| 15 | + |
| 16 | +```pwsh |
| 17 | +# API VM on Azure |
| 18 | +$API_VM_NAME="api-vm" |
| 19 | +$API_VM_IMAGE="Ubuntu2204" |
| 20 | +$API_VM_ADMIN_USERNAME="apiadmin" |
| 21 | +$API_VM_ADMIN_PASSWORD="Api@dmin1232!" |
| 22 | +$API_VM_NSG_NAME="api-vm-nsg" |
| 23 | +``` |
| 24 | + |
| 25 | +```bash |
| 26 | + |
| 27 | +Ahora con estas vamos a crear la máquina virtual de la misma forma que lo hicimos con la base de datos: |
| 28 | + |
| 29 | +```bash |
| 30 | +echo -e "Create an api vm named $API_VM_NAME with image $API_VM_IMAGE" |
| 31 | +
|
| 32 | +FQDN_API_VM=$(az vm create \ |
| 33 | +--resource-group $RESOURCE_GROUP \ |
| 34 | +--name $API_VM_NAME \ |
| 35 | +--image $API_VM_IMAGE \ |
| 36 | +--admin-username $API_VM_ADMIN_USERNAME \ |
| 37 | +--admin-password $API_VM_ADMIN_PASSWORD \ |
| 38 | +--vnet-name $VNET_NAME \ |
| 39 | +--subnet $API_SUBNET_NAME \ |
| 40 | +--public-ip-address-dns-name tour-of-heroes-api-vm \ |
| 41 | +--nsg $API_VM_NSG_NAME \ |
| 42 | +--size $VM_SIZE --query "fqdns" -o tsv) |
| 43 | +
|
| 44 | +echo -e "Api VM created" |
| 45 | +``` |
| 46 | + |
| 47 | +o si estás en Windows: |
| 48 | + |
| 49 | +```pwsh |
| 50 | +echo -e "Create an api vm named $API_VM_NAME with image $API_VM_IMAGE" |
| 51 | +
|
| 52 | +$FQDN_API_VM=az vm create ` |
| 53 | +--resource-group $RESOURCE_GROUP ` |
| 54 | +--name $API_VM_NAME ` |
| 55 | +--image $API_VM_IMAGE ` |
| 56 | +--admin-username $API_VM_ADMIN_USERNAME ` |
| 57 | +--admin-password $API_VM_ADMIN_PASSWORD ` |
| 58 | +--vnet-name $VNET_NAME ` |
| 59 | +--subnet $API_SUBNET_NAME ` |
| 60 | +--public-ip-address-dns-name tour-of-heroes-api-vm ` |
| 61 | +--nsg $API_VM_NSG_NAME ` |
| 62 | +--size $VM_SIZE --query "fqdns" -o tsv |
| 63 | +
|
| 64 | +echo -e "Api VM created" |
| 65 | +``` |
| 66 | + |
| 67 | +Sin embargo, con esto solo no basta ya que por ahora sólo tenemos la máquina virtual pero no está ni configurada para poder hospedar mi API en .NET ni configurado ningún servidor web que la sirva. Para ello vamos a hacer uso del subcomando **run-command** de la CLI de Azure. Este comando nos permite ejecutar comandos en la máquina virtual de forma remota: |
| 68 | + |
| 69 | +```bash |
| 70 | +# https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-7.0&tabs=linux-ubuntu |
| 71 | +echo -e "Execute script to install nginx, .NET Core, deploy the app and create the service" |
| 72 | +az vm run-command invoke \ |
| 73 | +--resource-group $RESOURCE_GROUP \ |
| 74 | +--name $API_VM_NAME \ |
| 75 | +--command-id RunShellScript \ |
| 76 | +--scripts @04-cloud/azure/iaas/scripts/install-tour-of-heroes-api.sh \ |
| 77 | +--parameters https://github.com/0GiS0/tour-of-heroes-dotnet-api/releases/download/1.0.5/drop.zip $FQDN_API_VM $DB_VM_ADMIN_USERNAME $DB_VM_ADMIN_PASSWORD |
| 78 | +```` |
| 79 | +
|
| 80 | +o si estás en Windows: |
| 81 | +
|
| 82 | +```pwsh |
| 83 | +# https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-7.0&tabs=linux-ubuntu |
| 84 | +echo -e "Execute script to install nginx, .NET Core, deploy the app and create the service" |
| 85 | +az vm run-command invoke ` |
| 86 | +--resource-group $RESOURCE_GROUP ` |
| 87 | +--name $API_VM_NAME ` |
| 88 | +--command-id RunShellScript ` |
| 89 | +--scripts @04-cloud/azure/iaas/scripts/install-tour-of-heroes-api.sh ` |
| 90 | +--parameters https://github.com/0GiS0/tour-of-heroes-dotnet-api/releases/download/1.0.5/drop.zip $FQDN_API_VM $DB_VM_ADMIN_USERNAME $DB_VM_ADMIN_PASSWORD |
| 91 | +``` |
| 92 | + |
| 93 | +Con este comando estamos ejecutando un script que se encuentra en la carpeta **scripts** de este repositorio. Este script se encarga de instalar nginx, .NET Core, desplegar la API y crear un servicio que la mantenga en ejecución. Si quieres ver el contenido del script puedes hacerlo [aquí](04-cloud/azure/iaas/scripts/install-tour-of-heroes-api.sh). |
| 94 | + |
| 95 | +Por último necesitamos crear una *network security rule* para permitir el acceso a través del puerto 80 a la API: |
| 96 | + |
| 97 | +```bash |
| 98 | +echo -e "Create a network security group rule for port 80" |
| 99 | +az network nsg rule create \ |
| 100 | +--resource-group $RESOURCE_GROUP \ |
| 101 | +--nsg-name $API_VM_NSG_NAME \ |
| 102 | +--name AllowHttp \ |
| 103 | +--priority 1002 \ |
| 104 | +--destination-port-ranges 80 \ |
| 105 | +--direction Inbound |
| 106 | +``` |
| 107 | + |
| 108 | +o si estás en Windows: |
| 109 | + |
| 110 | +```pwsh |
| 111 | +echo -e "Create a network security group rule for port 80" |
| 112 | +
|
| 113 | +az network nsg rule create ` |
| 114 | +--resource-group $RESOURCE_GROUP ` |
| 115 | +--nsg-name $API_VM_NSG_NAME ` |
| 116 | +--name AllowHttp ` |
| 117 | +--priority 1002 ` |
| 118 | +--destination-port-ranges 80 ` |
| 119 | +--direction Inbound |
| 120 | +``` |
| 121 | + |
| 122 | +Para comprobar que la API funciona correctamente puedes acceder a la URL http://tour-of-heroes-api-vm.uksouth.cloudapp.azure.com/api/hero y deberías ver un listado de héroes en formato JSON. |
| 123 | + |
| 124 | +Por otro lado, si instalas la extensión REST Client en tu Visual Studio Code, puedes ejecutar la petición **GET hero** que se encuentra en el fichero [api.http](04-cloud/azure/iaas/02-api-vm/api.http) y verás el listado de héroes en formato JSON. |
0 commit comments