Módulo 3: API web en .NET en AWS App Runner
LABORATORIO PRÁCTICO
Objetivos del laboratorio
En este laboratorio práctico, creará una API web en .NET que utilice una tabla de DynamoDB, la incluirá en un contenedor y la alojará en AWS App Runner. Puede realizar este laboratorio en una computadora con Windows, macOS o Linux, o en un entorno de Cloud9 en la nube.
Comenzará por crear una tabla de DynamoDB y un proyecto de API web en .NET 6 que acceda a ella. Tras hacer una prueba local, utilizará Docker y la Herramienta de despliegue de AWS para la CLI de .NET para incluir en contenedores y desplegar el software en Amazon Elastic Container Registry (ECR). A continuación, creará el servicio App Runner, junto con los AWS Artifacts necesarios para comunicarse con DynamoDB, que incluirá un rol de IAM, un conector de VPC y un punto de conexión de VPC para DynamoDB. Probará la aplicación en la nube y verificará que pueda recuperar datos de DynamoDB. Supervisará su aplicación en la Consola de App Runner y revisará los registros. Por último, actualizará su proyecto, publicará una actualización en ECR y verá cómo App Runner la despliega automáticamente. Por último, eliminará su aplicación y sus recursos.
Este laboratorio consta de 12 pasos:
- Configurar AWS
- Configurar su entorno de desarrollo
- Crear una tabla de DynamoDB
- Crear un proyecto de API web en .NET
- Realizar pruebas locales
- Publicar el proyecto de API web en ECR
- Crear un rol de IAM
- Crear el servicio App Runner
- Crear un punto de conexión de VPC para DynamoDB
- Realizar pruebas en la nube
- Desplegar una actualización
- Cerrar
Tiempo de realización
90 minutos
Implementación
Paso 1: Configurar AWS
En este paso, configurará su entorno de AWS.
Si ya está desarrollando y desplegando en AWS App Runner y tiene instalada la Herramienta de despliegue de AWS para la CLI de .NET, puede avanzar al Paso 3.
1. Obtenga una cuenta de AWS
Utilice una cuenta de AWS existente o cree una cuenta de AWS. No utilice una cuenta de producción.
2. Elija la región de AWS
Inicie sesión en la Consola de AWS y elija una región de AWS para trabajar que sea compatible con AWS App Runner y con DynamoDB.
3. Cree un entorno de desarrollo
Si utiliza su máquina local para este laboratorio, continúe con el Paso 2.
Si usa Cloud9, continúe.
Configure un entorno de Cloud9 desde la Consola de AWS:
A. En la Consola de AWS, vaya a Cloud9 y haga clic en Crear entorno.
B. Asigne el nombre AppRunnerLab al entorno.
C. Deje los valores predeterminados y haga clic en Crear.
D. Espere a que se cree el entorno. Esto llevará varios minutos. Si la creación del entorno falla porque el tipo de instancia t2.micro no está disponible en la región, repita los pasos anteriores y seleccione otro tipo de instancia pequeña. Si el tipo de instancia no está en el nivel gratuito, tenga en cuenta la tarifa que se le cobrará durante el laboratorio.
Revise su trabajo
Ahora debería:
✓ Tener una cuenta de AWS
✓ Saber cómo iniciar sesión en la Consola de administración de AWS
✓ Tener una región para trabajar seleccionada
✓ Tener una máquina local o un entorno de Cloud9 disponible
Paso 2: Configurar su entorno de desarrollo
En este paso instalará el software para configurar un entorno de desarrollo. Omita los elementos que ya tiene instalados.
1. Instale la AWS CLI
Instale la Interfaz de la línea de comandos de AWS (CLI).
2. Configure la AWS CLI
Configure la AWS CLI para que esté vinculada a un usuario de su cuenta de AWS.
En una ventana de comandos/terminal, configure la región con este comando: aws configure
3. Instale el SDK de .NET
Instale el SDK de .NET 6. Descargue e instale el SDK para su sistema operativo.
Si utiliza Cloud9, puede ejecutar estos comandos desde Instalar las herramientas necesarias (pasos 1 y 2). A continuación, ejecute el siguiente comando: ./dotnet-install.sh -c LTS.
4. Instale la Herramienta de despliegue de AWS para la CLI de .NET
En una ventana de comandos/terminal, instale la Herramienta de despliegue de AWS para la CLI de .NET con este comando:
dotnet tool install -g aws.deploy.tools
5. Instale Docker
Instale Docker Desktop. Si ya tiene Docker, tenga en cuenta que necesita la versión 17.05 o posterior.
6. Instale un IDE
Instale un IDE, como Microsoft Visual Studio 2022 (Windows), Visual Studio Code (Linux, macOS, Windows) o JetBrains Rider (Linux, macOS, Windows). Asegúrese de haber instalado las opciones o extensiones para el desarrollo web de .NET en C#.
Revise su trabajo
Ahora debería:
✓ Tener todo el software obligatorio instalado
✓ Tener configurada la AWS CLI para su región y usuario de AWS
Paso 3: Crear una tabla de DynamoDB
En este paso, creará una tabla de DynamoDB con el nombre Clima y creará algunos registros de datos.
1. Crear una tabla de DynamoDB en la Consola de AWS
En la Consola de AWS, vaya a Amazon DynamoDB y haga clic en Crear tabla:
A. Nombre de la tabla: Clima
B. Clave de partición: Ubicación
C. Clave de ordenación: Marca de tiempo
D. Haga clic en Crear tabla
2. Insertar elementos en la tabla
Haga clic en el nombre de la tabla Clima para acceder a su página de detalles y, a continuación, haga clic en Explorar elementos de la tabla. Añada los siguientes elementos:
A. Haga clic en Crear elemento y Vista JSON. Introduzca el JSON que aparece a continuación (Dallas, mañana) y haga clic en Crear elemento.
{
"Location": {
"S": "Dallas"
},
"Timestamp": {
"S": "2022-07-23T06:00:00"
},
"Summary": {
"S": "Hot"
},
"TempC": {
"N": "33"
},
"TempF": {
"N": "92"
}
}
B. Del mismo modo, agregue el segundo elemento (Dallas, mediodía) con este JSON:
{
"Location": {
"S": "Dallas"
},
"Timestamp": {
"S": "2022-07-23T12:00:00"
},
"Summary": {
"S": "Scorching"
},
"TempC": {
"N": "43"
},
"TempF": {
"N": "109"
}
}
C. Agregue el tercer elemento (Dallas, tarde) con este JSON:.
{
"Location": {
"S": "Dallas"
},
"Timestamp": {
"S": "2022-07-23T18:00:00"
},
"Summary": {
"S": "Hot"
},
"TempC": {
"N": "36"
},
"TempF": {
"N": "97"
}
}
D. Añada el cuarto elemento (Minneapolis, mañana) con este JSON:
{
"Location": {
"S": "Minneapolis"
},
"Timestamp": {
"S": "2022-07-23T06:00:00"
},
"Summary": {
"S": "Cool"
},
"TempC": {
"N": "13"
},
"TempF": {
"N": "56"
}
}
E. Añada el quinto elemento (Minneapolis, mediodía) con este JSON:
{
"Location": {
"S": "Minneapolis"
},
"Timestamp": {
"S": "2022-07-23T12:00:00"
},
"Summary": {
"S": "Balmy"
},
"TempC": {
"N": "22"
},
"TempF": {
"N": "72"
}
}
F. Añada el sexto elemento (Minneapolis, tarde) con este JSON:
{
"Location": {
"S": "Minneapolis"
},
"Timestamp": {
"S": "2022-07-23T18:00:00"
},
"Summary": {
"S": "Balmy"
},
"TempC": {
"N": "19"
},
"TempF": {
"N": "67"
}
}
Revise su trabajo
Ahora debería:
✓ Tener una tabla de DynamoDB con el nombre Clima y que contiene 6 elementos.
Paso 4: Crear un proyecto de API web en .NET
En este paso, utilizará el comando dotnet new para crear un proyecto de API web y actualizará su código para recuperar los datos de la tabla de DynamoDB.
1. Utilice el comando CD en una carpeta de desarrollo
Abra una ventana de comandos/terminal y utilice el comando CD en una carpeta de desarrollo.:
2. Cree un proyecto de API web en .NET
Ejecute el comando dotnet new que aparece a continuación para crear un nuevo proyecto de API web denominado HelloAppRunnerVpc.
dotnet new webapi -n HelloAppRunnerVpc --framework net6.0
3. Abra el proyecto en su IDE
Abre el proyecto HelloAppRunnerVpc en su IDE.
Si tiene un Kit de herramientas de AWS instalado en su IDE, establezca la región en el Explorador de AWS en la región que seleccionó en el Paso 1.
4. Revise el proyecto generado
El proyecto generado es una API WeatherForecast que se utiliza habitualmente en ejemplos de .NET.
Para realizar una prueba, presione F5 y pruébelo con Swagger. Podrá observar que el servicio tiene una acción /WeatherForecast que devuelve datos meteorológicos simulados en JSON.
Detenga la ejecución del programa.
5. Agregue el paquete NuGet del SDK de AWS
En una ventana de comandos/terminal, utilice el comando CD en la carpeta del proyecto. Ejecute el comando dotnet add package que aparece a continuación para añadir el paquete NuGet del SDK de AWS AWSSDK.DynamoDBv2 al proyecto:
cd HelloAppRunnerVpc
dotnet add package AWSSDK.DynamoDBv2
6. Modifique Program.cs
Abra Program.cs en el editor de código y elimine o comente esta instrucción, que no será necesaria con App Runner:
//app.UseHttpsRedirection();
7. Codifique la clase WeatherForecast
Abra WeatherForecast.cs y sustitúyalo por el siguiente código. Esta clase contiene un elemento recuperado de la tabla Clima:
namespace HelloAppRunnerVpc;
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF { get; set; }
public string? Summary { get; set; }
}
8. Codifique la clase WeatherForecastController
using Amazon;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
using Microsoft.AspNetCore.Mvc;
namespace HelloAppRunnerVpc.Controllers;
[ApiController]
[Route("")]
public class WeatherForecastController : ControllerBase
{
static readonly RegionEndpoint region = RegionEndpoint.USEast1;
private readonly ILogger _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet("")]
public string GetHealthcheck()
{
return "Healthcheck: Healthy";
}
[HttpGet("WeatherForecast")]
public async Task<IEnumerable<WeatherForecast>> GetWeatherForecast(string location = "Dallas")
{
List<WeatherForecast> forecasts = new List<WeatherForecast>();
try
{
_logger.LogInformation($"00 enter GET, location = {location}");
var client = new AmazonDynamoDBClient(region);
Table table = Table.LoadTable(client, "Weather");
var filter = new ScanFilter();
filter.AddCondition("Location", ScanOperator.Equal, location);
var scanConfig = new ScanOperationConfig()
{
Filter = filter,
Select = SelectValues.SpecificAttributes,
AttributesToGet = new List<string> { "Location", "Timestamp", "TempC", "TempF", "Summary" }
};
_logger.LogInformation($"10 table.Scan");
Search search = table.Scan(scanConfig);
List<Document> matches;
do
{
_logger.LogInformation($"20 table.GetNextSetAsync");
matches = await search.GetNextSetAsync();
foreach (var match in matches)
{
forecasts.Add(new WeatherForecast
{
Date = Convert.ToDateTime(match["Timestamp"]),
TemperatureC = Convert.ToInt32(match["TempC"]),
TemperatureF = Convert.ToInt32(match["TempF"]),
Summary = Convert.ToString(match["Summary"])
});
}
} while (!search.IsDone);
_logger.LogInformation($"30 exited results loop");
}
catch (Exception ex)
{
_logger.LogError(ex, "90 Exception");
}
_logger.LogInformation($"99 returning {forecasts.Count} results");
return forecasts.ToArray();
}
}
9. Guarde los cambios y cree
Guarde los cambios y asegúrese de que el proyecto se cree.
Revise su trabajo
Ahora debería:
✓ Tener un proyecto de API web llamado HelloAppRunnerVpc
✓ Tener su región establecida en WeatherForecastController.cs
Paso 5: Realizar pruebas locales
En este paso, probará la API web localmente y confirmará la recuperación de datos de DynamoDB.
1. Depurar el proyecto
Presione F5 en su IDE y espere a que la aplicación se compile y se inicie en un navegador.
2. Probar la acción de comprobación de estado
En el navegador, elimine la ruta de Swagger de la URL para llegar a la raíz del servicio. Debería ver un mensaje de comprobación de estado. App Runner hará ping regularmente al sitio para comprobar su estado.
3. Probar la acción de pronóstico meteorológico para Dallas
Agregue /WeatherForecast?location=Dallas al final de la ruta URL. Debería ver el JSON de pronóstico meteorológico, con los valores que creó en la tabla de DynamoDB en el Paso 1.
4. Probar la acción de pronóstico meteorológico para Minneapolis
Cambie la ruta de la URL para que termine en /WeatherForecast?location=Minneapolis. Ahora puede ver las cifras de esa ciudad.
5. Probar la acción de pronóstico meteorológico para una ubicación no válida
Pruebe con un nombre de ubicación diferente y verá una respuesta vacía puesto que no hay datos para ella en la tabla.
6. Detener el programa
Detenga la ejecución del programa.
Aunque nuestra aplicación podía acceder a DynamoDB con facilidad durante las pruebas locales, no será así en la nube, ya que App Runner está restringido a los puntos de conexión públicos de forma predeterminada. Tendremos que tomar medidas adicionales para añadir un conector de VPC para App Runner y un punto de conexión de VPC correspondiente para DynamoDB.
Revise su trabajo
Ahora debería:
✓ Tener su proyecto de API web probado localmente.
✓ Haber confirmado que ha recuperado los datos de DynamoDB.
Paso 6: Publicar el proyecto de API web en ECR
1. Crear un Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["HelloAppRunnerVpc.csproj", "."]
RUN dotnet restore "./HelloAppRunnerVpc.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "HelloAppRunnerVpc.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "HelloAppRunnerVpc.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HelloAppRunnerVpc.dll"]
2. Desplegar en ECR
Despliegue su proyecto como una imagen de contenedor en ECR:
a. En la ventana de comandos/terminal, ejecute este comando para iniciar el despliegue especificando su región preferida. (Figura 1)
dotnet aws deploy --region us-west-2
b. Seleccione la opción para enviar imágenes de contenedores a Amazon Elastic Container Registry (ECR)
c. En el mensaje de configuración actual, introduzca el número para cambiar la etiqueta de la imagen y configúrela como la más reciente. (Figura 2)
d. Confirme el despliegue pulsando la tecla Entrar.
3. Esperar al despliegue
Espere a que el despliegue se complete.
4. Confirmar el despliegue en la Consola de AWS
Revise su trabajo
Ahora debería:
✓ Tener su proyecto con un Dockerfile en un contenedor.
✓ Haber desplegado una imagen de contenedor en Amazon ECR.
Paso 7: Crear un rol de IAM
En este paso, utilizará la Consola de AWS para crear un rol de IAM con el nombre AppRunnerInstanceDynamoDB. Este rol permitirá a las instancias de EC2 de App Runner acceder a la tabla de DynamoDB.
1. Crear una política para el acceso a tablas de DynamoDB
Cree una política que permita acceder a la tabla DynamoDB Clima:
a. Navegue a Identity and Access Management (IAM)
b. Seleccione Políticas en el panel izquierdo y haga clic en Crear política.
c. Cree la política e introduzca el JSON que aparece a continuación, sustituyendo [cuenta] por su número de cuenta de AWS de 12 dígitos y [región] por su región.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:[region]:[account]:table/Weather"
}
]
}
d. Haga clic en Siguiente: Etiquetas y en Siguiente: Revisión. Asigne a la política el nombre ddb-Weather y haga clic en Crear política.
2. Crear un rol para las instancias de EC2
Cree un rol para las instancias de EC2 de App Runner:
a. Seleccione Roles en el panel izquierdo y haga clic en Crear rol.
b. En Tipo de entidad de confianza, seleccione Servicio de AWS. (Figura 1)
c. En Caso de uso, seleccione EC2 y haga clic en Siguiente. (Figura 1)
d. Busque y seleccione los siguientes permisos: ddb-Weather, AmazonDynamoDBFullAccess y AWSAppRunnerFullAccess. Haga clic en Siguiente. (Figura 2)
e. En la pestaña Relaciones de confianza, haga clic en Editar política de confianza. Sustitúyala por este JSON y haga clic en Actualizar política. (Figura 5)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"tasks.apprunner.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
f. Asigne al rol el nombre AppRunnerInstanceDynamoDB y haga clic en Crear rol. (Figura 3)
Revise su trabajo
Ahora debería:
✓ Tener un rol de IAM con el nombre AppRunnerInstanceDynamoDB con 3 políticas.
Paso 8: Crear el servicio App Runner
En este paso, creará el servicio App Runner y un conector de VPC.
1. Crear servicio
En la Consola de AWS, diríjase a AWS App Runner y haga clic en Crear servicio.
a. Tipo de repositorio: Registro de contenedores. (Figura 1)
b. Proveedor: Amazon ECR.
c. Haga clic en Examinar y seleccione el contenedor que desplegó en ECR en el Paso 6. (Figura 2)
d. En Desencadenador de la configuración de despliegue, seleccione Automático.
e. Para el rol de acceso de ECR, seleccione Crear nuevo rol de servicio.
f. Haga clic en Siguiente.
2. Configurar el servicio
En la página Configurar servicio,
a. Nombre del servicio HelloAppRunnerVpc.
b. b. Puerto: 80.
3. Configurar el rol de la instancia
Amplíe la sección Seguridad y establezca el rol de la instancia como AppRunnerInstanceDynamoDB.
4. Crear conector de VPC
Amplíe la sección Redes y cree un conector de VPC:
a. En Redes, seleccione VPC personalizada.
b. En Conector de VPC, haga clic en Agregar nueva.
c. Nombre del conector de VPC: AppRunnerDynamoDB. (Figura 1)
d. VPC: seleccione su VPC predeterminada.
e. Subredes: seleccione todas las subredes.
f. Grupos de seguridad: seleccione su grupo de seguridad predeterminado. (Figura 2)
g. Haga clic en Agregar. Si recibe un mensaje de error que indica que una de sus subredes no es compatible con los servicios de App Runner, elimínela de la lista de subredes y vuelva a hacer clic en Agregar. (Figura 2)
h. Haga clic en Siguiente y en Crear y desplegar.
5. Esperar al despliegue
Espere al despliegue, que tardará varios minutos. Es un buen momento para tomarse un descanso.
6. Registrar la URL del servicio
Cuando se complete el despliegue del servicio, aparecerá el mensaje La creación del servicio se realizó correctamente.
Registre la URL del dominio predeterminado. Esta es la URL de su servicio.
Actualice el registro de eventos y verá la confirmación de que el servicio se está ejecutando.
7. Navegar hasta la URL del servicio
Navegue hasta la URL y debería ver su comprobación de estado. Nuestro servicio está alojado en App Runner, pero aún no puede acceder a DynamoDB. Hemos creado el conector de VPC de App Runner, pero aún necesitamos crear un punto de conexión de VPC que coincida con DynamoDB.
Revise su trabajo
Ahora debería:
✓ Tener un servicio de AWS App Runner en ejecución con el nombre HelloAppRunnerVpc.
✓ Tener la URL del punto de conexión del servicio.
✓ Haber confirmado que la URL de la comprobación de estado responda en un navegador.
Paso 9: Crear un punto de conexión de VPC para DynamoDB
En este paso, creará un punto de conexión de VPC para DynamoDB.
1. En la Consola de AWS, navegue hasta VPC
2. Crear punto de conexión
Seleccione Puntos de conexión en el panel de la izquierda y haga clic en Crear punto de conexión.
a. Nombre: vpc-endpoint-dynamodb. (Figura 1)
b. b. Categoría de servicio: Servicio de AWS.
c. Servicio: introduzca DynamoDB en el cuadro de búsqueda y seleccione com.amazonaws.region.dynamodb.
d. VPC: seleccione su VPC predeterminada.
e. Tablas de enrutamiento: seleccione la tabla de enrutamiento principal.
f. Haga clic en Crear punto de conexión. (Figura 2)
Revise su trabajo
Ahora debería:
✓ Tener un punto de conexión de VPC para DynamoDB con el nombre vpc-endpoint-dynamodb.
Paso 10: Realizar pruebas en la nube
Ahora estamos listos para unirlo todo y probar la API web en la nube.
1. Visitar la URL del servicio
En un navegador, visite la URL del servicio que registró en el Paso 6. Verá la respuesta de la comprobación de estado.
2. Probar la acción de pronóstico meteorológico para Dallas
Agregue /WeatherForecast?location=Dallas al final de la ruta URL. Ahora puede ver los registros de Dallas que ingresó en el Paso 1
3. Probar la acción de pronóstico meteorológico para Minneapolis
3. Cambie el final de la ruta a /WeatherForecast?location=Minneapolis, y verá los registros de esa ubicación.
¡Felicidades! Su API web está alojada en AWS App Runner y el servicio se comunica con DynamoDB.
Revise su trabajo
Ahora debería:
✓ Haber confirmado que su servicio AWS App Runner puede recuperar datos de la tabla de DynamoDB.
Paso 11: Desplegar una actualización
En este paso, actualizará su API web, insertará un contenedor actualizado y verá cómo App Runner despliega automáticamente el contenedor actualizado en el servicio. Lo hará porque configuramos los despliegues automáticos en el Paso 8 cuando creamos el servicio.
1. Modificar el servicio
2. Crear y realizar pruebas locales
Cree y pruebe el proyecto localmente para asegurarse de que funciona como se espera.
3. Volver a desplegar el contenedor
4. Supervisar el nuevo despliegue del servicio
En la Consola de AWS App Runner, supervise su servicio. Poco después de desplegar el contenedor nuevo, App Runner desplegará la actualización automáticamente.
5. Probar el servicio actualizado
Espere a que se complete la actualización y, a continuación, pruebe su servicio navegando hasta él como lo hizo en el Paso 10. Confirme que ahora ve la nueva versión de la salida del servicio.
Revise su trabajo
Ahora debería:
✓ Tener su proyecto de API web actualizado con un cambio.
✓ Haber desplegado un contenedor actualizado en ECR.
✓ Haber confirmado que App Runner desplegó la actualización automáticamente.
Paso 12: Cerrar
No dude en experimentar con cambios en su proyecto para poner sus conocimientos a prueba.
Cuando haya terminado con el proyecto, ciérrelo. No querrá acumular cargos por algo que no esté utilizando.
1. Eliminar el servicio App Runner
En la Consola de AWS, diríjase a App Runner y elimine el servicio HelloAppRunnerVpc
2. Eliminar la tabla de DynamoDB
Diríjase a DynamoDB y elimine la tabla Clima
3. Eliminar la imagen del contenedor
Diríjase a ECR y elimine la imagen del contenedor helloapprunnervpc.
4. Eliminar el entorno de Cloud9
Si usa Cloud9, diríjase a Cloud9 y elimine el entorno AppRunnerLab.
Revise su trabajo
Ahora debería:
✓ Haber eliminado el servicio App Runner.
✓ Haber eliminado la tabla de DynamoDB.
✓ Haber eliminado la imagen del contenedor de ECR.
Resumen
En este laboratorio creó una tabla de DynamoDB y la rellenó con datos. Generó un proyecto de aplicación web .NET con el comando dotnet new. Codificó una API web que recupera los datos meteorológicos de la tabla de DynamoDB. Desplegó un contenedor en ECR. Creó un servicio de App Runner para alojar la API web. Creó un conector de VPC de App Runner y un punto de conexión de VPC para que DynamoDB conecte los dos servicios. Probó la aplicación, ahora alojada en AWS, y la vio en funcionamiento. Desplegó un contenedor actualizado en ECR y lo vio desplegarse automáticamente en el servicio App Runner. Por último, desasignó su aplicación de AWS.