{"id":17439391,"url":"https://github.com/iliangithub/Proyecto_AWS_webAPP","last_synced_at":"2025-03-01T14:31:07.067Z","repository":{"id":257844652,"uuid":"872607401","full_name":"iliangithub/Proyecto_AWS_webAPP","owner":"iliangithub","description":"This GitHub project is part of the 'DevOps Beginners to Advanced' course on Udemy. As in previous projects, we have created a multitier web application LOCALLY (using Vagrant), and now, we are going to migrate it to the cloud using AWS and the tools it offers. We will use the \"Lift and Shift\" strategy for this migration. After this, PaaS and SaaS.","archived":false,"fork":false,"pushed_at":"2024-10-25T11:21:40.000Z","size":495,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-25T20:08:49.949Z","etag":null,"topics":["aws","aws-asg","aws-ec2","aws-elb","aws-iam","aws-route53","aws-s3","iaas","jdk","mariadb-server","maven","memcached","paas","rabbitmq","saas","tomcat10"],"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-14T18:27:37.000Z","updated_at":"2024-10-25T11:21:43.000Z","dependencies_parsed_at":"2024-10-25T14:03:35.247Z","dependency_job_id":null,"html_url":"https://github.com/iliangithub/Proyecto_AWS_webAPP","commit_stats":{"total_commits":119,"total_committers":1,"mean_commits":119.0,"dds":0.0,"last_synced_commit":"5ddee999b8afd4d4a0d8cafd9e9f90a5cbb5551c"},"previous_names":["iliangithub/proyecto_aws_2"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iliangithub%2FProyecto_AWS_webAPP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iliangithub","download_url":"https://codeload.github.com/iliangithub/Proyecto_AWS_webAPP/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241377883,"owners_count":19953182,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","aws-asg","aws-ec2","aws-elb","aws-iam","aws-route53","aws-s3","iaas","jdk","mariadb-server","maven","memcached","paas","rabbitmq","saas","tomcat10"],"created_at":"2024-10-17T13:07:19.314Z","updated_at":"2025-03-01T14:31:07.053Z","avatar_url":"https://github.com/iliangithub.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 0.0 Proyecto Multi-Tier web APP (\"delta\")(IaaS).\nEl proyecto, se llama \"delta\", utiliza una estrategia para migrar los datos a la nube **lift\u0026shift**, el \"workload\" o la carga de trabajo o conjunto de aplicaciones, procesos; es decir, el conjunto de recursos o sistemas que son trasladados a la nube sin modificar su arquitectura o funcionamiento. \n\nY transladado en AWS Cloud.\n\n\u003e [!TIP]\n\u003e #### ¿Qué es Lift and Shift?\n\u003e https://cloud.google.com/learn/cloud-migration?hl=es\n\u003e \n\u003e La **estrategia de \"Lift and Shift\"** es un enfoque común en la migración a la nube, donde las aplicaciones y servicios se trasladan desde un entorno local (on-premises) o de un proveedor de nube a otro sin realizar cambios significativos en su arquitectura o código.\n\u003e\n\u003e**Características principales:**\n\u003e- **Sin modificación del código**: En lugar de rediseñar o refactorizar la aplicación para aprovechar las capacidades específicas de la nube, simplemente se mueve tal como está.\n\u003e- **Migración rápida**: Esta estrategia es más rápida que otras porque no implica una reescritura importante de la aplicación.\n\u003e- **Reducción de costos iniciales**: Puede ser menos costoso al inicio, ya que no requiere una inversión significativa en desarrollo o reingeniería de la aplicación.\n\u003e- **Uso de infraestructura como servicio (IaaS)**: Normalmente, en lugar de utilizar servicios nativos de la nube (como PaaS o SaaS), las instancias o máquinas virtuales de la aplicación se migran a una infraestructura virtualizada similar (como EC2 en AWS).\n\u003e\n\u003e**Ventajas:**\n\u003e- **Simplicidad**: Es una opción sencilla y rápida para mover aplicaciones a la nube.\n\u003e- **Menor riesgo**: Como no se cambia la aplicación, el riesgo de introducir errores es menor.\n\u003e- **Continuidad**: El enfoque garantiza que las aplicaciones se sigan ejecutando de la misma manera, por lo que no hay grandes interrupciones para los usuarios.\n\u003e\n\u003e **Desventajas:**\n\u003e- **No se optimiza para la nube**: La aplicación no se beneficia completamente de las capacidades nativas de la nube (como escalabilidad automática, optimización de costos, etc.).\n\u003e- **Costos a largo plazo**: Aunque es más barato inicialmente, puede ser más costoso con el tiempo debido a la falta de optimización.\n\u003e- **Rendimiento limitado**: Las aplicaciones no se ajustan para aprovechar las optimizaciones en rendimiento y recursos que ofrecen los servicios en la nube.\n\u003e\n\u003e **¿Cuándo utilizar \"Lift and Shift\"?**\nEs una buena opción si quieres migrar rápidamente sin modificar tus aplicaciones o si el tiempo y el presupuesto son limitados. También se utiliza cuando una organización quiere hacer la transición a la nube de forma progresiva, con la idea de optimizar las aplicaciones después.\n\u003e\n\nEstamos hablando de un proyecto \"delta\", que va a ser un multitier web application stack o también **pila de aplicación web de múltiples capas**\n\nEs un diseño arquitectónico que organiza una aplicación en varias capas o niveles, donde cada capa cumple una función específica. Este modelo ayuda a separar las responsabilidades dentro de la aplicación, facilitando la escalabilidad, el mantenimiento y la flexibilidad.\n\nHosteamos y lo ejecutaremos en AWS, **para producción.**\n\n#### El escenario:\n\nTenemos servicios de app que está corriendo o son ejecutados en maquinas virtuales o físicas, servicios de base de datos; Postgre, Oracle, aplicaciones como; TomCat, LAMP stack y servicios DNS.\n\nTenemos este Workload, todos estos servidores corriendo de forma local, almacenar todo de forma local pues supone costes y no está automatizado, perdemos tiempo. Es decir, pagamos por la infraestructura como servicio, realmente pagamos del AWS pues la infraestructura, los procesadores, la RAM. IaaS. Es escalable, reducir o aumentar para reducir costes y rendimiento o aumentar el rendimiento pero también aumentar los costes y también podemos autimatizar.\n\nUtilizamos evidengemente AWS Cloud Computing.\n- Utilizaremos las instancias EC2, que serán nuestras máquinas virtuales, para nuestro TomCat, RabbitMQ, MemCache y MySQL.\n- ELB para hacer un balanceador de carga, es decir, remplazaremos el Nginx como nuestro balanceador de cargas, ya no lo vamos a utilizar.\n- El servicio de autoescalado, que automáticamente escalará o reducirá, según nuestras necesidades, que controlará nuestros recursos y nuestros costes.\n- Y como almacenamiento, utilizaré el S3 y el EFS\n- Por último, Route 53, para nuestro servicio DNS privado.\n- También otros servicios como IAM, ACM o EBS.\n\nentonces, queremos que sea flexible, escalable, e ir pagando de poco a poco por lo que vamos utilizando. Y también queremos automatización de la infra, IaaC.\n\n## 0.1 El diseño arquitectura:\n### 0.1.1 Resumen técnico, rápido:\n\n#### Security Group:\n\n| NAME: |\n|---|\n| delta-ELB-SG |\n| delta-TomCat-APP-SG |\n| delta-Backend-SG |\n\n| REGLAS DE ENTRADA: delta-ELB-SG | |\n|---|---|\n| http: 80 | from: 0.0.0.0 /0 |\n| https: 443 | from: 0.0.0.0 /0 |\n\n| REGLAS DE ENTRADA: delta-TomCat-APP-SG | |\n|---|---|\n| ssh: 22 | from: My IP |\n| http: 8080 | from: My IP |\n| https: 443 | from: delta-ELB-SG |\n\n| REGLAS DE ENTRADA: delta-Backend-SG | |\n|---|---|\n| ssh: 22 | from: My IP |\n| SQL/Aurora: 3306 | from:  delta-TomCat-APP-SG |\n| TCP personalizado: 11211 | from:  delta-TomCat-APP-SG |\n| TCP personalizado: 5672 | from:  delta-TomCat-APP-SG |\n| Todo el tráfico | from:  delta-Backend-SG **(sí mismo)** |\n\n\u003e [!TIP]\n\u003eEsta última regla, primero se crea el SG, y luego otra vez vuelves a editarlo para crear esa última regla de entrada del Backend-SG.\n\u003e\n\n#### KEY PAIR:\n\n| NAME: | TIPO DE PAR-CLAVE: | FORMATO |\n|---|---|---|\n| delta-parclave-produccion | RSA | .pem |\n\n#### S3 KEY-ACCESS (Para acceder desde el CLI, user S3_admin):\nPrimero tienes que crear el usuario S3_admin. **(APARTADO 5.2).**\n\n| CASO DE USO: | Establecer el valor de etiqueta de descripción: |\n|---|---|\n| Interfaz de comandos CLI| (nada) |\n\n#### EC2 Instances:\n\n| NAME: | SECURITY GROUP: | KEY-PAIR: | AMI: | TYPE: |\n|---|---|---|---|---|\n| delta-TomCat-app01 | delta-TomCat-APP-SG | delta-parclave-produccion | Ubuntu 24.04 | t2.micro |\n| delta-rmq01 | delta-Backend-SG | delta-parclave-produccion | Amazon | t2.micro |\n| delta-mc01 | delta-Backend-SG | delta-parclave-produccion | Amazon  | t2.micro |\n| delta-db01 | delta-Backend-SG | delta-parclave-produccion | Amazon | t2.micro |\n\n#### ELB:\n\n| TIPO: | NAME: | ZONAS DE DISPONIBILIDAD | SECURITY GROUP: |\n|---|---|---|---|\n| Balanceador de carga de aplicaciones | delta-produccion-ELB | Todas | delta-ELB-SG |\n\n\n#### Auto Scaling Group:\n\n- AMI de la instancia (app01).\n- La plantilla de lanzamiento de la instancia.\n- Grupo de autoescalado.\n  \nefs s3\n\n#### EBS, para almacenar las instancias.\n\n#### S3, para almacenar el artefacto, construido por Maven.\n\namazon certificate mana\n\n#### Route 53, Servidor DNS\n- Zona: delta.es\n- Registro de la Zona: db01.delta.es\n- Registro de la Zona: rmq01.delta.es\n- Registro de la Zona: mc01.delta.es\n\n### 0.1.2 La Arquitectura, visual:\n\n![Proyecto “delta”](https://github.com/user-attachments/assets/6b1bc344-ca17-44de-b937-97203a8cda37)\n\n### 0.1.3 Explicación de la Arquitectura:\nNuestros usuarios, van a acceder al sitio web, utilizando una URL y esa URL, va a apuntar al balanceador de carga.\n\n\u003e[!IMPORTANT]\n\u003e\n\u003e - La URL puede ser una URL de verdad, con un nombre de dominio de verdad, comprado.\n\u003e   (NECESITAMOS USAR HTTPS, 443, PAGAR EL DOMINIO).\n\u003e   \n\u003e - O podemos, simplemente usar el **nombre de dominio** del **Balanceador de carga ELB**\n\u003e   (NECESITAMOS USAR HTTP, 80, NO PAGAR NINGÚN DOMINIO).\n\nSi utilizamos, https, y habrá un certificado que será respaldado por el ACM de amazon (Amazon Certificate Manager).\n\nY si no, pues eso, simplemente accederemos desde el nombre de dominio del ELB.\n\nEl balanceador de carga, va a estar en un Grupo de Seguridad (Firewall) y solo aceptará peticiones https, solo tráfico https o también peticiones http, sólo tráfico http.\n\n(En mi caso, he puesto las dos reglas, que acepte los dos tipos).\n\nEntonces, el balanceador carga, mandará la petición a la instancia `app01` (TomCat), este TomCat, en realidad, tendrá varias instancias o puede tener varias, y serán pues manejadas por el grupo de autoescalado. \n\nAl **principio crearemos SÓLO UNA INSTANCIA**, a raíz de esa, crearemos una AMI, la plantilla y **AL FINAL** pues el Grupo de Escalado, ASG.\n\nEntonces, dependiendo del tráfico y las peticiones y recursos, pues escalará o reducirá, **AUTOMÁTICAMENTE**. \nEstas instancias, pues estarán en otro grupo de de seguridad y solo aceptarán tráfico en el puerto 8080 y solo del balanceador de carga, ahora.\n\nNecesitamos el backend, el MySQL, MemCache y RabbitMQ, las IP de estos servidores del backend, o los servicios, van estar pues en Route 53, en el DNS privado.\n\nLo primero que vamos a hacer, es crear los pares-clave, crear los grupos de seguridad, y vamos a iniciar las instancias con sus respectivos scripts, para que se inicien y configuren.\nVamos a actualizar la IP al name mapping en Route 53.Y finalmente, vamos a crear nuestra aplicación en código fuente, esto en nuestra máquina local (Terraform).\nY finalmente vamos a subir neustro artefacto a S3 bucket. Desde S3, vamos a descargarlo a la instancia EC2.\nLuego, el ELB con HTTPS el certificado. EL balanceador de carga, irá pues a la página.\n\n# 1.0 Grupos de Seguridad y Pares-Clave.\n\nSabiendo ya como va a ser el proyecto, pues empezamos primero por esto, empezamos por los Grupos y Claves, porque es una buena práctica.\n\n## 1.1 Grupos de Seguridad (Creación).\n![image](https://github.com/user-attachments/assets/9e1fb253-1f6d-4a87-8c02-25030b642cff)\n![image](https://github.com/user-attachments/assets/9a77f185-f499-4dfa-b4c4-a420e66af7f2)\n\nLas de salida, como de costumbre no las vamos a tocar.\n\nAhora voy a crear las de la instancia TomCat:\n![image](https://github.com/user-attachments/assets/654f48da-04dd-4e2f-a6b4-49987f44ca1d)\n\n![image](https://github.com/user-attachments/assets/679b901a-31a4-48d4-94b2-a34206c58a09)\n\ny solo falta un último grupo de seguridad, para las aplicciones del backend:\n![image](https://github.com/user-attachments/assets/67d876f6-cdea-4320-b16e-afa90dd2928d)\n\n**Y una vez creada, volvemos a editar esa misma**\nPorque queremos añadir otra regla de entrada que admita el tráfico, de si mismo.\n\n![image](https://github.com/user-attachments/assets/e1ef8053-d2a6-4bcb-8821-f6d7e6e2eff6)\n\nY también tendríamos que haber añadido el puerto 22 SSH, en el TomCat app:\n![image](https://github.com/user-attachments/assets/65de6d2c-41e6-41d5-9d1f-962580bffb60)\n\nCon el backend, exatamente igual:\n![image](https://github.com/user-attachments/assets/378cfaee-e630-4e79-96e1-9691889dc147)\n\n## 1.2 Pares-Claves (Creación).\n![image](https://github.com/user-attachments/assets/3c7ea6d4-b3e4-492b-ade8-9d3cc359d0c3)\n\n![image](https://github.com/user-attachments/assets/fbe23bdb-11c3-4317-b52a-d6b26d6b41ab)\n\n# 2.0 Crear las instancias.\nVamos a clonar el source code\n\n## 2.1 Para la base de datos, MariaDB:\n\n**Nombre y etiquetas:**\n| Clave    | Valor |\n| -------- | ------- |\n| Name  | proyecto-db01 |\n| Project | delta |\n\n**Imagenes de Aplicaciones y Sistemas Operativos (AMI)**\nAmazon Linux, 2023, 64 bits (x86)\n\n**Tipo de instancia**\nt2.micro\n\n**Pares clave**\nLas que creamos `proyecto-produccion-pares-clave`\n\n**Configuraciones de red**\nSeleccionamos un grupo de seguridad existente: `proyecto-backend-SG`\n\n**Detalles Avanzados \u003e Datos de usuario**\n```\n#!/bin/bash\nDATABASE_PASS='admin123'\nsudo yum update -y\n#sudo yum install epel-release -y\nsudo yum install git zip unzip -y\nsudo dnf install mariadb105-server -y\n# starting \u0026 enabling mariadb-server\nsudo systemctl start mariadb\nsudo systemctl enable mariadb\ncd /tmp/\ngit clone -b main https://github.com/hkhcoder/vprofile-project.git\n#restore the dump file for the application\nsudo mysqladmin -u root password \"$DATABASE_PASS\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"ALTER USER 'root'@'localhost' IDENTIFIED BY '$DATABASE_PASS'\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"DELETE FROM mysql.user WHERE User=''\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"FLUSH PRIVILEGES\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"create database accounts\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"grant all privileges on accounts.* TO 'admin'@'localhost' identified by 'admin123'\"\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"grant all privileges on accounts.* TO 'admin'@'%' identified by 'admin123'\"\nsudo mysql -u root -p\"$DATABASE_PASS\" accounts \u003c /tmp/vprofile-project/src/main/resources/db_backup.sql\nsudo mysql -u root -p\"$DATABASE_PASS\" -e \"FLUSH PRIVILEGES\"\n\nsudo systemctl restart mariadb\n```\n\n## 2.2 Para el Memcached:\n\n**Nombre y etiquetas:**\n\n| Clave    | Valor |\n| -------- | ------- |\n| Name  | proyecto-mc01 |\n| Project | delta |\n\n**Imagenes de Aplicaciones y Sistemas Operativos (AMI)**\nAmazon Linux, 2023, 64 bits (x86)\n\n**Tipo de instancia**\nt2.micro\n\n**Pares clave**\nLas que creamos `proyecto-produccion-pares-clave`\n\n**Configuraciones de red**\nSeleccionamos un grupo de seguridad existente: `proyecto-backend-SG`\n\n**Detalles Avanzados \u003e Datos de usuario**\n```\n#!/bin/bash\nsudo dnf install memcached -y\nsudo systemctl start memcached\nsudo systemctl enable memcached\nsudo systemctl status memcached\nsed -i 's/127.0.0.1/0.0.0.0/g' /etc/sysconfig/memcached\nsudo systemctl restart memcached\nsudo yum install firewalld -y\nsudo systemctl start firewalld\nsudo systemctl enable firewalld\nfirewall-cmd --add-port=11211/tcp\nfirewall-cmd --runtime-to-permanent\nfirewall-cmd --add-port=11111/udp\nfirewall-cmd --runtime-to-permanent\nsudo memcached -p 11211 -U 11111 -u memcached -d\n```\n\n## 2.3 Para el RabbitMQ:\n\n**Nombre y etiquetas:**\n\n| Clave    | Valor |\n| -------- | ------- |\n| Name  | proyecto-rmq01 |\n| Project | delta |\n\n**Imagenes de Aplicaciones y Sistemas Operativos (AMI)**\nAmazon Linux, 2023, 64 bits (x86)\n\n**Tipo de instancia**\nt2.micro\n\n**Pares clave**\nLas que creamos `proyecto-produccion-pares-clave`\n\n**Configuraciones de red**\nSeleccionamos un grupo de seguridad existente: `proyecto-backend-SG`\n\n**Detalles Avanzados \u003e Datos de usuario**\n```\n#!/bin/bash\n## primary RabbitMQ signing key\nrpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'\n## modern Erlang repository\nrpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'\n## RabbitMQ server repository\nrpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'\ncurl -o /etc/yum.repos.d/rabbitmq.repo https://raw.githubusercontent.com/hkhcoder/vprofile-project/aws-LiftAndShift/al2023rmq.repo\ndnf update -y\n## install these dependencies from standard OS repositories\ndnf install socat logrotate -y\n## install RabbitMQ and zero dependency Erlang\ndnf install -y erlang rabbitmq-server\nsystemctl enable rabbitmq-server\nsystemctl start rabbitmq-server\nsudo sh -c 'echo \"[{rabbit, [{loopback_users, []}]}].\" \u003e /etc/rabbitmq/rabbitmq.config'\nsudo rabbitmqctl add_user test test\nsudo rabbitmqctl set_user_tags test administrator\nsudo systemctl restart rabbitmq-server\n```\n\n## 2.4 Para la TomCat-app01:\n\n**Nombre y etiquetas:**\n\n| Clave    | Valor |\n| -------- | ------- |\n| Name  | proyecto-app01 |\n| Project | delta |\n\n**Imagenes de Aplicaciones y Sistemas Operativos (AMI)**\nUbuntu Server 24.04 LTS, 64 bits (x86)\n\n**Tipo de instancia**\nt2.micro\n\n**Pares clave**\nLas que creamos `proyecto-produccion-pares-clave`\n\n**Configuraciones de red**\nSeleccionamos un grupo de seguridad existente: `proyecto-TomCat-APP-SG`\n\n**Detalles Avanzados \u003e Datos de usuario**\n```\n#!/bin/bash\nsudo apt update\nsudo apt upgrade -y\nsudo apt install openjdk-11-jdk -y\n#sudo apt install tomcat9 tomcat9-admin tomcat9-docs tomcat9-common git -y\n# no funciona Package tomcat9 is not available, but is referred to by another package.\n#This may mean that the package is missing, has been obsoleted, or\n#is only available from another source\n\n#este si:\nsudo apt install tomcat10 tomcat10-admin tomcat10-docs tomcat10-common git -y\nsudo systemctl start tomcat10\n\n\n\n\n\n# esto sirve para ahorrarnos un paso más adelante y automatizar\n#para descargar el cli del aws\nsudo apt install unzip\ncurl \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\nunzip awscliv2.zip\nsudo ./aws/install\n```\n# 3.0 Comprobaciones (podría fallar o haber errores).\n## 3.1 Máquina MySQL.\n```\nsudo systemctl status mariadb\n```\nEvidentemente, tiene que mostrar que está running.\n```\nmysql -u admin -padmin123 accounts\n```\n\nY deberías de ver esto:\n```\nReading table information for completion of table and column names\nYou can turn off this feature to get a quicker startup with -A\n\nWelcome to the MariaDB monitor.  Commands end with ; or \\g.\nYour MariaDB connection id is 3\nServer version: 10.5.25-MariaDB MariaDB Server\n\nCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.\n\nType 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.\n\nMariaDB [accounts]\u003e\n```\n\n```\nSHOW tables;\n```\n\nDebería devolver esto:\n| Tables_in_accounts |\n| -------- |\n| role  |\n| user |\n| user_role |\n\nPara salir del MariaDB:\n\n```\nquit\n```\nA por la siguiente máquina.\n## 3.2 Máquina MemCache.\n\n```\n[ec2-user@ip-172-31-xx-xx ~]$ ss -tunlp | grep 11211\ntcp   LISTEN 0      1024                           0.0.0.0:11211      0.0.0.0:*\ntcp   LISTEN 0      1024                             [::1]:11211         [::]:*\n```\n\n\n## 3.3 Máquina RabbitMQ-server.\n\n```\n[ec2-user@ip-172-31-38-8 ~]$ systemctl status rabbitmq-server\n● rabbitmq-server.service - RabbitMQ broker\n     Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; \u003e\n     Active: active (running) since Tue 2024-10-15 09:19:03 UTC; 37min ago\n   Main PID: 26089 (beam.smp)\n      Tasks: 26 (limit: 1112)\n     Memory: 68.1M\n        CPU: 5.748s\n     CGroup: /system.slice/rabbitmq-server.service\n             ├─26089 /usr/lib64/erlang/erts-14.2.5.4/bin/beam.smp -W w -MBas ag\u003e\n             ├─26102 erl_child_setup 32768\n             ├─26117 sh -s disksup\n             ├─26119 /usr/lib64/erlang/lib/os_mon-2.9.1/priv/bin/memsup\n             ├─26120 /usr/lib64/erlang/lib/os_mon-2.9.1/priv/bin/cpu_sup\n             ├─26121 /usr/lib64/erlang/erts-14.2.5.4/bin/inet_gethost 4\n             ├─26122 /usr/lib64/erlang/erts-14.2.5.4/bin/inet_gethost 4\n             ├─26133 /usr/lib64/erlang/erts-14.2.5.4/bin/epmd -daemon\n             └─26152 /bin/sh -s rabbit_disk_monitor\n```\n\n## 3.4 Máquina TomCat-app01.\n\n```\nsystemctl status tomcat10\n```\n\n```\n● tomcat10.service - Apache Tomcat 10 Web Application Server\n     Loaded: loaded (/usr/lib/systemd/system/tomcat10.service; enabled; preset:\u003e\n     Active: active (running) since Tue 2024-10-15 10:10:20 UTC; 2min 26s ago\n       Docs: https://tomcat.apache.org/tomcat-10.0-doc/index.html\n    Process: 5223 ExecStartPre=/usr/libexec/tomcat10/tomcat-update-policy.sh (c\u003e\n   Main PID: 5228 (java)\n      Tasks: 28 (limit: 1130)\n     Memory: 104.9M (peak: 112.4M)\n        CPU: 6.126s\n     CGroup: /system.slice/tomcat10.service\n             └─5228 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.util.log\u003e\n\nOct 15 10:10:46 ip-172-31-40-172 tomcat10[5228]: At least one JAR was scanned f\u003e\nOct 15 10:10:46 ip-172-31-40-172 tomcat10[5228]: Deployment of deployment descr\u003e\nOct 15 10:10:46 ip-172-31-40-172 tomcat10[5228]: Deploying deployment descripto\u003e\nOct 15 10:10:46 ip-172-31-40-172 tomcat10[5228]: The path attribute with value \u003e\nOct 15 10:10:46 ip-172-31-40-172 tomcat10[5228]: At least one JAR was scanned f\u003e\nOct 15 10:10:46 ip-172-31-40-172 tomcat10[5228]: Deployment of deployment descr\u003e\nOct 15 10:10:56 ip-172-31-40-172 tomcat10[5228]: Deploying deployment descripto\u003e\nOct 15 10:10:56 ip-172-31-40-172 tomcat10[5228]: The path attribute with value \u003e\nOct 15 10:10:57 ip-172-31-40-172 tomcat10[5228]: At least one JAR was scanned f\u003e\nOct 15 10:10:57 ip-172-31-40-172 tomcat10[5228]: Deployment of deployment descr\n\n\nLUEGO\n\n\nls /var/lib/tomcat10/\nconf  lib  logs  policy  webapps  work\n\n\nY WEBAPPS ES DONDE VAN A ESTAR PUES LAS APPS WEB.\n```\nEste es nuestro archivo /etc/hosts:\n\n![image](https://github.com/user-attachments/assets/ab69e7ee-5c3c-46e1-a8db-d5e086788791)\n\n\u003e [!IMPORTANT]\n\u003e El archivo /etc/hosts es útil en situaciones locales o para configuraciones muy específicas en servidores individuales, ya que permite mapear nombres de dominio a direcciones IP de forma local en la máquina. Sin embargo, no es una solución viable para entornos de producción o en la nube, especialmente en AWS.\n\u003e\n\u003e (Mapear = asociar un nombre de dominio a una dirección IP)\n\u003e\n\u003e ### 3.4.1 ¿Por qué solo sirve de forma local el archivo /etc/hosts?\n\u003eEl archivo /etc/hosts es un archivo de configuración presente en sistemas Unix y Linux, que permite hacer este mapeo de manera local en una máquina específica. Es local porque solo afecta esa máquina en particular; cualquier otro dispositivo (como el de un cliente externo) no verá ni usará los cambios que realices en ese archivo.\n\u003e\n\u003e**Cada máquina tiene su propio archivo /etc/hosts: Cada vez que una máquina necesita traducir un dominio a una IP, primero revisa su propio archivo /etc/hosts antes de hacer consultas a servidores DNS. Esto significa que cualquier cambio en este archivo solo será visible para esa máquina en particular.**\n\u003e\n\u003eNo se comparte a nivel de red. **Los cambios que realices en el archivo /etc/hosts no se propagan ni se comunican a otras máquinas en la red o en internet**. Si otras máquinas o usuarios quieren resolver el mismo nombre de dominio, **deberán tener sus propios mapeos o depender de un servidor DNS.**\n\u003e\n\u003eLimitado a resoluciones locales: En redes pequeñas o entornos de desarrollo, el archivo /etc/hosts puede ser útil si necesitas probar algo rápidamente o hacer una configuración temporal. Sin embargo, en entornos de producción (como en AWS), donde muchos usuarios deben acceder a tu instancia o servicio, necesitas un sistema centralizado de resolución de nombres como Route 53, que es un servidor DNS.\n\u003e\n\u003e### 3.4.2 ¿Por qué necesitas un servidor DNS como Route 53?\n\u003eCuando quieres que tu dominio sea accesible para cualquier persona en internet (porque no tienen tu archivo /etc/hosts/), los navegadores y sistemas operativos de los usuarios no van a consultar tu archivo /etc/hosts. **En su lugar, consultan servidores DNS distribuidos por todo el mundo**. Route 53 es un servicio de DNS que permite gestionar estos mapeos de forma centralizada y global, permitiendo que cualquier persona pueda acceder a tu dominio, no solo una máquina local.\n\u003e\n\n# 4.0 Route 53 (DNS Server).\n\nAsí que buscamos en la consola de AWS, el servicio Route 53:\n\n![image](https://github.com/user-attachments/assets/db0cf6e3-1750-410c-864b-f247e9fa31c7)\n\nTenemos que crear una zona, y allí estará nuestro nombre de dominio. Y en ese dominio, tendremos diferentes Hosts. Y esos registros de Hosts, tendrán la IP o el CNAME.\n\n## 4.1 Crear Zona.\n\n\u003e [!TIP]\n\u003e Una zona DNS es una porción del espacio de nombres DNS que se administra de manera independiente. Puede contener uno o varios registros DNS y puede abarcar un dominio completo o una subparte de él.\n\u003e \n\n![image](https://github.com/user-attachments/assets/871e91e6-5f06-42c9-9bc2-c58b1609ff2f)\n\nY vamos a ponerle nombre de dominio: `delta.es`\n\nNO VA A SER RESUELTO DESDE EL INTERNET, DESDE FUERA.\n\n![image](https://github.com/user-attachments/assets/4e5a95d6-624c-4c79-839f-2c17dd6ad2a7)\n\nVPC, es la Red, de esa región:\n\n![image](https://github.com/user-attachments/assets/117855f3-fe28-4a13-9ea0-a6ab74b5d3b5)\n\n## 4.2 Crear Registros.\nY ahora creamos un \"record\", un registro:\n\n![image](https://github.com/user-attachments/assets/059b9a75-25a6-4a98-a072-56ef2dfa9c9b)\n\nnecesito saber la IP privada de mis instancias:\n![image](https://github.com/user-attachments/assets/0ee843bd-d6c1-4ccc-ac48-623c4d03ba1c)\n\nY lo copio en el registro:\n![image](https://github.com/user-attachments/assets/b5aa5726-0bc9-43e7-b163-05da26eee62f)\n\nY creamos el registro. Ahora hacemos lo mismo con el resto.\n\n\u003e [!TIP]\n\u003e **ESTO ES OPCIONAL.**\n\u003e\n\u003e En mi caso, la interfaz me aparece así:\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/7b984d3b-f0b5-4241-a259-533d09f185c9)\n\u003e\n\u003e Si cambiamos el asistente, se verá de esta forma más compleja:\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/bafd79c1-4d98-4fb9-874f-0eff7e82aeae)\n\u003e \n\u003e ![image](https://github.com/user-attachments/assets/addd5d5d-2045-4960-a8ed-dbf3f6763fbe)\n\u003e \n\u003e Y le damos a definir un registro simple.\n\u003e \n\u003e ![image](https://github.com/user-attachments/assets/24743759-e067-4bb4-b9b8-bac0188377f7)\n\nRealmente, solamente necesitamos estos 3 registros, no más. Porque la aplicacción se va a conectar a estos servicios backend.\n\n![image](https://github.com/user-attachments/assets/6e3ee6b0-3c3b-4b91-af6e-cf79decf06ec)\n\n# 5.0 Construir y Desplegar el artefacto.\n\n\u003e [!TIP]\n\u003e En DevOps, un artefacto se refiere a cualquier archivo generado durante el proceso de desarrollo de software que puede ser usado en las siguientes fases del ciclo de vida del software. Los artefactos son los resultados tangibles del proceso de construcción y despliegue de una aplicación.\n\u003e \n\n![image](https://github.com/user-attachments/assets/f65130c4-24e0-4774-8b0a-8d801523117a)\n\n![image](https://github.com/user-attachments/assets/6e0c4437-a94f-4143-b668-924fe73eae60)\n\nY seleccionamos GitBash.\n\n![image](https://github.com/user-attachments/assets/f544e8b2-85f7-4ac0-b3ec-f36932244636)\n\n\u003e [!WARNING]\n\u003e GitBash ahora es el terminal por defecto.\n\u003e \n\nComo podemos ver, ahora, si intento abrir la terminal, pues me abre la de GitBash:\n\n![image](https://github.com/user-attachments/assets/aa70aad4-e842-44ba-8170-269085479495)\n\ntenemos que modificar esta parte:\n\n![image](https://github.com/user-attachments/assets/b8929f0c-d425-4d00-abeb-6d558af32276)\n\ny así pues añadir el registro DNS. Este es el resultado, lo tenemos que hacer con los 3:\n\n![image](https://github.com/user-attachments/assets/a836477a-2e6f-45e0-95cd-c231a117a91e)\n\nY ahora, vamos a montar / construir el artefacto.\n\n## 5.1 Construir el artefacto.\n\nPrerequisitos:\n- Maven\n  ```\n  choco install maven -y\n  ```\n\n  ```\n  mvn --version\n  ```\n  \n- JDK\n  ```\n  choco install corretto11jdk -y\n  ```\nSon herramientas esenciales que se utilizan para montar y construir artefactos en el desarrollo de software, especialmente en proyectos de Java.\n\n- AWS CLI\n  ```\n  choco install awscli -y\n  ```\n\n\u003e[!WARNING]\n\u003eHay que reiniciar el ordenador, si los acabas de instalar. Por que, muy probablemente, no funcionen.\n\u003e\n\nAhora, vamos a construir el artefacto:\n\nTenemos que estar en este directorio, he hecho un `ls` para que se vea:\n\n![image](https://github.com/user-attachments/assets/3b1dff38-a825-4319-a0ab-396dcf230b35)\n\n```\nmvn install\n```\n\u003e\n\u003e### 5.1.1 Pasos que realiza `mvn install`:\n\u003e**Limpieza previa (si es necesario):**\n\u003eSi has configurado pasos de limpieza, como eliminar los artefactos anteriores, esto puede suceder antes de compilar.\n\u003e\n\u003e**Compilación (compile):**\n\u003eMaven compila el código fuente del proyecto (normalmente dentro del directorio src/main/java) y genera los archivos .class.\n\u003e\n\u003e**Pruebas (test):**\n\u003eSe ejecutan las pruebas unitarias (si tienes tests configurados, como en el directorio src/test/java). Maven usará frameworks de pruebas como JUnit o TestNG.\n\u003e\n\u003e**Empaquetado (package):**\n\u003eMaven empaqueta el proyecto en un archivo ejecutable, generalmente un JAR o WAR (dependiendo del tipo de proyecto). Este archivo contiene el código compilado y las dependencias.\n\u003e\n\u003e**Instalación (install):**\n\u003eEn este paso, el artefacto generado (el JAR, WAR u otro empaquetado) se coloca en el repositorio local de Maven, que se encuentra en tu máquina, en el directorio ~/.m2/repository (o en la carpeta de \u003econfiguración de Maven si has cambiado la ruta). Esto permite que otros \u003eproyectos que dependan de este artefacto lo puedan utilizar.\n\u003e\n\n\u003e [!IMPORTANT]\n\u003e**Maven guarda el artefacto compilado y empaquetado (por ejemplo, un archivo .jar o .war) en el subdirectorio target dentro del directorio raíz de tu proyecto.**\n\u003e\n\nTal y como se puede comprobar, efectivamente ha creado un directorio `target/` y dentro pues:\n\n![image](https://github.com/user-attachments/assets/88c678ab-ec5e-42bd-9242-9ee849783a5a)\n\nAhora, voy a subir todo a S3 bucket.\n\n\u003e [!WARNING]\n\u003e no es posible sin la autenticación. Ya que vamos a tener que usar el AWS CLI, y tendrá que saber pues a que cuenta va a ir.\n\u003e \n\n## 5.2 Crear un usuario IAM y subir el artefacto a S3 bucket.\n\nEntonces, vamos a crear un usuario especial solo para acceder al S3 bucket. Por lo tanto vamos a darle SÓLO permisos para el S3 bucket.\n\n![image](https://github.com/user-attachments/assets/96038202-4470-4f40-921c-4fd3244fe0ef)\n\nEste va a ser el nombre, `S3_admin`:\n\n![image](https://github.com/user-attachments/assets/aaa75c60-f920-409d-90aa-28d81503a534)\n\nNo necesitamos, ningún acceso a la consola, solo necesitamos la clave de acceso y la clave privada.\n\n![image](https://github.com/user-attachments/assets/db70ef15-b854-4d57-b4c7-08544b1b9bd6)\n\nUna vez creado, vamos al panel de usuarios, le damos click al `S3_admin`, luego a, credenciales de seguridad y bajamos para abajo hasta llegar a \"claves de acceso\". Y creamos:\n\n![image](https://github.com/user-attachments/assets/17e56d00-27aa-407c-a726-7f37433202f2)\n\nEsta es la opción que queremos, pues es lo que vamos a hacer, usar el CLI del AWS:\n\n![image](https://github.com/user-attachments/assets/41e0cbee-dd6f-42a9-a711-b1454b63151a)\n\nTambién le tengo que dar a confirmar:\n\"Entiendo la recomendación anterior y deseo proceder a la creación de una clave de acceso\".\n\n\u003e [!WARNING]\n\u003e **¿Cuál es el riesgo?**\n\u003e\n\nNO voy a \"establecer el valor de etiqueta de descripción\" pues es opcional.\nEn el tercer y último paso, pues ya nos proporcionan las claves:\n\n![image](https://github.com/user-attachments/assets/d94dd8a3-fbb1-4f94-886e-6570572fbc69)\n\nDescargo el .csv.\n\n![image](https://github.com/user-attachments/assets/d08e9eb6-2f81-48cd-9e9f-99c2f2570f13)\n\nYa tenemos las claves.\n\n## 5.3 Subir el artefacto a S3 (Necesito autenticarme el par-claves anterior).\n\n**Entonces, hemos creado un usuario `S3_admin`, que también está asociado pues a un par claves, es así como iniciamos sesión.**\n\n**(NO vamos a utilizar, user y password)**\n\nY ahora en el CLI del Visual Studio:\n\n```\naws configure\n```\n\n![image](https://github.com/user-attachments/assets/d4f985fb-8a7d-46fb-ab8a-f8271230d42f)\n\nEl S3 bucket, el nombre tiene que ser **100% único**, no como el mío, si no, como el de ningún otro:\n\n```\naws s3 mb s3://forilianprojectbucket-delta\n```\n\n![image](https://github.com/user-attachments/assets/7bd06f01-e856-4e8c-bfdc-45353b125c70)\n\nY en teoría, con este comando, ya debería de estar:\n```\naws s3 cp target/vprofile-v2.war s3://forilianprojectbucket-delta\n```\n![image](https://github.com/user-attachments/assets/da4610ca-1087-4c88-bcbf-2d8899fd901e)\n\nY ya debería haberse subido, vamos a comprobarlo, vamos a la barra de búsqueda de AWS y buscamos ``S3`\n\n![image](https://github.com/user-attachments/assets/70685b4c-03c4-4e23-9dd0-9326edb94181)\n\ncomo podemos ver, aparece:\n\n![image](https://github.com/user-attachments/assets/cd4be745-cb6a-4090-94d1-091811697b8a)\n\ndentro, está el artefacto:\n\n![image](https://github.com/user-attachments/assets/8002a733-7836-4ed2-80be-466641007579)\n\n### 5.3.1 Descargar y Desplegar el artefacto (En la instancia TomCat).\nPrerequisitos:\n- El AWS CLI instalado **DENTRO DEL TomCat.**\n- Descargarlo y desplegarlo.\n\n\u003e [!WARNING]\n\u003e **PROBLEMA:**\n\u003e \n\u003e¿Cómo vamos a autenticarnos ahora, desde el TomCat, para poder descargar desde el S3 bucket?\n\u003e  \n\u003eAnteriormente, utilizamos el AWS CLI y utilizamos las claves IAM para poder autenticarme, al Usuario ese en cuestión que creamos en el IAM, para poder \"pushear\", subir el artefacto.\n\u003e\n\u003e Podríamos volver a hacerlo de esa misma manera (Es más larga y compleja).\n\u003e Y es a través de los Roles IAM.\n\u003e Creamos un Rol y ponemos/adjuntamos, ese rol a la instancia.\n\u003e \n\n![image](https://github.com/user-attachments/assets/ec734c50-9174-4825-b07c-ae537bd2c381)\n\nEl permiso:\n\n![image](https://github.com/user-attachments/assets/4d8db502-3a97-4c17-b0a6-48092dc74556)\n\nY le ponemos este nombre:\n\n![image](https://github.com/user-attachments/assets/b9f246d7-d936-4ce3-b3be-dca6da0bfb80)\n\nLo creamos, volvemos a la instancia y editamos:\n\n![image](https://github.com/user-attachments/assets/2375a8cf-168f-4968-9347-fdcc57ca0af6)\n\nLe atribuimos el rol:\n\n![image](https://github.com/user-attachments/assets/aa22611d-aebe-4053-9584-be2bb70868a7)\n\nComo tenemos privilegios asociados a esta instancia, podemos ejecutar el comando de AWS, sin tener que autenticarnos:\n\n![image](https://github.com/user-attachments/assets/b73ebc41-7496-442f-98a8-e631ed295379)\n\n```\naws s3 cp s3://forilianprojectbucket-delta/vprofile-v2.war /tmp/\n```\n\n```\nsudo systemctl stop tomcat10\n```\n\n```\nsudo rm -rf /var/lib/tomcat10/webapps/ROOT\n```\n\n```\nsudo cp /tmp/vprofile-v2.war /var/lib/tomcat10/webapps/ROOT.war\n```\n\n```\nsudo systemctl daemon-reload\n```\n\n```\nsudo systemctl start tomcat10\n```\n\n![image](https://github.com/user-attachments/assets/98f68fbb-4140-4e2a-a76f-98a900a268dc)\n\n# 6.0 Balanceador de Carga, ELB.\nRequisito:\n\n## 6.1 Crear el Target Group.\nEstamos en EC2 y vamos a crear un \"Target Group\".\n\n![image](https://github.com/user-attachments/assets/4aa33d11-92b3-48f5-bad6-69fcb69e9a0e)\n\nLe ponemos un nombre, y cambiamos el puerto a 8080.\n\n![image](https://github.com/user-attachments/assets/41d150fa-e5bc-49a7-a66a-500023a88675)\n\n![image](https://github.com/user-attachments/assets/5d2a0144-45a1-4e21-82b5-00f16c65ff3b)\n\nY creamos el grupo de destino o el Target Group.\n\n## 6.2 Crear el Balanceador de Carga\n\n![image](https://github.com/user-attachments/assets/00204581-f1e1-4cbb-a6e2-bdd18ebbbb5f)\n\n![image](https://github.com/user-attachments/assets/5812cc5a-dfbb-4d37-9be5-1c9d9039d16e)\n![image](https://github.com/user-attachments/assets/57de5401-1d9a-448d-84bf-c87f6d10f7d4)\n\n![image](https://github.com/user-attachments/assets/fcf1644f-6f2d-4de9-8047-c5208e8a3a94)\n\n\u003e [!WARNING]\n\u003e\n\u003eDebe escuchar en el puerto 80 y 443 (443 opcional si tengo dominio).\n\u003e \n\u003e ![image](https://github.com/user-attachments/assets/615ff3aa-635c-4911-8872-eea163615e12)\n\u003e\n\u003e(Para que funcione el HTTPS)\n\u003e \n\u003e![image](https://github.com/user-attachments/assets/720bbb15-5f39-4513-9ce5-46246c95c825)\n\u003e\n\u003e Esto obligado a poner el Certificado, si he puesto listener en el puerto 443, por lo tanto, voy a tener que quitarlo de momento, luego lo añadiré.\n\u003e \n\nUna vez esté hecho el balanceador.\n\n## 6.3 Comprobar que funcione el ELB.\n\nCopiamos el enlace:\n\n![image](https://github.com/user-attachments/assets/407f59bf-bf85-4193-8fc3-2f6d79f6a11f)\n\n![image](https://github.com/user-attachments/assets/053cdda8-ef7a-4d09-b1b0-03864ba3de73)\n\nY este enlace, tenemos que pegarlo en el navegador.\n**Este es el resultado:**\n\n\u003e [!WARNING]\n\u003e ### Error, TomCat.\n\u003e Si nos sale algún tipo de error, es muy probable que sea por algo relacionado con el TomCat, hasta el momento, si se ha seguido todo al pié de la letra, es muy sencillo y automático, las máquinas están \u003eprovisionadas, y no debería de haber problema en ese sentido.\n\u003e\n\u003e **NOS APARECERÁ ESTO, EN CASO DE QUE NO HAYAMOS PUESTO LA PÁGINA:**\n\u003e ![image](https://github.com/user-attachments/assets/01fe5cbe-e39d-4cf6-8745-fb0558235df9)\n\u003e\n\u003e ```\n\u003e ● tomcat10.service - Apache Tomcat 10 Web Application Server\n\u003e     Loaded: loaded (/usr/lib/systemd/system/tomcat10.service; enabled; preset: enabled)\n\u003e     Active: active (running) since Tue 2024-10-15 19:33:56 UTC; 3min 1s ago\n\u003e       Docs: https://tomcat.apache.org/tomcat-10.0-doc/index.html\n\u003e    Process: 12013 ExecStartPre=/usr/libexec/tomcat10/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)\n\u003e   Main PID: 12018 (java)\n\u003e      Tasks: 28 (limit: 1130)\n\u003e     Memory: 78.4M (peak: 78.6M)\n\u003e        CPU: 3.816s\n\u003e     CGroup: /system.slice/tomcat10.service\n\u003e            └─12018 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat10/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dja\u003e\n\u003e\n\u003eOct 15 19:33:58 ip-172-31-40-172 tomcat10[12018]: OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]\n\u003eOct 15 19:33:59 ip-172-31-40-172 tomcat10[12018]: Initializing ProtocolHandler [\"http-nio-8080\"]\n\u003eOct 15 19:33:59 ip-172-31-40-172 tomcat10[12018]: Server initialization in [1896] milliseconds\n\u003eOct 15 19:33:59 ip-172-31-40-172 tomcat10[12018]: Starting service [Catalina]\n\u003eOct 15 19:33:59 ip-172-31-40-172 tomcat10[12018]: Starting Servlet engine: [Apache Tomcat/10.1.16 (Ubuntu)]\n\u003eOct 15 19:33:59 ip-172-31-40-172 tomcat10[12018]: Deploying web application directory [/var/lib/tomcat10/webapps/ROOT]\n\u003eOct 15 19:34:01 ip-172-31-40-172 tomcat10[12018]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs wer\u003e\n\u003eOct 15 19:34:01 ip-172-31-40-172 tomcat10[12018]: Deployment of web application directory [/var/lib/tomcat10/webapps/ROOT] has finished in [1,760] ms\n\u003eOct 15 19:34:01 ip-172-31-40-172 tomcat10[12018]: Starting ProtocolHandler [\"http-nio-8080\"]\n\u003eOct 15 19:34:01 ip-172-31-40-172 tomcat10[12018]: Server startup in [1871] milliseconds\n\u003e ```\n\u003e **SIN EMBARGO, AL METER LA PÁGINA NOS APARECE ESTE ERROR:**\n\u003e Y simplemente, tenemos que meter de nuevo allí el artefacto. En la carpeta de TomCat, \"webapps\"\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/c467c82b-845c-4a3e-975f-f7195b396ad9)\n\u003e\n\u003e Anteriormente, ejecuté al TomCat, sin nada, y funciona, ahora este es el resultado cuando pongo MI página.\n\u003e\n\u003e En TomCat, me aparece este error al ejecutar `systemctl status tomcat10`\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/4de98174-a608-49b2-91de-7b25f6429157)\n\u003e\n\u003e Este problema, puede estar relacionado con que la aplicacion / artefacto, fue hecho en TomCat9, y yo estoy utilizando el TomCat10.\n\u003e Entonces, de alguna forma, tengo que instalar el TomCat9, concretamente el 9.\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/4ff8c469-409a-444f-8527-cfc06139e3d3)\n\u003e\n\u003e Para colmo, no puedo conectarme por SSH, porque el grupo de seguridad de la instancia del TomCat, tenemos una regla de entrada, en la que SSH desde una IP, diferente a la de la instancia (ya que hemos reiniciado la instancia).\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/5b159821-aba8-45d0-a6a5-8a16e6c33a77)\n\u003e \n\n\n\n\n\u003e [!WARNING]\n\u003e ### Error 2, no puedo acceder desde el navegador.\n\u003e\n\u003e Entonces, contexto, he apagado las máquinas, dia nuevo, enciendo las máquinas, copio el enlace, ya no puedo acceder. ¿Por qué?\n\u003e \n\u003e ![image](https://github.com/user-attachments/assets/b6794c4b-8322-4efe-9872-8c654ab74582)\n\u003e\n\u003e #### OPCIÓN DESCARTADA 1\n\u003e Sé que las IP's privadas de mis instancias, no han cambiado, por lo tanto, no hay conflicto con LOS REGISTROS DE LA ZONA DNS:\n\u003e \n\u003e ![image](https://github.com/user-attachments/assets/d9b80cea-f9ec-46af-9b20-5037c61e0c0a)\n\u003e \n\u003e - db01:\n\u003e\n\u003e   ![image](https://github.com/user-attachments/assets/908054b5-39a1-4c47-b0e5-3d1a7af06d58)\n\u003e\n\u003e - rmq01:\n\u003e\n\u003e   ![image](https://github.com/user-attachments/assets/73734654-36a6-4722-91aa-4073e883ca75)\n\u003e\n\u003e - mc01:\n\u003e\n\u003e   ![image](https://github.com/user-attachments/assets/3fc09eec-7d67-4cbf-b28f-498934f070dd)\n\u003e\n\u003e #### OPCIÓN DESCARTADA 2\n\u003e\n\u003e Hay una regla de seguridad, TomCat-APP-SG\n\u003e\n\u003e![image](https://github.com/user-attachments/assets/dfa45951-9b8e-4afa-8603-2e91236e739b)\n\u003e\n\u003e En la que selecciono \"My IP\", se coloca la IP pública\n\u003e\n\u003e **¿Pero no era de hecho la IP pública la que variaba CUANDO APAGO LA MÁQUINA? ¿Se modifica también automáticamente del Security Group? ¿O solo se modifica de la instancia?**\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/567a5572-e8f5-4bb3-8de1-1b928c4d82f7)\n\u003e\n\u003e Como podemos ver, la IP pública es la `54.205.223.115`\n\u003e\n\u003e Entonces, **EFECTIVAMENTE NO COINCIDEN Y HAY QUE REFRESCARLAS MANUALMENTE:**\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/fe9ebb5b-5823-4a7e-aa06-4949c9c57ab9)\n\u003e\n\u003e #### OPCIÓN 3 (la correcta)\n\u003e\n\u003e TENGO QUE ACCEDER DESDE EL BALANCEADOR DE CARGA, Y NO DIRECTAMENTE DESDE EL NOMBRE DE DOMINIO DEL TOMCAT-APP01\n\u003e\n\u003e ![image](https://github.com/user-attachments/assets/0cda6683-b3d7-4bf9-a5b9-f69b9d43e46b)\n\u003e\n\u003e \n\n# 7.0 Grupoo de Autoescalado (Autoscaling Group).\n\nEntonces, lo que queremos es básicamente escalar o reducir, dependiendo de la carga.\nRequisitos:\n- AMI de la instancia.\n- La plantilla de lanzamiento de la instancia.\n- El grupo de autoescalado.\n\n## 7.1 Crear la AMI:\n\nDesde el EC2, buscamos la instancia y le damos a crear imagen:\n\n![image](https://github.com/user-attachments/assets/c93d4d7e-52ca-492b-aaf8-016698797823)\n\nLa llamaré `delta-app01-tomcat-image`.\nEl resto de cosas, no hay que tocarlas.\n\n![image](https://github.com/user-attachments/assets/75a24bfe-90c0-4f29-a280-d9b1546b70ed)\n\nDebemos esperar a que ponga \"Disponible\".\n\n## 7.2 Crear la plantilla:\nAhora, nos vamos a Launch Templates y la creamos:\n\n![image](https://github.com/user-attachments/assets/0a8cf8d6-5223-4f14-9443-40555f642d0c)\n\nSelecciono la AMI:\n\n![image](https://github.com/user-attachments/assets/cc5c2de2-c52a-4d32-ad58-15c28c245142)\n\n![image](https://github.com/user-attachments/assets/36e9530a-0056-45a8-85f8-3d231c32e7c4)\n\n\n![image](https://github.com/user-attachments/assets/108aad8e-c177-4e2a-aa98-a45664e5e39f)\n\n\n![image](https://github.com/user-attachments/assets/d2cb9139-08f1-435d-8a99-8776377ca5a9)\n\n![image](https://github.com/user-attachments/assets/4cc2e898-b357-49a5-b9c8-85412a4fa72b)\n\n![image](https://github.com/user-attachments/assets/dc4d81bd-c2e0-43b5-8d4d-849f868edde5)\n\n## 7.3 Crear Grupo de Autoescalado:\n\n![image](https://github.com/user-attachments/assets/7b1f48e3-1bd8-46a2-8618-472f752cc0c4)\n\n![image](https://github.com/user-attachments/assets/c17854c0-80fe-46ff-ae85-692d407a8d8a)\n\n![image](https://github.com/user-attachments/assets/d902b724-1920-44ec-bd93-7a32687c89d8)\n\n![image](https://github.com/user-attachments/assets/8c037c3a-ef7c-40fa-8972-189bb1a3a6a2)\n\n![image](https://github.com/user-attachments/assets/257bd3df-748d-4937-a2bb-11d08867e8be)\n\n![image](https://github.com/user-attachments/assets/ff1de8b8-4e7e-4a87-9011-d56a30ccc7c7)\n\n![image](https://github.com/user-attachments/assets/cc044244-1718-4c1c-8391-e0bdda4f3702)\n\n![image](https://github.com/user-attachments/assets/84145a5c-824f-4581-9499-76e9c91b3f71)\n\n### 7.4 Comprobación:\n\nComo podemos comprobar funciona:\n![image](https://github.com/user-attachments/assets/0f2823e5-59f4-4e9d-8eb3-019bb6d4a5e2)\n\n(OPCIONAL)\n![image](https://github.com/user-attachments/assets/637dcfa6-3d90-405d-88dc-80a2a46c29a8)\n\n![image](https://github.com/user-attachments/assets/039e4560-435a-46a2-96cd-1b1419e73126)\n\n![image](https://github.com/user-attachments/assets/11e772e0-108b-4163-b067-4bc50d90eeec)\n\n# 8.0 Final, formas alternativas de hacerlo (PaaS y SaaS):\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\nvoy a hacerlo en este repositorio:\n\nhttps://github.com/iliangithub/Proyecto_AWS_webAPP_PaaS-SaaS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filiangithub%2FProyecto_AWS_webAPP","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filiangithub%2FProyecto_AWS_webAPP","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filiangithub%2FProyecto_AWS_webAPP/lists"}