{"id":19270167,"url":"https://github.com/iliangithub/proyecto_aws_webapp_paas-saas","last_synced_at":"2026-02-28T07:09:51.982Z","repository":{"id":260107262,"uuid":"878424239","full_name":"iliangithub/Proyecto_AWS_webAPP_PaaS-SaaS","owner":"iliangithub","description":"This GitHub project is part of the 'DevOps Beginners to Advanced' course on Udemy. Our previous AWS project, was about deploying a multitier webapp using: Memcached, MySQL, TomCat, Rabbit MQ, and a load balancer. Now we are rebuilding all this, with the purpose of using the AWS Services and Apps, like ElastiCache, Amazon MQ, RDS, Beanstalk","archived":false,"fork":false,"pushed_at":"2024-11-15T15:39:39.000Z","size":514,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-23T20:14:14.399Z","etag":null,"topics":["aws-amazonmq","aws-ec2","aws-elastic-beanstalk","aws-elasticache","aws-rds-mysql"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iliangithub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-25T11:17:57.000Z","updated_at":"2024-11-15T15:39:42.000Z","dependencies_parsed_at":"2024-11-15T16:37:44.179Z","dependency_job_id":null,"html_url":"https://github.com/iliangithub/Proyecto_AWS_webAPP_PaaS-SaaS","commit_stats":null,"previous_names":["iliangithub/proyecto_aws_webapp_paas-saas"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/iliangithub/Proyecto_AWS_webAPP_PaaS-SaaS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP_PaaS-SaaS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP_PaaS-SaaS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP_PaaS-SaaS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP_PaaS-SaaS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iliangithub","download_url":"https://codeload.github.com/iliangithub/Proyecto_AWS_webAPP_PaaS-SaaS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP_PaaS-SaaS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29927284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-amazonmq","aws-ec2","aws-elastic-beanstalk","aws-elasticache","aws-rds-mysql"],"created_at":"2024-11-09T20:23:38.204Z","updated_at":"2026-02-28T07:09:51.968Z","avatar_url":"https://github.com/iliangithub.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 0.0 Proyecto AWS webAPP2 PaaS \u0026 SaaS (\"epsilon\").\n\n\u003e[!IMPORTANT]\n\u003eVenimos de aquí:\n\u003e\n\u003ehttps://github.com/iliangithub/Proyecto_AWS_webAPP\n\u003e\n\nEn realidad, ya hemos terminado el proyecto \"delta\".\n\nEste proyecto, va a pasar de ser \"delta\" a ser **\"epsilon\"**.\n\nAhora, vamos a volver a hacerlo pero modificando ciertas cosas. Vamos a cambiar la arquitectura de los servicios para AWS Cloud. Con la idea de mejorar la agilidad.\n\n## 8.1 Escenario, nuevo proyecto \"epsilon\":\n\nDigamos que estamos trabajando en un proyecto, en donde los servicios corren en máquinas físicas/virtuales o incluso pues en la nube, como las instancias EC2, y tenemos varios servicios, como aplicaciones web, de red, DNS, DHCP, bases de datos.\n\nNecesitaríamos pues varios equipos distintos, uno para la parte de Cloud, un equipo de virtualización, uno de monitorización, administradores de sistemas, etc.\n\nEntonces, hay muchas operaciones, y es complicado manejar, consume mucho tiempo y dinero.\n\nPara ello, podemos utilizar la plataforma Cloud, pero en vez de IaaS, usaremos PaaS y SaaS. (Platform as a Service) y (Service as a Service).\n\nEntonces, en caso de AWS, no vamos a ir con instancias corrientes, usaremos, algunos servicios de AWS y podríamos escribir como codigo nuestra infraestructura IaaC.\n\nPaaS y SaaS son felxibles y fáciles de escalar.\n\nEntonces, en vez de utilizar instancias EC2 normales para instalar nuestros servicios, utilizaremos Beanstalk.\n\n\u003e [!TIP]\n\u003e Elastic Beanstalk, un servicio de administración de aplicaciones en la nube que facilita el despliegue y gestión de aplicaciones web sin tener que preocuparse por la infraestructura subyacente. \n\u003e\n\nBeanstalk tendrá un balanceador de carga y autoescalado, almacenamiento S3 para almacenar los artefactos, además del servidor APP.\n\nEn cuanto al Backend, para las base de datos, utilizaremos instancias RDS, vamos a utilizar Elastic Cache en vez de MemCached y Active MQ, en vez de RabbitMQ, el Route 53 como DNS y Cloud Front para \"content delivery network\".\n\n## 8.2 Objetivo:\n\n- Necesitamos una infraestructura flexible.\n- \"no upfront cost\", es decir, pagar por lo que usas, mientas lo usas.\n- IaaC\n- PaaS\n- SaaS\n\n![Proyecto “epsilon”](https://github.com/user-attachments/assets/8f459e02-a4a4-4275-a266-d982488d8d12)\n\nEntonces, el usuario accederá a nuestra URL, que será resuelta a un punto final desde Amazon Route 53.\n\nEl punto final será parte de Amazon CloudFront, una red de entrega de contenido, que almacenará en caché muchas cosas para servir a la audiencia global.\n\nDesde allí, la solicitud será redirigida al balanceador de carga de aplicaciones, que es parte de tu Elastic Beanstalk. El balanceador de carga de aplicaciones enviará la solicitud a la instancia de EC2, que está en un grupo de escalado automático. Aquí es donde estará ejecutándose nuestro servicio de aplicación Tomcat, y todo esto será parte de Elastic Beanstalk.\n\nTambién habrá alarmas de Amazon CloudWatch que monitorearán el grupo de escalado automático y escalarán hacia arriba o hacia abajo según sea necesario.\n\nHabrá un bucket donde se almacenarán los artefactos, y podremos desplegar nuestro artefacto más reciente simplemente haciendo clic en un botón.\n\nPor lo tanto, todo nuestro frontend será gestionado por Beanstalk. Para el backend, en lugar de RabbitMQ, estamos utilizando Amazon MQ.\n\nEn lugar de usar Memcached en la instancia de EC2, estamos usando ElastiCache.\n\nY en lugar de usar una base de datos que se ejecute en una instancia de EC2, vamos a utilizar Amazon RDS.\n\nAsí que el usuario accederá a un punto final.\n\nEse punto final será parte de Amazon CloudFront, que enviará la solicitud al balanceador de carga de aplicaciones en Beanstalk, el cual reenviará la solicitud a las instancias en el grupo de escalado automático.\n\nTodo esto será monitoreado por Amazon CloudWatch, que tendrá alarmas. Los artefactos se almacenarán en el bucket de S3.\n\nPara el backend,\n\nAccederá a Amazon MQ, ElastiCache y Amazon RDS Service.\n\nNuevamente, te recomiendo pausar el video y observar este diseño una vez más.\n\nVeamos ahora el flujo de ejecución.\n\nPrimero, obviamente iniciaremos sesión en nuestra cuenta de AWS. Crearemos un par de claves para nuestra instancia de Beanstalk, o Beanstalk lanzará una instancia de EC2, así que crearemos un par de claves, de modo que, en caso de que necesites iniciar sesión, puedas usar ese par de claves.\n\nCrearemos un grupo de seguridad para los servicios de backend: ElastiCache, RDS y ActiveMQ.\n\nLuego, crearemos RDS,\n\nElastiCache y Amazon ActiveMQ.\n\nDespués, crearemos el entorno de Elastic Beanstalk.\n\nLuego, actualizaremos nuestro grupo de seguridad del backend para permitir tráfico desde el grupo de seguridad de Beanstalk, de modo que cuando Beanstalk sea creado, también creará un grupo de seguridad para su instancia de EC2 y también para el balanceador de carga.\n\nPermitiremos tráfico desde el grupo de seguridad de la instancia de Beanstalk para acceder a nuestros servicios de backend, que están en el grupo de seguridad del backend.\n\nEstamos colocando todos nuestros servicios de backend en un grupo de seguridad, y necesitarán interactuar entre sí, por lo que también actualizaremos el grupo de seguridad del backend para permitir el tráfico interno.\n\nPara este momento, nuestros servicios de backend también estarán funcionando. RDS estará funcionando, y necesitaremos inicializar nuestra base de datos de RDS.\n\nAsí que lanzaremos una instancia de EC2.\n\nY desde allí haremos un inicio de sesión de MySQL en nuestro RDS y inicializaremos nuestra base de datos.\n\nSi seguiste nuestro proyecto anterior, sabrás que nuestra aplicación de perfil devuelve una página en /login, por lo que necesitamos cambiar la verificación de estado en Beanstalk.\n\nDe modo que cuando despleguemos nuestro artefacto, debería hacer una verificación de estado en /login.\n\nY también agregaremos un listener HTTPS en el puerto 443 a nuestro balanceador de carga elástico (ELB), que también será creado automáticamente por Beanstalk y será parte de tu entorno de Beanstalk.\n\nDespués, construiremos los artefactos a partir de nuestro código fuente con la información del backend.\n\nPara este momento, deberíamos tener el punto final de RDS, el punto final de Amazon MQ y el punto final de ElastiCache. Ingresaremos esta información en nuestro archivo de propiedades de la aplicación y construiremos el artefacto.\n\nLuego desplegaremos el artefacto en el entorno de Beanstalk.\n\nY crearemos una red de entrega de contenido utilizando Amazon CloudFront con un certificado SSL, por supuesto, para una conexión HTTPS.\n\nUna vez que tengamos esto listo, podemos actualizar nuestro balanceador de carga y el punto final en GoDaddy, o también podemos hacerlo en Amazon Route 53, en zonas DNS públicas.\n\nUna vez que todo esto esté listo, finalmente lo probaremos desde la URL.\n\nOK, ahora hagamos que esto suceda.\n\nAsí que si has terminado de ver la introducción, únete a mí en la consola de AWS.\n\n## 8.3 Crear las pares-clave y Grupos de Seguridad.\n\nA partir de ahora, voy a poner a modo de resumen; qué es, y cómo lo hecho, sin tantas capturas.\n\n### 8.3.1  Grupos de Seguridad.\n\nEn EC2 también.\n\n\u003e [!IMPORTANT]\n\u003e Si por casualidad, hemos borrado todos los grupos de seguridad, incluso el \"default\", para crearlo de nuevo, simplemente en acciones le damos a \"crear grupo por defecto\".\n\u003e \n\n- Name: `epsilon-rearch-backend-SG`\n- Descripción: `epsilon-rearch-backend-SG`\n- Inbound: NADA\n\nY LUEGO VAMOS A VOLVER A AÑADIRLE OTRA REGLA, (para permitir al acceso desde Beanstalk EC2 instance )\n\nInbound Rule.\n- Type: All traffic\n- Source: Custom, `epsilon-rearch-backend-SG`\n- Description: `Allow all traffic internally`\n\n\u003e [!IMPORTANT]\n\u003e Luego, cuando creemos el \"Beanstalk\" volveremos a editarlo también.\n\u003e Para añadirle otra regla.\n\u003e\n\n### 8.3.2 Crear las pares-clave.\n\nSería conveniente, crear un par-clave, para nuestra instancia \"beanstalk\", no es necesario imprescindible, iniciar sesión en la instancia \"Beanstalk\".\n\nNos vamos a EC2 y creamos el par de clave:\n\n- Name: `epsilon-bean-key`\n- File Format: .pem\n\ny la creamos. ![image](https://github.com/user-attachments/assets/3e9e16f8-f93e-4bc5-bff2-2fb19c2cd9c0)\n\n## 8.4 RDS\nVamos a la barra de búsqueda y buscamos RDS. Podríamos directante crear nuestra instancia DB, en el apartado del dashboard, \"DB instances\".\n\n![image](https://github.com/user-attachments/assets/2238182a-bb68-4d20-8c53-ccd487595d36)\n\n**No lo vamos a hacer. En la realidad, habrá situaciones en las que tenemos que cambiar algún parámetro de nuestra Base de Datos, RDS no te proporciona ningún acceso del estilo SSH, donde entramos y configuramos. Si queremos cambiar los parámetros de nuestra Base de datos, hay un concepto llamado \"parameter group\" en RDS.**\n\nEntonces, vamos a crear el \"parameter group\", para así cuando lo seleccionemos, cuando queramos, podamos hacer cambios a la Base de Datos y se verá reflejado pues en la instancia RDS..\nAntes de crear el RDS, vamos a crear el :\n- parameter group.\n- subnet group.\n\n### 8.4.1 Creación Parameter Group.\n\nEn el Dashboard, buscamos \"Parameter Group\" y le damos a \"create\".\n\n![image](https://github.com/user-attachments/assets/98ed9cf6-eef2-4e67-b779-fd8986283851)\n\n- Parameter Group Name: `epsilon-rds-parametgrp`\n- Description: `epsilon-rds-parametgrp`\n- Engine Type: `MySQL Community.`\n- Parameter Group Family: `MySQL8.0`\n- Type: `DB Parameter Group`\n\nY lo creamos. Si le damos al parameter group, podemos ver todo lo que podemos modificar.\n\n### 8.4.2 Creación Subnet Group.\n\nAhora es turno de los \"subnet group\". Es un grupo de subredes en una VPC (Virtual Private Cloud). Básicamente, es una red que está divida en otras redes más pequeñas llamadas pues subredes.\n\nCuando lancemos nuestra instancia RDS tenemos que seleccionar el \"subnet group\".\n\n\u003e[!TIP]\n\u003eCuando seleccionamos diferentes subredes en casos de producción, necesitamos crear pues nuestra propia, VPC en un \"subnetgroup\" para el RDS y seleccionamos pues esas subredes a la hora de lanzar la instancia RDS.\n\u003e\n\nVamos a crear el subnet group.\nCreate DB subnet group:\n- Nombre: `epsilon-rds-rearch-subgrp`\n- Descripción: `epsilon-rds-rearch-subgrp`\n- VPC: `aquí pues seleccionamos la VPC que hayamos creado, pero en nuestro caso, la default.`\n\nAdd Subnets:\n- Availability Zone: Seleccionamos todas las zonas `us-east1a ; us-east1b ; ... us-east-1f`\n- Subnets, seleccionamos todas las subredes de cada zona `us-east-1a --\u003e subnet-055a1... ; us-east-1f --\u003e subnet-01ed...`\n\nAlgunas zonas pueden tener varias \"subnets\".\n\n\u003e[!TIP]\n\u003eEn algunos casos de producción, la gente crea una \"subnet\" diferente para la Base de datos. Y entonces, puedes seleccionar esas subredes (las de antes), y llamarlo \"subnet group\". Se hacer por motivos de seguridad y tener más control sobre la Base de datos.\n\u003e\n\nY creamos. En esta subred, vamos a crear/correr nuestra instancia de Base de Datos.\n\n### 8.4.3 RDS creación de la instancia.\n\nNos vamos al Dashboard y la creamos.\n\nCrear base de datos.\n\nElegir un método de creación de base de datos:\n- Seleccionamos `standard create`\n\nOpciones del motor:\n- Tipo de motor: `MySQL`.\n- Edición: Comunidad de MySQL (seleccionado, no puedes cambiarlo)\n- `Mostrar solo versiones compatibles con las escrituras optimizadas de Amazon RDS` y `Mostrar solo las versiones compatibles con el clúster de base de datos multi-AZ` **deshabilitados**.\n- Engine version: `MySQL 8.0.39`.\n- `Enable RDS extended support` **deshabilitado**\n\nTemplates:\n- Templates: `Free Tier`.\n\nNos saltamos \"Availability and Durability\" y en Settings:\n- DB instance identifier: `epsilon-rds-rearch`\n- username: `admin`\n- Credentials management: `self managed`\n- **Marcamos** auto generate password.\n\nInstance configuration:\n- DB instance class: `Show instance classes that support Amazon RDS Optimized Writes` y `Include previous generation classes`, **deshabilitado**; `db.t4g-micro`\n  \nEn storage: \n- storage type: `general purpose SSD (gp3)` y `20 GB`\n- **DESPLEGAMOS EL:** Escalado automático de almacenamiento **DESMARCAMOS \"ENABLE STORAGE AUTOSCALING\"**.\n\nEn conectivity:\n- No se conecte a un recurso informático EC2.\n- Nube privada virtual (VPC): `La default`.\n- DB subnet group: `epsilon-rds-rearch-subgrp`.\n- public access \"No\".\n- VPC security Group (firewall): `choose existing`\n- Existing VPC security groups: `epsilon-rearch-backend-sg` **y quitamos la default.**\n- Availability zone `no preference`\n\nEl monitoring/supervisión deshabilitado.\n\nY por último, en \"Additional configuration\"\nInitial database name: `accounts`.\nDB parameter group: `epsilon-rds-parametgrp`\n\nCopia de seguridad:\n- **Backup deshabilitado**\n- encryption `habilitado`\n\nMantenimiento:\n\n- Habilitar actualización automática de versiones secundarias (**habilitado**).\n- Periodo de mantenimiento: **Sin preferencia**\n  \nProtección contra eliminación\n- Habilitar la protección contra la eliminación (**DESHABILITADO**)\n\n\u003e [!TIP]\n\u003e(Log exports, debería de estar habilitado, pero como no hemos habilitado el monitoring pues tenemos que dejarlo también deshabilitado, pues no nos sirve, básicamente va a los logs de CloudWatch).\n\u003e\n\nY lo creamos.\n\n\u003e[!IMPORTANT]\n\u003eNos aparecerá un PopUp, diciendo de crear un ElastiCache Cluster o un RDS Proxy, vamos a cerrarlo.\n\u003e\n\u003eArriba del todo nos aparecerá \"VIEW CREDENTIALS DETAILS\", pues hemos generado una contraseña del usuario de la Base de Datos, la necesitamos pues guardar/copiar.\n\u003e```\n\u003eeJmCwVwQjYRY22wRtftv\n\u003e```\n\u003eluego borraré la cuenta.\n\n\u003e[!IMPORTANT]\n\u003e En caso de haber perdido la contraseña, seleccionamos la BD y le damos a \"Modify\" y así generamos una nueva, pero claro, no podemos pues recuperar la antigua.\n\u003e\n\n![image](https://github.com/user-attachments/assets/fc8504e6-55f1-47bf-aa47-ef25979215af)\n\n## 8.5 ElastiCache.\n\nComo antes, lo buscamos en la barra de búsqueda.\n\nY la creación del ElastiCache, es muy similar al RDS. Tenemos que crear:\n- parameter group.\n- subnetgroup.\n\n### 8.5.1 Parameter Group, creación.\n\n- Nombre: `epsilon-rearch-cache-paragrp`\n- Descripción: `epsilon-rearch-cache paragrp`\n- Family: `memcached1.6`\n\nY lo creamos.\n\n### 8.5.2 Subnet Group, creación.\n\n- Nombre: `epsilon-rearch-cache-subgrp`\n- Descripción: `epsilon-rearch-cache-subgrp`\n- VPC ID: `la por defecto`\n\nTodas las subnets están seleccionadas. Lo creamos.\n\n### 8.5.3 ElastiCache, creación.\nAhora, nos volvemos al Dashboard y \"create cache\", create memcached cache.\n\n![image](https://github.com/user-attachments/assets/543038cc-34e1-4160-8bc9-1c71c42f9d6a)\n\n\u003e #### PASO 1. Configuración del clúster.\n\u003e- Design your own cache\n\u003e- Standard create\n\u003e\n\u003eUbicación\n\u003e- AWS cloud.\n\u003e\n\u003eInformación del clúster:\n\u003e- Name: `epsilon-rearch-cache`\n\u003e- Description: `epsilon-rearch-cache`.\n\u003e\n\u003eCluster settings \n\u003e - Engine version: `1.6.22`\n\u003e - port: `11211`\n\u003e - parameter group: `epsilon-reach-cache-paragrp`\n\u003e - node type: `cache.t2.micro`\n\u003e - number of nodes: 1\n\u003e\n\u003eSubnet group settings, (elija un grupo de subredes existente).\n\u003e - subnet groups: `epsilon-rearch-cache-subgrp`\n\u003e\n\u003eUbicación de zonas de disponibilidad:\n\u003e - availability zone: \"None preference\".\n\n\u003e #### PASO 2. Configuración avanzada.\n\u003e Le damos a siguiente y llegamos a Advanced Settings:\n\u003e Segurity, (LE DAMOS A MANAGE/ADMINISTRAR):\n\u003e - Security Group: `epsilon-rearch-backend-sg`\n\u003e - Maintenance: `No preference.`\n\nY lo creamos.\n\n## 8.6 Amazon MQ.\nLo mismo, buscamos en la barra de navegación \"Amazon MQ\", le damos a \"Get Started\".\n- Broker engine: Rabbit MQ\n- Deployment Mode: Simple-instance broker\n\nDetalles:\n- Broker Name: `epsilon-rearch-rabbitmq`\n- Broker instance type: `mq.t3.micro`\n\nAcceso a RabbitMQ:\n- Username: `rabbit`\n- Password: `BlueBunny983`\n\nDESPLEGAMOS Additional Settings. \n- Broker engine version: 3.13\n\nConfiguración de agentes\n- Crear una configuración nueva con los valores predeterminados\n\nMonitoreo.\n- CloudWatch **deshabilitado** (recordemos que esto en la vida real pues debería de ser así).\n\nRedes y seguridad.\n- Access type: private access.\n\nGrupos de seguridad:\n- Seleccionar grupos de seguridad existentes: `epsilon-rearch-backend-sg`\n\nLo creamos.\n\n![image](https://github.com/user-attachments/assets/318ba244-b84f-4f45-bd5a-1d41322f03a9)\n\n## 8.7 Inicializar la BD.\n### 8.7.1 Crear la instancia.\nNos falta solamente, como tenemos la BD creada, nos falta coger el esquema de la BD y aplicarlo en nuestra instancia RDS.\n\nPara ello, podemos hacer DOS cosas:\nHacerlo desde el MySQL Workbench CE:\n\n![image](https://github.com/user-attachments/assets/192ddc06-1b10-4bed-a876-0f2b8f8cf991)\n\no también podemos pues crear una instancia EC2, descargar MySQL y utilizarlo para importar la BD.\nVamos a hacerlo de esa forma.\n\nVoy al buscador de arriba y escribo EC2 y creo una instancia:\n(NO HAY QUE HACER UNA INSTANCIA CURRADA, LA VAMOS A BORRAR, LA CREAMOS SOLO PARA USAR LOS COMANDOS SQL)\n\nName: `mysqli_cliente`\nAMI: `Ubuntu`\nKey-pair: `el que creamos antes del bean`\n\n![image](https://github.com/user-attachments/assets/c739db1f-8810-4c9a-8b46-2e550fec87ad)\n\n![image](https://github.com/user-attachments/assets/a3b3e019-7a00-4bca-aa9a-51bc6c34c123)\n\nla creamos, no tocamos nada más.\n\n### 8.7.2 Modificar el grupo de seguridad.\n\nAhora, necesitamos dos cosas:\n- Los datos de la Base de datos RDS endpoint, el usuario y contraseña. Entonces, la información del RDS.\n- Permitir que el grupo de seguridad de esta insancia permita, comunicarse con el grupo de seguridad del RDS.\n\nAunque esté corriendo, vamos a copiar el ID del `mysql-client-sg`:\n\n![image](https://github.com/user-attachments/assets/523d073b-3f89-4f10-8678-85196ee4e962)\n\nvamos al backend-sg y creamos una regla de entrada:\n\nMySQL /Aurora ; Custom ; sg-082ba0c0d241bf36b\n\nHabilitado desde el origen pues del cliente MySQL, para eso hemos copiado el ID.\n\n### 8.7.3 YA TENEMOS LOS DATOS RDS, DEL USER Y PASS... Vamos a conectarnos e inicializarla.\n\nNos conectamos por ssh, IP pública + clave:\n\n```\nssh -i \"epsilon-bean-key.pem\" ubuntu@ec2-54-157-166-106.compute-1.amazonaws.com\n```\n\n```\nsudo -i\n```\n\n```\napt update \u0026\u0026 apt install mysql-client git -y\n```\n\n```\ngit clone https://github.com/hkhcoder/vprofile-project.git\n```\nY lo tienes descargado en el directorio en el que te encuentres.\n\nHacemos un cd.\n\n```\ncd vprofile-project/\n```\n\n```\ngit checkout awsrefactor\n```\n\nNecesitamos saber cual es el ID o el enlace para el RDS:\n\n![image](https://github.com/user-attachments/assets/cc911f0d-6013-467d-b705-be15afc22d44)\n\n```\nmysql -h epsilon-rds-rearch.crmqiuq428z2.us-east-1.rds.amazonaws.com -u admin -peJmCwVwQjYRY22wRtftv accounts \u003c src/main/resources/db_backup.sql\n```\n\nLa constraseña viene en el apartado 8.4.3 al final del todo.\n\nSi hacemos un `SHOW tables;`\n\n![image](https://github.com/user-attachments/assets/492cb849-3b43-4ef9-afb6-a49a5003455a)\n\nSi nos da este resultado, vamos a eliminar pues la instancia.\nTodo esto lo hacemos, solo porque la base de datos RDS es privada, y necesitamos pues estar en la misma red.\n\n## 8.8 Amazon Elastic Beanstalk.\n\nVamos a recordar por un momento en \"delta\", cuando teníamos la instancia TomCat.\n- Creamos el grupo de seguridad y las par-claves.\n- Lanzamos la instancia e instalamos TomCat.\n- Creamos un \"Target group\", load balancer y todo bien, una AMI... etc, etc...\n\nEntonces, **Cuando creamos un \"beanstalk enviroment\", seleccionamos TomCat y pues nos proporciona todo lo anterior.** Un Autoscaling group, AMI, S3 bucket for the artifact, CloudWatch monitoring Logs, y es muy fácil cambiar los ajustes cuando quieras y el despliegue es muy fácil.\n\nLo primero es crear roles IAM para Beanstalk.\n\n### 8.8.1 IAM, crear rol.\n\nEn la barra de navegació buscamos IAM:\n\n- Tipo de entidad de confianza: `Servicio de AWS`.\n- Servicio o caso de uso: `EC2`\n- Caso de uso: `EC2`\n\nAgregar permisos:\n- AdministratorAccess-AWSElasticBeanstalk\n- AWSElasticBeanstalkCustomPlatformforEC2Role\n- AWSElasticBeanstalkRoleSNS\n- AWSElasticBeanstalkWebTier\n\nDetalles del rol:\n- Name: `epsilon-rearch-beanstalk-role`\n- Description: `epsilon-rearch-beanstalk-role`\n\n![image](https://github.com/user-attachments/assets/deef5304-80af-41c3-a543-2833c4527d22)\n\n### 8.8.2 Beanstalk, creación.\nBuscamos en la barra de navegación, \"Elastic BeanStalk\".\n\nLe damos a **Crear Aplicación**.\n\n#### PASO 1. Configuración del entorno.\n\n\u003e \n\u003e - Nivel de entorno: `Entorno de servidor web`\n\u003e\n\u003e Información de la aplicación:\n\u003e - Nombre:\n\u003e   ```\n\u003e   epsilon-rearch-beanapp\n\u003e   ```\n\u003e\n\u003eInformación del entorno:\n\u003e - Nombre del entorno:\n\u003e  ```\n\u003e   Epsilon-rearch-beanapp-prod\n\u003e  ```\n\u003e  \n\u003e- Dominio:\n\u003e  ```\n\u003e  epsilonrearch\n\u003e  ```\n\u003e  (tiene que ser único)\n\u003e\n\u003e Plataforma\n\u003e- Tipo de plataforma: `Plataforma administrada.`\n\u003e- Plataforma: `TomCat`\n\u003e- Ramificación de la plataforma: `Tomcat 10 with Correto 21 running...`\n\u003e- Versión: `5.3.3`\n\u003e\n\u003eCódigo de aplicación. (luego vamos a importar la página que tenemos)\n\u003e- Aplicación de ejemplo.\n\u003e\n\u003eValores preestablecidos\n\u003e- Configuración personalizada\n\u003e  \n\n#### PASO 2. Configuración del acceso al servicio.\n\n\u003e\n\u003eAcceso al Servicio:\n\u003e- Rol de servicio: `Crear y utilizar un nuevo rol de servicio`\n\u003e- Nombre del rol de servicio: \"el que está por defecto\" `aws-elasticbeanstalk-service-role`\n\u003e- EC2 key pair: `epsilon-bean-key`\n\u003e- EC2 perfil de instancia: `epsilon-rearch-beanstalk-role`\n**EL ROL QUE CREAMOS JUSTO EN EL 8.8.1**\n\n\u003e [!WARNING]\n\u003e Primero que nada, abre una ventana nueva con el AWS, vete a IAM \u003e Roles, busca si NO ESTÁ CREADO DE ANTES EL ROL: `aws-elasticbeanstalk-service-role` si está creado de antes, bórralo, y continúa.\n\u003e \n\n#### PASO 3. Configuración del acceso al servicio.\n\n\u003eVPC.\n\u003e- VPC: `la default`\n\u003e- Public IP address (**ACTIVATED**)\n\u003e- Elegimos todas las subredes de instancia.\n\u003e- Pero no marcamos ninguna en: \"Elegir subredes de base de datos\"\n\u003e- Añadimos etiqueta, `Project` `Epsilon`\n\n#### PASO 4. Configuración del escalado y del tráfico de instancias - opcional\n\n\u003e**Instancias**\n\u003e - Tipo de volumen raíz: `(Valor predeterminado del contenedor)` voy a probar también el `Uso general 3 (SSD)`.\n\u003e - Tamaño, IOPS, Rendimiento, es algo que no puedo modificar, si selecciono el predeterminado, pero si uso el general 3, si puedo, pero de todas formas, TAMPOCO voy a modificar nada.\n\n\u003e[!WARNING]\n\u003e **28 de octubre de 2024**\n\u003e\n\u003eEfectivamente, hay que usar el \"Uso general 3 (SSD), para que funcione.\n\n\u003e **Monitoreo de Amazon CloudWatch**\n\u003e - 5 minutos.\n\u003e\n\u003e **Servicio de metadatos de insancia (IMDS).**\n\u003e - Desactivada (ACTIVADO, CHECKED)\n\u003e\n\u003e **Grupos de seguridad de EC2.**\n\u003e - No añadimos ni tocamos nada.\n\u003e   \n\u003e **Capacidad.**\n\u003eGrupo de escalado automático\n\u003e- Tipo de entorno: `Equilibrio de carga.`\n\u003e- Instancias: `2Mín.` `4Máx.`\n\u003e- Composición de la flota: `Instancias bajo demanda`\n\u003e  \n\u003e- Arquitectura: x86_64\n\u003e  \n\u003e- Tipo de instancia: `t2.micro`\n\u003e\n\u003e**Desencadenadores de escalado.**\n\u003e- Métrica: `NetworkOut`\n\u003e **NO VAMOS A PONER AHÍ EL GRUPO DE SEGURIDAD DE EC2**\n\u003e\n\u003e **Configuración de red del equilibrador de carga.**\n\u003e - Visibilidad: `Público.`\n\u003e\n\u003e **Subredes del equilibrador de carga**\n\u003e (Seleccionamos todos)\n\u003e\n\u003e**Tipo de equilibrador de carga**\n\u003e- Equilibrador de carga de aplicación\n\u003e- Dedicated\n\u003e\n\u003e**Agentes de escucha**\n\u003e- Los dejamos por defecto.\n\u003e\n\u003e**Procesos**\n\u003e- Añadimos un proceso:\n\u003e  \n\u003e![image](https://github.com/user-attachments/assets/b4326a12-b3cb-47be-93f3-8c5b732862a5)\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/0a789eed-b5a3-4c7c-b758-cce200d3a290)\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/d68a10f8-4214-4d93-b5fe-113d388e0652)\n\u003e\n\u003e **Reglas** y **Acceso a los archivos de registro** `lo dejamos por defecto`\n\u003e\n#### PASO 5. Configuración de actualizaciones, monitoreo y registros.\n\n\u003e **Monitoreo**, **Actualizaciones administradas de la plataforma** y **Notificaciones por correo electrónico** `TODO POR DEFECTO`.\n\u003e \n\u003e **Actualizaciones e implementaciones continuas**\n\u003e - Política de implementación: `Continuo/Roling.`\n\u003e - Tipo de tamaño de lote: `Porcentaje.`\n\u003e\n\u003ey ya en teoría está todo, creamos el beanstalk y si vemos el enlace:\n\n![image](https://github.com/user-attachments/assets/5220420e-47fe-40a1-b599-b2382b69c40a)\n\n\u003e[!IMPORTANT]\n\u003eMe da error:\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/78fd74ca-6229-46d8-b0bd-bd51fd8a580a)\n\u003e\n\u003eAhora, estoy viendo este error:\n\u003e![image](https://github.com/user-attachments/assets/43bdf66b-e7fd-48cc-967f-fe7d19d6e10a)\n\u003e\n\u003eEl profesor, ha dicho que puede ser este:\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/bb49a054-658c-48dd-9e15-7feec89be353)\n\u003e\n\n\u003e [!IMPORTANT]\n\u003e New accounts only support launch templates\nStarting on October 1, 2024, Amazon EC2 Auto Scaling will no longer support the creation of launch configurations for new accounts. Existing environments will not be impacted. For more information about other situations that are impacted, including temporary option settings required for new accounts, refer to Launch templates  in the Elastic Beanstalk Developer Guide.\n\u003e\n\u003e https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-launch-templates.html\n\u003e\n\n### 8.8.3 Beanstalk. Resultado final del Beanstalk:\n\nEl estado **TIENE QUE SER \"OK\", no Unknown u otra cosa**.\n\n![image](https://github.com/user-attachments/assets/e6ec8281-d96b-45b1-8d90-9b9aaa0ee1d1)\n\nY además, los eventos tiene que estar todos bien, nada en rojo:\n\n![image](https://github.com/user-attachments/assets/e0d94756-2e4b-403d-9653-865c16a8ae12)\n\nSi vuelvo a acceder desde el enlace:\n\n![image](https://github.com/user-attachments/assets/337e1686-37a7-4fdc-8806-64bb08f129dc)\n\n## 8.9 Hacer Update al grupo de Seguridad y ELB.\n\nAhora, necesitamos que el grupo de seguridad del Backend (ElastiCache, Amazon MQ y Amazon RDS) permita conexión desde el grupo de seguridad de BeanStalk.\n\nNos vamos al EC2 y tiene que haber creado 1 o varias instancias (dependiendo de las que le hemos puesto) para el Balanceador de Carga.\n\n![image](https://github.com/user-attachments/assets/440d7c25-400e-431e-84bb-eb47a4b7a2ae)\n\n![image](https://github.com/user-attachments/assets/bd9972e1-5560-45e2-bfbf-ed41c09f4996)\n\nY voy a copiar el ID:\n```\nsg-05115073f7b066783\n```\n\nAhora vamos a Grupos de Seguridad, y voy a editar el `epsilon-rearch-backend-sg`.\n\n![image](https://github.com/user-attachments/assets/a0282cd1-2cb3-42e7-81ec-3168596504f7)\n\n## 8.10 Construir y desplegar el artefacto.\n\nComo tal podríamos subirlo directamente al enviroment, es decir, nos vamos a Elastic Beanstalk, Enviroments:\n\n![image](https://github.com/user-attachments/assets/4c12b4f2-e223-4b22-a481-9af43894cff4)\n\n![image](https://github.com/user-attachments/assets/f1fab957-c795-4e70-b585-03d7c620533f)\n\nPrimero tengo que construir mi artefacto. Y necesitamos asegurarnos que nuestro código contiene la información de los servicios de Backend.\n\nPrimero necesito el EndPoint del RDS (Punto de enlace):\n```\nepsilon-rds-rearch.crmqiuq428z2.us-east-1.rds.amazonaws.com\n```\nAhora el del Amazon MQ:\nAMQP:\n```\namqps://b-4220e03a-379a-4552-9c14-b8cd4ecb584b.mq.us-east-1.amazonaws.com:5671\n```\nAmazon ElastiCache:\nPunto de enlace de configuración:\n```\nepsilon-rearch-cache.xvc3zj.cfg.use1.cache.amazonaws.com:11211\n```\n\nY ahora también el enlace al proyecto.\n```\nhttps://github.com/hkhcoder/vprofile-project.git\n```\n\n\n![image](https://github.com/user-attachments/assets/927e3835-689c-4d31-900d-c7aad7c2d2c2)\n\n\nVoy a abrir el VSCode.\n\n![image](https://github.com/user-attachments/assets/2bdaa7d9-f620-46db-8c33-81758eb76a7c)\n\ny me pedirá escoger una carpeta en donde voy a clonar el repositorio:\n\n![image](https://github.com/user-attachments/assets/3cf047a3-93d4-48f1-92b2-6f7d7ead2508)\n\nAhora voy a escoger la rama:\n\n![image](https://github.com/user-attachments/assets/88b309aa-f185-4aaf-a97c-c0f166240db5)\n\n![image](https://github.com/user-attachments/assets/446de253-2392-4f97-82b8-0bd3bef7bd3c)\n\nVamos a modificar estas cosas por, (teniendo en cuenta de que estamos en la Rama: \"awsrefactor\").\n\nNos debería quedar algo así:\n\n```\n#JDBC Configutation for Database Connection\njdbc.driverClassName=com.mysql.cj.jdbc.Driver\njdbc.url=jdbc:mysql://epsilon-rds-rearch.crmqiuq428z2.us-east-1.rds.amazonaws.com:3306/accounts?useUnicode=true\u0026characterEncoding=UTF-8\u0026zeroDateTimeBehavior=convertToNull\njdbc.username=admin\njdbc.password=eJmCwVwQjYRY22wRtftv\n\n#Memcached Configuration For Active and StandBy Host\n#For Active Host\nmemcached.active.host=epsilon-rearch-cache.xvc3zj.cfg.use1.cache.amazonaws.com:11211\nmemcached.active.port=11211\n#For StandBy Host\nmemcached.standBy.host=127.0.0.2\nmemcached.standBy.port=11211\n\n#RabbitMq Configuration\nrabbitmq.address=amqps://b-4220e03a-379a-4552-9c14-b8cd4ecb584b.mq.us-east-1.amazonaws.com:5671\nrabbitmq.port=5671\nrabbitmq.username=test\nrabbitmq.password=test\n\n#Elasticesearch Configuration\nelasticsearch.host=localhost\nelasticsearch.port=9300\nelasticsearch.cluster=rabbit\nelasticsearch.node=BlueBunny983\n```\n\nGuardamos el archivo y pulsamos CTRL + SHIFT + P.\nY buscamos `select default terminal` y seleccionamos GitBash, abrimos la terminal.\n\n`mvn -version`\n\n![image](https://github.com/user-attachments/assets/4e3f527e-332d-4a7f-b684-a7286d9f30ac)\n\nTenemos que usar:\n- La versión de Maven `3.9.9`\n- La Java `17.0.12` o superior.\n\nPara ello:\n\n- ```\n  choco install corretto17jdk -y\n  ```\nSi hago un `mvn -version`.\n\n![image](https://github.com/user-attachments/assets/4637340f-bafb-429f-96d0-93c8d35b8f4a)\n\nAhora simplemente hacemos un:\n- ```\n  mvn install\n  ```\nY aquí tienemos ya el artefacto:\n\n![image](https://github.com/user-attachments/assets/ff9661b4-0af5-4da1-ae5f-7b3842ce1803)\n\nMe voy a Beanstalk y lo subo:\n\n![image](https://github.com/user-attachments/assets/194ee6ab-0c7c-46ac-837a-307e11839067)\n\n![image](https://github.com/user-attachments/assets/5afd0b69-64a0-465a-8064-63ac97ce8781)\n\nSeleccionamos el .war y la versión será:\n\n![image](https://github.com/user-attachments/assets/d8681254-1510-4ff7-bedd-51acba8864c5)\n\nComo podemos comprobar, luego tras esperar un rato de que se haya actualizado/desplegado, podemos acceder vía Web:\n\n![image](https://github.com/user-attachments/assets/ae8c0ac1-4e9d-4119-8dde-b1f957ee8cbe)\n\n\u003e[!IMPORTANT]\n\u003e Para iniciar sesión:\n\u003e\n\u003e - user:`admin_vp`\n\u003e - password:`admin_vp`\n\u003e\n\u003eSi me da este error, es porque la BD no tiene los datos:\n\u003e![image](https://github.com/user-attachments/assets/2442226d-a6c2-45c6-8346-9a255a044b30)\n\u003e\n\u003e Y tengo que volver a hacer lo de la instancia MySQL para meter los datos.\n\u003e\n\nY este es el resultado de lo demás:\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filiangithub%2Fproyecto_aws_webapp_paas-saas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filiangithub%2Fproyecto_aws_webapp_paas-saas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filiangithub%2Fproyecto_aws_webapp_paas-saas/lists"}