Skip to content

Commit 734ceda

Browse files
authored
Merge pull request #215 from Lemoncode/gis-azure-paas
Añado los PaaS READMEs con las demos
2 parents 693152b + 9f9f60f commit 734ceda

8 files changed

Lines changed: 476 additions & 6 deletions

File tree

04-cloud/azure/iaas/README.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@ Una vez que tengas una cuenta de Azure y el CLI instalado, lo primero que tienes
1212
az login
1313
```
1414

15-
o si estás en Windows:
16-
17-
```pwsh
18-
az login
19-
```
20-
2115
Una vez hecho esto, te recomiendo que setees algunas variables de entorno para que no tengas que escribir tanto, ni acordarte de los nombres que has dado a los recursos que crearemos a continuación. Para ello, ejecuta los siguientes comandos:
2216

2317
```bash
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Azure SQL Database
2+
3+
Se trata de un servicio PaaS de Azure que nos permite crear bases de datos relacionales en la nube sin necesidad de tener que administrar la infraestructura subyacente.
4+
5+
Para este ejemplo, vamos a crear una base de datos en Azure SQL Database y vamos a conectarla con la API de Tour of heroes.
6+
7+
Lo primero que necesitas es cargar algunas variables de entorno:
8+
9+
```bash
10+
# Database variables
11+
SQL_SERVER_NAME="heroes-sql-server"
12+
SQL_USER="sqladmin"
13+
SQL_PASSWORD="P@ssw0rrd"
14+
startIp="0.0.0.0"
15+
endIp="0.0.0.0"
16+
```
17+
18+
o si estás en Windows:
19+
20+
```pwsh
21+
# Database variables
22+
$SQL_SERVER_NAME="heroes-sql-server"
23+
$SQL_USER="sqladmin"
24+
$SQL_PASSWORD="P@ssw0rd!"
25+
$startIp="0.0.0.0"
26+
$endIp="0.0.0.0"
27+
```
28+
29+
## Creando la base de datos
30+
31+
Para crear una base de datos en Azure SQL Database, lo primero que tienes que hacer es crear un servidor de base de datos. Para ello, ejecuta el siguiente comando:
32+
33+
```bash
34+
echo "Creating $SQL_SERVER_NAME in $LOCATION..."
35+
36+
az sql server create --name $SQL_SERVER_NAME \
37+
--resource-group $RESOURCE_GROUP \
38+
--location "$LOCATION" \
39+
--admin-user $SQL_USER \
40+
--admin-password $SQL_PASSWORD
41+
```
42+
43+
o si estás en Windows:
44+
45+
```pwsh
46+
echo "Creating $SQL_SERVER_NAME in $LOCATION..."
47+
48+
az sql server create --name $SQL_SERVER_NAME `
49+
--resource-group $RESOURCE_GROUP `
50+
--location "$LOCATION" `
51+
--admin-user $SQL_USER `
52+
--admin-password $SQL_PASSWORD
53+
```
54+
55+
En este ejemplo no necesitamos crear la base de datos, ya que nuestra API, que hace uso de Entity Framework Core, se encargará de crearla por nosotros.
56+
57+
Lo que si es necesario es que permitamos el acceso a la base de datos desde otros recursos de Azure. Para ello, ejecuta el siguiente comando:
58+
59+
```bash
60+
echo "Configuring firewall..."
61+
az sql server firewall-rule create \
62+
--resource-group $RESOURCE_GROUP \
63+
--server $SQL_SERVER_NAME \
64+
-n AllowYourIp \
65+
--start-ip-address $startIp \
66+
--end-ip-address $endIp
67+
```
68+
69+
o si estás en Windows:
70+
71+
```pwsh
72+
echo "Configuring firewall..."
73+
az sql server firewall-rule create `
74+
--resource-group $RESOURCE_GROUP `
75+
--server $SQL_SERVER_NAME `
76+
-n AllowYourIp `
77+
--start-ip-address $startIp `
78+
--end-ip-address $endIp
79+
```
80+
81+
Con [Azure Data Studio](https://azure.microsoft.com/es-es/products/data-studio), puedes conectarte a la base de datos (tienes que permitir entonces el acceso desde tu IP, que puedes hacerlo desde esta misma app) y comprobar que se ha creado correctamente e incluso podrías crear la base de datos desde aquí.
82+
83+
Ahora lo siguiente que necesitamos es desplegar la API que haga uso de esta base de datos. Para ello, puedes seguir los pasos que te comparto en este otro [README](/04-cloud/azure/paas/02-app-service/README.md).
84+
85+
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# Azure App Service
2+
3+
Este servicio de Azure nos permite desplegar aplicaciones web y API REST de forma rápida y sencilla. Además, nos permite escalarlas de forma automática y nos ofrece integración con otros servicios de Azure como Azure SQL Database, Azure Cosmos DB, Azure Functions, Azure Storage, Azure Key Vault, Azure Active Directory, etc.
4+
5+
Para este ejemplo, vamos a crear una API REST con ASP.NET Core y la vamos a desplegar en Azure App Service.
6+
7+
Lo primero que necesitas es cargar algunas variables de entorno:
8+
9+
```bash
10+
# App Service variables
11+
APP_SVC_PLAN_NAME="tour-of-heroes-plan"
12+
WEB_API_NAME="tour-of-heroes-api"
13+
```
14+
15+
o si estás en Windows:
16+
17+
```pwsh
18+
# App Service variables
19+
$APP_SVC_PLAN_NAME="tour-of-heroes-plan"
20+
$WEB_API_NAME="tour-of-heroes-api"
21+
```
22+
23+
>Importante: asegúrate de que el nombre de la web app es único en Azure.
24+
25+
## Creando el plan de App Service
26+
27+
Las aplicaciones web alojadas en este servicio necesitan estar dentro de un plan de App Service. Para crear uno, ejecuta el siguiente comando:
28+
29+
```bash
30+
echo -e "Create Azure App Service for the API 🚀"
31+
32+
az appservice plan create \
33+
--name $APP_SVC_PLAN_NAME \
34+
--resource-group $RESOURCE_GROUP \
35+
--location $LOCATION \
36+
--sku S1
37+
```
38+
39+
o si estás en Windows:
40+
41+
```pwsh
42+
echo -e "Create Azure App Service for the API 🚀"
43+
44+
az appservice plan create `
45+
--name $APP_SVC_PLAN_NAME `
46+
--resource-group $RESOURCE_GROUP `
47+
--location $LOCATION `
48+
--sku S1
49+
```
50+
51+
Este es el que determina el tamaño de las máquinas virtuales que se van a utilizar para alojar las aplicaciones web. En este caso, hemos elegido el plan S1.
52+
53+
## Crear la web app para la API
54+
55+
Una vez que tenemos el plan de App Service, lo siguiente es crear la web app para la API. Para ello, ejecuta el siguiente comando:
56+
57+
```bash
58+
az webapp create \
59+
--name $WEB_API_NAME \
60+
--runtime "dotnet:8" \
61+
--resource-group $RESOURCE_GROUP \
62+
--plan $APP_SVC_PLAN_NAME
63+
```
64+
65+
o si estás en Windows:
66+
67+
```pwsh
68+
az webapp create `
69+
--name $WEB_API_NAME `
70+
--runtime "dotnet:8" `
71+
--resource-group $RESOURCE_GROUP `
72+
--plan $APP_SVC_PLAN_NAME
73+
```
74+
75+
## Configurar la web app para la API
76+
77+
Una vez que tenemos la web app creada, podemos añadirle algunas configuraciones. Para ello, ejecuta el siguiente comando:
78+
79+
```bash
80+
az webapp config connection-string set \
81+
--name $WEB_API_NAME \
82+
--resource-group $RESOURCE_GROUP \
83+
--connection-string-type SQLAzure \
84+
--settings "DefaultConnection=Server=tcp:$SQL_SERVER_NAME.database.windows.net,1433;Initial Catalog=heroes-db;Persist Security Info=False;User ID=$SQL_USER;Password=$SQL_PASSWORD;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
85+
86+
az webapp config appsettings set \
87+
--name $WEB_API_NAME \
88+
--resource-group $RESOURCE_GROUP \
89+
--settings "OTEL_SERVICE_NAME=tour-of-heroes-api"
90+
```
91+
92+
o si estás en Windows:
93+
94+
```pwsh
95+
az webapp config connection-string set `
96+
--name $WEB_API_NAME `
97+
--resource-group $RESOURCE_GROUP `
98+
--connection-string-type SQLAzure `
99+
--settings "DefaultConnection=Server=tcp:$SQL_SERVER_NAME.database.windows.net,1433;Initial Catalog=heroes-db;Persist Security Info=False;User ID=$SQL_USER;Password=$SQL_PASSWORD;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
100+
```
101+
102+
```pwsh
103+
az webapp config appsettings set `
104+
--name $WEB_API_NAME `
105+
--resource-group $RESOURCE_GROUP `
106+
--settings "OTEL_SERVICE_NAME=tour-of-heroes-api"
107+
```
108+
109+
En este caso, hemos añadido la cadena de conexión a la base de datos y el nombre del servicio para que se pueda identificar en OpenTelemetry/Azure Monitor.
110+
111+
## Desplegar la API
112+
113+
Ahora que ya tenemos un sitio donde desplegar nuestra API lo único que nos queda es desplegarla 😃.
114+
115+
```bash
116+
echo "Clone the repo..."
117+
git clone https://github.com/0GiS0/tour-of-heroes-dotnet-api.git
118+
cd tour-of-heroes-dotnet-api
119+
120+
dotnet publish tour-of-heroes-api.csproj -o ./publish
121+
122+
cd publish
123+
124+
zip -r site.zip *
125+
126+
az webapp deployment source config-zip \
127+
--src site.zip \
128+
--resource-group $RESOURCE_GROUP \
129+
--name $WEB_API_NAME
130+
```
131+
132+
o si estás en Windows:
133+
134+
```pwsh
135+
echo "Clone the repo..."
136+
git clone https://github.com/0GiS0/tour-of-heroes-dotnet-api.git
137+
cd tour-of-heroes-dotnet-api
138+
139+
dotnet publish tour-of-heroes-api.csproj -o ./publish
140+
141+
cd publish
142+
143+
Compress-Archive -Path * -DestinationPath site.zip
144+
145+
az webapp deployment source config-zip `
146+
--src site.zip `
147+
--resource-group $RESOURCE_GROUP `
148+
--name $WEB_API_NAME
149+
```
150+
151+
Todo esto que hemos hecho a través de Azure CLI también es posible gestionarlos con la extensión de Azure App Service para Visual Studio Code.
152+
153+
<img src="../images/Extension%20de%20Azure%20App%20Service.png"/>
154+
155+
Para comprobar que todo ha ido bien, puedes ejecutar el siguiente comando:
156+
157+
```bash
158+
echo "API deployed 🚀"
159+
echo "API URL: https://$WEB_API_NAME.azurewebsites.net"
160+
```
161+
162+
Ahora lo único que nos queda por hacer es desplegar el frontal que consuma esta API. Para seguir los pasos puedes continuar en este otro [README](/04-cloud/azure/paas/03-static-web-apps/README.md).
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
@base_url = https://tour-of-heroes-api.azurewebsites.net/api/hero
2+
3+
GET {{base_url}} HTTP/1.1
4+
5+
###
6+
POST {{base_url}} HTTP/1.1
7+
content-type: application/json
8+
9+
{
10+
"name": "Arrow",
11+
"alterEgo": "Oliver Queen",
12+
"description": "Multimillonario playboy Oliver Queen (Stephen Amell), quien, cinco años después de estar varado en una isla hostil, regresa a casa para luchar contra el crimen y la corrupción como un vigilante secreto cuya arma de elección es un arco y flechas."
13+
}
14+
15+
###
16+
POST {{base_url}} HTTP/1.1
17+
content-type: application/json
18+
19+
{
20+
"name": "Batman",
21+
"alterEgo": "Bruce Wayne",
22+
"description": "Un multimillonario magnate empresarial y filántropo dueño de Empresas Wayne en Gotham City. Después de presenciar el asesinato de sus padres, el Dr. Thomas Wayne y Martha Wayne en un violento y fallido asalto cuando era niño, juró venganza contra los criminales, un juramento moderado por el sentido de la justicia."
23+
}
24+
25+
###
26+
POST {{base_url}} HTTP/1.1
27+
content-type: application/json
28+
29+
{
30+
"name": "Captain America",
31+
"alterEgo": "Steve Rogers",
32+
"description": "Un joven frágil mejorado a la cima de la perfección humana por un suero experimental S.S.S. (Suero supersoldado) para ayudar a los esfuerzos inminentes del gobierno de Estados Unidos en la Segunda Guerra Mundial. Cerca del final de la guerra, queda atrapado en el hielo y sobrevive en animación suspendida hasta que es descongelado en el presente."
33+
}
34+
35+
###
36+
POST {{base_url}} HTTP/1.1
37+
content-type: application/json
38+
39+
{
40+
"name": "Daredevil",
41+
"alterEgo": "Matt Murdock",
42+
"description": "Mientras crecía en el vecindario irlandés-estadounidense de Hell's Kitchen de la clase obrera, históricamente áspero y asolado por el crimen, en la ciudad de Nueva York, Matt Murdock es cegado por una sustancia radioactiva que cae de un camión después salvar a un hombre que estaba por ser atropellado por un auto. Si bien ya no puede ver, la exposición radioactiva aumenta sus sentidos restantes más allá de la capacidad humana normal y le da un <<sentido de radar>>."
43+
}
44+
45+
###
46+
POST {{base_url}} HTTP/1.1
47+
content-type: application/json
48+
49+
{
50+
"name": "Hulk",
51+
"alterEgo": "Bruce Barner",
52+
"description": "Después de una exposición accidental a los rayos gamma durante la detonación de una bomba experimental, Banner se transforma físicamente en Hulk cuando está sometido a estrés emocional, a su voluntad o en contra de ella, lo que a menudo lleva a destrozos y conflictos que complican la vida civil de Banner. El nivel de fuerza de Hulk se transmite normalmente de forma proporcional a su nivel de ira."
53+
}
54+
55+
###
56+
POST {{base_url}} HTTP/1.1
57+
content-type: application/json
58+
59+
{
60+
"name": "Iron Man",
61+
"alterEgo": "Tony Stark",
62+
"description": "Es un multimillonario magnate empresarial estadounidense, playboy e ingenioso científico, quien sufrió una grave lesión en el pecho durante un secuestro en el Medio Oriente. Cuando sus captores intentan forzarlo a construir un arma de destrucción masiva crea, en cambio, una armadura para salvar su vida y escapar del cautiverio. Más tarde, Stark desarrolla su traje, agregando armas y otros dispositivos tecnológicos que diseñó a través de su compañía, Industrias Stark."
63+
}
64+
65+
###
66+
POST {{base_url}} HTTP/1.1
67+
content-type: application/json
68+
69+
{
70+
"name": "Spider Man",
71+
"alterEgo": "Peter Parker",
72+
"description": "un joven huérfano neoyorquino que adquiere superpoderes después de ser mordido por una araña radiactiva,15​ y cuya ideología como héroe se ve reflejada primordialmente en la expresión «un gran poder conlleva una gran responsabilidad».20​21​ Suele ser asociado con una personalidad bromista, amable, inventiva y optimista, lo que le ha llevado a ser catalogado como el «vecino amigable» de cualquiera lo cual, aunado a sus vivencias caracterizadas por los problemas cotidianos."
73+
}

0 commit comments

Comments
 (0)