{"id":2797,"date":"2024-09-16T19:13:50","date_gmt":"2024-09-16T17:13:50","guid":{"rendered":"https:\/\/djimn.com\/?p=2797"},"modified":"2024-10-11T22:03:11","modified_gmt":"2024-10-11T20:03:11","slug":"localstack-emulacion-de-servicios-de-aws-para-desarrollo-y-pruebas-locales","status":"publish","type":"post","link":"https:\/\/djimn.com\/index.php\/2024\/09\/16\/localstack-emulacion-de-servicios-de-aws-para-desarrollo-y-pruebas-locales\/","title":{"rendered":"localstack: emulaci\u00f3n de servicios de AWS para desarrollo y pruebas locales"},"content":{"rendered":"<p>Puede llevar mucho tiempo, ser dif\u00edcil e incluso peligroso crear y probar aplicaciones basadas en la nube en un entorno de producci\u00f3n. Aqu\u00ed es cuando se hace evidente la importancia del crecimiento regional. Debido a que se lleva a cabo en el propio sistema del desarrollador, el desarrollo local ayuda a reducir los costos, facilita la depuraci\u00f3n y acorta los tiempos de desarrollo.<\/p>\n<h2>LocalStack<\/h2>\n<p>La mejor herramienta de desarrollo local, si no una de las mejores, es LocalStack, que se basa en AWS (Amazon Web Services). LocalStack crea una pila de nube AWS local completamente funcional, que puede realizar algunos desarrollos y pruebas fuera de l\u00ednea de nuestras aplicaciones en la nube y sin servidor.<\/p>\n<p>La pila local es f\u00e1cil de usar y proporciona un entorno de prueba en su sistema local que imita las API y los comportamientos de los servicios en la nube de AWS. Ahora puede crear y probar sus aplicaciones de AWS sin gastar dinero ni requerir acceso a Internet.<\/p>\n<h3>La importancia de Docker<\/h3>\n<p>Docker es una parte esencial de esta infraestructura. Docker es una tecnolog\u00eda de c\u00f3digo abierto que emplea la distribuci\u00f3n de software en contenedores a trav\u00e9s de la virtualizaci\u00f3n a nivel del sistema operativo.<\/p>\n<p>Esto no solo garantizar\u00e1 que la aplicaci\u00f3n funcione correctamente en cualquier entorno porque cada contenedor es aut\u00f3nomo e incluye todo el software, las bibliotecas y las utilidades del sistema necesarios, sino tambi\u00e9n que todo funcione localmente. Docker ofrece la contenedorizaci\u00f3n que utiliza LocalStack para simular la nube de AWS en su estaci\u00f3n de trabajo local.<\/p>\n<hr \/>\n<h4><a href=\"https:\/\/dev.to\/aws-builders\/localstack-emulate-aws-services-for-local-development-testing-eoj#getting-started\" name=\"getting-started\"><\/a><\/h4>\n<h2>\nInicializando Docker<\/h2>\n<p>Debemos asegurarnos de que Docker est\u00e9 funcionando antes de poder iniciar LocalStack. El inicio de Docker var\u00eda de un sistema operativo a otro.<\/p>\n<p>MacOS: Docker se puede iniciar en segundo plano en MacOS escribiendo open &#8211;background -a Docker. Docker se puede iniciar en segundo plano.<br \/>\nLinux: Docker se implementa normalmente en Linux como un servicio. Se puede usar el comando sudo service docker start para iniciarlo.<br \/>\nWindows: En Windows, Docker se puede inicializar desde el men\u00fa Inicio o con un comando como Start-Process -NoNewWindow &#8220;C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe&#8221; en PowerShell.<\/p>\n<p>Es fundamental verificar que Docker siga funcionando despu\u00e9s de iniciarlo. Se puede usar el comando docker system info para este prop\u00f3sito. Este comando deber\u00eda devolver informaci\u00f3n sobre el sistema Docker si Docker funciona correctamente. Si Docker no se est\u00e1 ejecutando, el comando no devolver\u00e1 ning\u00fan resultado.<\/p>\n<h2>C\u00f3mo poner en funcionamiento LocalStack<\/h2>\n<p>LocalStack se puede instalar y ejecutar una vez que Docker est\u00e9 en funcionamiento. Pero el procedimiento de instalaci\u00f3n es diferente para cada SO.<\/p>\n<ul>\n<li>Con el comando brew install localstack, se puede usar el administrador de paquetes Homebrew para configurar LocalStack en MacOS.<\/li>\n<li>Con el comando sudo apt-get install localstack, se puede configurar LocalStack en m\u00e1quinas Linux con la ayuda del administrador de paquetes APT.<\/li>\n<li>El administrador de paquetes LocalStack est\u00e1 disponible para Windows y se puede instalar con el comando choco install localstack.<\/li>\n<\/ul>\n<p>Una vez que se haya instalado LocalStack, puede ejecutarlo con el comando localstack start.<\/p>\n<p>Usar un script de shell para automatizar todo por completo<\/p>\n<p>Para simplificar las cosas, podemos escribir un script de shell para determinar el sistema operativo, iniciar Docker, implementar LocalStack y ponerlo en marcha. El siguiente script debe ejecutarse con<\/p>\n<h4>\u00a0<code>chmod +x localstack.sh &amp;&amp;.\/localstack.sh<\/code>:<\/h4>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"c\">#!\/bin\/bash<\/span>\r\n\r\n<span class=\"c\"># Function to start Docker and ensure it's running on macOS<\/span>\r\nstart_docker_mac<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Starting Docker on macOS...\"<\/span>\r\n    open <span class=\"nt\">--background<\/span> <span class=\"nt\">-a<\/span> Docker\r\n    <span class=\"k\">while<\/span> <span class=\"o\">!<\/span> docker system info <span class=\"o\">&gt;<\/span> \/dev\/null 2&gt;&amp;1<span class=\"p\">;<\/span> <span class=\"k\">do <\/span><span class=\"nb\">sleep <\/span>1<span class=\"p\">;<\/span> <span class=\"k\">done\r\n    <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"Docker is running.\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Function to start Docker and ensure it's running on Linux<\/span>\r\nstart_docker_linux<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Starting Docker on Linux...\"<\/span>\r\n    <span class=\"nb\">sudo <\/span>service docker start\r\n    <span class=\"k\">while<\/span> <span class=\"o\">!<\/span> docker system info <span class=\"o\">&gt;<\/span> \/dev\/null 2&gt;&amp;1<span class=\"p\">;<\/span> <span class=\"k\">do <\/span><span class=\"nb\">sleep <\/span>1<span class=\"p\">;<\/span> <span class=\"k\">done\r\n    <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"Docker is running.\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Function to start Docker and ensure it's running on Windows<\/span>\r\nstart_docker_windows<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Starting Docker on Windows...\"<\/span>\r\n    Start-Process <span class=\"nt\">-NoNewWindow<\/span> <span class=\"s2\">\"C:<\/span><span class=\"se\">\\P<\/span><span class=\"s2\">rogram Files<\/span><span class=\"se\">\\D<\/span><span class=\"s2\">ocker<\/span><span class=\"se\">\\D<\/span><span class=\"s2\">ocker<\/span><span class=\"se\">\\D<\/span><span class=\"s2\">ocker Desktop.exe\"<\/span>\r\n    <span class=\"k\">while<\/span> <span class=\"o\">(!(<\/span>Test-Connection localhost <span class=\"nt\">-count<\/span> 1<span class=\"o\">))<\/span> <span class=\"o\">{<\/span> Start-Sleep <span class=\"nt\">-Seconds<\/span> 1 <span class=\"o\">}<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Docker is running.\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Function to install LocalStack on macOS<\/span>\r\ninstall_mac<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Installing LocalStack on macOS...\"<\/span>\r\n    brew <span class=\"nb\">install <\/span>localstack\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Function to install LocalStack on Linux<\/span>\r\ninstall_linux<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Installing LocalStack on Linux...\"<\/span>\r\n    <span class=\"nb\">sudo <\/span>apt-get <span class=\"nb\">install <\/span>localstack\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Function to install LocalStack on Windows<\/span>\r\ninstall_windows<span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s2\">\"Installing LocalStack on Windows...\"<\/span>\r\n    choco <span class=\"nb\">install <\/span>localstack\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"c\"># Detect the operating system<\/span>\r\n<span class=\"nv\">OS<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"si\">$(<\/span><span class=\"nb\">uname<\/span><span class=\"si\">)<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"k\">case<\/span> <span class=\"nv\">$OS<\/span> <span class=\"k\">in<\/span>\r\n  <span class=\"s1\">'Linux'<\/span><span class=\"p\">)<\/span>\r\n    start_docker_linux\r\n    install_linux\r\n    <span class=\"p\">;;<\/span>\r\n  <span class=\"s1\">'Darwin'<\/span><span class=\"p\">)<\/span> \r\n    start_docker_mac\r\n    install_mac\r\n    <span class=\"p\">;;<\/span>\r\n  <span class=\"s1\">'WindowsNT'<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"nv\">OS<\/span><span class=\"o\">=<\/span><span class=\"s1\">'Windows'<\/span>\r\n    start_docker_windows\r\n    install_windows\r\n    <span class=\"p\">;;<\/span>\r\n  <span class=\"k\">*<\/span><span class=\"p\">)<\/span> <span class=\"p\">;;<\/span>\r\n<span class=\"k\">esac<\/span>\r\n\r\n<span class=\"c\"># Start LocalStack<\/span>\r\nlocalstack start\r\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\"><\/div>\n<\/div>\n<\/div>\n<p>El script anterior define funciones que, seg\u00fan el sistema operativo, iniciar\u00e1n la ejecuci\u00f3n de Docker o instalar\u00e1n LocalStack. Luego, determina el sistema operativo y llama a las funciones que son relevantes para ese sistema. Finalmente, activa LocalStack.<\/p>\n<p>A tener en cuenta que para ejecutar este script es necesario que tener instalado Docker y el administrador de paquetes necesario (Homebrew para MacOS, APT para Linux y Chocolatey para Windows) en su sistema operativo. En caso de que a\u00fan no est\u00e9n instalados, se deben instalar antes de ejecutar este script.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>La combinaci\u00f3n de LocalStack con Docker crea una gran herramienta para desarrollar localmente en AWS. Emular el entorno de Amazon Web Services (AWS) localmente permite a los desarrolladores mejorar su productividad, reducir gastos y evitar los peligros asociados con la creaci\u00f3n de software directamente en un entorno de nube en vivo.<\/p>\n<p>Puede simplificar a\u00fan m\u00e1s la puesta en marcha de su entorno de nube local de AWS automatizando el proceso de inicio de Docker, instalaci\u00f3n de LocalStack y ejecuci\u00f3n de LocalStack con la ayuda de un sencillo script de shell. Esto le permitir\u00e1 ahorrar tiempo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Puede llevar mucho tiempo, ser dif\u00edcil e incluso peligroso crear y probar aplicaciones basadas en la nube en un entorno de producci\u00f3n. Aqu\u00ed es cuando se hace evidente la importancia del crecimiento regional. Debido a que se lleva a cabo en el propio sistema del desarrollador, el desarrollo local ayuda a reducir los costos, facilita&hellip; <\/p>\n","protected":false},"author":1,"featured_media":2930,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"_joinchat":[],"footnotes":""},"categories":[5],"tags":[],"class_list":["post-2797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/djimn.com\/wp-content\/uploads\/2024\/09\/eyecatch_localstack.png?fit=1200%2C630&ssl=1","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/posts\/2797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/comments?post=2797"}],"version-history":[{"count":3,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/posts\/2797\/revisions"}],"predecessor-version":[{"id":2931,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/posts\/2797\/revisions\/2931"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/media\/2930"}],"wp:attachment":[{"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/media?parent=2797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/categories?post=2797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/djimn.com\/index.php\/wp-json\/wp\/v2\/tags?post=2797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}