From ee002b5f145e95ec6c5bcdffd63af87319d8944d Mon Sep 17 00:00:00 2001 From: Sergio Sinuco Date: Wed, 24 Jul 2024 18:57:59 -0500 Subject: [PATCH 01/15] Create Devops Projects --- learning-objectives/data.yml | 20 ++ learning-objectives/intl/es.yml | 100 ++++++ .../05-computing-service-deployment/README.MD | 140 ++++++++ .../project.yml | 5 + .../05-container-service-deployment/README.MD | 213 +++++++++++++ .../project.yml | 5 + projects/05-dockerfile-deployment/README.MD | 168 ++++++++++ projects/05-dockerfile-deployment/project.yml | 5 + projects/05-kubernetes-deployment/README.MD | 300 ++++++++++++++++++ projects/05-kubernetes-deployment/project.yml | 5 + 10 files changed, 961 insertions(+) create mode 100644 projects/05-computing-service-deployment/README.MD create mode 100644 projects/05-computing-service-deployment/project.yml create mode 100644 projects/05-container-service-deployment/README.MD create mode 100644 projects/05-container-service-deployment/project.yml create mode 100644 projects/05-dockerfile-deployment/README.MD create mode 100644 projects/05-dockerfile-deployment/project.yml create mode 100644 projects/05-kubernetes-deployment/README.MD create mode 100644 projects/05-kubernetes-deployment/project.yml diff --git a/learning-objectives/data.yml b/learning-objectives/data.yml index 1b6a2280d..5d9fdc6b6 100644 --- a/learning-objectives/data.yml +++ b/learning-objectives/data.yml @@ -486,6 +486,26 @@ data-analytics: - analysis-report - analysis-presentation +devops-computing-cloud-services: + - concepts-cloud-infrastructure-virtualization + - setting-up-runtime-environment + - monitoring-application-virtual-machine + +devops-docker: + - docker-container-image + - dockerfile + - docker-commands + +devops-container-cloud-services: + - orchestration-system-components + - configure-container-task-definitions + +devops-kubernetes: + - kubernetes-use-cases + - kubernetes-components + - kubernetes-yaml-files + - kubectl-commands + # New OAs since UXD006 agile-planning: - scope diff --git a/learning-objectives/intl/es.yml b/learning-objectives/intl/es.yml index d63f91b54..8ce34d533 100644 --- a/learning-objectives/intl/es.yml +++ b/learning-objectives/intl/es.yml @@ -2003,6 +2003,106 @@ ai-prompting/open-ai-api: - title: "The chat completion object - API Reference - OpenAI API" url: https://platform.openai.com/docs/api-reference/chat/object +devops-computing-cloud-services: + title: Servicios de computación en la nube + description: Servicios de computación en la nube como AWS EC2 y Azure VM + +devops-computing-cloud-services/concepts-cloud-infrastructure-virtualization: + title: Comprender los conceptos fundamentales de la infraestructura en la nube y la virtualización + description: Describir los conceptos básicos de la infraestructura en la nube y cómo la virtualización permite la creación y gestión de máquinas virtuales + links: + - title: + url: + +devops-computing-cloud-services/setting-up-runtime-environment: + title: Configurar el entorno de ejecución de una aplicación en una máquina virtual + description: Instalar y configurar un sistema operativo y otros servicios esenciales en una máquina virtual para ejecutar una aplicación + links: + - title: + url: + +devops-computing-cloud-services/monitoring-application-virtual-machine: + title: Monitorear la ejecución de una aplicación en una máquina virtual + description: Utilizar herramientas de monitoreo para supervisar la ejecución de una aplicación en una máquina virtual + links: + - title: + url: + +devops-docker: + title: Docker + description: Docker permite empaquetar una aplicación junto con todas sus dependencias (como bibliotecas, configuraciones y archivos necesarios) en una unidad estándar conocida como contenedor + +devops-docker/docker-container-image: + title: Explicar qué es Docker, Docker container y Docker image + description: Explicar qué es Docker, Docker container y Docker image + links: + - title: + url: + +devops-docker/dockerfile: + title: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` + description: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` + links: + - title: + url: + +devops-docker/docker-commands: + title: Ejecutar comandos básicos de Docker para gestionar el ciclo de vida de un contenedor e imagen e interactuar con contenedores + description: Usar comandos como `docker build`, `docker run`, `docker ps`, `docker stop`, `docker rm`, `docker pull` y `docker push` + links: + - title: + url: + +devops-container-cloud-services: + title: Servicio de orquestación de contenedores + description: Servicios de orquestación de contenedores en la nube como AWS ECS y Azure Container Apps + +devops-container-cloud-services/orchestration-system-components: + title: Describir los componentes clave de un sistema de orquestación, como clústeres, tareas, servicios y balanceadores de carga + description: Describir los componentes clave de un sistema de orquestación, como clústeres, tareas, servicios y balanceadores de carga + links: + - title: + url: + +devops-container-cloud-services/configure-container-task-definitions: + title: Crear y configurar definiciones de contenedor y tareas que incluyan todos los componentes necesarios para ejecutar un aplicación, como imágenes Docker, variables de entorno, volúmenes y configuraciones de red + description: Crear y configurar definiciones de contenedor y tareas que incluyan todos los componentes necesarios para ejecutar un aplicación, como imágenes Docker, variables de entorno, volúmenes y configuraciones de red + links: + - title: + url: + +devops-kubernetes: + title: Kubernetes + description: Kubernetes es una herramienta que facilita la gestión de aplicaciones contenedorizadas al automatizar el despliegue, el escalado y la recuperación ante fallos + +devops-kubernetes/kubernetes-use-cases: + title: Explicar que es Kubernetes y describir sus casos de uso y las necesidades que soluciona + description: Explicar que es Kubernetes y describir sus casos de uso y las necesidades que soluciona + links: + - title: + url: + +devops-kubernetes/kubernetes-components: + title: Describir la arquitectura de Kubernetes y sus componentes clave, como nodos, pods, servicios, deployments y namespaces + description: Describir la arquitectura de Kubernetes y sus componentes clave, como nodos, pods, servicios, deployments y namespaces + links: + - title: + url: + +devops-kubernetes/kubernetes-yaml-files: + title: Crear y configurar archivos de manifiesto de Kubernetes (YAML) para definir recursos como deployments, services y configMaps necesarios para desplegar una API. + description: Crear y configurar archivos de manifiesto de Kubernetes (YAML) para definir recursos como deployments, services y configMaps necesarios para desplegar una API. + links: + - title: + url: + +devops-kubernetes/kubectl-commands: + title: Utilizar comandos de kubectl para gestionar recursos del clúster, escalar aplicaciones manualmente y automatizar el escalado basado en métricas de rendimiento + description: Utilizar comandos de kubectl para gestionar recursos del clúster, escalar aplicaciones manualmente y automatizar el escalado basado en métricas de rendimiento + links: + - title: + url: + data-analytics: title: Análisis de datos description: Validar hipótesis mediante el análisis de los datos, y proporcionar recomendaciones estratégicas basadas en tus hallazgos diff --git a/projects/05-computing-service-deployment/README.MD b/projects/05-computing-service-deployment/README.MD new file mode 100644 index 000000000..7550ac41d --- /dev/null +++ b/projects/05-computing-service-deployment/README.MD @@ -0,0 +1,140 @@ +# API Deployment on Computing Service + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) +- [5. Paso a paso general para el despliegue en Amazon EC2 o Azure VMs](#5-Paso-a-paso-general-para-el-despliegue-en-Amazon-EC2-o-Azure-VMs) +- [6. Paso a paso detallado para el despliegue en Amazon EC2](#6-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-EC2) +- [7. Paso a paso detallado para el despliegue en Azure VMs](#7-Paso-a-paso-detallado-para-el-despliegue-en-Azure-VMs) +- [8. Consideraciones para pedir tu Project Feedback](#8-Consideraciones-para-pedir-tu-Project-Feedback) +- [9. Objetivos de aprendizaje](#9-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. + +## 2. Preámbulo + + + +

+Virtual Machines +

+ +_Photo by_ +[_Alexandre Debiève_](https://github.com/user-attachments/assets/506d6905-593f-4774-be0a-26f28c35af9b) + +AWS EC2 y Azure Virtual Machines son servicios de computación en la +nube que permiten a las desarrolladoras crear, gestionar y escalar máquinas +virtuales conocidos como instancias. Ambos servicios proporcionan una +infraestructura flexible y segura para ejecutar una amplia variedad de +aplicaciones y servicios, con características similares como escalabilidad, +diversidad de tipos de instancias, soporte para múltiples sistemas +operativos, opciones de pago por uso, y avanzadas configuraciones de redes +y seguridad. La elección entre AWS EC2 y Azure VMs a menudo depende de +las necesidades específicas del proyecto, la familiaridad con la plataforma +y otros factores como integración con servicios existentes. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + +

+Ruta Devops +

+ +## 3. Resumen del proyecto + +En este proyecto desplegarás la Fleet Management API en una máquina +virtual usando **Amazon EC2** o **Azure Virtual Machines (Azure VMs)**. + +En lugar de depender únicamente de tu computadora local para ejecutar aplicaciones, +tanto en Amazon EC2 como en Azure VMs, puedes utilizar servidores remotos, llamados +instancias, que ofrecen más potencia y flexibilidad. Puedes elegir entre +diferentes tipos de instancias según las necesidades +de tu aplicación. Hay instancias optimizadas para tareas que requieren +mucha memoria, mucho procesamiento, almacenamiento rápido, etc. Puedes conectarte +a tu instancia desde tu computadora local usando herramientas como SSH +(para Linux) o Remote Desktop (para Windows). Una vez conectada, +puedes usar la instancia como lo harías con tu computadora local: +instalar software, subir código, ejecutar aplicaciones, etc. + +## 4. Implementaciones de ejemplo + +En caso que no hayas implementado aún la +[Fleet Management API](../05-fleet-management-api/README.md) +puedes usar las siguientes implementaciones mínimas para +completar este proyecto. Elige la implementación en el +lenguaje de programación que más te interese: + +- [Implementación en NodeJS](https://github.com/Laboratoria/minimum-impl-fleet-management-api-nodejs) +- [Implementación en Python](https://github.com/Laboratoria/minimum-impl-fleet-management-api-python) +- [Implementación en Java](https://github.com/Laboratoria/minimum-impl-fleet-management-api-java) + +## 5. Paso a paso general para el despliegue en Amazon EC2 o Azure VMs + +Amazon EC2 y Azure Virtual Machines son servicios muy similares. En ambos +podemos seguir el siguiente paso a paso general para +desplegar la Fleet Management API independientemente del lenguaje de +programación en que esta implementada. + +- Paso 1: Crear una cuenta en el proveedor de infraestructura +- Paso 2: Lanzar una máquina virtual +- Paso 3: Configurar la máquina virtual +- Paso 4: Conectar a la máquina virtual desde tu computadora usando SSH +- Paso 5: Instalar las dependencias de la API en la máquina virtual +- Paso 6: Subir el código de tu API en la máquina virtual +- Paso 7: Configurar y ejecutar la API en la máquina virtual +- Paso 8: Probar la API desde tu computadora + +## 6. Paso a paso detallado para el despliegue en Amazon EC2 + +El paso a paso detallado para el despliegue en Amazon EC2 +depende del lenguaje de implementacion de la API. Te +sugerimos las siguientes guías: + +- [Despliegue de API NodeJS](https://dev.to/drsimplegraffiti/from-code-to-the-cloud-a-step-by-step-guide-to-deploying-your-nodejs-app-on-aws-ec2-4300) +- [Despliegue API Python](https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/) +- [Despliegue de API Java](https://medium.com/@amitu2016/deploying-spring-boot-web-app-on-aws-using-ec2-and-s3-4db1d0f55c78) + +## 7. Paso a paso detallado para el despliegue en Azure VMs + +El paso a paso detallado para el despliegue en Azure VMs +depende del lenguaje de implementacion de la API. Te +sugerimos las siguientes guias: + +- [Despliegue de API NodeJS](https://learn.microsoft.com/en-us/azure-stack/user/azure-stack-dev-start-howto-vm-nodejs) +- [Despliegue API Python](https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/) +- [Despliegue de API Java](https://learn.microsoft.com/en-us/azure-stack/user/azure-stack-dev-start-howto-vm-java) + +## 8. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de +tener una coleccion de Postman para probar la API que +desplegaste en Amazon EC2 o Azure VMs. + +## 9. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-computing-service-deployment/project.yml b/projects/05-computing-service-deployment/project.yml new file mode 100644 index 000000000..dc6d262b6 --- /dev/null +++ b/projects/05-computing-service-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops-computing-cloud-services diff --git a/projects/05-container-service-deployment/README.MD b/projects/05-container-service-deployment/README.MD new file mode 100644 index 000000000..0683eb90b --- /dev/null +++ b/projects/05-container-service-deployment/README.MD @@ -0,0 +1,213 @@ +# API Deployment on Container Service + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Paso a paso general para el despliegue en Amazon ECS o Azure Container Apps](#4-Paso-a-paso-general-para-el-despliegue-en-Amazon-ECS-o-Azure-Container-Apps) +- [5. Paso a paso detallado para el despliegue en Amazon ECS](#5-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-ECS) +- [6. Paso a paso detallado para el despliegue en Azure Container Apps](#6-Paso-a-paso-detallado-para-el-despliegue-en-Azure-Container-Apps) +- [7. Consideraciones para pedir tu Project Feedback](#7-Consideraciones-para-pedir-tu-Project-Feedback) +- [8. Objetivos de aprendizaje](#8-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Para poder implementar este proyecto debes implementar primer +el [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. + +## 2. Preámbulo + + + +

+Contenedores +

+ +_Photo by_ +[Frank Mckenna](https://unsplash.com/@frankiefoto?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) + +AWS ECS (Elastic Container Service) y Azure Container Apps son servicios +diseñados para simplificar el despliegue y la gestión de aplicaciones basadas +en contenedores, permitiendo a las desarrolladoras centrarse en el código en +lugar de la infraestructura. Ambos proporcionan escalabilidad automática, +gestionando la capacidad de los recursos según la demanda de la aplicación. +Además, tanto ECS como Azure Container Apps se integran de manera eficiente +con otros servicios en sus respectivos ecosistemas de nube, facilitando +una experiencia cohesiva y flexible para construir y desplegar aplicaciones +en la nube. Sin embargo, mientras que ECS se basa en la infraestructura de +clústeres, Azure Container Apps ofrece una experiencia sin servidor, +simplificando aún más la gestión. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + +

+Ruta Devops +

+ +## 3. Resumen del proyecto + +En este proyecto desplegarás la aplicación usando +**Amazon Elastic Container Service (ECS)** o +**Azure Container Apps**. + +Para este proyecto necesitarás la imagen Docker que construiste +en el proyecto [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). +Si aún no la tienes, por favor implementa primero este proyecto. + +## 4. Paso a paso general para el despliegue en Amazon ECS o Azure Container Apps + +Amazon ECS y Azure Container Apps son servicios muy similares. En ambos +podemos seguir el siguiente paso a paso general para +desplegar la Fleet Management API independientemente del lenguaje de +programación en que esta implementada + +- Paso 1: Subir la imagen docker a un Registro de Contenedores +(Azure Container Registry o Amazon ECR) +- Paso 2: Desplegar la aplicación en el caso de Azure creando una Container App y en el caso +de Amazon ECS creando un cluster EC2, definiendo una tarea ECS y un servicio ECS. +- Paso 3: Configurar el acceso externo para acceder a tu API utilizando la URL pública proporcionada por Azure o AWS. +- Paso 4: Monitorizar y gestionar la aplicación + +## 5. Paso a paso detallado para el despliegue en Amazon ECS + +### 1. Sube la imagen Docker a Amazon ECR (Elastic Container Registry) + +Amazon ECR es un servicio en la nube que te permite almacenar tus imágenes +Docker de forma segura y eficiente. Amazon ECR actúa como un +"repositorio" para imágenes Docker, similar a cómo GitHub actúa como un +repositorio para código fuente. ECR se integra fácilmente con otros servicios de +AWS, como Amazon ECS (Elastic Container Service). Esto simplifica el despliegue de +tus aplicaciones en contenedores dentro del entorno de AWS. + +En este proyecto almacenaremos en Amazon ECR la imagen docker que hemos +definido para empaquetar nuesta aplicación. Tómate un tiempo +para familiarizarte con ECR. Puedes seguir el +[tutorial oficial de ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo creas un repositorio en Amazon ECR? +- [ ] ¿Cómo te autenticas en Amazon ECR desde tu máquina local? +- [ ] ¿Cómo subes una imagen Docker a Amazon ECR? +- [ ] ¿Cómo gestionas las imágenes en Amazon ECR? +- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Amazon ECR? + +Finalmente, sube la imagen Docker que constuiste para empaquetar tu +aplicación en un repositorio de Amazon ECR. + +### 2. Crear un clúster tipo EC2, una tarea y servicio en ECS + +El siguiente paso es entonces desplegar la imagen docker +en cluster de instancias EC2 usando Amazon ECS (Elastic Container Service). + +Tómate un tiempo para familiarizarte con ECS. Puedes seguir el +[workshop oficial de ECS](https://ecsworkshop.com/introduction/) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo se crea un clúster en Amazon ECS? +- [ ] ¿Qué es una tarea en ECS y cómo se configura? +- [ ] ¿Qué es un servicio en ECS y cómo garantiza que las tareas se mantengan en funcionamiento? +- [ ] ¿Cómo se despliega un servicio en ECS? +- [ ] ¿Qué es el autoescalado en ECS y cómo se configura? +- [ ] ¿Cómo se integra ECS con otros servicios de AWS como ECR? +- [ ] ¿Cómo se realiza un despliegue de una nueva versión de una aplicación utilizando ECS? +- [ ] ¿Cómo solucionas problemas si tu aplicación en Amazon ECS no se está ejecutando correctamente? + +Finalmente, usa ECS para desplegar la imagen docker de tu aplicacion +creando un clúster, una tarea y un servicio. + +### 3. Monitorizar y gestionar la aplicación + +Usa la la IP pública de tu clúster EC2 para probar tu API con una +coleccion de Postman. Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 6. Paso a paso detallado para el despliegue en Azure Container Apps + +### 1. Sube la imagen Docker a Azure Container Registry + +Azure Container Registry (ACR) es un servicio en la nube que +te permite almacenar tus imágenes Docker de forma segura y +eficiente. ACR actúa como un "repositorio" para imágenes Docker, +similar a cómo GitHub actúa como un repositorio para código fuente. +ECR se integra fácilmente con otros servicios de Azure, como Azure Container Apps. +Esto simplifica el despliegue de tus aplicaciones en contenedores dentro +del entorno de Azure. + +En este proyecto almacenaremos en ACR la imagen docker que hemos +definido para empaquetar nuesta aplicación. Tómate un tiempo +para familiarizarte con ACR. Puedes seguir el +[tutorial oficial de ACR](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo creas un nuevo registro en Azure Container Registry? +- [ ] ¿Cómo te autenticas en Azure Container Registry desde tu máquina local? +- [ ] ¿Cómo subes una imagen Docker a Azure Container Registry? +- [ ] ¿Cómo gestionas las imágenes en Azure Container Registry? +- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Azure Container Registry? + +Finalmente, sube la imagen Docker que constuiste para empaquetar tu +aplicación en un registro de Azure Container Registry. + +### 2. Crear una container App en Azure Container Registry + +El siguiente paso es entonces desplegar la imagen docker +en una Container App usando Azure Container Apps. + +Tómate un tiempo para familiarizarte con Azure Container Apps. Puedes seguir el +[workshop oficial de Azure Container Apps](https://learn.microsoft.com/en-us/training/modules/deploy-manage-container-app-using-azure-container-apps/) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +Para confirmar que una desarrolladora domina **Azure Container Apps**, puedes hacer las siguientes preguntas: + +- [ ] ¿Cómo se crea una nueva aplicación en Azure Container Apps desde el portal de Azure? +- [ ] ¿Qué requisitos previos debes cumplir antes de desplegar una aplicación en Azure Container Apps? +- [ ] ¿Cómo configuras el contenedor en una aplicación de Azure Container Apps? +- [ ] ¿Cómo actualizas una aplicación desplegada en Azure Container Apps con una nueva versión de la imagen del contenedor? +- [ ] ¿Cómo configuras el acceso y la seguridad para tu aplicación en Azure Container Apps? +- [ ] ¿Cómo solucionas problemas si tu aplicación en Azure Container Apps no se está ejecutando correctamente? + +Finalmente, usa ECS para desplegar la imagen docker de tu aplicacion +creando un clúster, una tarea y un servicio. + +### 3. Monitorizar y gestionar la aplicación + +Usa la la IP pública de tu Azure Container App para probar tu API con una +coleccion de Postman. Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 7. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de +tener una coleccion de Postman para probar la API que +desplegaste en Amazon ECS o Azure Container Apps. + +## 8. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-container-service-deployment/project.yml b/projects/05-container-service-deployment/project.yml new file mode 100644 index 000000000..d9dee6967 --- /dev/null +++ b/projects/05-container-service-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops-container-cloud-services diff --git a/projects/05-dockerfile-deployment/README.MD b/projects/05-dockerfile-deployment/README.MD new file mode 100644 index 000000000..9261bdd06 --- /dev/null +++ b/projects/05-dockerfile-deployment/README.MD @@ -0,0 +1,168 @@ +# API Deployment on Docker File + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) +- [5. Paso a paso para empaquetar tu aplicación en un contenedor de Docker](#5-Paso-a-paso-para-empaquetar-tu-aplicación-en-un-contenedor-de-Docker) +- [6. Consideraciones para pedir tu Project Feedback](#6-Consideraciones-para-pedir-tu-Project-Feedback) +- [7. Objetivos de aprendizaje](#7-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. + +## 2. Preámbulo + + + + + +Docker permite empaquetar una aplicación junto con todas sus dependencias +(como bibliotecas, configuraciones y archivos necesarios) en una unidad +estándar conocida como contenedor. Esto asegura que la aplicación funcione +de manera consistente sin importar dónde se ejecute, ya sea en una máquina local, +en la nube o en un servidor de producción. A diferencia de las máquinas virtuales, +los contenedores no necesitan un sistema operativo completo, sino que comparten +el núcleo del sistema operativo del host, lo que los hace más eficientes en términos +de recursos y más rápidos de iniciar. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + +

+Ruta Devops +

+ +## 3. Resumen del proyecto + +En este proyecto empaquetarás la [Fleet Management API](../05-fleet-management-api/README.md) +en un **contenedor de Docker** a través de un Dockerfile. + +## 4. Implementaciones de ejemplo + +En caso que no hayas implementado aún la +[Fleet Management API](../05-fleet-management-api/README.md) +puedes usar las siguientes implementaciones mínimas para +completar este proyecto. Elige la implementación en el +lenguaje de programación que más te interese: + +- [Implementación en NodeJS](https://github.com/Laboratoria/minimum-impl-fleet-management-api-nodejs) +- [Implementación en Python](https://github.com/Laboratoria/minimum-impl-fleet-management-api-python) +- [Implementación en Java](https://github.com/Laboratoria/minimum-impl-fleet-management-api-java) + +## 5. Paso a paso para empaquetar tu aplicación en un contenedor de Docker + +### 1. Familiarizate con Docker + +Docker es una herramienta que se usa para crear, desplegar y ejecutar +aplicaciones en contenedores. Por lo tanto es importante +que aprendas a administrar contenedores. Tómate un tiempo +para familiarizarte con Docker. Puedes seguir el +[tutorial oficial de Docker](https://www.docker.com/101-tutorial/) o cualquier +otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Qué es un contenedor? +- [ ] ¿Qué es una Docker Image? +- [ ] ¿Qué es un Image Registry? +- [ ] ¿Cómo ejecutar un contenedor? +- [ ] ¿Cómo detener un contenedor? +- [ ] ¿Cómo publicar un puerto de un contenedor? +- [ ] ¿Cómo ejecutar un comando dentro de un contenedor? +- [ ] ¿Qué es un Dockerfile? +- [ ] En un Dockerfile, ¿para qué sirve el comando FROM? +- [ ] En un Dockerfile, ¿para qué sirve el comando EXPOSE? +- [ ] En un Dockerfile, ¿para qué sirve el comando USE? +- [ ] En un Dockerfile, ¿para qué sirve el comando RUN? +- [ ] En un Dockerfile, ¿para qué sirve el comando WORKDIR? +- [ ] En un Dockerfile, ¿para qué sirve el comando COPY? +- [ ] En un Dockerfile, ¿para qué sirven los comandos CMD y ENTRYPOINT? +- [ ] En un Dockerfile, ¿para qué sirve el comando ENV? +- [ ] ¿Cómo compartir imágenes en Docker Github? + +### 2. Construye una imagen Docker con Dockerfile + +Una vez estes familiarizada con Docker, el siguiente paso es escribir +un Dockerfile para construir una imagen que empaquete tu API. Puedes seguir este +[tutorial](https://medium.com/@anshita.bhasin/a-step-by-step-guide-to-create-dockerfile-9e3744d38d11) +o cualquier otro disponible en internet. + +Para escribir un `Dockerfile` adecuado que empaquete una aplicación, +es importante responder a varias preguntas clave sobre tu aplicación y su entorno. +Aquí tienes una lista de preguntas a considerar: + +1. ¿Cuál es el lenguaje de programación y entorno de ejecución de tu aplicación? +2. ¿Cuál es el sistema operativo preferido o requerido? +3. ¿En qué directorio está ubicado el código fuente de tu aplicación? ¿Necesitas +copiar todo el directorio o solo ciertos archivos? +4. ¿Qué herramientas o paquetes necesitas instalar para que tu aplicación funcione? +¿Usas un archivo como `package.json` (Node.js), `requirements.txt` (Python), +`pom.xml` (Maven, Java) o `build.gradle` (Gradle, Java)? +5. ¿Cuál es el punto de entrada de tu aplicación? ¿Qué comando necesitas ejecutar +para iniciar tu aplicación? +6. ¿En qué puerto(s) escucha tu aplicación para recibir conexiones? Esto es necesario +para la instrucción `EXPOSE`. +7. ¿Existen variables de entorno que deban configurarse para que tu aplicación +funcione correctamente? +8. ¿Hay datos que deben mantenerse persistentes entre reinicios de contenedores? +Si es así, puedes necesitar configurar volúmenes. +9. ¿Existen permisos o configuraciones del sistema que deban aplicarse para que tu +aplicación se ejecute correctamente? +10. ¿Necesitas realizar alguna configuración específica o ejecución de scripts antes +de que tu aplicación esté lista? + +Con ayuda de las respuestas a estas preguntas escribe un Dockerfile que empaquete +tu aplicación con todas sus dependencias, configure el entorno de trabajo y +exponga el puerto necesario, asegurando que la aplicación esté lista para +ejecutarse en un contenedor Docker. + +Luego construye la imagen Docker desde el Dockerfile (`docker build`) y ejecuta +un contenedor basado en la imagen construida (`docker run`). + +Prueba que la API funcione correctamente desde una colección de Postman. +Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +### 3. Publica tu Imagen en Docker Hub + +Crea una cuenta en Docker Hub e inicia sesión desde tu terminal (`docker login`). +Etiqueta tu imagen Docker (`docker tag`) y publícala en Docker Hub (`docker push`) +para su distribución y uso. + +## 6. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de: + +- [ ] Hacer push del Dockerfile al repositorio de proyecto Fleet Management API +- [ ] Construir una colección de Postman para probar la API. +Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 7. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-dockerfile-deployment/project.yml b/projects/05-dockerfile-deployment/project.yml new file mode 100644 index 000000000..40c6ebdfc --- /dev/null +++ b/projects/05-dockerfile-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops-docker diff --git a/projects/05-kubernetes-deployment/README.MD b/projects/05-kubernetes-deployment/README.MD new file mode 100644 index 000000000..17f2ca110 --- /dev/null +++ b/projects/05-kubernetes-deployment/README.MD @@ -0,0 +1,300 @@ +# API Deployment on Kubernetes + +## Índice + +- [1. Consideraciones generales](#1-consideraciones-generales) +- [2. Preámbulo](#2-preámbulo) +- [3. Resumen del proyecto](#3-resumen-del-proyecto) +- [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) +- [5. Paso a paso general para el despliegue en Amazon EC2](#6-Paso-a-paso-general-para-el-despliegue-en-Amazon-EC2) +- [6. Paso a paso detallado para el despliegue en Amazon EC2](#6-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-EC2) +- [7. Consideraciones para pedir tu Project Feedback](#7-Consideraciones-para-pedir-tu-Project-Feedback) +- [8. Objetivos de aprendizaje](#8-Objetivos-de-aprendizaje) + +--- + +## 1. Consideraciones generales + +- Este proyecto lo resolvemos de manera --individual--. +- El rango de tiempo estimado para completar el proyecto es de 2 a 3 Sprints. + +## 2. Preámbulo + + + + + +Kubernetes es una herramienta que facilita la +gestión de aplicaciones contenedorizadas al automatizar +el despliegue, el escalado y la recuperación ante fallos. +Con Kubernetes puedes aumentar +o disminuir el número de contenedores en función de la carga de +trabajo, asegurando que tu aplicación pueda manejar picos de +tráfico sin problemas. +Kubernetes distribuye los contenedores en varios nodos del +clúster, asegurando que la aplicación siga funcionando incluso +si algunos nodos fallan. También puede reiniciar automáticamente +los contenedores que fallan o reemplazarlos si un nodo completo se cae. + +La currícula de Laboratoria incluye 4 proyectos enfocados en +desplegar la [Fleet Management API](../05-fleet-management-api/README.md) +en la nube. Cada proyecto se distingue por utilizar +diferentes métodos de despliegue, lo que te permitirá aprender y aplicar +diversas estrategias para desplegar tu aplicación en producción en un entorno real. + + + +

+Ruta Devops +

+ +## 3. Resumen del proyecto + +En este proyecto empaquetarás la [Fleet Management API](../05-fleet-management-api/README.md) +en un **cluster de kubernetes** a través de **Azure Kubernetes Service** +o en **Amazon Elastic Kubernetes Service**. + +Para este proyecto necesitarás la imagen Docker que construiste +en el proyecto [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). +Si aún no la tienes, por favor implementa primero este proyecto. + +## 4. Paso a paso general para el despliegue en Amazon EKS o Azure AKS + +- Paso 1: Subir la imagen docker a un Registro de Contenedores +(Azure Container Registry o Amazon ECR). +- Paso 2: Crear y Configurar el Clúster de Kubernetes En Azure +Kubernetes Service (AKS) o Amazon Elastic Kubernetes Service (EKS). +- Paso 3: Crear un archivo de despliegue de Kubernetes. +- Paso 4: Crear un archivo de servicio de Kubernetes +- Paso 5: Desplegar los recursos en Kubernetes y verificar el estado del despliegue +- Paso 7: Obtén la dirección IP del balanceador de carga para acceder a laa API. +- Paso 8: Monitorizar los Logs + +## 5. Kubernetes + +Kubernetes es una herramienta que facilita la +gestión de aplicaciones contenedorizadas al automatizar +el despliegue, el escalado y la recuperación ante fallos. +Por lo tanto es importante que te familiarices con los +conceptos básicos de Kubernetes como pods, servicios, +despliegues, nodos, y clústeres. +Para ello será necesario entonces que instales en tu computadora +local [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) +y [minikube](https://minikube.sigs.k8s.io/docs/start/). + +Para familiarizarte puedes seguir el +[tutorial oficial de Kubernetes](https://kubernetes.io/docs/tutorials/kubernetes-basics/) +o cualquier otro disponible en internet. Asegúrate que al final +tengas respuestas claras para las siguientes preguntas: + +- [ ] ¿Qué problemas de la vida real resuelve Kubernetes? +- [ ] ¿Qué es la alta disponibilidad y la recuperación ante fallos? +- [ ] ¿Qué es un Pod en Kubernetes? +- [ ] ¿Qué es un Nodo en un clúster de Kubernetes? +- [ ] ¿Qué es un Clúster en Kubernetes? +- [ ] ¿Qué es una Definición de Tarea en Kubernetes? +- [ ] ¿Cómo se crean y gestionan los recursos en Kubernetes? +- [ ] ¿Qué es un Servicio en Kubernetes y cuál es su función? +- [ ] ¿Qué es un Deployment en Kubernetes y cómo se usa? +- [ ] ¿Cómo se escala una aplicación en Kubernetes? +- [ ] ¿Qué mecanismos proporciona Kubernetes para la alta disponibilidad y la recuperación ante fallos? + +### 1. Crear un archivo de despliegue de Kubernetes. + +Una vez creado el cluster Kubernetes en EKS, +el siguiente paso es escribir un +[archivo de despliegue de Kubernetes (`deployment.yaml`)](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) +Para ello, es importante responder a varias preguntas clave +sobre tu aplicación y su entorno. +Aquí tienes una lista de preguntas a considerar: + +- [ ] ¿Cuál es el nombre de la aplicación? +- [ ] ¿Qué imagen de contenedor se usará? +- [ ] ¿Qué puertos necesita exponer la aplicación? +- [ ] ¿Cuántas réplicas de la aplicación se deben desplegar inicialmente? +- [ ] ¿Cuál es la política de actualización deseada? +- [ ] ¿Qué recursos (CPU y memoria) necesita la aplicación? +- [ ] ¿Cuáles son las variables de entorno necesarias para la aplicación? +- [ ] ¿Se necesitan volúmenes persistentes o temporales? + +Con ayuda de las respuestas a estas preguntas escribe un `deployment.yaml` +para definir un despliegue para la API. + +### 2. Crear un archivo de servicio de Kubernetes + +Una vez creado el cluster Kubernetes en EKS, +el siguiente paso es escribir un +[archivo de servicio de Kubernetes (`services.yaml`)](https://kubernetes.io/docs/concepts/services-networking/service/) +Para ello, es importante responder a varias preguntas clave +sobre tu aplicación y su entorno. +Aquí tienes una lista de preguntas a considerar: + +Para escribir un archivo `services.yaml` adecuado para desplegar una aplicación en Kubernetes, deberías responder las siguientes preguntas: + +- [ ] ¿Cuál es el nombre de la aplicación y del servicio?** +- [ ] ¿Qué tipo de servicio necesitas (`ClusterIP`, `NodePort`, `LoadBalancer`, `ExternalName`)? +- [ ] ¿Qué puertos necesitas exponer?** +- [ ] ¿Cuál es el selector para asociar el servicio con los pods correctos?** +- [ ] ¿Qué protocolos se usarán (TCP/UDP)?** +- [ ] ¿El servicio necesita ser accesible externamente ()`NodePort` o `LoadBalancer`)? + +Con ayuda de las respuestas a estas preguntas escribe un `services.yaml` +para definir un servicio para la API. + +## 6. Paso a paso detallado para el despliegue en Amazon ECS + +### 1. Sube la imagen Docker a Amazon ECR (Elastic Container Registry) + +Amazon ECR es un servicio en la nube que te permite almacenar tus imágenes +Docker de forma segura y eficiente. Amazon ECR actúa como un +"repositorio" para imágenes Docker, similar a cómo GitHub actúa como un +repositorio para código fuente. ECR se integra fácilmente con otros servicios de +AWS, como Amazon ECS (Elastic Container Service). Esto simplifica el despliegue de +tus aplicaciones en contenedores dentro del entorno de AWS. + +En este proyecto almacenaremos en Amazon ECR la imagen docker que hemos +definido para empaquetar nuesta aplicación. Tómate un tiempo +para familiarizarte con ECR. Puedes seguir el +[tutorial oficial de ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo creas un repositorio en Amazon ECR? +- [ ] ¿Cómo te autenticas en Amazon ECR desde tu máquina local? +- [ ] ¿Cómo subes una imagen Docker a Amazon ECR? +- [ ] ¿Cómo gestionas las imágenes en Amazon ECR? +- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Amazon ECR? + +Finalmente, sube la imagen Docker que constuiste para empaquetar tu +aplicación en un repositorio de Amazon ECR. + +### 2. Crear un cluster en Amazon Elastic Kubernetes Service + +El siguiente paso es entonces crear un cluster Kubernetes +en Amazon Elastic Kubernetes Service. + +Tómate un tiempo para familiarizarte con EKS. Puedes seguir este +[tutorial de EKS](https://medium.com/edureka/amazon-eks-ac646c23abf8) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [] ¿Cómo se crean y gestionan los clústeres en EKS? +(`AWS CLI`, `AWS Management Console`, `eksctl`) +- [] ¿Cómo se configura la autenticación y autorización en EKS? +- [] ¿Qué es `kubectl` y cómo se utiliza en el contexto de EKS? +- [] ¿Cómo se gestionan los upgrades de un clúster EKS? +- [] ¿Cómo se configura y gestiona el autoescalado en EKS? +- [] ¿Cómo se diagnostican y resuelven problemas en un clúster EKS? + +Finalmente, usa EKS para crear un clúster Kubernetes para la API. + +### 3. Desplegar los recursos en Kubernetes y verificar el estado del despliegue + +Con ayuda del comando `kubectl apply` aplica los archivos +`deployment.yaml` y `service.yaml` al cluster Kubernetes. + +Verifica el estado del despliegue con `kubectl get deployments` y +`kubectl get services`. Realiza los ajustes necesarios +en los archivos hasta obtener un estado correcto en el +deployment y service. + +### 4. Monitorizar y gestionar la aplicación + +Una vez que el servicio se haya creado, obtén la dirección +IP del balanceador de carga para acceder a tu API con +`kubectl get services`. + +Usa la la IP pública de tu clúster para probar tu API con una +coleccion de Postman. Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 6. Paso a paso detallado para el despliegue en Azure Kubernetes Service + +### 1. Sube la imagen Docker a Azure Container Registry + +Azure Container Registry (ACR) es un servicio en la nube que +te permite almacenar tus imágenes Docker de forma segura y +eficiente. ACR actúa como un "repositorio" para imágenes Docker, +similar a cómo GitHub actúa como un repositorio para código fuente. +ECR se integra fácilmente con otros servicios de Azure, como Azure Container Apps. +Esto simplifica el despliegue de tus aplicaciones en contenedores dentro +del entorno de Azure. + +En este proyecto almacenaremos en ACR la imagen docker que hemos +definido para empaquetar nuesta aplicación. Tómate un tiempo +para familiarizarte con ACR. Puedes seguir el +[tutorial oficial de ACR](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [ ] ¿Cómo creas un nuevo registro en Azure Container Registry? +- [ ] ¿Cómo te autenticas en Azure Container Registry desde tu máquina local? +- [ ] ¿Cómo subes una imagen Docker a Azure Container Registry? +- [ ] ¿Cómo gestionas las imágenes en Azure Container Registry? +- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Azure Container Registry? + +Finalmente, sube la imagen Docker que constuiste para empaquetar tu +aplicación en un registro de Azure Container Registry. + +### 2. Crear un cluster en Azure Kubernetes Service + +El siguiente paso es entonces crear un cluster Kubernetes +en Azure Kubernetes Service. + +Tómate un tiempo para familiarizarte con AKS. Puedes seguir este +[tutorial de AKS](https://www.freecodecamp.org/news/how-to-use-azure-kubernetes-service-for-container-orchestration/) +o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas +claras para las siguientes preguntas: + +- [] ¿Cómo se crean y gestionan los clústeres en AKS? (`Azure Portal`, `Azure CLI`). +- [] ¿Cómo se configura la autenticación y autorización en un clúster AKS? +- [] ¿Qué es `kubectl` y cómo se utiliza en el contexto de AKS? +- [] ¿Cómo se gestionan los upgrades de un clúster AKS? +- [] ¿Cómo se configura el autoescalado en AKS? +- [] ¿Cómo se diagnostican y resuelven problemas en un clúster AKS? + +Finalmente, usa AKS para crear un clúster Kubernetes para la API. + +### 3. Desplegar los recursos en Kubernetes y verificar el estado del despliegue + +Con ayuda del comando `kubectl apply` aplica los archivos +`deployment.yaml` y `service.yaml` al cluster Kubernetes. + +Verifica el estado del despliegue con `kubectl get deployments` y +`kubectl get services`. Realiza los ajustes necesarios +en los archivos hasta obtener un estado correcto en el +deployment y service. + +### 4. Monitorizar y gestionar la aplicación + +Una vez que el servicio se haya creado, obtén la dirección +IP del balanceador de carga para acceder a tu API con +`kubectl get services`. + +Usa la la IP pública de tu clúster para probar tu API con una +coleccion de Postman. Puedes utilizar esta +[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). + +## 7. Consideraciones para pedir tu Project Feedback + +Antes de agendar tu Project Feedback con tu coach, asegúrate de +tener una coleccion de Postman para probar la API que +desplegaste en Amazon EKS o Azure AKS. + +## 8. Objetivos de aprendizaje + +> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir +> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), +> al crear el repo del proyecto para un cohort en particular usando +> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). +> +> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) +> que contempla nuestra currícula. diff --git a/projects/05-kubernetes-deployment/project.yml b/projects/05-kubernetes-deployment/project.yml new file mode 100644 index 000000000..ec7696e89 --- /dev/null +++ b/projects/05-kubernetes-deployment/project.yml @@ -0,0 +1,5 @@ +track: web-dev +tags: + - featured +learningObjectives: + - devops-kubernetes From 440360ac64a5c19071a587e0a4ac50178a35c5ea Mon Sep 17 00:00:00 2001 From: Sergio Sinuco Date: Mon, 12 Aug 2024 19:38:16 +0100 Subject: [PATCH 02/15] Delete kubernetes project --- learning-objectives/data.yml | 6 - learning-objectives/intl/es.yml | 21 -- projects/05-kubernetes-deployment/README.MD | 300 ------------------ projects/05-kubernetes-deployment/project.yml | 5 - 4 files changed, 332 deletions(-) delete mode 100644 projects/05-kubernetes-deployment/README.MD delete mode 100644 projects/05-kubernetes-deployment/project.yml diff --git a/learning-objectives/data.yml b/learning-objectives/data.yml index 5d9fdc6b6..f4dcb5996 100644 --- a/learning-objectives/data.yml +++ b/learning-objectives/data.yml @@ -500,12 +500,6 @@ devops-container-cloud-services: - orchestration-system-components - configure-container-task-definitions -devops-kubernetes: - - kubernetes-use-cases - - kubernetes-components - - kubernetes-yaml-files - - kubectl-commands - # New OAs since UXD006 agile-planning: - scope diff --git a/learning-objectives/intl/es.yml b/learning-objectives/intl/es.yml index 8ce34d533..f5ca8ce37 100644 --- a/learning-objectives/intl/es.yml +++ b/learning-objectives/intl/es.yml @@ -2082,27 +2082,6 @@ devops-kubernetes/kubernetes-use-cases: - title: url: -devops-kubernetes/kubernetes-components: - title: Describir la arquitectura de Kubernetes y sus componentes clave, como nodos, pods, servicios, deployments y namespaces - description: Describir la arquitectura de Kubernetes y sus componentes clave, como nodos, pods, servicios, deployments y namespaces - links: - - title: - url: - -devops-kubernetes/kubernetes-yaml-files: - title: Crear y configurar archivos de manifiesto de Kubernetes (YAML) para definir recursos como deployments, services y configMaps necesarios para desplegar una API. - description: Crear y configurar archivos de manifiesto de Kubernetes (YAML) para definir recursos como deployments, services y configMaps necesarios para desplegar una API. - links: - - title: - url: - -devops-kubernetes/kubectl-commands: - title: Utilizar comandos de kubectl para gestionar recursos del clúster, escalar aplicaciones manualmente y automatizar el escalado basado en métricas de rendimiento - description: Utilizar comandos de kubectl para gestionar recursos del clúster, escalar aplicaciones manualmente y automatizar el escalado basado en métricas de rendimiento - links: - - title: - url: - data-analytics: title: Análisis de datos description: Validar hipótesis mediante el análisis de los datos, y proporcionar recomendaciones estratégicas basadas en tus hallazgos diff --git a/projects/05-kubernetes-deployment/README.MD b/projects/05-kubernetes-deployment/README.MD deleted file mode 100644 index 17f2ca110..000000000 --- a/projects/05-kubernetes-deployment/README.MD +++ /dev/null @@ -1,300 +0,0 @@ -# API Deployment on Kubernetes - -## Índice - -- [1. Consideraciones generales](#1-consideraciones-generales) -- [2. Preámbulo](#2-preámbulo) -- [3. Resumen del proyecto](#3-resumen-del-proyecto) -- [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) -- [5. Paso a paso general para el despliegue en Amazon EC2](#6-Paso-a-paso-general-para-el-despliegue-en-Amazon-EC2) -- [6. Paso a paso detallado para el despliegue en Amazon EC2](#6-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-EC2) -- [7. Consideraciones para pedir tu Project Feedback](#7-Consideraciones-para-pedir-tu-Project-Feedback) -- [8. Objetivos de aprendizaje](#8-Objetivos-de-aprendizaje) - ---- - -## 1. Consideraciones generales - -- Este proyecto lo resolvemos de manera --individual--. -- El rango de tiempo estimado para completar el proyecto es de 2 a 3 Sprints. - -## 2. Preámbulo - - - - - -Kubernetes es una herramienta que facilita la -gestión de aplicaciones contenedorizadas al automatizar -el despliegue, el escalado y la recuperación ante fallos. -Con Kubernetes puedes aumentar -o disminuir el número de contenedores en función de la carga de -trabajo, asegurando que tu aplicación pueda manejar picos de -tráfico sin problemas. -Kubernetes distribuye los contenedores en varios nodos del -clúster, asegurando que la aplicación siga funcionando incluso -si algunos nodos fallan. También puede reiniciar automáticamente -los contenedores que fallan o reemplazarlos si un nodo completo se cae. - -La currícula de Laboratoria incluye 4 proyectos enfocados en -desplegar la [Fleet Management API](../05-fleet-management-api/README.md) -en la nube. Cada proyecto se distingue por utilizar -diferentes métodos de despliegue, lo que te permitirá aprender y aplicar -diversas estrategias para desplegar tu aplicación en producción en un entorno real. - - - -

-Ruta Devops -

- -## 3. Resumen del proyecto - -En este proyecto empaquetarás la [Fleet Management API](../05-fleet-management-api/README.md) -en un **cluster de kubernetes** a través de **Azure Kubernetes Service** -o en **Amazon Elastic Kubernetes Service**. - -Para este proyecto necesitarás la imagen Docker que construiste -en el proyecto [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). -Si aún no la tienes, por favor implementa primero este proyecto. - -## 4. Paso a paso general para el despliegue en Amazon EKS o Azure AKS - -- Paso 1: Subir la imagen docker a un Registro de Contenedores -(Azure Container Registry o Amazon ECR). -- Paso 2: Crear y Configurar el Clúster de Kubernetes En Azure -Kubernetes Service (AKS) o Amazon Elastic Kubernetes Service (EKS). -- Paso 3: Crear un archivo de despliegue de Kubernetes. -- Paso 4: Crear un archivo de servicio de Kubernetes -- Paso 5: Desplegar los recursos en Kubernetes y verificar el estado del despliegue -- Paso 7: Obtén la dirección IP del balanceador de carga para acceder a laa API. -- Paso 8: Monitorizar los Logs - -## 5. Kubernetes - -Kubernetes es una herramienta que facilita la -gestión de aplicaciones contenedorizadas al automatizar -el despliegue, el escalado y la recuperación ante fallos. -Por lo tanto es importante que te familiarices con los -conceptos básicos de Kubernetes como pods, servicios, -despliegues, nodos, y clústeres. -Para ello será necesario entonces que instales en tu computadora -local [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) -y [minikube](https://minikube.sigs.k8s.io/docs/start/). - -Para familiarizarte puedes seguir el -[tutorial oficial de Kubernetes](https://kubernetes.io/docs/tutorials/kubernetes-basics/) -o cualquier otro disponible en internet. Asegúrate que al final -tengas respuestas claras para las siguientes preguntas: - -- [ ] ¿Qué problemas de la vida real resuelve Kubernetes? -- [ ] ¿Qué es la alta disponibilidad y la recuperación ante fallos? -- [ ] ¿Qué es un Pod en Kubernetes? -- [ ] ¿Qué es un Nodo en un clúster de Kubernetes? -- [ ] ¿Qué es un Clúster en Kubernetes? -- [ ] ¿Qué es una Definición de Tarea en Kubernetes? -- [ ] ¿Cómo se crean y gestionan los recursos en Kubernetes? -- [ ] ¿Qué es un Servicio en Kubernetes y cuál es su función? -- [ ] ¿Qué es un Deployment en Kubernetes y cómo se usa? -- [ ] ¿Cómo se escala una aplicación en Kubernetes? -- [ ] ¿Qué mecanismos proporciona Kubernetes para la alta disponibilidad y la recuperación ante fallos? - -### 1. Crear un archivo de despliegue de Kubernetes. - -Una vez creado el cluster Kubernetes en EKS, -el siguiente paso es escribir un -[archivo de despliegue de Kubernetes (`deployment.yaml`)](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) -Para ello, es importante responder a varias preguntas clave -sobre tu aplicación y su entorno. -Aquí tienes una lista de preguntas a considerar: - -- [ ] ¿Cuál es el nombre de la aplicación? -- [ ] ¿Qué imagen de contenedor se usará? -- [ ] ¿Qué puertos necesita exponer la aplicación? -- [ ] ¿Cuántas réplicas de la aplicación se deben desplegar inicialmente? -- [ ] ¿Cuál es la política de actualización deseada? -- [ ] ¿Qué recursos (CPU y memoria) necesita la aplicación? -- [ ] ¿Cuáles son las variables de entorno necesarias para la aplicación? -- [ ] ¿Se necesitan volúmenes persistentes o temporales? - -Con ayuda de las respuestas a estas preguntas escribe un `deployment.yaml` -para definir un despliegue para la API. - -### 2. Crear un archivo de servicio de Kubernetes - -Una vez creado el cluster Kubernetes en EKS, -el siguiente paso es escribir un -[archivo de servicio de Kubernetes (`services.yaml`)](https://kubernetes.io/docs/concepts/services-networking/service/) -Para ello, es importante responder a varias preguntas clave -sobre tu aplicación y su entorno. -Aquí tienes una lista de preguntas a considerar: - -Para escribir un archivo `services.yaml` adecuado para desplegar una aplicación en Kubernetes, deberías responder las siguientes preguntas: - -- [ ] ¿Cuál es el nombre de la aplicación y del servicio?** -- [ ] ¿Qué tipo de servicio necesitas (`ClusterIP`, `NodePort`, `LoadBalancer`, `ExternalName`)? -- [ ] ¿Qué puertos necesitas exponer?** -- [ ] ¿Cuál es el selector para asociar el servicio con los pods correctos?** -- [ ] ¿Qué protocolos se usarán (TCP/UDP)?** -- [ ] ¿El servicio necesita ser accesible externamente ()`NodePort` o `LoadBalancer`)? - -Con ayuda de las respuestas a estas preguntas escribe un `services.yaml` -para definir un servicio para la API. - -## 6. Paso a paso detallado para el despliegue en Amazon ECS - -### 1. Sube la imagen Docker a Amazon ECR (Elastic Container Registry) - -Amazon ECR es un servicio en la nube que te permite almacenar tus imágenes -Docker de forma segura y eficiente. Amazon ECR actúa como un -"repositorio" para imágenes Docker, similar a cómo GitHub actúa como un -repositorio para código fuente. ECR se integra fácilmente con otros servicios de -AWS, como Amazon ECS (Elastic Container Service). Esto simplifica el despliegue de -tus aplicaciones en contenedores dentro del entorno de AWS. - -En este proyecto almacenaremos en Amazon ECR la imagen docker que hemos -definido para empaquetar nuesta aplicación. Tómate un tiempo -para familiarizarte con ECR. Puedes seguir el -[tutorial oficial de ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) -o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas -claras para las siguientes preguntas: - -- [ ] ¿Cómo creas un repositorio en Amazon ECR? -- [ ] ¿Cómo te autenticas en Amazon ECR desde tu máquina local? -- [ ] ¿Cómo subes una imagen Docker a Amazon ECR? -- [ ] ¿Cómo gestionas las imágenes en Amazon ECR? -- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Amazon ECR? - -Finalmente, sube la imagen Docker que constuiste para empaquetar tu -aplicación en un repositorio de Amazon ECR. - -### 2. Crear un cluster en Amazon Elastic Kubernetes Service - -El siguiente paso es entonces crear un cluster Kubernetes -en Amazon Elastic Kubernetes Service. - -Tómate un tiempo para familiarizarte con EKS. Puedes seguir este -[tutorial de EKS](https://medium.com/edureka/amazon-eks-ac646c23abf8) -o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas -claras para las siguientes preguntas: - -- [] ¿Cómo se crean y gestionan los clústeres en EKS? -(`AWS CLI`, `AWS Management Console`, `eksctl`) -- [] ¿Cómo se configura la autenticación y autorización en EKS? -- [] ¿Qué es `kubectl` y cómo se utiliza en el contexto de EKS? -- [] ¿Cómo se gestionan los upgrades de un clúster EKS? -- [] ¿Cómo se configura y gestiona el autoescalado en EKS? -- [] ¿Cómo se diagnostican y resuelven problemas en un clúster EKS? - -Finalmente, usa EKS para crear un clúster Kubernetes para la API. - -### 3. Desplegar los recursos en Kubernetes y verificar el estado del despliegue - -Con ayuda del comando `kubectl apply` aplica los archivos -`deployment.yaml` y `service.yaml` al cluster Kubernetes. - -Verifica el estado del despliegue con `kubectl get deployments` y -`kubectl get services`. Realiza los ajustes necesarios -en los archivos hasta obtener un estado correcto en el -deployment y service. - -### 4. Monitorizar y gestionar la aplicación - -Una vez que el servicio se haya creado, obtén la dirección -IP del balanceador de carga para acceder a tu API con -`kubectl get services`. - -Usa la la IP pública de tu clúster para probar tu API con una -coleccion de Postman. Puedes utilizar esta -[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). - -## 6. Paso a paso detallado para el despliegue en Azure Kubernetes Service - -### 1. Sube la imagen Docker a Azure Container Registry - -Azure Container Registry (ACR) es un servicio en la nube que -te permite almacenar tus imágenes Docker de forma segura y -eficiente. ACR actúa como un "repositorio" para imágenes Docker, -similar a cómo GitHub actúa como un repositorio para código fuente. -ECR se integra fácilmente con otros servicios de Azure, como Azure Container Apps. -Esto simplifica el despliegue de tus aplicaciones en contenedores dentro -del entorno de Azure. - -En este proyecto almacenaremos en ACR la imagen docker que hemos -definido para empaquetar nuesta aplicación. Tómate un tiempo -para familiarizarte con ACR. Puedes seguir el -[tutorial oficial de ACR](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli) -o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas -claras para las siguientes preguntas: - -- [ ] ¿Cómo creas un nuevo registro en Azure Container Registry? -- [ ] ¿Cómo te autenticas en Azure Container Registry desde tu máquina local? -- [ ] ¿Cómo subes una imagen Docker a Azure Container Registry? -- [ ] ¿Cómo gestionas las imágenes en Azure Container Registry? -- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Azure Container Registry? - -Finalmente, sube la imagen Docker que constuiste para empaquetar tu -aplicación en un registro de Azure Container Registry. - -### 2. Crear un cluster en Azure Kubernetes Service - -El siguiente paso es entonces crear un cluster Kubernetes -en Azure Kubernetes Service. - -Tómate un tiempo para familiarizarte con AKS. Puedes seguir este -[tutorial de AKS](https://www.freecodecamp.org/news/how-to-use-azure-kubernetes-service-for-container-orchestration/) -o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas -claras para las siguientes preguntas: - -- [] ¿Cómo se crean y gestionan los clústeres en AKS? (`Azure Portal`, `Azure CLI`). -- [] ¿Cómo se configura la autenticación y autorización en un clúster AKS? -- [] ¿Qué es `kubectl` y cómo se utiliza en el contexto de AKS? -- [] ¿Cómo se gestionan los upgrades de un clúster AKS? -- [] ¿Cómo se configura el autoescalado en AKS? -- [] ¿Cómo se diagnostican y resuelven problemas en un clúster AKS? - -Finalmente, usa AKS para crear un clúster Kubernetes para la API. - -### 3. Desplegar los recursos en Kubernetes y verificar el estado del despliegue - -Con ayuda del comando `kubectl apply` aplica los archivos -`deployment.yaml` y `service.yaml` al cluster Kubernetes. - -Verifica el estado del despliegue con `kubectl get deployments` y -`kubectl get services`. Realiza los ajustes necesarios -en los archivos hasta obtener un estado correcto en el -deployment y service. - -### 4. Monitorizar y gestionar la aplicación - -Una vez que el servicio se haya creado, obtén la dirección -IP del balanceador de carga para acceder a tu API con -`kubectl get services`. - -Usa la la IP pública de tu clúster para probar tu API con una -coleccion de Postman. Puedes utilizar esta -[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). - -## 7. Consideraciones para pedir tu Project Feedback - -Antes de agendar tu Project Feedback con tu coach, asegúrate de -tener una coleccion de Postman para probar la API que -desplegaste en Amazon EKS o Azure AKS. - -## 8. Objetivos de aprendizaje - -> ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir -> de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), -> al crear el repo del proyecto para un cohort en particular usando -> [`./scripts/create-cohort-project.js`](../../scripts#create-cohort-project-coaches). -> -> Acá puedes ver una [lista de todos los objetivos de aprendizaje](../../learning-objectives/data.yml) -> que contempla nuestra currícula. diff --git a/projects/05-kubernetes-deployment/project.yml b/projects/05-kubernetes-deployment/project.yml deleted file mode 100644 index ec7696e89..000000000 --- a/projects/05-kubernetes-deployment/project.yml +++ /dev/null @@ -1,5 +0,0 @@ -track: web-dev -tags: - - featured -learningObjectives: - - devops-kubernetes From 81cbe613e224faa387f342f1577ef019c7448f54 Mon Sep 17 00:00:00 2001 From: Sergio Sinuco Date: Mon, 12 Aug 2024 19:38:31 +0100 Subject: [PATCH 03/15] Delete Azure alternative --- .../05-computing-service-deployment/README.MD | 42 +++----- .../05-container-service-deployment/README.MD | 98 ++++--------------- projects/05-dockerfile-deployment/README.MD | 2 +- 3 files changed, 33 insertions(+), 109 deletions(-) diff --git a/projects/05-computing-service-deployment/README.MD b/projects/05-computing-service-deployment/README.MD index 7550ac41d..d9bbbaf2b 100644 --- a/projects/05-computing-service-deployment/README.MD +++ b/projects/05-computing-service-deployment/README.MD @@ -6,11 +6,10 @@ - [2. Preámbulo](#2-preámbulo) - [3. Resumen del proyecto](#3-resumen-del-proyecto) - [4. Implementaciones de ejemplo](#4-Implementaciones-de-ejemplo) -- [5. Paso a paso general para el despliegue en Amazon EC2 o Azure VMs](#5-Paso-a-paso-general-para-el-despliegue-en-Amazon-EC2-o-Azure-VMs) +- [5. Paso a paso general para el despliegue en Amazon EC2](#5-Paso-a-paso-general-para-el-despliegue-en-Amazon-EC2) - [6. Paso a paso detallado para el despliegue en Amazon EC2](#6-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-EC2) -- [7. Paso a paso detallado para el despliegue en Azure VMs](#7-Paso-a-paso-detallado-para-el-despliegue-en-Azure-VMs) -- [8. Consideraciones para pedir tu Project Feedback](#8-Consideraciones-para-pedir-tu-Project-Feedback) -- [9. Objetivos de aprendizaje](#9-Objetivos-de-aprendizaje) +- [7. Consideraciones para pedir tu Project Feedback](#7-Consideraciones-para-pedir-tu-Project-Feedback) +- [8. Objetivos de aprendizaje](#8-Objetivos-de-aprendizaje) --- @@ -33,16 +32,14 @@ Virtual Machines _Photo by_ [_Alexandre Debiève_](https://github.com/user-attachments/assets/506d6905-593f-4774-be0a-26f28c35af9b) -AWS EC2 y Azure Virtual Machines son servicios de computación en la +AWS EC2 es un servicio de computación en la nube que permiten a las desarrolladoras crear, gestionar y escalar máquinas -virtuales conocidos como instancias. Ambos servicios proporcionan una +virtuales conocidos como instancias. Proporciona una infraestructura flexible y segura para ejecutar una amplia variedad de -aplicaciones y servicios, con características similares como escalabilidad, +aplicaciones y servicios, con características como escalabilidad, diversidad de tipos de instancias, soporte para múltiples sistemas operativos, opciones de pago por uso, y avanzadas configuraciones de redes -y seguridad. La elección entre AWS EC2 y Azure VMs a menudo depende de -las necesidades específicas del proyecto, la familiaridad con la plataforma -y otros factores como integración con servicios existentes. +y seguridad. La currícula de Laboratoria incluye 4 proyectos enfocados en desplegar la [Fleet Management API](../05-fleet-management-api/README.md) @@ -62,10 +59,10 @@ Ruta Devops ## 3. Resumen del proyecto En este proyecto desplegarás la Fleet Management API en una máquina -virtual usando **Amazon EC2** o **Azure Virtual Machines (Azure VMs)**. +virtual usando **Amazon EC2**. En lugar de depender únicamente de tu computadora local para ejecutar aplicaciones, -tanto en Amazon EC2 como en Azure VMs, puedes utilizar servidores remotos, llamados +tanto en Amazon EC2, puedes utilizar servidores remotos, llamados instancias, que ofrecen más potencia y flexibilidad. Puedes elegir entre diferentes tipos de instancias según las necesidades de tu aplicación. Hay instancias optimizadas para tareas que requieren @@ -87,10 +84,9 @@ lenguaje de programación que más te interese: - [Implementación en Python](https://github.com/Laboratoria/minimum-impl-fleet-management-api-python) - [Implementación en Java](https://github.com/Laboratoria/minimum-impl-fleet-management-api-java) -## 5. Paso a paso general para el despliegue en Amazon EC2 o Azure VMs +## 5. Paso a paso general para el despliegue en Amazon EC2 -Amazon EC2 y Azure Virtual Machines son servicios muy similares. En ambos -podemos seguir el siguiente paso a paso general para +Podemos seguir el siguiente paso a paso general para desplegar la Fleet Management API independientemente del lenguaje de programación en que esta implementada. @@ -113,23 +109,13 @@ sugerimos las siguientes guías: - [Despliegue API Python](https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/) - [Despliegue de API Java](https://medium.com/@amitu2016/deploying-spring-boot-web-app-on-aws-using-ec2-and-s3-4db1d0f55c78) -## 7. Paso a paso detallado para el despliegue en Azure VMs - -El paso a paso detallado para el despliegue en Azure VMs -depende del lenguaje de implementacion de la API. Te -sugerimos las siguientes guias: - -- [Despliegue de API NodeJS](https://learn.microsoft.com/en-us/azure-stack/user/azure-stack-dev-start-howto-vm-nodejs) -- [Despliegue API Python](https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/) -- [Despliegue de API Java](https://learn.microsoft.com/en-us/azure-stack/user/azure-stack-dev-start-howto-vm-java) - -## 8. Consideraciones para pedir tu Project Feedback +## 7. Consideraciones para pedir tu Project Feedback Antes de agendar tu Project Feedback con tu coach, asegúrate de tener una coleccion de Postman para probar la API que -desplegaste en Amazon EC2 o Azure VMs. +desplegaste en Amazon EC2. -## 9. Objetivos de aprendizaje +## 8. Objetivos de aprendizaje > ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir > de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), diff --git a/projects/05-container-service-deployment/README.MD b/projects/05-container-service-deployment/README.MD index 0683eb90b..63d9c4f6d 100644 --- a/projects/05-container-service-deployment/README.MD +++ b/projects/05-container-service-deployment/README.MD @@ -5,18 +5,17 @@ - [1. Consideraciones generales](#1-consideraciones-generales) - [2. Preámbulo](#2-preámbulo) - [3. Resumen del proyecto](#3-resumen-del-proyecto) -- [4. Paso a paso general para el despliegue en Amazon ECS o Azure Container Apps](#4-Paso-a-paso-general-para-el-despliegue-en-Amazon-ECS-o-Azure-Container-Apps) +- [4. Paso a paso general para el despliegue en Amazon ECS](#4-Paso-a-paso-general-para-el-despliegue-en-Amazon-ECS) - [5. Paso a paso detallado para el despliegue en Amazon ECS](#5-Paso-a-paso-detallado-para-el-despliegue-en-Amazon-ECS) -- [6. Paso a paso detallado para el despliegue en Azure Container Apps](#6-Paso-a-paso-detallado-para-el-despliegue-en-Azure-Container-Apps) -- [7. Consideraciones para pedir tu Project Feedback](#7-Consideraciones-para-pedir-tu-Project-Feedback) -- [8. Objetivos de aprendizaje](#8-Objetivos-de-aprendizaje) +- [6. Consideraciones para pedir tu Project Feedback](#6-Consideraciones-para-pedir-tu-Project-Feedback) +- [7. Objetivos de aprendizaje](#7-Objetivos-de-aprendizaje) --- ## 1. Consideraciones generales - Para poder implementar este proyecto debes implementar primer -el [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). +el [API Deployment with Docker](../05-dockerfile-deployment/README.MD). - Este proyecto lo resolvemos de manera --individual--. - El rango de tiempo estimado para completar el proyecto es de 1 a 2 Sprints. @@ -34,17 +33,15 @@ Contenedores _Photo by_ [Frank Mckenna](https://unsplash.com/@frankiefoto?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) -AWS ECS (Elastic Container Service) y Azure Container Apps son servicios -diseñados para simplificar el despliegue y la gestión de aplicaciones basadas +AWS ECS (Elastic Container Service) es un servicio +diseñado para simplificar el despliegue y la gestión de aplicaciones basadas en contenedores, permitiendo a las desarrolladoras centrarse en el código en lugar de la infraestructura. Ambos proporcionan escalabilidad automática, gestionando la capacidad de los recursos según la demanda de la aplicación. -Además, tanto ECS como Azure Container Apps se integran de manera eficiente -con otros servicios en sus respectivos ecosistemas de nube, facilitando +Además se integra de manera eficiente +con otros servicios de AWS, facilitando una experiencia cohesiva y flexible para construir y desplegar aplicaciones -en la nube. Sin embargo, mientras que ECS se basa en la infraestructura de -clústeres, Azure Container Apps ofrece una experiencia sin servidor, -simplificando aún más la gestión. +en la nube. La currícula de Laboratoria incluye 4 proyectos enfocados en desplegar la [Fleet Management API](../05-fleet-management-api/README.md) @@ -64,25 +61,22 @@ Ruta Devops ## 3. Resumen del proyecto En este proyecto desplegarás la aplicación usando -**Amazon Elastic Container Service (ECS)** o -**Azure Container Apps**. +**Amazon Elastic Container Service (ECS)**. Para este proyecto necesitarás la imagen Docker que construiste en el proyecto [API Deployment on Docker File](../05-dockerfile-deployment/README.MD). Si aún no la tienes, por favor implementa primero este proyecto. -## 4. Paso a paso general para el despliegue en Amazon ECS o Azure Container Apps +## 4. Paso a paso general para el despliegue en Amazon ECS -Amazon ECS y Azure Container Apps son servicios muy similares. En ambos -podemos seguir el siguiente paso a paso general para +Podemos seguir el siguiente paso a paso general para desplegar la Fleet Management API independientemente del lenguaje de programación en que esta implementada - Paso 1: Subir la imagen docker a un Registro de Contenedores -(Azure Container Registry o Amazon ECR) -- Paso 2: Desplegar la aplicación en el caso de Azure creando una Container App y en el caso -de Amazon ECS creando un cluster EC2, definiendo una tarea ECS y un servicio ECS. -- Paso 3: Configurar el acceso externo para acceder a tu API utilizando la URL pública proporcionada por Azure o AWS. +(Amazon ECR) +- Paso 2: Desplegar la aplicación en Amazon ECS creando un cluster EC2, definiendo una tarea ECS y un servicio ECS. +- Paso 3: Configurar el acceso externo para acceder a tu API utilizando la URL pública proporcionada por AWS. - Paso 4: Monitorizar y gestionar la aplicación ## 5. Paso a paso detallado para el despliegue en Amazon ECS @@ -140,69 +134,13 @@ Usa la la IP pública de tu clúster EC2 para probar tu API con una coleccion de Postman. Puedes utilizar esta [colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). -## 6. Paso a paso detallado para el despliegue en Azure Container Apps - -### 1. Sube la imagen Docker a Azure Container Registry - -Azure Container Registry (ACR) es un servicio en la nube que -te permite almacenar tus imágenes Docker de forma segura y -eficiente. ACR actúa como un "repositorio" para imágenes Docker, -similar a cómo GitHub actúa como un repositorio para código fuente. -ECR se integra fácilmente con otros servicios de Azure, como Azure Container Apps. -Esto simplifica el despliegue de tus aplicaciones en contenedores dentro -del entorno de Azure. - -En este proyecto almacenaremos en ACR la imagen docker que hemos -definido para empaquetar nuesta aplicación. Tómate un tiempo -para familiarizarte con ACR. Puedes seguir el -[tutorial oficial de ACR](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli) -o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas -claras para las siguientes preguntas: - -- [ ] ¿Cómo creas un nuevo registro en Azure Container Registry? -- [ ] ¿Cómo te autenticas en Azure Container Registry desde tu máquina local? -- [ ] ¿Cómo subes una imagen Docker a Azure Container Registry? -- [ ] ¿Cómo gestionas las imágenes en Azure Container Registry? -- [ ] ¿Cómo haces `pull` a tu computadora de una imágen subida a Azure Container Registry? - -Finalmente, sube la imagen Docker que constuiste para empaquetar tu -aplicación en un registro de Azure Container Registry. - -### 2. Crear una container App en Azure Container Registry - -El siguiente paso es entonces desplegar la imagen docker -en una Container App usando Azure Container Apps. - -Tómate un tiempo para familiarizarte con Azure Container Apps. Puedes seguir el -[workshop oficial de Azure Container Apps](https://learn.microsoft.com/en-us/training/modules/deploy-manage-container-app-using-azure-container-apps/) -o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas -claras para las siguientes preguntas: - -Para confirmar que una desarrolladora domina **Azure Container Apps**, puedes hacer las siguientes preguntas: - -- [ ] ¿Cómo se crea una nueva aplicación en Azure Container Apps desde el portal de Azure? -- [ ] ¿Qué requisitos previos debes cumplir antes de desplegar una aplicación en Azure Container Apps? -- [ ] ¿Cómo configuras el contenedor en una aplicación de Azure Container Apps? -- [ ] ¿Cómo actualizas una aplicación desplegada en Azure Container Apps con una nueva versión de la imagen del contenedor? -- [ ] ¿Cómo configuras el acceso y la seguridad para tu aplicación en Azure Container Apps? -- [ ] ¿Cómo solucionas problemas si tu aplicación en Azure Container Apps no se está ejecutando correctamente? - -Finalmente, usa ECS para desplegar la imagen docker de tu aplicacion -creando un clúster, una tarea y un servicio. - -### 3. Monitorizar y gestionar la aplicación - -Usa la la IP pública de tu Azure Container App para probar tu API con una -coleccion de Postman. Puedes utilizar esta -[colección de ejemplo](https://github.com/Laboratoria/curriculum/tree/main/projects/05-fleet-management-api#7-testing). - -## 7. Consideraciones para pedir tu Project Feedback +## 6. Consideraciones para pedir tu Project Feedback Antes de agendar tu Project Feedback con tu coach, asegúrate de tener una coleccion de Postman para probar la API que -desplegaste en Amazon ECS o Azure Container Apps. +desplegaste en Amazon ECS. -## 8. Objetivos de aprendizaje +## 7. Objetivos de aprendizaje > ℹ️ Esta sección será automáticamente generada en el idioma pertinente, a partir > de los objetivos de aprendizaje declarados en [`project.yml`](./project.yml), diff --git a/projects/05-dockerfile-deployment/README.MD b/projects/05-dockerfile-deployment/README.MD index 9261bdd06..aaece88b0 100644 --- a/projects/05-dockerfile-deployment/README.MD +++ b/projects/05-dockerfile-deployment/README.MD @@ -1,4 +1,4 @@ -# API Deployment on Docker File +# API Deployment with Docker ## Índice From 8ef071237ff1e3220b12be736bb38c92e7069d96 Mon Sep 17 00:00:00 2001 From: Sergio Sinuco Date: Mon, 12 Aug 2024 19:38:47 +0100 Subject: [PATCH 04/15] Add links for learning objectives --- learning-objectives/intl/es.yml | 42 +++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/learning-objectives/intl/es.yml b/learning-objectives/intl/es.yml index f5ca8ce37..3c6f23ce1 100644 --- a/learning-objectives/intl/es.yml +++ b/learning-objectives/intl/es.yml @@ -2011,23 +2011,29 @@ devops-computing-cloud-services/concepts-cloud-infrastructure-virtualization: title: Comprender los conceptos fundamentales de la infraestructura en la nube y la virtualización description: Describir los conceptos básicos de la infraestructura en la nube y cómo la virtualización permite la creación y gestión de máquinas virtuales links: - - title: - url: + - title: AWS Cloud Essentials + url: https://aws.amazon.com/getting-started/cloud-essentials/ + - title: Get started with Amazon EC2 + url: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html devops-computing-cloud-services/setting-up-runtime-environment: title: Configurar el entorno de ejecución de una aplicación en una máquina virtual description: Instalar y configurar un sistema operativo y otros servicios esenciales en una máquina virtual para ejecutar una aplicación links: - - title: - url: + - title: Despliegue de API NodeJS + url: https://dev.to/drsimplegraffiti/from-code-to-the-cloud-a-step-by-step-guide-to-deploying-your-nodejs-app-on-aws-ec2-4300 + - title: Despliegue API Python + url: https://www.geeksforgeeks.org/how-to-deploy-python-application-in-aws/ + - title: Despliegue de API Java + url: https://medium.com/@amitu2016/deploying-spring-boot-web-app-on-aws-using-ec2-and-s3-4db1d0f55c78 devops-computing-cloud-services/monitoring-application-virtual-machine: title: Monitorear la ejecución de una aplicación en una máquina virtual description: Utilizar herramientas de monitoreo para supervisar la ejecución de una aplicación en una máquina virtual links: - - title: - url: - + - title: Monitor Amazon EC2 resources + url: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring_ec2.html + devops-docker: title: Docker description: Docker permite empaquetar una aplicación junto con todas sus dependencias (como bibliotecas, configuraciones y archivos necesarios) en una unidad estándar conocida como contenedor @@ -2036,22 +2042,32 @@ devops-docker/docker-container-image: title: Explicar qué es Docker, Docker container y Docker image description: Explicar qué es Docker, Docker container y Docker image links: - - title: - url: + - title: What is a container? + url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-a-container/ + - title: What is an image? + url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-an-image/ + - title: What is a registry? + url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-a-registry/ devops-docker/dockerfile: title: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` description: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` links: - - title: - url: + - title: Understanding the image layers + url: https://docs.docker.com/guides/docker-concepts/building-images/understanding-image-layers/ + - title: Writing a Dockerfile + url: https://docs.docker.com/guides/docker-concepts/building-images/writing-a-dockerfile/ + - title: Build, tag, and publish an image + url: https://docs.docker.com/guides/docker-concepts/building-images/build-tag-and-publish-an-image/ + - title: Multi-stage builds + url: https://docs.docker.com/guides/docker-concepts/building-images/multi-stage-builds/ devops-docker/docker-commands: title: Ejecutar comandos básicos de Docker para gestionar el ciclo de vida de un contenedor e imagen e interactuar con contenedores description: Usar comandos como `docker build`, `docker run`, `docker ps`, `docker stop`, `docker rm`, `docker pull` y `docker push` links: - - title: - url: + - title: Docker CLI Reference + url: https://docs.docker.com/reference/cli/docker/ devops-container-cloud-services: title: Servicio de orquestación de contenedores From 4c8014bfcda9df12e7505ad1edb807e33653a65c Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 13:09:22 -0400 Subject: [PATCH 05/15] Update data.yml with devops heading --- learning-objectives/data.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/learning-objectives/data.yml b/learning-objectives/data.yml index f4dcb5996..b96b83e70 100644 --- a/learning-objectives/data.yml +++ b/learning-objectives/data.yml @@ -486,19 +486,18 @@ data-analytics: - analysis-report - analysis-presentation -devops-computing-cloud-services: - - concepts-cloud-infrastructure-virtualization - - setting-up-runtime-environment - - monitoring-application-virtual-machine - -devops-docker: - - docker-container-image - - dockerfile - - docker-commands - -devops-container-cloud-services: - - orchestration-system-components - - configure-container-task-definitions +devops: + - computing-cloud-services: + - concepts-cloud-infrastructure-virtualization + - setting-up-runtime-environment + - monitoring-application-virtual-machine + - docker: + - docker-container-image + - dockerfile + - docker-commands + - container-cloud-services: + - orchestration-system-components + - configure-container-task-definitions # New OAs since UXD006 agile-planning: From 6605bddb8911da985eb92ce6f6e23935669f07af Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 13:12:45 -0400 Subject: [PATCH 06/15] Update es.yml with devops title --- learning-objectives/intl/es.yml | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/learning-objectives/intl/es.yml b/learning-objectives/intl/es.yml index 3c6f23ce1..345203184 100644 --- a/learning-objectives/intl/es.yml +++ b/learning-objectives/intl/es.yml @@ -2003,11 +2003,14 @@ ai-prompting/open-ai-api: - title: "The chat completion object - API Reference - OpenAI API" url: https://platform.openai.com/docs/api-reference/chat/object -devops-computing-cloud-services: +devops: + title: DevOps + +devops/computing-cloud-services: title: Servicios de computación en la nube description: Servicios de computación en la nube como AWS EC2 y Azure VM -devops-computing-cloud-services/concepts-cloud-infrastructure-virtualization: +devops/computing-cloud-services/concepts-cloud-infrastructure-virtualization: title: Comprender los conceptos fundamentales de la infraestructura en la nube y la virtualización description: Describir los conceptos básicos de la infraestructura en la nube y cómo la virtualización permite la creación y gestión de máquinas virtuales links: @@ -2016,7 +2019,7 @@ devops-computing-cloud-services/concepts-cloud-infrastructure-virtualization: - title: Get started with Amazon EC2 url: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html -devops-computing-cloud-services/setting-up-runtime-environment: +devops/computing-cloud-services/setting-up-runtime-environment: title: Configurar el entorno de ejecución de una aplicación en una máquina virtual description: Instalar y configurar un sistema operativo y otros servicios esenciales en una máquina virtual para ejecutar una aplicación links: @@ -2027,18 +2030,18 @@ devops-computing-cloud-services/setting-up-runtime-environment: - title: Despliegue de API Java url: https://medium.com/@amitu2016/deploying-spring-boot-web-app-on-aws-using-ec2-and-s3-4db1d0f55c78 -devops-computing-cloud-services/monitoring-application-virtual-machine: +devops/computing-cloud-services/monitoring-application-virtual-machine: title: Monitorear la ejecución de una aplicación en una máquina virtual description: Utilizar herramientas de monitoreo para supervisar la ejecución de una aplicación en una máquina virtual links: - title: Monitor Amazon EC2 resources url: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring_ec2.html -devops-docker: +devops/docker: title: Docker description: Docker permite empaquetar una aplicación junto con todas sus dependencias (como bibliotecas, configuraciones y archivos necesarios) en una unidad estándar conocida como contenedor -devops-docker/docker-container-image: +devops/docker/docker-container-image: title: Explicar qué es Docker, Docker container y Docker image description: Explicar qué es Docker, Docker container y Docker image links: @@ -2049,7 +2052,7 @@ devops-docker/docker-container-image: - title: What is a registry? url: https://docs.docker.com/guides/docker-concepts/the-basics/what-is-a-registry/ -devops-docker/dockerfile: +devops/docker/dockerfile: title: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` description: Comprender y usar las intrucciones básicas de un Dockerfile para definir una Docker image, como `FROM`, `WORKDIR`, `COPY`, `RUN` y `EXPOSE` links: @@ -2062,36 +2065,36 @@ devops-docker/dockerfile: - title: Multi-stage builds url: https://docs.docker.com/guides/docker-concepts/building-images/multi-stage-builds/ -devops-docker/docker-commands: +devops/docker/docker-commands: title: Ejecutar comandos básicos de Docker para gestionar el ciclo de vida de un contenedor e imagen e interactuar con contenedores description: Usar comandos como `docker build`, `docker run`, `docker ps`, `docker stop`, `docker rm`, `docker pull` y `docker push` links: - title: Docker CLI Reference url: https://docs.docker.com/reference/cli/docker/ -devops-container-cloud-services: +devops/container-cloud-services: title: Servicio de orquestación de contenedores description: Servicios de orquestación de contenedores en la nube como AWS ECS y Azure Container Apps -devops-container-cloud-services/orchestration-system-components: +devops/container-cloud-services/orchestration-system-components: title: Describir los componentes clave de un sistema de orquestación, como clústeres, tareas, servicios y balanceadores de carga description: Describir los componentes clave de un sistema de orquestación, como clústeres, tareas, servicios y balanceadores de carga links: - title: url: -devops-container-cloud-services/configure-container-task-definitions: +devops/container-cloud-services/configure-container-task-definitions: title: Crear y configurar definiciones de contenedor y tareas que incluyan todos los componentes necesarios para ejecutar un aplicación, como imágenes Docker, variables de entorno, volúmenes y configuraciones de red description: Crear y configurar definiciones de contenedor y tareas que incluyan todos los componentes necesarios para ejecutar un aplicación, como imágenes Docker, variables de entorno, volúmenes y configuraciones de red links: - title: url: -devops-kubernetes: +devops/kubernetes: title: Kubernetes description: Kubernetes es una herramienta que facilita la gestión de aplicaciones contenedorizadas al automatizar el despliegue, el escalado y la recuperación ante fallos -devops-kubernetes/kubernetes-use-cases: +devops/kubernetes/kubernetes-use-cases: title: Explicar que es Kubernetes y describir sus casos de uso y las necesidades que soluciona description: Explicar que es Kubernetes y describir sus casos de uso y las necesidades que soluciona links: From 92e7a85337007f73411876e2d1d34a3663d3f179 Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 13:28:39 -0400 Subject: [PATCH 07/15] Rename README.MD to README.md --- projects/05-computing-service-deployment/{README.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename projects/05-computing-service-deployment/{README.MD => README.md} (100%) diff --git a/projects/05-computing-service-deployment/README.MD b/projects/05-computing-service-deployment/README.md similarity index 100% rename from projects/05-computing-service-deployment/README.MD rename to projects/05-computing-service-deployment/README.md From 0f94e02830b6079a36b17af8bf158b30bd0f6505 Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 13:29:03 -0400 Subject: [PATCH 08/15] Rename README.MD to README.md --- projects/05-container-service-deployment/{README.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename projects/05-container-service-deployment/{README.MD => README.md} (100%) diff --git a/projects/05-container-service-deployment/README.MD b/projects/05-container-service-deployment/README.md similarity index 100% rename from projects/05-container-service-deployment/README.MD rename to projects/05-container-service-deployment/README.md From 5d5ebd3735d86b17076ca7c2ff9ff63a9d7006eb Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 13:29:24 -0400 Subject: [PATCH 09/15] Rename README.MD to README.md --- projects/05-dockerfile-deployment/{README.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename projects/05-dockerfile-deployment/{README.MD => README.md} (100%) diff --git a/projects/05-dockerfile-deployment/README.MD b/projects/05-dockerfile-deployment/README.md similarity index 100% rename from projects/05-dockerfile-deployment/README.MD rename to projects/05-dockerfile-deployment/README.md From f717bd922f8a3b8e8591d9c6da7bb4e380ddf9b1 Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 16:17:54 -0400 Subject: [PATCH 10/15] mdlint Update README.md --- projects/05-dockerfile-deployment/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/projects/05-dockerfile-deployment/README.md b/projects/05-dockerfile-deployment/README.md index aaece88b0..77a00459e 100644 --- a/projects/05-dockerfile-deployment/README.md +++ b/projects/05-dockerfile-deployment/README.md @@ -76,7 +76,7 @@ lenguaje de programación que más te interese: Docker es una herramienta que se usa para crear, desplegar y ejecutar aplicaciones en contenedores. Por lo tanto es importante que aprendas a administrar contenedores. Tómate un tiempo -para familiarizarte con Docker. Puedes seguir el +para familiarizarte con Docker. Puedes seguir el [tutorial oficial de Docker](https://www.docker.com/101-tutorial/) o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas claras para las siguientes preguntas: @@ -102,8 +102,8 @@ claras para las siguientes preguntas: ### 2. Construye una imagen Docker con Dockerfile Una vez estes familiarizada con Docker, el siguiente paso es escribir -un Dockerfile para construir una imagen que empaquete tu API. Puedes seguir este -[tutorial](https://medium.com/@anshita.bhasin/a-step-by-step-guide-to-create-dockerfile-9e3744d38d11) +un Dockerfile para construir una imagen que empaquete tu API. +Puedes seguir este [tutorial](https://medium.com/@anshita.bhasin/a-step-by-step-guide-to-create-dockerfile-9e3744d38d11) o cualquier otro disponible en internet. Para escribir un `Dockerfile` adecuado que empaquete una aplicación, @@ -130,10 +130,10 @@ aplicación se ejecute correctamente? 10. ¿Necesitas realizar alguna configuración específica o ejecución de scripts antes de que tu aplicación esté lista? -Con ayuda de las respuestas a estas preguntas escribe un Dockerfile que empaquete -tu aplicación con todas sus dependencias, configure el entorno de trabajo y -exponga el puerto necesario, asegurando que la aplicación esté lista para -ejecutarse en un contenedor Docker. +Con ayuda de las respuestas a estas preguntas escribe un Dockerfile +que empaquete tu aplicación con todas sus dependencias, configure el +entorno de trabajo y exponga el puerto necesario, asegurando que la +aplicación esté lista para ejecutarse en un contenedor Docker. Luego construye la imagen Docker desde el Dockerfile (`docker build`) y ejecuta un contenedor basado en la imagen construida (`docker run`). From 5d24bdcae7baca6390dce2413da98780a91f8a04 Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 16:19:47 -0400 Subject: [PATCH 11/15] mdlint Update README.md --- .../05-container-service-deployment/README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/projects/05-container-service-deployment/README.md b/projects/05-container-service-deployment/README.md index 63d9c4f6d..c7c4503dc 100644 --- a/projects/05-container-service-deployment/README.md +++ b/projects/05-container-service-deployment/README.md @@ -75,8 +75,10 @@ programación en que esta implementada - Paso 1: Subir la imagen docker a un Registro de Contenedores (Amazon ECR) -- Paso 2: Desplegar la aplicación en Amazon ECS creando un cluster EC2, definiendo una tarea ECS y un servicio ECS. -- Paso 3: Configurar el acceso externo para acceder a tu API utilizando la URL pública proporcionada por AWS. +- Paso 2: Desplegar la aplicación en Amazon ECS creando un cluster EC2, + definiendo una tarea ECS y un servicio ECS. +- Paso 3: Configurar el acceso externo para acceder a tu API utilizando la + URL pública proporcionada por AWS. - Paso 4: Monitorizar y gestionar la aplicación ## 5. Paso a paso detallado para el despliegue en Amazon ECS @@ -92,7 +94,7 @@ tus aplicaciones en contenedores dentro del entorno de AWS. En este proyecto almacenaremos en Amazon ECR la imagen docker que hemos definido para empaquetar nuesta aplicación. Tómate un tiempo -para familiarizarte con ECR. Puedes seguir el +para familiarizarte con ECR. Puedes seguir el [tutorial oficial de ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas claras para las siguientes preguntas: @@ -111,19 +113,22 @@ aplicación en un repositorio de Amazon ECR. El siguiente paso es entonces desplegar la imagen docker en cluster de instancias EC2 usando Amazon ECS (Elastic Container Service). -Tómate un tiempo para familiarizarte con ECS. Puedes seguir el +Tómate un tiempo para familiarizarte con ECS. Puedes seguir el [workshop oficial de ECS](https://ecsworkshop.com/introduction/) o cualquier otro disponible en internet. Asegúrate que al final tengas respuestas claras para las siguientes preguntas: - [ ] ¿Cómo se crea un clúster en Amazon ECS? - [ ] ¿Qué es una tarea en ECS y cómo se configura? -- [ ] ¿Qué es un servicio en ECS y cómo garantiza que las tareas se mantengan en funcionamiento? +- [ ] ¿Qué es un servicio en ECS y cómo garantiza que las tareas + se mantengan en funcionamiento? - [ ] ¿Cómo se despliega un servicio en ECS? - [ ] ¿Qué es el autoescalado en ECS y cómo se configura? - [ ] ¿Cómo se integra ECS con otros servicios de AWS como ECR? -- [ ] ¿Cómo se realiza un despliegue de una nueva versión de una aplicación utilizando ECS? -- [ ] ¿Cómo solucionas problemas si tu aplicación en Amazon ECS no se está ejecutando correctamente? +- [ ] ¿Cómo se realiza un despliegue de una nueva versión de una aplicación + utilizando ECS? +- [ ] ¿Cómo solucionas problemas si tu aplicación en Amazon ECS no se está + ejecutando correctamente? Finalmente, usa ECS para desplegar la imagen docker de tu aplicacion creando un clúster, una tarea y un servicio. From d41e03fae3fb8e329e78bb6e22381cdcc0a08c1f Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 16:20:24 -0400 Subject: [PATCH 12/15] mdlint Update README.md --- projects/05-computing-service-deployment/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/05-computing-service-deployment/README.md b/projects/05-computing-service-deployment/README.md index d9bbbaf2b..ddd99b00b 100644 --- a/projects/05-computing-service-deployment/README.md +++ b/projects/05-computing-service-deployment/README.md @@ -89,7 +89,7 @@ lenguaje de programación que más te interese: Podemos seguir el siguiente paso a paso general para desplegar la Fleet Management API independientemente del lenguaje de programación en que esta implementada. - + - Paso 1: Crear una cuenta en el proveedor de infraestructura - Paso 2: Lanzar una máquina virtual - Paso 3: Configurar la máquina virtual From da4fd26f88ab8c0826d6e5f9634edebbcd4d2f42 Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 16:26:17 -0400 Subject: [PATCH 13/15] Update project.yml --- projects/05-computing-service-deployment/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/05-computing-service-deployment/project.yml b/projects/05-computing-service-deployment/project.yml index dc6d262b6..1644b23a3 100644 --- a/projects/05-computing-service-deployment/project.yml +++ b/projects/05-computing-service-deployment/project.yml @@ -2,4 +2,4 @@ track: web-dev tags: - featured learningObjectives: - - devops-computing-cloud-services + - devops/computing-cloud-services From e84bd9df793152d6795ae1c7940c950614b747b8 Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 16:26:52 -0400 Subject: [PATCH 14/15] Update project.yml --- projects/05-container-service-deployment/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/05-container-service-deployment/project.yml b/projects/05-container-service-deployment/project.yml index d9dee6967..2223cb455 100644 --- a/projects/05-container-service-deployment/project.yml +++ b/projects/05-container-service-deployment/project.yml @@ -2,4 +2,4 @@ track: web-dev tags: - featured learningObjectives: - - devops-container-cloud-services + - devops/container-cloud-services From f694a0f7fed527fa0e86d0a8cea617705503d5bd Mon Sep 17 00:00:00 2001 From: Ivy Feraco Date: Fri, 16 Aug 2024 16:27:18 -0400 Subject: [PATCH 15/15] Update project.yml --- projects/05-dockerfile-deployment/project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/05-dockerfile-deployment/project.yml b/projects/05-dockerfile-deployment/project.yml index 40c6ebdfc..81789a98f 100644 --- a/projects/05-dockerfile-deployment/project.yml +++ b/projects/05-dockerfile-deployment/project.yml @@ -2,4 +2,4 @@ track: web-dev tags: - featured learningObjectives: - - devops-docker + - devops/docker