Diseño de la arquitectura de su aplicación para Amazon ECS
La arquitectura de la aplicación se hace mediante la creación de una definición de tareas para la aplicación. La definición de tareas contiene los parámetros que definen la información acerca de la aplicación, entre los que se incluyen los siguientes:
-
Tipo de lanzamiento que se debe utilizar que determina la infraestructura en la que se alojan las tareas.
Cuando se utiliza el tipo de lanzamiento de EC2, también se elige el tipo de instancia. Para algunos tipos de instancias, como la GPU, debe configurar otros parámetros. Para obtener más información, consulte Casos de uso de definiciones de tareas de Amazon ECS.
-
Imagen del contenedor que contiene el código de la aplicación y todas las dependencias que el código de la aplicación requiere para ejecutarse.
-
Modo de red que se debe utilizar para los contenedores en la tarea
El modo de red determina cómo se comunica la tarea a través de la red.
Para las tareas que se ejecutan en una instancia de EC2, hay varias opciones, pero recomendamos utilizar el modo de red de
awsvpc
. El modo de red deawsvpc
simplifica las redes de contenedores, porque proporciona mayor control sobre la comunicación de las aplicaciones entre sí y con los demás servicios de las VPC.Para las tareas que se ejecutan en Fargate, solo puede usar el modo de red de
awsvpc
. -
Configuración de registros que se va a utilizar para las tareas.
-
Volúmenes de datos que se utilizan con los contenedores en la tarea.
Para obtener una lista completa de parámetros de definición de tareas, consulte Parámetros de definición de tareas de Amazon ECS.
Utilice las siguientes pautas al crear las definiciones de tareas:
-
Utilice cada familia de definiciones de tareas para un solo propósito empresarial.
Si agrupa varios tipos de contenedores de aplicaciones en la misma definición de tarea, no podrá escalar esos contenedores de forma independiente. Por ejemplo, es poco probable que tanto un sitio web como una API requieran un escalado horizontal con la misma frecuencia. A medida que aumente el tráfico, se necesitará un número diferente de contenedores web que de contenedores de API. Si estos dos contenedores se implementan en la misma definición de tarea, cada tarea ejecuta la misma cantidad de contenedores web y contenedores de API.
-
Haga coincidir cada versión de la aplicación con una revisión de la definición de tareas dentro de una familia de definiciones de tareas.
Dentro de una familia de definiciones de tareas, considere cada revisión de la definición de tareas como una instantánea puntual de la configuración de una imagen de contenedor concreta. Esto es similar a cómo el contenedor es una instantánea de todo lo que se necesita para ejecutar una versión concreta del código de la aplicación.
Asegúrese de que haya una asignación con correspondencia entre una versión del código de la aplicación, una etiqueta de imagen del contenedor y una revisión de la definición de la tarea. Un proceso de publicación típico implica una confirmación de git que se convierte en una imagen de contenedor etiquetada con el código SHA de la confirmación de git. Luego, esa etiqueta de imagen del contenedor recibe su propia revisión de la definición de tareas de Amazon ECS. Por último, se actualiza el servicio de Amazon ECS para indicarle que implemente la nueva revisión de la definición de tareas.
-
Utilice diferentes roles de IAM para cada familia de definiciones de tareas.
Defina cada definición de tarea con su propio rol de IAM. Esta recomendación debe hacerse junto con nuestra recomendación de proporcionar a cada componente empresarial su propia familia de definiciones de tareas. Al implementar estas dos prácticas recomendadas, puede limitar el acceso de cada servicio a los recursos de la cuenta de AWS. Por ejemplo, puede dar acceso al servicio de autenticación para que se conecte a la base de datos de contraseñas. Al mismo tiempo, también puede asegurarse de que solo el servicio de pedidos tenga acceso a la información de pago con tarjeta de crédito.