<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luis Eduardo Jiménez Robles</title>
    <description>The latest articles on DEV Community by Luis Eduardo Jiménez Robles (@luisejrobles).</description>
    <link>https://dev.to/luisejrobles</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F40156%2Fde546d6b-fc23-4668-a399-bfd0f38b26ef.jpg</url>
      <title>DEV Community: Luis Eduardo Jiménez Robles</title>
      <link>https://dev.to/luisejrobles</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luisejrobles"/>
    <language>en</language>
    <item>
      <title>Desplegar Vue app + AWS ECS </title>
      <dc:creator>Luis Eduardo Jiménez Robles</dc:creator>
      <pubDate>Thu, 26 Mar 2020 05:08:34 +0000</pubDate>
      <link>https://dev.to/luisejrobles/desplegar-vue-app-aws-ecs-239</link>
      <guid>https://dev.to/luisejrobles/desplegar-vue-app-aws-ecs-239</guid>
      <description>&lt;p&gt;Este post surgió debido a las ganas de aprender nuevas tecnologías y herramientas pues durante 5 años he utilizado mayormente &lt;a href="https://angular.io" rel="noopener noreferrer"&gt;Angular&lt;/a&gt; y mi opción estándar para despliegue de aplicaciones en la nube siempre ha sido &lt;a href="https://cloud.google.com/" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;. En esta ocasión me propuse adentrarme un poco en AWS, especificamente &lt;a href="https://aws.amazon.com/es/ecs/" rel="noopener noreferrer"&gt;Elastic Container Service o &lt;em&gt;(ECS)&lt;/em&gt;&lt;/a&gt; y pues de ello salió este tutorial, espero les guste.✨&lt;/p&gt;

&lt;p&gt;A continuación encontrarán vínculos a las páginas de instalación y/o configuración de las distintas herramientas&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vuejs.org/v2/guide/installation.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Vue&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cli.vuejs.org/guide/installation.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Vue CLI&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.com" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-engine---community" rel="noopener noreferrer"&gt;&lt;strong&gt;Docker Engine - Community&lt;/strong&gt;&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;DockerHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Se espera que ya esté instalado y configurado lo anterior. En caso de AWS dar de alta su tarjeta para que les permita utilizar ECS. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Una vez ya instalado lo anterior &lt;em&gt;(docker, vue, vue cli)&lt;/em&gt; comenzaremos 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  Vue
&lt;/h1&gt;

&lt;p&gt;Para la parte de Vue, generamos un proyecto de Vue mediante la cli denominado &lt;br&gt;
&lt;em&gt;hello-world-vue&lt;/em&gt; escribiendo en la consola dentro de la carpeta deseada:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vue create hello-world-vue&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;que nos desplegará la siguiente ventana:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fh913jmt3rwnmmybu0dwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fh913jmt3rwnmmybu0dwy.png" alt="Vue Project Init"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;donde seleccionaremos la opción &lt;strong&gt;Default &lt;em&gt;(babel, eslint)&lt;/em&gt;&lt;/strong&gt; dependiendo de preferencias. En mi caso, la opción &lt;strong&gt;Manually select features&lt;/strong&gt;&lt;br&gt;
pues requiero:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;Typescript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linter / Formatter&lt;/li&gt;
&lt;li&gt;&lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Para más información de opciones sobre la creación de un proyecto  &lt;a href="https://cli.vuejs.org/guide/creating-a-project.html" rel="noopener noreferrer"&gt;click aquí&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;después del habilitado de features &lt;em&gt;y/o haber seleccionado Default&lt;/em&gt; en la siguiente ventana nos preguntan &lt;strong&gt;Use class-style component syntax?(Y/n)&lt;/strong&gt; la cual para fines prácticos tecleamos &lt;em&gt;n&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp8ixnoaddgnq93vay9i1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp8ixnoaddgnq93vay9i1.png" alt="class-style components"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;arrojándonos una ventana como la siguiente en la cual tecleamos &lt;em&gt;y&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyu0ifqi799vxfiixhob6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyu0ifqi799vxfiixhob6.png" alt="Babel alongside Typescript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;posterior, nos pregunta la configuración del &lt;em&gt;linter/formatter&lt;/em&gt; lo cual seleccionamos &lt;strong&gt;ESLint with error prevention only&lt;/strong&gt; como a continuación&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6tu88eqta2uwjcmdynsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6tu88eqta2uwjcmdynsy.png" alt="Linter / Formatter config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;seguido nos pregunta sobre la configuración del linter&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcmkcr7h29nyixhk7mr6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcmkcr7h29nyixhk7mr6e.png" alt="Lint on save"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;seleccionando &lt;strong&gt;Lint on save&lt;/strong&gt; y continuamos a seleccionar dónde nos gustaría guardar la configuración por lo que seleccionamos &lt;strong&gt;In dedicated config files&lt;/strong&gt; como a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fk7a0l3w93z7butelp1vq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fk7a0l3w93z7butelp1vq.png" alt="Config files selection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y por último nos pregunta si queremos guardar la configuración para futuros proyectos. En mi caso teclee &lt;em&gt;n&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftlxenwvcpl7gwmp4fbep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftlxenwvcpl7gwmp4fbep.png" alt="Preset for projects"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota: toda la selección anterior de configuración la hice de acuerdo a mis necesidades, en caso de necesitar alguna distinta sí puede utilizarse.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Una vez finalizada la configuración, procedemos a agregar un archivo &lt;code&gt;Dockerfile&lt;/code&gt; en la raíz del proyecto. Este archivo sirve como punto de inicio para que Docker genere una imagen de nuestro proyecto a desplegar. &lt;a href="https://docs.docker.com/engine/reference/builder/" rel="noopener noreferrer"&gt;&lt;em&gt;conocer más sobre Dockerfile&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El contenido del archivo es el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Getting alpine version of node   &lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:lts-alpine&lt;/span&gt;
&lt;span class="c"&gt;# Installing https://www.npmjs.com/package/http-server&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; http-server
&lt;span class="c"&gt;# Creating app/&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="c"&gt;# Copying compiled files&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; dist/ .&lt;/span&gt;
&lt;span class="c"&gt;# Exposing port 8080&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["http-server" ]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Nota: este dockerfile funciona una vez hecho el &lt;a href="https://cli.vuejs.org/guide/build-targets.html#app" rel="noopener noreferrer"&gt;building&lt;/a&gt; de la aplicación pues busca la carpeta &lt;code&gt;dist/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ya teniendo el archivo Dockerfile guardado, procedemos a generar el build del proyecto escribiendo en nuestra terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dicho comando lo que realmente va a ejecutar será&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;vue&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;cli&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;generando pues, la carpeta &lt;code&gt;/dist&lt;/code&gt; en la raíz del proyecto.&lt;/p&gt;

&lt;h1&gt;
  
  
  Docker
&lt;/h1&gt;

&lt;p&gt;procedemos ahora a la creación de la imagen de Docker, para ello, previamente necesitaremos una cuenta en &lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;DockerHub&lt;/a&gt; pues haremos login a ella mediante la consola introduciendo el comando &lt;code&gt;docker login&lt;/code&gt; para ingresar después nuestras credenciales.&lt;/p&gt;

&lt;p&gt;Posterior haremos el build de la imagen con el comando&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build . -t &amp;lt;username&amp;gt;/hello-world-vue&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;username&lt;/strong&gt; corresponde al generado en DockerHub. Para conocer más sobre el comando build &lt;a href="https://docs.docker.com/engine/reference/commandline/build/" rel="noopener noreferrer"&gt;click aquí&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;y si exitosamente hacemos el build obtendremos algo similar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Sending build context to Docker daemon  180.5MB
Step 1/6 : FROM node:lts-alpine
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 927d03058714
Step 2/6 : RUN npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; http-server
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 074475e54368
Step 3/6 : WORKDIR /app
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 8c6551a57c4e
Step 4/6 : COPY dist/ &lt;span class="nb"&gt;.&lt;/span&gt;
f &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 8898c0140bc9
Step 5/6 : EXPOSE 8080
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Running &lt;span class="k"&gt;in &lt;/span&gt;5376aa103b41
Removing intermediate container 5376aa103b41
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 41282d6c5a48
Step 6/6 : CMD &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"http-server"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Running &lt;span class="k"&gt;in &lt;/span&gt;4981b6a63db7
Removing intermediate container 4981b6a63db7
 &lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; e4fb5aefd78c
Successfully built e4fb5aefd78c
Successfully tagged luisejrobles/hello-world-vue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para subirlo a DockerHub procedemos a ejecutar el comando&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker push &amp;lt;username&amp;gt;/hello-world-vue&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Para conocer más del comando Push &lt;a href="https://docs.docker.com/engine/reference/commandline/push/" rel="noopener noreferrer"&gt;click aquí&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si todo sale bien en nuestra cuenta de &lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt; tendremos dicha imagen. 🏁&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS ECS
&lt;/h1&gt;

&lt;p&gt;Para la parte final, nos encargaremos de desplegar la imagen subida en Docker Hub a &lt;a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html" rel="noopener noreferrer"&gt;Elastic Container Service&lt;/a&gt; 💯&lt;/p&gt;

&lt;p&gt;Con ello, procedemos a ingresar a nuestra consola de amazon con nuestra cuenta mediante &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;console.aws.amazon.com&lt;/a&gt;. Una vez dentro, en la sección de &lt;em&gt;Containers&lt;/em&gt; seleccionamos &lt;strong&gt;Elastic Container Service&lt;/strong&gt; en la cual obtendremos una ventana como la siguiente&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5t8suejfj0hghtwsoxu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5t8suejfj0hghtwsoxu6.png" alt="ECS Welcome page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;dando así &lt;strong&gt;Get started&lt;/strong&gt; desplegándonos una imagen como a continuación&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fte228kmvfub64rcyhgdn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fte228kmvfub64rcyhgdn.png" alt="ECS Config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;en la cual en la sección &lt;em&gt;Container definition&lt;/em&gt; damos click en &lt;strong&gt;Configure&lt;/strong&gt; en el recuadro de &lt;strong&gt;Custom&lt;/strong&gt; lo que nos desplega&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhshf0v2kvgg583s5w8no.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhshf0v2kvgg583s5w8no.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;lo cual llenamos de la siguiente manera:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container image:&lt;/strong&gt; hello-world-app&lt;br&gt;
&lt;strong&gt;Image:&lt;/strong&gt; docker.io//hello-world-vue&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memory limit:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Soft:&lt;/em&gt; 300&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Hard:&lt;/em&gt; 400&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Port mappings:&lt;/strong&gt; 8080&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota: username se refiere al de Docker Hub &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Recordando pues, nuestra imagen de docker está configurada para exponer el puerto 8080 _(mediante EXPOSE 8080)_de nuestra aplicación y es por ello que en &lt;strong&gt;Port mapping&lt;/strong&gt; seleccionamos dicho puerto quedando la configuración similar a&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3ah7fi5xrgnu6epofkif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3ah7fi5xrgnu6epofkif.png" alt="Container config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Procedemos a seleccionar &lt;em&gt;Update&lt;/em&gt; lo cual nos regresa a la pantalla principal para poder seleccionar &lt;em&gt;Next&lt;/em&gt; desplegando&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0q7l7785l9jgltue0xch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0q7l7785l9jgltue0xch.png" alt="Task definition"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Damos click en &lt;em&gt;Next&lt;/em&gt; la cual nos arroja&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjecs5bei9jf1jc670y10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjecs5bei9jf1jc670y10.png" alt="Cluster config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la cual en &lt;strong&gt;Cluster definition&lt;/strong&gt; procedemos a poner &lt;code&gt;hello-world-vue&lt;/code&gt; y damos &lt;em&gt;Next&lt;/em&gt;. Lo anterior, nos despliega la información de nuestra aplicación a ser desplegada como a continuación&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvhdovfq1wajnazfn2cqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvhdovfq1wajnazfn2cqa.png" alt="Config review"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y procedemos a darle &lt;em&gt;Create&lt;/em&gt; para esperar unos minutos a que AWS despliegue nuestra aplicación. Una vez aprovisionado todo el servicio nos mostrará&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frpror6ygwipjsdhslb6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frpror6ygwipjsdhslb6i.png" alt="ECS ready"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dando pues click en &lt;em&gt;View service&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Después en &lt;strong&gt;Tasks&lt;/strong&gt;, seleccionamos el task generado &lt;em&gt;(es alfanumérico)&lt;/em&gt; y dentro de ahí en la sección de &lt;strong&gt;Network&lt;/strong&gt; agarramos el &lt;strong&gt;Public IP&lt;/strong&gt; y lo pegamos en nuestro navegador añadiéndole al final &lt;em&gt;:8080&lt;/em&gt;&lt;br&gt;
desplegando así en el navegador nuestra app ✨&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F728uv3rrrvegwsrl8etg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F728uv3rrrvegwsrl8etg.png" alt="Vue app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con ello, hemos finalizado el despliegue de nuestra app que resultó ser bastante sencillo. Cabe mencionar que &lt;strong&gt;ECS&lt;/strong&gt; utiliza &lt;a href="https://aws.amazon.com/es/fargate/" rel="noopener noreferrer"&gt;&lt;em&gt;Fargate&lt;/em&gt;&lt;/a&gt; por detrás por si quieren leer más sobre ello.&lt;/p&gt;

&lt;p&gt;Les dejo a continuación los recursos consultados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html" rel="noopener noreferrer"&gt;Documentación AWS ECS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cli.vuejs.org/guide/" rel="noopener noreferrer"&gt;Documentación Vue CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>vue</category>
      <category>docker</category>
    </item>
    <item>
      <title>Un vistazo a git: aliases</title>
      <dc:creator>Luis Eduardo Jiménez Robles</dc:creator>
      <pubDate>Fri, 07 Jun 2019 03:14:16 +0000</pubDate>
      <link>https://dev.to/luisejrobles/un-vistazo-a-git-aliases-2kop</link>
      <guid>https://dev.to/luisejrobles/un-vistazo-a-git-aliases-2kop</guid>
      <description>&lt;p&gt;Si por alguna razón o determinación estamos en esto de la programación ya te habrás dado cuenta que mucho de lo que se hace en la industria es colaborar contrario a lo que malamente piensa, cuando de ello se trata una de las herramientas indispensables es &lt;a href="https://git-scm.com/"&gt;&lt;strong&gt;git&lt;/strong&gt;&lt;/a&gt;. En esta ocasión toca el turno de escribir acerca de &lt;strong&gt;git aliases&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Qué son los git aliases?
&lt;/h4&gt;

&lt;p&gt;Los &lt;strong&gt;aliases&lt;/strong&gt; o sobrenombres son acrónimos o 'apodos' los cuales asignas a los comandos que ya conocemos de git.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Cómo lo hacemos?
&lt;/h4&gt;

&lt;p&gt;Para configurar los acrónimos tenemos que hacerlos por medio del comando&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git config&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;y para ello, tenemos la oportunidad de declararlos de manera global &lt;em&gt;(para hacer uso de ellos en cualquier carpeta versionada)&lt;/em&gt; agregándole la bandera &lt;code&gt;--global&lt;/code&gt; o de manera local &lt;em&gt;(aliases por carpeta versionada)&lt;/em&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si no queremos hacer uso del comando &lt;code&gt;git config&lt;/code&gt; podemos configurar dichos aliases por medio de &lt;code&gt;.git/config&lt;/code&gt; &lt;em&gt;local&lt;/em&gt; o &lt;code&gt;~/.gitconfig&lt;/code&gt; &lt;em&gt;global&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  Ejemplo
&lt;/h5&gt;

&lt;p&gt;Queremos configurar un acrónimo para &lt;strong&gt;commit&lt;/strong&gt; de manera &lt;strong&gt;local&lt;/strong&gt;, la manera de hacerlo es:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config alias.co commit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Si queremos configurarlo de manera &lt;strong&gt;global&lt;/strong&gt; sería:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global alias.co commit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;¿Recuerdan que les comenté de la bandera &lt;code&gt;--global&lt;/code&gt;?&lt;/em&gt;&lt;br&gt;
😉&lt;/p&gt;

&lt;p&gt;Ahora con ello ya podemos hacer uso de nuestro nuevo acrónimo así:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git co -m '¡nuevo commit utilizando aliases!'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;¿Qué pasa si también nos es molesto escribir el -m?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bueno, podemos tambien concatenar banderas de la siguiente forma:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config alias.com 'commit -m'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/s2qXK8wAvkHTO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/s2qXK8wAvkHTO/giphy.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Así de sencillo es hacer uso de dicha funcionalidad dejando a su imaginación los diferetes acrónimos que pueden crear con el fin de agilizar y ahorrar tiempo a la hora de programar. 🤙 &lt;/p&gt;

&lt;p&gt;¡Espero les haya gustado y nos estaremos leyendo en el siguiente post que será publicado el día jueves!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feedback es bienvenido ✨&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>programming</category>
      <category>development</category>
      <category>beginnerfriendly</category>
    </item>
  </channel>
</rss>
