Tengo una aplicación de reacción (SPA) que se implementa en S3 y es de acceso público. Después de cada compilación, tengo que cargar manualmente index.html y otros activos estáticos en S3. ¿Hay alguna forma de automatizar este proceso?
Hice una búsqueda exhaustiva en CD (implementación continua) a S3 , aquí hay una pregunta SO sobre lo mismo.
Estoy agregando toda la información de mi investigación exhaustiva. He escrito la siguiente respuesta, que contiene varios métodos para lograr esto.
Hay muchas formas de automatizar la implementación de S3 . Aquí están las cosas que recopilé:
1. AWS SNS y Lambda:
Este proceso es útil si desea activar cualquier servicio de AWS en github push. Entonces, este es el proceso:
La desventaja de este enfoque es que la clonación de repositorios grandes lleva tiempo y las Lambdas se facturan por segundo. Por lo tanto, esto puede volverse costoso para grandes repos.
2. Travis:
Travis es conocido por su biblioteca CI (integración continua). Un .travis.yml es esencial para el proceso de integración.
Si desea realizar algunas pruebas después de la compilación y luego con éxito, cargue los archivos en S3. Entonces este enfoque será la mejor manera. Travis es gratuito para proyectos de código abierto.
La desventaja es que no pude encontrar una manera de aislar un directorio del repositorio y cargar solo ese directorio específico.
3. CLI de AWS:
Esta es la forma más económica y mejor de cargar los archivos en S3. Utilicé este enfoque. Obtuve esta información de esta publicación mediana .
Por lo general, en las aplicaciones de reacción, los scripts de compilación son activados por npm o yarn escritos como scripts en el paquete.json . Aquí está el comando para cargar los archivos a S3:
aws s3 sync build/ s3://<bucket-name>
Agregué este script como parte de los scripts de compilación en package.json. Esto fue muy útil y, por lo tanto, automatizó el proceso manual de cargar los archivos en S3.
Esta respuesta se basa en mi perspectiva. Si algo es incorrecto o si me perdí algo, no dude en comentarlo y lo agregaré a la respuesta.
Me encanta la respuesta de @lakshman , pero no funcionará para repositorios de bitbucket privados/locales y algunos otros escenarios con los que nos encontramos en el mundo comercial.
Una idea similar que es compatible con bitbucket (y más) es clonar el código en CodeCommit y luego activar un CodePipeline que incluye un paso de CodeBuild.
CodeBuild puede empujar a S3. Como beneficio adicional, CodeBuild puede ejecutar pruebas e incluir pasos de compilación adicionales según sea necesario (migraciones, etc.). Bitbucket tiene un enlace espejo que permite a CodeCommit clonar repositorios de Bitbucket. Creo que este es el enlace del gancho del espejo, pero verifíquelo dos veces, ya que hay varios complementos/extensiones de Bitbucket, incluido el espejo de cadena en el nombre.
Esta pregunta SO analiza un gancho de Bitbucket diferente y también analiza la clonación de GitLab y JGit. Nuevamente, una vez que el código está en CodeCommit, CodePipeline puede tomarlo desde allí.
En lugar de usar un enlace de Bitbucket, también puede usar una canalización de Bitbucket .