Amazon Elastic Container Service
Amazon Elastic Container Service
Las marcas comerciales y la imagen comercial de Amazon no se pueden utilizar en relación con ningún producto o
servicio que no sea de Amazon de ninguna manera que pueda causar confusión entre los clientes y que menosprecie
o desacredite a Amazon. Todas las demás marcas comerciales que no son propiedad de Amazon son propiedad de
sus respectivos propietarios, que pueden o no estar afiliados, conectados o patrocinados por Amazon.
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Table of Contents
Introduction ........................................................................................................................................ 1
Redes ............................................................................................................................................... 2
Conexión a Internet .................................................................................................................... 2
Uso de una subred pública y una puerta de enlace a Internet .................................................... 3
Uso de una subred privada y una puerta de enlace NAT .......................................................... 4
Recibir conexiones entrantes de Internet ........................................................................................ 5
Balanceador de carga de aplicaciones ................................................................................... 5
Balanceador de carga de red ............................................................................................... 6
API HTTP de Amazon API Gateway ...................................................................................... 7
Elección de un modo de red ........................................................................................................ 8
Modo de host .................................................................................................................... 9
Modo de puente ............................................................................................................... 10
Modo AWSVSVSVPC ........................................................................................................ 12
Conexión aAWSservices ............................................................................................................ 15
Gateway NAT ................................................................................................................... 15
AWS PrivateLink ............................................................................................................... 17
Redes entre los servicios de Amazon ECS ................................................................................... 18
Uso de detección de servicios ............................................................................................ 18
Uso de un balanceador de carga interno .............................................................................. 19
Uso de una malla de servicios ............................................................................................ 20
Servicios de red a través deAWScuentas y VPC ........................................................................... 21
Optimización y solución de problemas ......................................................................................... 22
Información de Container CloudWatch ................................................................................. 22
AWS X-Ray ..................................................................................................................... 22
Logs de flujo de VPC ........................................................................................................ 23
Consejos de ajuste de red ................................................................................................. 24
Escalado automático y administración de capacidad .............................................................................. 25
Determinar el tamaño de tarea ................................................................................................... 25
Aplicaciones sin estado ..................................................................................................... 26
Otras aplicaciones ............................................................................................................. 26
Configuración de escalado automático de servicio ......................................................................... 26
Caracterización de la aplicación .......................................................................................... 26
Disponibilidad y capacidad ......................................................................................................... 30
Maximizar la velocidad de escalado ..................................................................................... 31
Manifiesto de demanda ...................................................................................................... 32
Capacidad de clúster ................................................................................................................. 33
Prácticas recomendadas para la capacidad .......................................................................... 33
Elegir tamaños de tarea de Fargate ............................................................................................ 34
Elección del tipo de instancia Amazon EC2 .................................................................................. 34
Uso de Amazon EC2 Spot y FARGATE_SPOT ............................................................................. 34
Almacenamiento persistente ............................................................................................................... 36
Elección del tipo de almacenamiento adecuado ............................................................................. 37
Amazon EFS ............................................................................................................................ 38
Controles de seguridad y acceso ........................................................................................ 39
Performance ..................................................................................................................... 40
Throughput ...................................................................................................................... 41
Cost optimization (Optimización de costos) ........................................................................... 41
Protección de los datos ..................................................................................................... 42
Casos de uso ................................................................................................................... 42
Volúmenes de Docker ............................................................................................................... 43
Ciclo de vida de los volúmenes de Amazon EBS ................................................................... 43
Disponibilidad de datos de Amazon EBS .............................................................................. 44
Complementos de volumen de Docker ................................................................................. 44
Amazon FSx para el servidor de archivos de Windows ................................................................... 44
iii
Amazon Elastic Container Service
Guía de prácticas recomendadas de
iv
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Introduction
Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores muy
escalable y rápido que le facilita la tarea de ejecutar, detener y administrar contenedores en un clúster.
En esta guía se describen muchas de las mejores prácticas operativas más importantes, al tiempo que
se explican los temas principales en los que se basa el funcionamiento de las aplicaciones basadas
en Amazon ECS. El objetivo es proporcionar un enfoque concreto y práctico para operar y solucionar
problemas de aplicaciones basadas en Amazon ECS.
Esta guía se revisará periódicamente para incorporar las nuevas prácticas recomendadas de Amazon
ECS. Si tiene alguna pregunta o comentarios acerca de cualquiera de los contenidos de esta guía, plantee
un problema en el repositorio de GitHub. Para obtener más información, consulteGuía de prácticas
recomendadas de Amazon ECSen GitHub.
1
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Conexión a Internet
Esta guía presenta las prácticas recomendadas para crear una red en la que los componentes de la
aplicación puedan comunicarse entre sí de forma segura y escalable.
Temas
• Conexión a Internet (p. 2)
• Recibir conexiones entrantes de Internet (p. 5)
• Elección de un modo de red (p. 8)
• Conexión aAWSdesde el interior de su VPC (p. 15)
• Redes entre servicios de Amazon ECS en una VPC (p. 18)
• Servicios de red a través deAWScuentas y VPC (p. 21)
• Optimización y solución de problemas (p. 22)
Conexión a Internet
La mayoría de las aplicaciones contenedorizadas tienen al menos algunos componentes que necesitan
acceso saliente a Internet. Por ejemplo, el back-end de una aplicación móvil requiere acceso saliente para
notificaciones push.
Amazon Virtual Private Cloud cuenta con dos métodos principales para facilitar la comunicación entre su
VPC e Internet.
Temas
• Uso de una subred pública y una puerta de enlace a Internet (p. 3)
• Uso de una subred privada y una puerta de enlace NAT (p. 4)
2
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Uso de una subred pública y una puerta de enlace a Internet
Si utiliza una subred pública que tiene una ruta a una gateway de Internet, la aplicación en contenedores
puede ejecutarse en un host dentro de una VPC en una subred pública. Se le asigna una dirección IP
pública al host que ejecuta el contenedor. Esta dirección IP pública se puede enrutar desde Internet. Para
obtener más información, consultePuertos de enlace a interneten laGuía del usuario de Amazon VPC.
Esta arquitectura de red facilita la comunicación directa entre el host que ejecuta la aplicación y otros hosts
en Internet. La comunicación es bidireccional. Esto significa que no solo puede establecer una conexión
saliente con cualquier otro host en Internet, sino que otros hosts de Internet también podrían intentar
conectarse a su host. Por lo tanto, debe prestar mucha atención a sus reglas de grupo de seguridad y
firewall. Esto es para garantizar que otros hosts en Internet no puedan abrir ninguna conexión que no
desee que se abra.
Por ejemplo, si la aplicación se está ejecutando en Amazon EC2, asegúrese de que el puerto 22 para
acceso SSH no esté abierto. De lo contrario, su instancia podría recibir constantes intentos de conexión
SSH de bots macizos en Internet. Estos bots arrastran a través de direcciones IP públicas. Después de
encontrar un puerto SSH abierto, intentan forzar contraseñas brutas para intentar acceder a su instancia.
3
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Uso de una subred privada y una puerta de enlace NAT
Debido a esto, muchas organizaciones limitan el uso de subredes públicas y prefieren tener la mayoría, si
no todos, de sus recursos dentro de subredes privadas.
El uso de subredes públicas para redes es adecuado para aplicaciones públicas que requieren grandes
cantidades de ancho de banda o latencia mínima. Los casos de uso aplicables incluyen transmisión de
vídeo y servicios de juegos.
Este enfoque de red es compatible tanto cuando utiliza Amazon ECS en Amazon EC2 como cuando lo
utiliza enAWS Fargate.
• Uso de Amazon EC2: puede lanzar instancias EC2 en una subred pública. Amazon ECS utiliza estas
instancias de EC2 como capacidad de clúster y cualquier contenedor que se ejecute en las instancias
puede utilizar la dirección IP pública subyacente del host para redes salientes. Esto se aplica tanto a
lahostybridgemodos de red. Sin embargo, elawsvpcEl modo de red no proporciona ENI de tareas con
direcciones IP públicas. Por lo tanto, no pueden hacer uso directo de una puerta de enlace a Internet.
• Uso de Fargate: cuando cree su servicio de Amazon ECS, especifique las subredes públicas para la
configuración de red de su servicio y asegúrese de queAsignar una dirección IP públicaestá habilitada.
Cada tarea de Fargate está conectada en red en la subred pública y tiene su propia dirección IP pública
para la comunicación directa con Internet.
Mediante el uso de una subred privada y una puerta de enlace NAT, puede ejecutar la aplicación en
contenedor en un host que se encuentre en una subred privada. Como tal, este host tiene una dirección IP
privada que es enrutable dentro de su VPC, pero no es enrutable desde Internet. Esto significa que otros
hosts dentro de la VPC pueden hacer conexiones con el host utilizando su dirección IP privada, pero otros
hosts en Internet no pueden realizar ninguna comunicación entrante con el host.
4
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recibir conexiones entrantes de Internet
Con una subred privada, puede utilizar una gateway de conversión de las direcciones de red (NAT) para
permitir a un host de la subred privada conectarse a Internet. Los hosts de Internet reciben una conexión
entrante que parece provenir de la dirección IP pública de la puerta de enlace NAT que está dentro de
una subred pública. La puerta de enlace NAT es responsable de servir de puente entre Internet y la
VPC privada. Esta configuración suele ser preferida por razones de seguridad, ya que significa que su
VPC está protegida contra el acceso directo de los atacantes en Internet. Para obtener más información,
consulteGateways NATen laGuía del usuario de Amazon VPC.
Este enfoque de red privada es adecuado para escenarios en los que desea proteger sus contenedores
del acceso externo directo. Los escenarios aplicables incluyen sistemas de procesamiento de pagos
o contenedores que almacenan datos de usuario y contraseñas. Se le cobrará por la creación y el uso
de una gateway NAT en su cuenta. También se aplican las tarifas de procesamiento de datos y uso
por horas de la gateway NAT. Para fines de redundancia, debe tener una gateway NAT en cada zona
de disponibilidad. De esta forma, la pérdida de disponibilidad de una única zona de disponibilidad no
compromete su conectividad saliente. Debido a esto, si tiene una carga de trabajo pequeña, podría ser
más rentable usar subredes privadas y puertas de enlace NAT.
Este enfoque de red es compatible tanto cuando se utiliza Amazon ECS en Amazon EC2 como cuando se
utiliza enAWS Fargate.
• Uso de Amazon EC2: puede lanzar instancias EC2 en una subred privada. Los contenedores que se
ejecutan en estos hosts EC2 utilizan la red de hosts subyacentes y las solicitudes salientes pasan a
través de la puerta de enlace NAT.
• Uso de Fargate: cuando cree su servicio de Amazon ECS, especifique subredes privadas para la
configuración de red de su servicio y no habilite la opciónAsignar una dirección IP públicaOpción de.
Cada tarea de Fargate está alojada en una subred privada. Su tráfico saliente se enruta a través de
cualquier puerta de enlace NAT que haya asociado a esa subred privada.
Un enfoque para este problema es lanzar los contenedores en hosts que se encuentran en una subred
pública con una dirección IP pública. Sin embargo, no es recomendable para aplicaciones a gran escala.
Para estos, un mejor enfoque es tener una capa de entrada escalable que se encuentre entre Internet y su
aplicación. Para este método, puede utilizar cualquiera de lasAWSenumerados en esta sección como una
entrada.
Temas
• Balanceador de carga de aplicaciones (p. 5)
• Balanceador de carga de red (p. 6)
• API HTTP de Amazon API Gateway (p. 7)
5
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Balanceador de carga de red
Con esta arquitectura, se crea un Application Load Balancer en una subred pública para que tenga una
dirección IP pública y pueda recibir conexiones entrantes desde Internet. Cuando el Application Load
Balancer recibe una conexión entrante, o más específicamente una solicitud HTTP, abre una conexión a la
aplicación utilizando su dirección IP privada. Luego, reenvía la solicitud a través de la conexión interna.
• Terminación SSL/TLS: un Application Load Balancer puede mantener comunicaciones HTTPS seguras y
certificados para las comunicaciones con clientes. Opcionalmente, puede terminar la conexión SSL en el
nivel del equilibrador de carga para que no tenga que manejar certificados en su propia aplicación.
• Enrutamiento avanzado: un Application Load Balancer puede tener varios nombres de host DNS.
También cuenta con capacidades avanzadas de enrutamiento para enviar solicitudes HTTP entrantes a
diferentes destinos en función de métricas como el nombre de host o la ruta de la solicitud. Esto significa
que puede usar un único Application Load Balancer como entrada para muchos servicios internos
diferentes, o incluso microservicios en diferentes rutas de una API REST.
• Soporte de gRPC y websockets: un Application Load Balancer puede manejar algo más que HTTP.
También puede equilibrar la carga gRPC y servicios basados en websocket, con soporte HTTP/2.
• Seguridad: un Application Load Balancer ayuda a proteger la aplicación del tráfico malintencionado.
Incluye características como mitigaciones de sincronización HTTP y está integrado con AWS Web
Application Firewall (AWS WAF).AWS WAFpuede filtrar aún más el tráfico malicioso que podría contener
patrones de ataque, como inyección SQL o secuencias de comandos entre sitios.
6
Amazon Elastic Container Service
Guía de prácticas recomendadas de
API HTTP de Amazon API Gateway
Cuando se utiliza un Network Load Balancer como entrada, funciona de forma similar a un Application
Load Balancer. Esto se debe a que se crea en una subred pública y tiene una dirección IP pública a la que
se puede acceder en Internet. A continuación, el Network Load Balancer abre una conexión a la dirección
IP privada del host que ejecuta el contenedor y envía los paquetes desde el lado público al lado privado.
Dado que el Network Load Balancer funciona en un nivel inferior de la pila de redes, no tiene el
mismo conjunto de características que el Application Load Balancer. Sin embargo, tiene las siguientes
características importantes.
• Cifrado de extremo a extremo: dado que un equilibrador de carga de red funciona en la cuarta capa del
modelo OSI, no lee el contenido de los paquetes. De ese modo resulta adecuado para comunicaciones
de balanceamiento de carga que necesitan un cifrado integral.
• Cifrado TLS: además del cifrado de extremo a extremo, Network Load Balancer también puede terminar
las conexiones TLS. De esta manera, sus aplicaciones back-end no tienen que implementar su propio
TLS.
• Compatibilidad con UDP: dado que un Network Load Balancer funciona en la cuarta capa del modelo
OSI, es adecuado para cargas de trabajo y protocolos no HTTP distintos de TCP.
7
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Elección de un modo de red
El modelo de precios para el Application Load Balancer y el Network Load Balancer incluye un precio por
hora para mantener los equilibradores de carga disponibles para aceptar conexiones entrantes en todo
momento. Por el contrario, API Gateway cobra por cada solicitud por separado. Esto tiene el efecto de
que, si no hay solicitudes, no hay cargos. Bajo cargas de tráfico elevadas, un Application Load Balancer
o un Network Load Balancer pueden manejar un mayor volumen de solicitudes a un precio por solicitud
más barato que API Gateway. Sin embargo, si tiene un número reducido de solicitudes en general o tiene
períodos de tráfico bajo, el precio acumulado por usar API Gateway debería ser más rentable que pagar un
cargo por hora para mantener un equilibrador de carga que está siendo infrautilizado.
API Gateway funciona mediante un enlace VPC que permite elAWSpara conectarse a hosts dentro de la
subred privada de su VPC, utilizando su dirección IP privada. Puede detectar estas direcciones IP privadas
mirandoAWS Cloud Mapregistros de detección de servicios gestionados por la detección de servicios de
Amazon ECS.
• Terminación SSL/TLS
• Enrutamiento de diferentes rutas HTTP a diferentes microservicios back-end
Además de las características anteriores, API Gateway también admite el uso de autorizadores Lambda
personalizados que puede utilizar para proteger su API contra el uso no autorizado. Para obtener más
información, consulteNotas de campo: API basadas en contenedor sin servidor con Amazon ECS y
Amazon API Gateway.
Temas
• Modo de host (p. 9)
8
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modo de host
Modo de host
Lahostes el modo de red más básico compatible con Amazon ECS. Usando el modo host, la red del
contenedor está vinculada directamente al host subyacente que ejecuta el contenedor.
Supongamos que está ejecutando un contenedor Node.js con una aplicación Express que escucha
en el puerto3000De forma similar a la ilustrada en el diagrama anterior. Cuando se utiliza lahost, el
contenedor recibe tráfico en el puerto 3000 utilizando la dirección IP de la instancia de Amazon EC2 del
host subyacente. No recomendamos el uso de este modo.
Hay inconvenientes importantes en el uso de este modo de red. No puede ejecutar más de una sola
instancia de una tarea en cada host. Esto se debe a que solo la primera tarea puede enlazar a su puerto
requerido en la instancia de Amazon EC2. Tampoco hay forma de reasignar un puerto contenedor cuando
está usandohosten el modo de red. Por ejemplo, si una aplicación necesita escuchar un número de
puerto determinado, no puede volver a asignar el número de puerto directamente. En su lugar, debe
administrar cualquier conflicto de puertos cambiando la configuración de la aplicación.
También hay implicaciones para la seguridad cuando se utiliza elhosten el modo de red. Este modo
permite a los contenedores suplantar el host y permite que los contenedores se conecten a los servicios de
red de bucle invertido privados en el host.
Lahostsolo se admite en tareas de Amazon ECS alojadas en instancias de Amazon EC2. No se admite
cuando se utiliza Amazon ECS en Fargate.
9
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modo de puente
Modo de puente
conbridge, está utilizando un puente de red virtual para crear una capa entre el host y la red del
contenedor. De esta forma, puede crear asignaciones de puertos que reasignen un puerto host a un puerto
contenedor. Las asignaciones pueden ser estáticas o dinámicas.
Con una asignación de puertos estáticos, puede definir explícitamente qué puerto host desea asignar a un
puerto contenedor. Usando el ejemplo anterior, puerto80en el host se está asignando al puerto3000en el
contenedor. Para comunicarse con la aplicación contenedorizada, envía tráfico al puerto80En la dirección
IP de la instancia de Amazon EC2. Desde la perspectiva de la aplicación en contenedores, ve que el tráfico
entrante en el puerto3000.
Si solo desea cambiar el puerto de tráfico, entonces las asignaciones de puertos estáticos son adecuadas.
Sin embargo, esto todavía tiene la misma desventaja que usar elhosten el modo de red. No puede
ejecutar más de una sola instancia de una tarea en cada host. Esto se debe a que una asignación de
puertos estáticos sólo permite asignar un único contenedor al puerto 80.
Para solucionar este problema, considere la posibilidad de utilizar elbridgeCon una asignación de puertos
dinámica, tal y como se muestra en el siguiente diagrama.
10
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modo de puente
Al no especificar un puerto host en la asignación de puertos, puede hacer que Docker elija un puerto
aleatorio no utilizado del rango de puertos efímero y lo asigne como puerto de host público para el
contenedor. Por ejemplo, la aplicación Node.js que escucha en el puerto3000en el contenedor se le
puede asignar un puerto de número alto aleatorio, como47760en el host de Amazon EC2. Hacer esto
significa que puede ejecutar varias copias de ese contenedor en el host. Además, a cada contenedor se
le puede asignar su propio puerto en el host. Cada copia del contenedor recibe tráfico en el puerto3000.
Sin embargo, los clientes que envían tráfico a estos contenedores utilizan los puertos de host asignados
aleatoriamente.
Amazon ECS le ayuda a realizar un seguimiento de los puertos asignados aleatoriamente para cada
tarea. Lo hace actualizando automáticamente los grupos de destino del equilibrador de carga yAWS Cloud
Mappara tener la lista de direcciones IP y puertos de tareas. De ese modo resulta más sencillo utilizar los
servicios que operan conbridgecon puertos dinámicos.
Sin embargo, una desventaja de usar elbridgees que es difícil bloquear las comunicaciones de servicio
a servicio. Debido a que los servicios pueden asignarse a cualquier puerto aleatorio no utilizado, es
necesario abrir amplios rangos de puertos entre hosts. Sin embargo, no es fácil crear reglas específicas
para que un servicio determinado solo pueda comunicarse con otro servicio específico. Los servicios no
tienen puertos específicos para usar para reglas de red de grupos de seguridad.
Labridgesolo se admite en tareas de Amazon ECS alojadas en instancias de Amazon EC2. No se admite
cuando se utiliza Amazon ECS en Fargate.
11
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modo AWSVSVSVPC
Modo AWSVSVSVPC
Con elawsvpc, Amazon ECS crea y administra una interfaz de red elástica (ENI) para cada tarea y cada
tarea recibe su propia dirección IP privada dentro de la VPC. Este ENI es independiente de los hosts
subyacentes ENI. Si una instancia de Amazon EC2 ejecuta varias tareas, el ENI de cada tarea también es
independiente.
En el ejemplo anterior, la instancia de Amazon EC2 se asigna a un ENI. El ENI representa la dirección
IP de la instancia EC2 utilizada para las comunicaciones de red en el nivel de host. Cada tarea también
tiene una ENI correspondiente y una dirección IP privada. Debido a que cada ENI es independiente,
cada contenedor puede vincularse al puerto80en la tarea ENI. Por lo tanto, no es necesario realizar un
seguimiento de los números de puerto. En su lugar, puede enviar tráfico al puerto80En la dirección IP de la
ENI.
La ventaja de usar elawsvpces que cada tarea tiene un grupo de seguridad separado para permitir o
denegar el tráfico. Esto significa que tiene mayor flexibilidad para controlar las comunicaciones entre tareas
y servicios a un nivel más detallado. También puede configurar una tarea para denegar el tráfico entrante
de otra tarea ubicada en el mismo host.
Laawsvpces compatible con las tareas de Amazon ECS alojadas tanto en Amazon EC2 como en Fargate.
Tenga en cuenta que, al usar Fargate, elawsvpces necesario el modo de red.
12
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modo AWSVSVSVPC
Cuando se utiliza el enlace troncal ENI, se utilizan dos adjuntos ENI de forma predeterminada. El primero
es el ENI principal de la instancia, que se utiliza para cualquier proceso de nivel de host. El segundo es el
ENI troncal, que Amazon ECS crea. Esta característica solo se admite en tipos de instancias de Amazon
EC2.
Considere este ejemplo. Sin el enlace troncal ENI, unc5.largeque tiene dos vCPUs sólo puede alojar
dos tareas. Sin embargo, con el enlace troncal ENI, unc5.largeque tiene dos vCPU puede alojar hasta
diez tareas. Cada tarea tiene una dirección IP y un grupo de seguridad diferentes. Para obtener más
información acerca de los tipos de instancias disponibles y su densidad, consulteTipos de instancias de
Amazon EC2 admitidosen laGuía de Amazon Elastic Container Service.
El enlace troncal ENI no tiene ningún impacto en el rendimiento del tiempo de ejecución en términos de
latencia o ancho de banda. Sin embargo, aumenta el tiempo de inicio de la tarea. Debe asegurarse de
que, si se utiliza el enlace troncal ENI, las reglas de escalado automático y otras cargas de trabajo que
dependen del tiempo de inicio de la tarea siguen funcionando como espera.
Para obtener más información, consulteTrunking de interfaz de red elásticaen laGuía de Amazon Elastic
Container Service.
13
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modo AWSVSVSVPC
Las aplicaciones se distribuyen en tres subredes en tres zonas de disponibilidad para lograr una alta
disponibilidad. En este caso, puede utilizar aproximadamente 12.000 direcciones IP en las tres subredes.
Mediante la conexión troncal ENI, cada instancia de Amazon EC2 que inicie requiere dos direcciones
IP. Una dirección IP se utiliza para la ENI principal y la otra dirección IP para la ENI troncal. Cada
tarea de Amazon ECS de la instancia requiere una dirección IP. Si está iniciando una carga de trabajo
extremadamente grande, podría quedarse sin direcciones IP disponibles. Esto puede dar lugar a errores
de inicio de Amazon EC2 o errores en el inicio de tareas. Estos errores se producen porque los ENI no
pueden agregar direcciones IP dentro de la VPC si no hay direcciones IP disponibles.
Cuando se utiliza laawsvpc, debe evaluar sus requisitos de dirección IP y asegurarse de que los rangos
CIDR de subred satisfagan sus necesidades. Si ya ha comenzado a utilizar una VPC que tiene subredes
pequeñas y comienza a quedarse sin espacio de direcciones, puede agregar una subred secundaria.
Mediante el enlace troncal ENI, el CNI de Amazon VPC se puede configurar para utilizar ENI en
un espacio de direcciones IP diferente al del host. De este modo, puede proporcionar a su host
de Amazon EC2 y a sus tareas distintos rangos de direcciones IP que no se superponen. En
el diagrama de ejemplo, la dirección IP del host EC2 se encuentra en una subred que tiene la
propiedad172.31.16.0/20Rango de IP. Sin embargo, las tareas que se ejecutan en el host se asignan
direcciones IP en el100.64.0.0/19Rango de. Al usar dos rangos de IP independientes, no necesita
preocuparse por las tareas que consumen demasiadas direcciones IP y no dejan suficientes direcciones IP
para las instancias.
No puede deshabilitar la compatibilidad con IPv4 para su VPC y sus subredes para solucionar problemas
de agotamiento de IPv4. Sin embargo, con la compatibilidad con IPv6, puede utilizar algunas capacidades
nuevas, específicamente la gateway de Internet de solo salida. Una gateway de Internet de solo salida
permite a las tareas utilizar su dirección IPv6 de enrutamiento público para iniciar las conexiones salientes
14
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Conexión aAWSservices
a Internet. Pero la gateway de Internet de solo salida no permite las conexiones de Internet. Para obtener
más información, consulteGateways de Internet de solo salidaen laGuía del usuario de Amazon VPC.
Temas
• Gateway NAT (p. 15)
• AWS PrivateLink (p. 17)
Gateway NAT
El uso de una puerta de enlace NAT es la forma más sencilla de garantizar que sus tareas de Amazon
ECS puedan acceder a otrosAWSServicios de . Para obtener más información acerca de este enfoque,
consulteUso de una subred privada y una puerta de enlace NAT (p. 4).
15
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Gateway NAT
• No puede limitar con qué destinos puede comunicarse la puerta de enlace NAT. Tampoco puede limitar
a qué destinos se puede comunicar su neumático back-end sin interrumpir todas las comunicaciones
salientes desde su VPC.
• Las puertas de enlace NAT se cargan por cada GB de datos que pasan. Si utiliza la puerta de enlace
NAT para descargar archivos de gran tamaño desde Amazon S3 o para realizar un gran volumen de
consultas de base de datos a DynamoDB, se le cobrará por cada GB de ancho de banda. Además, las
gateways NAT admiten 5 Gbps de ancho de banda y se amplían automáticamente hasta 45 Gbps. Si se
16
Amazon Elastic Container Service
Guía de prácticas recomendadas de
AWS PrivateLink
dirige a través de una única puerta de enlace NAT, las aplicaciones que requieren conexiones de ancho
de banda muy alto pueden encontrar restricciones de red. Como solución alternativa, puede dividir la
carga de trabajo entre varias subredes y asignar a cada subred su propia puerta de enlace NAT.
AWS PrivateLink
AWS PrivateLinkproporciona conectividad privada entre VPC,AWSy las redes locales sin exponer el tráfico
a Internet público.
Una de las tecnologías utilizadas para lograr esto es el punto final de VPC. Un punto de enlace de la VPC
permite conexiones privadas entre la VPC y laAWSy servicios de punto de enlace de la VPC. El tráfico
entre su VPC y el servicio no sale de la red de Amazon. Un punto de enlace de la VPC no requiere una
gateway de Internet, una gateway privada virtual, un dispositivo NAT, una conexión de VPN niAWS Direct
Connectconexión de. Las instancias de Amazon EC2 de su VPC no necesitan direcciones IP públicas para
comunicarse con los recursos del servicio.
A continuación se indican algunos de los extremos comunes de VPC que se utilizan con el servicio
Amazon ECS.
Muchos otrosAWSadmiten los puntos de enlace de la VPC. Si hace un uso intensivo de cualquierAWS,
debe buscar la documentación específica para ese servicio y cómo crear un extremo de VPC para ese
tráfico.
17
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Redes entre los servicios de Amazon ECS
Este enfoque de la comunicación de servicio a servicio proporciona baja latencia. A primera vista, también
es simple ya que no hay componentes adicionales entre los contenedores. El tráfico viaja directamente de
un contenedor a otro contenedor.
18
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Uso de un balanceador de carga interno
Este enfoque es adecuado cuando se utiliza elawsvpc, donde cada tarea tiene su propia dirección
IP única. La mayoría del software solo admite el uso de DNSA, que se resuelven directamente en
direcciones IP. Cuando se utiliza laawsvpc, la dirección IP de cada tarea es unARegistro de. Sin embargo,
si utilizabridge, varios contenedores podrían estar compartiendo la misma dirección IP. Además, las
asignaciones de puertos dinámicos hacen que los contenedores se asignen aleatoriamente números de
puerto en esa única dirección IP. En este punto, unAya no es suficiente para la detección de servicios.
También debe usar unSRVRegistro de. Este tipo de registro puede realizar un seguimiento de las
direcciones IP y los números de puerto, pero requiere que configure las aplicaciones de forma adecuada.
Es posible que algunas aplicaciones preconstruidas que utilice no admitanSRVRegistros de.
Otra ventaja de laawsvpces que tiene un grupo de seguridad único para cada servicio. Puede configurar
este grupo de seguridad para permitir conexiones entrantes sólo de los servicios ascendentes específicos
que necesitan comunicarse con ese servicio.
19
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Uso de una malla de servicios
contenedor deserviceB, abre una conexión con el balanceador de carga. A continuación, el equilibrador
de carga abre una conexión a un contenedor desdeservice B. El balanceador de carga actúa como un
lugar centralizado para administrar todas las conexiones entre cada servicio.
Si un contenedor deserviceB, entonces el equilibrador de carga puede eliminar ese contenedor del
grupo. El equilibrador de carga también realiza comprobaciones de estado con cada destino descendente
de su grupo y puede eliminar automáticamente los objetivos defectuosos del grupo hasta que vuelvan
a estar en buen estado. Las aplicaciones ya no necesitan ser conscientes de cuántos contenedores
descendentes hay allí. Solo abren sus conexiones con el balanceador de carga.
Este enfoque es ventajoso para todos los modos de red. El equilibrador de carga puede realizar un
seguimiento de las direcciones IP de las tareas cuando se utiliza elawsvpc, así como combinaciones más
avanzadas de dirección IP y puerto cuando se utiliza elbridgeen el modo de red. Distribuye el tráfico de
manera uniforme en todas las combinaciones de direcciones IP y puertos, incluso si varios contenedores
están alojados en la misma instancia de Amazon EC2, solo en puertos diferentes.
La única desventaja de este enfoque es el costo. Para estar altamente disponible, el equilibrador de
carga necesita tener recursos en cada zona de disponibilidad. Esto agrega un costo adicional debido a la
sobrecarga de pagar por el equilibrador de carga y por la cantidad de tráfico que atraviesa el equilibrador
de carga.
Sin embargo, puede reducir los costes generales haciendo que varios servicios compartan un equilibrador
de carga. Esto es especialmente adecuado para los servicios REST que utilizan un Application Load
Balancer. Puede crear reglas de enrutamiento basadas en rutas que redirijan el tráfico a diferentes
servicios. Por ejemplo,/api/user/*podría enrutarse a un contenedor que forma parte deluserservicio,
mientras que/api/order/*podría enrutar a laorderServicio de. Con este enfoque, solo paga por un
Application Load Balancer y tiene una URL coherente para su API. Sin embargo, puede dividir el tráfico en
varios microservicios en el back-end.
20
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Servicios de red a través deAWScuentas y VPC
En el diagrama anterior, cada tarea tiene un sidecar proxy de Envoy. Este sidecar es responsable de
enviar proxy todo el tráfico entrante y saliente para la tarea. El plano de control de App Mesh utilizaAWS
Cloud Mappara obtener la lista de servicios disponibles y las direcciones IP de tareas específicas. A
continuación, App Mesh entrega la configuración al sidecar proxy Envoy. Esta configuración incluye la lista
de contenedores disponibles a los que se pueden conectar. El sidecar proxy de Envoy también realiza
comprobaciones de estado contra cada objetivo para asegurarse de que están disponibles.
Este enfoque proporciona las características del descubrimiento de servicios, con la facilidad del
equilibrador de carga administrado. Las aplicaciones no implementan tanta lógica de equilibrio de carga
dentro de su código porque el sidecar proxy Envoy maneja ese equilibrio de carga. El proxy de Envoy
se puede configurar para detectar errores y reintentar solicitudes fallidas. Además, también se puede
configurar para utilizar MTL para cifrar el tráfico en tránsito y asegurarse de que sus aplicaciones se
comunican a un destino verificado.
Hay algunas diferencias entre un proxy de Envoy y un balanceador de carga. En resumen, con el proxy de
Envoy, usted es responsable de implementar y administrar su propio sidecar proxy de Envoy. El sidecar
proxy Envoy utiliza parte de la CPU y la memoria asignadas a la tarea de Amazon ECS. Esto agrega cierta
sobrecarga al consumo de recursos de tareas y carga de trabajo operacional adicional para mantener y
actualizar el proxy cuando sea necesario.
App Mesh y un proxy de Envoy permiten una latencia extremadamente baja entre tareas. Esto se
debe a que el proxy de Envoy se ejecuta colocado en cada tarea. Sólo hay una instancia para el salto
de red de instancias, entre un proxy de Envoy y otro proxy de Envoy. Esto significa que también hay
menos sobrecarga de red en comparación con cuando se usan equilibradores de carga. Cuando se
utilizan equilibradores de carga, hay dos saltos de red. La primera es desde la tarea ascendente hasta el
equilibrador de carga, y la segunda es desde el equilibrador de carga hasta la tarea descendente.
21
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Optimización y solución de problemas
recomendamos que complemente los componentes de red para ayudar a enrutar el tráfico entre VPC. Para
esto, variosAWSse pueden utilizar para complementar los componentes de red existentes.
• AWS Transit Gateway: debe tener en cuenta primero este servicio de red. Este servicio sirve como
centro central para enrutar las conexiones entre Amazon VPC,AWScuentas y redes locales. Para
obtener más información, consulte¿Qué es una gateway de tránsito?en laGuía de pasarelas de tránsito
de Amazon VPC.
• Compatibilidad con Amazon VPC y VPN: puede utilizar este servicio para crear conexiones VPN de sitio
a sitio para conectar redes locales a su VPC. Para obtener más información, consulte ¿Qué es AWS
Site-to-Site VPN? en la Guía del usuario de AWS Site-to-Site VPN.
• Amazon VPC: puede utilizar el emparejamiento de Amazon VPC para ayudarle a conectar varias VPC,
ya sea en la misma cuenta o entre cuentas. Para obtener más información, consulte ¿Qué es una
interconexión de VPC? en la Amazon VPC Peering Guide.
• VPC compartidas: puede utilizar una VPC y subredes VPC en varias redesAWSCuentas de. Para
obtener más información, consulteUsar VPC compartidasen laGuía del usuario de Amazon VPC.
AWS X-Ray
AWS X-Rayes un servicio de seguimiento que puede utilizar para recopilar información sobre las
solicitudes de red que realiza su aplicación. Puede usar el SDK para instrumentar su aplicación y capturar
tiempos y códigos de respuesta del tráfico entre sus servicios y entre sus servicios yAWSPuntos de enlace
de servicio de. Para obtener más información, consulte¿Qué es ?AWS X-Rayen laAWS X-RayGuía para
desarrolladores.
22
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Logs de flujo de VPC
También puede explorarAWS X-Raygráficos de cómo su red de servicios entre sí. O bien, úsalos para
explorar estadísticas agregadas sobre el rendimiento de cada enlace de servicio a servicio. Por último,
puede profundizar en cualquier transacción específica para ver cómo los segmentos que representan
llamadas de red están asociados con esa transacción en particular.
Puede usar estas características para identificar si hay un cuello de botella de red o si un servicio
específico dentro de la red no funciona como se esperaba.
23
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Consejos de ajuste de red
todas las conexiones de su VPC. Entre ellas se incluyen las conexiones a interfaces de red asociadas con
Elastic Load Balancing, Amazon RDS, puertas de enlace NAT y otras clavesAWSservicios que puede estar
utilizando. Para obtener más información, consulte Registros de flujo de VPC en la Guía del usuario de
Amazon VPC.
Nofile ulimit
Si espera que su aplicación tenga mucho tráfico y maneje muchas conexiones simultáneas, debe tener
en cuenta la cuota del sistema para el número de archivos permitidos. Cuando hay muchos sockets de
red abiertos, cada uno debe estar representado por un descriptor de archivo. Si la cuota del descriptor
de archivo es demasiado baja, limitará los sockets de red,. Esto da como resultado conexiones fallidas o
errores. Puede actualizar la cuota específica del contenedor para el número de archivos en la definición
de tareas de Amazon ECS. Si está ejecutando Amazon EC2 (en lugar deAWS Fargate), es posible que
también tenga que ajustar estas cuotas en su instancia subyacente de Amazon EC2.
net de sysctl
Otra categoría de configuración sintonizable es lasysctlNET. Debe consultar la configuración específica
para su distribución de Linux de elección. Muchas de estas configuraciones ajustan el tamaño de los
búferes de lectura y escritura. Esto puede ayudar en algunas situaciones cuando se ejecutan instancias de
Amazon EC2 a gran escala que tienen muchos contenedores en ellas.
24
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Determinar el tamaño de tarea
Con Amazon ECS, como todos losAWSLos servicios de, paga únicamente por lo que utiliza. Cuando se
diseña adecuadamente, puede ahorrar costos haciendo que su aplicación consuma solo los recursos que
necesita en el momento en que los necesite. Esta guía de prácticas recomendadas muestra cómo ejecutar
sus cargas de trabajo de Amazon ECS de una manera que satisfaga sus objetivos de nivel de servicio, sin
dejar de funcionar de manera rentable.
Temas
• Determinar el tamaño de tarea (p. 25)
• Configuración de escalado automático de servicio (p. 26)
• Disponibilidad y capacidad (p. 30)
• Capacidad de clúster (p. 33)
• Elegir tamaños de tarea de Fargate (p. 34)
• Elección del tipo de instancia Amazon EC2 (p. 34)
• Uso de Amazon EC2 Spot y FARGATE_SPOT (p. 34)
Cuando declara una reserva, declara la cantidad mínima de recursos que requiere una tarea. Su tarea
recibe al menos la cantidad de recursos solicitados. Es posible que su aplicación pueda usar más CPU o
memoria que la reserva que declara. Sin embargo, esto está sujeto a cualquier límite que usted también
haya declarado. El uso de más de la cantidad de la reserva se conoce como explosión. En Amazon ECS,
las reservas están garantizadas. Por ejemplo, si utiliza instancias de Amazon EC2 para proporcionar
capacidad, Amazon ECS no coloca una tarea en una instancia en la que no se pueda realizar la reserva.
Un límite es la cantidad máxima de unidades de CPU o memoria que puede usar su contenedor o tarea.
Cualquier intento de usar más CPU que este imit resulta en la limitación. Cualquier intento de usar más
memoria hace que su contenedor se detenga.
Elegir estos valores puede resultar complicado. Esto se debe a que los valores más adecuados para
su aplicación dependen en gran medida de los requisitos de recursos de su aplicación. La prueba de
carga de su aplicación es la clave para una planificación exitosa de los requisitos de recursos y una mejor
comprensión de los requisitos de su aplicación.
25
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Aplicaciones sin estado
Al determinar una reserva de CPU, considere cómo desea escalar su aplicación para satisfacer los
requisitos de su empresa. Puede utilizar reservas de CPU más pequeñas, como 256 unidades de CPU
(o 1/4 vCPU), para escalar horizontalmente de forma precisa que minimice el costo. Pero, es posible que
no se escalen lo suficientemente rápido como para satisfacer picos significativos en la demanda. Puede
utilizar reservas de CPU más grandes para escalar más rápidamente y, por lo tanto, igualar los picos de
demanda más rápidamente. Sin embargo, las reservas de CPU más grandes son más costosas.
Otras aplicaciones
Para aplicaciones que no escalan horizontalmente, como trabajadores individuales o servidores de bases
de datos, la capacidad y el costo disponibles representan sus consideraciones más importantes. Debe
elegir la cantidad de memoria y CPU en función de lo que las pruebas de carga indican que necesita servir
el tráfico para cumplir con su objetivo de nivel de servicio. Amazon ECS garantiza que la aplicación se
coloque en un host con capacidad adecuada.
Para utilizar el escalado automático del servicio de manera eficaz, debe elegir una métrica de escala
adecuada. En las siguientes secciones se describe cómo elegir una métrica.
Caracterización de la aplicación
Escalar correctamente una aplicación requiere conocer las condiciones en las que se debe escalar la
aplicación y cuándo se debe escalar hacia fuera. En esencia, una aplicación debe ampliarse si se prevé
que la demanda supere la capacidad. Por el contrario, una aplicación se puede escalar para ahorrar costos
cuando los recursos superan la demanda.
• La métrica debe estar correlacionada con la demanda. Cuando los recursos se mantienen estables, pero
la demanda cambia, el valor de la métrica también debe cambiar. La métrica debe aumentar o disminuir
cuando la demanda aumenta o disminuye.
26
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Caracterización de la aplicación
La mejor manera de identificar una métrica de utilización es mediante pruebas de carga en un entorno de
preproducción, como un entorno de ensayo. Las soluciones de pruebas de carga comerciales y de código
abierto están ampliamente disponibles. Estas soluciones normalmente pueden generar carga sintética o
simular tráfico real de usuarios.
Para iniciar el proceso de prueba de carga, debe comenzar creando paneles para las métricas de
utilización de su aplicación. Estas métricas incluyen la utilización de la CPU, la utilización de la memoria,
las operaciones de E/S, la profundidad de la cola de E/S y el rendimiento de la red. Puede recopilar
estas métricas con un servicio como CloudWatch Container Insights. O bien, utilice el servicio gestionado
de Amazon para Prometheus junto con el servicio gestionado de Amazon para Grafana. Durante este
proceso, asegúrese de recopilar y trazar métricas para los tiempos de respuesta de la aplicación o las
tasas de finalización del trabajo.
Al realizar pruebas de carga, comience con una pequeña solicitud o tasa de inserción de trabajos.
Mantenga esta tasa estable durante varios minutos para permitir que su aplicación se caliente. Luego,
aumente lentamente la velocidad y manténgala firme durante unos minutos. Repita este ciclo, aumentando
la tasa cada vez hasta que los tiempos de respuesta o finalización de la aplicación sean demasiado lentos
para cumplir con sus objetivos de nivel de servicio (SLO).
Durante la prueba de carga, examine cada una de las métricas de utilización. Las métricas que aumentan
junto con la carga son los mejores candidatos para servir como sus mejores métricas de utilización.
A continuación, identifique el recurso que alcanza la saturación. Al mismo tiempo, examine también las
métricas de utilización para ver cuál se aplana primero en un nivel alto. O bien, examine cuál alcanza el
pico y luego bloquea su aplicación primero. Por ejemplo, si la utilización de la CPU aumenta de 0% a 70
-80% a medida que agrega carga, entonces permanece en esa lebel después de que se agrega aún más
carga, entonces es seguro decir que la CPU está saturada. Dependiendo de la arquitectura de la CPU,
es posible que nunca llegue al 100%. Por ejemplo, suponga que la utilización de la memoria aumenta
a medida que agrega carga y, a continuación, la aplicación se bloquea repentinamente cuando alcanza
el límite de memoria de la instancia de Amazon EC2 o la tarea. En esta situación, es probable que la
memoria se haya consumido por completo. La aplicación puede consumir varios recursos. Por lo tanto,
elija la métrica que representa el recurso que se agota primero.
Por último, intente probar la carga de nuevo después de duplicar el número de tareas o instancias de
Amazon EC2. Supongamos que la métrica clave aumenta, o disminuye, a la mitad de la tasa que antes.
Si este es el caso, entonces la métrica es proporcional a la capacidad. Esta es una buena métrica de
utilización para el escalado automático.
Ahora considere este hipotético escenario. Supongamos que carga prueba una aplicación y encuentra
que la utilización de la CPU finalmente alcanza el 80% a 100 solicitudes por segundo. Cuando se agrega
más carga, ya no aumenta la utilización de la CPU. Sin embargo, hace que su aplicación responda más
lentamente. A continuación, vuelva a ejecutar la prueba de carga, duplicando el número de tareas pero
manteniendo la velocidad en su valor máximo anterior. Si encuentra que la utilización promedio de la
CPU cae a alrededor del 40%, entonces la utilización promedio de la CPU es un buen candidato para una
métrica de escalado. Por otro lado, si la utilización de la CPU se mantiene en el 80% después de aumentar
el número de tareas, entonces la utilización promedio de la CPU no es una buena métrica de escalado. En
ese caso, se necesita más investigación para encontrar una métrica adecuada.
27
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Caracterización de la aplicación
Este tipo de aplicación es adecuada para el escalado automático basado en CPU. La aplicación goza de
la máxima flexibilidad en términos de escalado. Se puede escalar verticalmente proporcionando instancias
de Amazon EC2 más grandes o vCPUs Fargate. Además, también se puede escalar horizontalmente
agregando más réplicas. Al agregar más réplicas, o duplicar el tamaño de la instancia, se reduce a la mitad
la utilización media de la CPU en relación con la capacidad.
Si utiliza la capacidad de Amazon EC2 para esta aplicación, considere colocarla en instancias optimizadas
para cómputos, como lac5orc6gfamilia.
Este tipo de aplicación es adecuada para el escalado automático basado en memoria. La aplicación
goza de la máxima flexibilidad en términos de escalado. Se puede escalar verticalmente proporcionando
recursos de memoria más grandes de Amazon EC2 o Fargate. Además, también se puede escalar
horizontalmente agregando más réplicas. Agregar más réplicas, o duplicar el tamaño de la instancia, puede
reducir a la mitad la utilización media de la memoria relativa a la capacidad.
Si utiliza la capacidad de Amazon EC2 para esta aplicación, considere colocarla en instancias optimizadas
para la memoria, como lar5orr6gfamilia.
Algunas aplicaciones enlazadas a la memoria no liberan la memoria asociada a una solicitud cuando
finaliza, por lo que una reducción en la concurrencia no da lugar a una reducción en la memoria utilizada.
Para ello, no recomendamos que utilice escalado basado en memoria.
La concurrencia de solicitudes suele ser la mejor métrica para escalar esta aplicación. Debido a que hay
un límite de simultaneidad para cada réplica, es importante escalar hacia fuera antes de que se alcance el
límite medio.
La mejor manera de obtener métricas de concurrencia de solicitudes es hacer que su aplicación los
informe a CloudWatch. Cada réplica de la aplicación puede publicar el número de solicitudes simultáneas
como una métrica personalizada con una frecuencia alta. Recomendamos que la frecuencia esté
configurada para ser al menos una vez cada minuto. Una vez recopilados varios informes, puede utilizar
28
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Caracterización de la aplicación
la simultaneidad media como métrica de escala. Esta métrica se calcula tomando la concurrencia total
y dividiéndola por el número de réplicas. Por ejemplo, si la simultaneidad total es 1000 y el número de
réplicas es 10, entonces la simultaneidad media es 100.
Para que este diseño funcione mejor, la desviación estándar de la latencia de respuesta debe ser pequeña
a bajas tasas de solicitud. Recomendamos que, durante los períodos de baja demanda, la mayoría de
las solicitudes se respondan en poco tiempo, y no hay muchas solicitudes que tardan mucho más que el
tiempo promedio en responder. El tiempo medio de respuesta debe ser cercano al tiempo de respuesta del
percentil 95. De lo contrario, podrían producirse desbordamientos de cola como resultado. Esto conduce
a errores. Le recomendamos que proporcione réplicas adicionales cuando sea necesario para mitigar el
riesgo de desbordamiento.
Servidor de espera
El servidor en espera realiza algún procesamiento para cada solicitud, pero depende en gran medida de
uno o más servicios descendentes para funcionar. Las aplicaciones de contenedores a menudo hacen un
uso intensivo de servicios descendentes, como bases de datos y otros servicios de API. Esto se debe a
que estas aplicaciones tienden a utilizar pocos recursos de CPU y su máxima concurrencia en términos de
memoria disponible.
El servicio de espera es adecuado tanto en el patrón de servidor vinculado a la memoria como en el patrón
de servidor basado en el trabajo, dependiendo de cómo se diseñe la aplicación. Si la concurrencia de la
aplicación sólo está limitada por la memoria, entonces la utilización media de la memoria se debe utilizar
como métrica de escalado. Si la simultaneidad de la aplicación se basa en un límite de trabajo, se debe
utilizar la simultaneidad media como métrica de escalado.
Para conseguir el mejor rendimiento, le recomendamos que asigne la mayor cantidad de memoria posible
al montón de máquina virtual de Java (JVM). Las versiones recientes de la JVM, incluida la actualización
191 de Java 8 o posterior, establecen automáticamente el tamaño del montón lo más grande posible
para que quepa dentro del contenedor. Esto significa que, en Java, la utilización de la memoria rara
vez es proporcional a la utilización de la aplicación. A medida que aumenta la velocidad de solicitud y
la simultaneidad, la utilización de la memoria permanece constante. Debido a esto, no recomendamos
escalar servidores basados en Java en función de la utilización de la memoria. En su lugar, normalmente
recomendamos escalar en la utilización de la CPU.
En algunos casos, los servidores basados en Java encuentran agotamiento del montón antes de agotar
la CPU. Si su aplicación es propensa al agotamiento del montón en alta concurrencia, entonces las
conexiones medias son la mejor métrica de escalado. Si su aplicación es propensa al agotamiento del
montón a un alto rendimiento, entonces la tasa de solicitud promedio es la mejor métrica de escalado.
29
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Disponibilidad y capacidad
Para estas aplicaciones, le recomendamos que escale la utilización de la CPU si la aplicación está
vinculada a la CPU. De lo contrario, se recomienda escalar en promedio el rendimiento o la simultaneidad
promedio, en función de los resultados de las pruebas de carga.
Procesadores de Job
Muchas cargas de trabajo implican procesamiento asincrónico de trabajos. Incluyen aplicaciones que
no reciben solicitudes en tiempo real, sino que se suscriben a una cola de trabajos para recibir trabajos.
Para estos tipos de aplicaciones, la métrica de escala adecuada es casi siempre la profundidad de la
cola. El crecimiento de la cola es una indicación de que el trabajo pendiente supera la capacidad de
procesamiento, mientras que una cola vacía indica que hay más capacidad que trabajo por hacer.
AWS, como Amazon SQS y Amazon Kinesis Data Streams, proporcionan métricas de CloudWatch que
se pueden utilizar para escalar. Para Amazon SQS,ApproximateNumberOfMessagesVisiblees la
mejor métrica. Para Kinesis Data Streams, considere la posibilidad de utilizar elMillisBehindLatest,
publicada por Kinesis Client Library (KCL). Esta métrica debe promediarse entre todos los consumidores
antes de usarla para escalar.
Disponibilidad y capacidad
La disponibilidad de las aplicaciones es crucial para proporcionar una experiencia sin errores y para
minimizar la latencia de las aplicaciones. La disponibilidad depende de contar con recursos accesibles y
con capacidad suficiente para satisfacer la demanda.AWSproporciona varios mecanismos para administrar
la disponibilidad. Para las aplicaciones alojadas en Amazon ECS, estas incluyen el escalado automático
y las zonas de disponibilidad (AZ). La escala automática administra el número de tareas o instancias en
función de las métricas definidas, mientras que las zonas de disponibilidad le permiten alojar la aplicación
en ubicaciones aisladas pero geográficamente cercanas.
Al igual que con los tamaños de las tareas, la capacidad y la disponibilidad presentan ciertas
compensaciones que debe tener en cuenta. Idealmente, la capacidad estaría perfectamente alineada con
la demanda. Siempre habría suficiente capacidad para atender solicitudes y procesar trabajos para cumplir
con los Objetivos de Nivel de Servicio (SLO), incluyendo una baja latencia y tasa de error. La capacidad
nunca sería demasiado alta, lo que daría lugar a costos excesivos; tampoco sería nunca demasiado baja,
lo que daría lugar a altas tasas de latencia y error.
El autoescalado es un proceso latente. En primer lugar, las métricas en tiempo real deben entregarse a
CloudWatch. Luego, deben agregarse para el análisis, que puede tardar hasta varios minutos dependiendo
de la granularidad de la métrica. CloudWatch compara las métricas con los umbrales de alarma para
identificar la escasez o el exceso de recursos. Para evitar la inestabilidad, configure las alarmas para exigir
que el umbral establecido se cruce durante unos minutos antes de que se apague la alarma. También lleva
tiempo aprovisionar nuevas tareas y terminar tareas que ya no son necesarias.
Debido a estos retrasos potenciales en el sistema descrito, es importante que mantenga un margen de
ampliación mediante el aprovisionamiento excesivo. Hacer esto puede ayudar a acomodar ráfagas a corto
plazo en demanda. Esto también ayuda a su aplicación a atender solicitudes adicionales sin alcanzar
la saturación. Como buena práctica, puede establecer su objetivo de escalado entre el 60 y el 80% de
la utilización. Esto ayuda a su aplicación a manejar mejor las ráfagas de demanda adicional mientras la
capacidad adicional aún está en proceso de aprovisionamiento.
Otra razón por la que recomendamos que aprovisione en exceso es para que pueda responder
rápidamente a los errores de la zona de disponibilidad.AWSrecomienda que las cargas de trabajo de
producción se sirvan desde varias zonas de disponibilidad. Esto se debe a que, si se produce un error
en la zona de disponibilidad, las tareas que se están ejecutando en las zonas de disponibilidad restantes
todavía pueden servir a la demanda. Si la aplicación se ejecuta en dos zonas de disponibilidad, debe
duplicar el recuento normal de tareas. Esto es para que pueda proporcionar capacidad inmediata durante
cualquier falla potencial. Si la aplicación se ejecuta en tres zonas de disponibilidad, le recomendamos
30
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Maximizar la velocidad de escalado
que ejecute 1,5 veces el recuento normal de tareas. Es decir, ejecutar tres tareas por cada dos que se
necesitan para servir ordinario.
Minimizar tamaño de imagen. Las imágenes más grandes tardan más en descargarse de un repositorio de
imágenes y desempaquetarlas. Por lo tanto, mantener los tamaños de imagen más pequeños reduce la
cantidad de tiempo que se necesita para iniciar un contenedor. Para reducir el tamaño de la imagen, puede
seguir estas recomendaciones específicas:
• Si puede construir un binario estático o usar Golang, construya su imagenFROMrascar e incluir solo su
aplicación binaria en la imagen resultante.
• Utilice imágenes base minimizadas de proveedores de distribución ascendente, como Amazon Linux o
Ubuntu.
• No incluyas ningún artefacto de compilación en tu imagen final. El uso de compilaciones de varias
etapas puede ayudar con esto.
• CompactRUNsiempre que sea posible. CadaRUNcrea una nueva capa de imagen, lo que lleva a un
viaje de ida y vuelta adicional para descargar la capa. Una solaRUNque tiene varios comandos unidos
por&&tiene menos capas que una con variasRUNetapas.
• Si desea incluir datos, como datos de inferencia ML, en la imagen final, incluya solo los datos necesarios
para iniciar y comenzar a servir tráfico. Si obtiene datos a petición de Amazon S3 u otro almacenamiento
sin afectar al servicio, almacene sus datos en esos lugares en su lugar.
Mantén tus imágenes cerca. Cuanto mayor sea la latencia de red, más tiempo tardará en descargar la
imagen. Aloje sus imágenes en un repositorio en el mismoAWSRegión en la que se encuentra la carga
de trabajo. Amazon ECR es un repositorio de imágenes de alto rendimiento que está disponible en
todas las regiones en las que Amazon ECS está disponible. Evite atravesar Internet o un enlace VPN
para descargar imágenes de contenedor. El alojamiento de sus imágenes en la misma región mejora la
fiabilidad general. Mitiga el riesgo de problemas de conectividad de red y problemas de disponibilidad
en una región diferente. Como alternativa, también puede implementar la replicación entre regiones de
Amazon ECR para ayudarlo con esto.
Reducir los umbrales de comprobación de estado del balanceador de carga Los equilibradores de
carga realizan comprobaciones de estado antes de enviar tráfico a la aplicación. La configuración de
comprobación de estado predeterminada para un grupo de destino puede tardar 90 segundos o más.
Durante esto, comprueba el estado de salud y las solicitudes de recepción. Reducir el intervalo de
comprobación de estado y el recuento de umbrales puede hacer que la aplicación acepte el tráfico más
rápido y reducir la carga en otras tareas.
Considere el rendimiento de arranque en frío. Algunas aplicaciones usan tiempos de ejecución como
Java realizan compilación Just-In-Time (JIT). El proceso de compilación al menos cuando se inicia puede
mostrar el rendimiento de la aplicación. Una solución alternativa es reescribir las partes críticas de la carga
de trabajo en idiomas que no imponen una penalización de rendimiento de inicio en frío.
Use las políticas de escalado por pasos, no de seguimiento de destino. Tiene varias opciones de
Application Auto Scaling para las tareas de Amazon ECS. El seguimiento de objetivos es el modo más
fácil de usar. Con él, todo lo que necesita hacer es establecer un valor objetivo para una métrica, como
la utilización media de la CPU. A continuación, el escalador automático administra automáticamente
el número de tareas necesarias para alcanzar ese valor. Sin embargo, le recomendamos que utilice
el escalado de pasos en su lugar para que pueda reaccionar más rápidamente ante los cambios en la
demanda. Con el escalado de pasos, puede definir los umbrales específicos para las métricas de escala
y cuántas tareas agregar o quitar cuando se cruzan los umbrales. Y, lo que es más importante, puede
reaccionar muy rápidamente a los cambios en la demanda minimizando la cantidad de tiempo que una
31
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Manifiesto de demanda
alarma de umbral está infringiendo. Para obtener más información, consulteAuto Scaling de serviciosen
laAmazon Elastic Container Service.
Si utiliza instancias de Amazon EC2 para proporcionar capacidad de clúster, tenga en cuenta las
siguientes recomendaciones:
Utilice instancias de Amazon EC2 más grandes y volúmenes de Amazon EBS más rápidos. Puede mejorar
las velocidades de descarga y preparación de imágenes utilizando una instancia de Amazon EC2 más
grande y un volumen de Amazon EBS más rápido. Dentro de una familia de instancias de Amazon EC2
determinada, el rendimiento máximo de la red y Amazon EBS aumenta a medida que aumenta el tamaño
de la instancia (por ejemplo, desdem5.xlargeDe am5.2xlarge). Además, también puede personalizar
los volúmenes de Amazon EBS para aumentar su rendimiento y las IOPS. Por ejemplo, si utilizagp2, utilice
volúmenes más grandes que ofrezcan más rendimiento de línea base. Si utilizagp3Al crear el volumen,
especifique el rendimiento y las IOPS.
Utilice el modo de red puente para las tareas que se ejecutan en instancias de Amazon EC2. Tareas que
utilizanbridgeen Amazon EC2 se inician más rápido que las tareas que utilizan elawsvpcModo de red.
CuandoawsvpcAmazon ECS conecta una elastic network interface (ENI) a la instancia antes de iniciar la
tarea. Esto introduce latencia adicional. Sin embargo, hay varias compensaciones para el uso de redes
de puente. Estas tareas no tienen su propio grupo de seguridad, y existen algunas implicaciones para el
equilibrio de carga. Para obtener más información, consulteGrupos de destino del equilibrador de cargaen
laGuía del usuario de Elastic Load Balancing.
Manifiesto de demanda
Algunas aplicaciones experimentan grandes choques repentinos en la demanda. Esto ocurre por una
variedad de razones: un evento de noticias, una gran venta, un evento mediático o algún otro evento que
se vuelva viral y haga que el tráfico aumente de forma rápida y significativa en un lapso de tiempo muy
corto. Si no se planifica, esto puede hacer que la demanda supere rápidamente los recursos disponibles.
Si tiene un plan de Support técnico para empresas, asegúrese también de trabajar con su administrador de
cuentas técnico (TAM). Su TAM puede verificar sus cuotas de servicio y asegurarse de que se eleven las
cuotas necesarias antes de que comience el evento. De esta manera, no golpea accidentalmente ninguna
cuota de servicio. También pueden ayudarle con servicios de precalentamiento, como equilibradores de
carga, para asegurarse de que su evento se desarrolle sin problemas.
Manejar los choques de demanda no programados es un problema más difícil. Los choques no
programados, si son lo suficientemente grandes en amplitud, pueden hacer que la demanda supere
rápidamente la capacidad. También puede superar la capacidad del escalado automático para reaccionar.
La mejor manera de prepararse para las perturbaciones no programadas es aprovisionar recursos
excesivamente. Debe disponer de recursos suficientes para manejar la demanda máxima de tráfico
prevista en cualquier momento.
Mantener la capacidad máxima en previsión de los choques de la demanda no programados puede ser
costoso. Para mitigar el impacto en los costos, busque una métrica o evento indicador líder que prediga
que es inminente un gran choque de demanda. Si la métrica o el evento proporciona un aviso anticipado
significativo de forma fiable, inicie el proceso de escalado horizontal inmediatamente cuando se produzca
el evento o cuando la métrica cruce el umbral específico establecido.
32
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Capacidad de clúster
Por último, puede considerar romper los servicios monolíticos para lidiar mejor con los choques de la
demanda. Si su aplicación es un servicio monolítico que es costoso de ejecutar y lento para escalar, es
posible que pueda extraer o reescribir piezas críticas para el rendimiento y ejecutarlas como servicios
independientes. Estos nuevos servicios pueden escalarse independientemente de los componentes menos
críticos. Tener la flexibilidad para escalar la funcionalidad crítica del rendimiento por separado de otras
partes de la aplicación puede reducir el tiempo que se tarda en agregar capacidad y ayudar a ahorrar
costos.
Capacidad de clúster
Anteriormente en este tema, se discutió cómo escalar la cuenta de réplica para su mediante el uso de
métricas de escala. Sus tareas también deben ejecutarse en recursos, incluidos recursos de CPU y
memoria. Esto vuelve a relacionarse con el tema de la capacidad. En Amazon ECS, la capacidad se
proporciona a través de dos proveedores principales:AWS FargateAmazon EC2.
Puede proporcionar capacidad a un clúster de Amazon ECS de varias maneras. Por ejemplo, puede iniciar
instancias de Amazon EC2 y registrarlas en el clúster al inicio mediante el agente contenedor de Amazon
ECS. Sin embargo, este método puede ser un reto porque necesita administrar el escalado por su cuenta.
Por lo tanto, recomendamos que utilice proveedores de capacidad Amazon ECS. Administran el escalado
de recursos para usted. Existen tres tipos de proveedores de capacidad: Amazon EC2, Fargate y Fargate
Spot.
Los proveedores de capacidad Fargate y Fargate Spot manejan el ciclo de vida de las tareas de Fargate
por usted. Fargate proporciona capacidad bajo demanda, y Fargate Spot proporciona capacidad Spot.
Cuando se inicia una tarea, ECS aprovisiona un recurso de Fargate para usted. Este recurso de Fargate
viene con las unidades de memoria y CPU que corresponden directamente a los límites de nivel de tarea
declarados en la definición de tarea. Cada tarea recibe su propio recurso de Fargate, creando una relación
1:1 entre la tarea y los recursos informáticos.
Las tareas que se ejecutan en Fargate Spot están sujetas a interrupción. Las interrupciones vienen
después de una advertencia de dos minutos. Estos ocurren durante períodos de gran demanda.
Fargate Spot funciona mejor para cargas de trabajo tolerantes a interrupciones, como trabajos por lotes,
entornos de desarrollo o ensayo. También son adecuados para cualquier otro escenario en el que la alta
disponibilidad y la baja latencia no sean un requisito.
Puede ejecutar tareas de Fargate Spot junto con tareas bajo demanda de Fargate. Al usarlos juntos,
recibirá la capacidad de aprovisionamiento de «ráfaga» a un costo menor.
ECS también puede gestionar la capacidad de instancia de Amazon EC2 para sus tareas. Cada proveedor
de capacidad de Amazon EC2 está asociado a un grupo de Auto Scaling de Amazon EC2 que especifique.
Cuando utiliza Amazon EC2 Capacity Provider, el Auto Scaling del clúster ECS mantiene el tamaño del
grupo de escalado automático de Amazon EC2 para garantizar que se puedan realizar todas las tareas
programadas.
33
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Elegir tamaños de tarea de Fargate
Amazon Virtual Private Cloud, el inicio de nuevas tareas requiere tiempo adicional para descargar la
imagen y adjuntar una interfaz de red. Esta latencia añadida podría ser perjudicial para su resultado final.
Por lo tanto, le recomendamos que haga lo siguiente. En lugar de reducir la capacidad de destino de
su proveedor de capacidad, aumente el número de réplicas en su servicio modificando la métrica de
escalamiento de seguimiento de destino o los umbrales de escalado de paso del servicio. Para obtener
más información acerca de las políticas de escalado relacionadas, consultePolíticas de escalado de
seguimiento de destinoorPolíticas de escalado por pasosen laAmazon Elastic Container Service. El
proveedor de capacidad de Amazon EC2 aprovisiona la capacidad necesaria para tareas adicionales
mediante la adición de instancias adicionales al grupo de Auto Scaling. Esto ayuda a garantizar que los
recursos informáticos y de aplicaciones estén disponibles cuando los necesite. Por ejemplo, puede ayudar
duplicando el número de tareas en un servicio ECS para acomodar una ráfaga inmediata del 100% de la
demanda.
Para determinar qué tipos de instancia puede utilizar, comience eliminando los tipos de instancia o
las familias de instancias que no cumplan los requisitos específicos de la aplicación. Por ejemplo, si
su aplicación requiere una GPU, puede excluir cualquier tipo de instancia que no tenga una GPU. Sin
embargo, también debe considerar otros requisitos. Por ejemplo, considere la arquitectura de CPU, el
rendimiento de red y si el almacenamiento de instancias es un requisito. A continuación, examine la
cantidad de CPU y memoria proporcionada por cada tipo de instancia. Como regla general, la CPU y la
memoria deben ser lo suficientemente grandes como para contener al menos una réplica de la tarea que
desea ejecutar.
Puede elegir entre los tipos de instancia que sean compatibles con su aplicación. Con instancias de mayor
tamaño, puede lanzar más tareas al mismo tiempo. Además, con instancias más pequeñas, puede escalar
horizontalmente de una manera más precisa para ahorrar costos. No es necesario que elija un único tipo
de instancia de Amazon EC2 que se adapte a todas las aplicaciones del clúster. En su lugar, puede crear
varios grupos de Auto Scaling,. Cada grupo de puede tener un tipo de instancia diferente. A continuación,
puede crear un proveedor de capacidad de Amazon EC2 para cada uno de estos grupos. Por último, en la
estrategia del proveedor de capacidad de su servicio y tarea, puede seleccionar el proveedor de capacidad
que mejor se adapte a sus necesidades.
34
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Uso de Amazon EC2 Spot y FARGATE_SPOT
más bajo que la capacidad reservada o bajo demanda. La capacidad puntual es adecuada para el
procesamiento por lotes y las cargas de trabajo de aprendizaje automático, así como para entornos de
desarrollo y ensayo. De manera más general, es adecuado para cualquier carga de trabajo que tolere el
tiempo de inactividad temporal.
Comprenda que las siguientes consecuencias porque es posible que la capacidad puntual no esté
disponible todo el tiempo.
• En primer lugar, durante períodos de demanda extremadamente alta, la capacidad puntual podría no
estar disponible. Esto puede provocar retrasos en el lanzamiento de la tarea de subasta de Fargate y
de instancias de subasta de Amazon EC2. En estos eventos, los servicios de ECS reintentan iniciar
tareas y los grupos de Auto Scaling de Amazon EC2 también reintentan iniciar instancias, hasta que la
capacidad requerida esté disponible. Fargate y Amazon EC2 no reemplazan la capacidad de subasta
por la capacidad bajo demanda.
• En segundo lugar, cuando aumenta la demanda general de capacidad, las instancias puntuales y las
tareas pueden terminar con solo una advertencia de dos minutos. Después de enviar la advertencia,
las tareas deben comenzar un apagado ordenado si es necesario antes de que la instancia finalice por
completo. Esto ayuda a minimizar la posibilidad de errores. Para obtener más información acerca de un
apagado elegante, consulteApagas elegantes con ECS.
Para ayudar a minimizar la escasez de capacidad puntual, tenga en cuenta las siguientes
recomendaciones:
• Usar varias regiones y zonas de disponibilidad. La capacidad puntual varía según la región y la
zona de disponibilidad. Puede mejorar la disponibilidad puntual ejecutando sus cargas de trabajo en
varias regiones y zonas de disponibilidad. Si es posible, especifique subredes en todas las zonas de
disponibilidad de las regiones donde ejecute sus tareas e instancias.
• Utilice varios tipos de instancias Amazon EC2. Cuando utiliza directivas de instancia mixta con Amazon
EC2 Auto Scaling, se inician varios tipos de instancias en su grupo de Auto Scaling. Esto garantiza
que una solicitud de capacidad puntual pueda cumplirse cuando sea necesario. Para maximizar la
fiabilidad y minimizar la complejidad, utilice tipos de instancias con aproximadamente la misma cantidad
de CPU y memoria en la directiva de instancias mixtas. Estas instancias pueden ser de una generación
diferente o variantes del mismo tipo de instancia base. Tenga en cuenta que pueden venir con funciones
adicionales que puede que no necesite. Un ejemplo de tal lista podría incluir m4.large, m5.large,
m5a.large, m5d.large, m5n.large, m5dn.large y m5ad.large. Para obtener más información, consulte la
sección sobre Grupos de Auto Scaling con varios tipos de instancias y opciones de compra en la guía
del usuario de Amazon EC2 Auto Scaling.
• Utilice la estrategia de asignación puntual optimizada para la capacidad. Con Amazon EC2 Spot,
puede elegir entre las estrategias de asignación optimizadas para la capacidad y los costes. Si elige la
estrategia de capacidad optimizada al lanzar una nueva instancia, Amazon EC2 Spot selecciona el tipo
de instancia con mayor disponibilidad en la zona de disponibilidad seleccionada. Esto ayuda a reducir la
posibilidad de que la instancia finalice poco después de que se inicie.
35
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Prácticas recomendadas -
Almacenamiento persistente
Puede utilizar Amazon ECS para ejecutar aplicaciones en contenedores con estado a escala
medianteAWS, como Amazon EFS, Amazon EBS o Amazon FSx for Windows File Server, que
proporcionan persistencia de datos a contenedores intrínsecamente efímeros. El términoPersistencia
de datossignifica que los datos en sí duran más que el proceso que los creó. Persistencia de datos
enAWSse logra mediante el acoplamiento de los servicios de computación y almacenamiento. Al igual que
Amazon EC2, también puede utilizar Amazon ECS para desacoplar el ciclo de vida de las aplicaciones
en contenedores de los datos que consumen y producen. UsoAWS, las tareas de Amazon ECS pueden
conservar los datos incluso después de que finalicen las tareas.
De forma predeterminada, los contenedores no conservan los datos que producen. Cuando se termina
un contenedor, los datos que escribió en su capa de escritura se destruyen con el contenedor. Esto hace
que los contenedores sean adecuados para aplicaciones sin estado que no necesitan almacenar datos
localmente. Las aplicaciones en contenedores que requieren persistencia de datos necesitan un back-end
de almacenamiento que no se destruya cuando finaliza el contenedor de la aplicación.
36
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Elección del tipo de almacenamiento adecuado
Una imagen de contenedor se construye a partir de una serie de capas. Cada capa representa una
instrucción en Dockerfile desde la que se creó la imagen. Cada capa es de sólo lectura, excepto para
el contenedor. Es decir, cuando crea un contenedor, se agrega una capa de escritura sobre las capas
subyacentes. Todos los archivos que el contenedor crea, elimina o modifica se escriben en la capa de
escritura. Cuando el contenedor termina, la capa grabable también se elimina simultáneamente. Un nuevo
contenedor que utiliza la misma imagen tiene su propia capa de escritura. Esta capa no incluye ningún
cambio. Por lo tanto, los datos de un contenedor siempre deben almacenarse fuera de la capa de escritura
del contenedor.
Con Amazon ECS, puede ejecutar contenedores con estado utilizando volúmenes. Amazon ECS está
integrado con Amazon EFS de forma nativa y utiliza volúmenes integrados con Amazon EBS. En el caso
de los contenedores de Windows, Amazon ECS se integra con Amazon FSx for Windows File Server para
proporcionar almacenamiento persistente.
Temas
• Elección del tipo de almacenamiento adecuado para sus contenedores (p. 37)
• Volúmenes de Amazon EFS (p. 38)
• Volúmenes de Docker (p. 43)
• Amazon FSx para el servidor de archivos de Windows (p. 44)
Para los clústeres de Amazon ECS que contienen instancias Linux o se utilizan con Fargate, Amazon
ECS se integra con Amazon EFS y Amazon EBS para proporcionar almacenamiento de contenedores.
La diferencia más distintiva entre Amazon EFS y Amazon EBS es que puede montar simultáneamente
un sistema de archivos de Amazon EFS en miles de tareas de Amazon ECS. Por el contrario, los
volúmenes de Amazon EBS no admiten el acceso simultáneo. Dado esto, Amazon EFS es la opción
de almacenamiento recomendada para aplicaciones en contenedores que escalan horizontalmente.
Esto se debe a que admite la concurrencia. Amazon EFS almacena sus datos de forma redundante
en varias zonas de disponibilidad y ofrece acceso de baja latencia desde las tareas de Amazon ECS,
independientemente de la zona de disponibilidad. Amazon EFS admite tareas que se ejecutan tanto en
Amazon EC2 como en Fargate.
Supongamos que tiene una aplicación como una base de datos transaccional que requiere una
latencia inferior a milisegundos y no necesita un sistema de archivos compartido cuando se escala
horizontalmente. Para una aplicación de este tipo, se recomienda utilizar volúmenes de Amazon EBS
para el almacenamiento persistente. Actualmente, Amazon ECS admite volúmenes de Amazon EBS
únicamente para tareas alojadas en Amazon EC2. La Support con volúmenes de Amazon EBS no está
disponible para tareas en Fargate. Antes de utilizar volúmenes de Amazon EBS con tareas de Amazon
ECS, primero debe adjuntar volúmenes de Amazon EBS a instancias de contenedor y gestionar volúmenes
por separado del ciclo de vida de la tarea.
Para los clústeres que contienen instancias de Windows, Amazon FSx for Windows File Server
proporciona almacenamiento persistente para los contenedores. Los sistemas de archivos de Amazon
FSx for Windows File Server admiten las implementaciones Multi-AZ. A través de estas implementaciones,
37
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Amazon EFS
puede compartir un sistema de archivos con las tareas de Amazon ECS que se ejecutan en varias zonas
de disponibilidad.
También puede utilizar el almacenamiento de instancias de Amazon EC2 para la persistencia de datos de
las tareas de Amazon ECS alojadas en Amazon EC2 mediante montajes de enlace o volúmenes Docker.
Cuando se utilizan montajes de enlace o volúmenes Docker, los contenedores almacenan datos en el
sistema de archivos de instancia de contenedor. Una limitación del uso de un sistema de archivos host
para el almacenamiento de contenedores es que los datos solo están disponibles en una sola instancia de
contenedor a la vez. Esto significa que los contenedores solo pueden ejecutarse en el host donde residen
los datos. Por lo tanto, el uso de almacenamiento de host solo se recomienda en escenarios donde la
replicación de datos se gestiona a nivel de aplicación.
Puede ejecutar sus aplicaciones con estado en Amazon ECS utilizando volúmenes de Amazon EFS para
proporcionar almacenamiento persistente. Tareas de Amazon ECS que se ejecutan en instancias de
Amazon EC2 o en Fargate mediante la versión de plataforma1.4.0y posteriormente pueden montar un
sistema de archivos de Amazon EFS existente. Dado que varios contenedores pueden montar y acceder a
un sistema de archivos de Amazon EFS simultáneamente, sus tareas tienen acceso al mismo conjunto de
datos independientemente de dónde estén alojadas.
Para montar un sistema de archivos de Amazon EFS en el contenedor, puede hacer referencia al sistema
de archivos de Amazon EFS y el punto de montaje del contenedor en su definición de tarea de Amazon
ECS. A continuación, se incluye un fragmento de una definición de tarea que utiliza Amazon EFS para el
almacenamiento de contenedores.
...
"containerDefinitions":[
{
"mountPoints": [
{
"containerPath": "/opt/my-app",
"sourceVolume": "Shared-EFS-Volume"
}
}
]
...
"volumes": [
{
"efsVolumeConfiguration": {
"fileSystemId": "fs-1234",
"transitEncryption": "DISABLED",
"rootDirectory": ""
},
"name": "Shared-EFS-Volume"
}
]
Amazon EFS almacena datos de forma redundante entre varias zonas de disponibilidad de una sola
región. Una tarea de Amazon ECS monta el sistema de archivos de Amazon EFS utilizando un destino
de montaje de Amazon EFS en su zona de disponibilidad. Una tarea de Amazon ECS sólo puede montar
un sistema de archivos de Amazon EFS si el sistema de archivos de Amazon EFS tiene un destino de
montaje en la zona de disponibilidad en la que se ejecuta la tarea. Por lo tanto, una práctica recomendada
38
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Controles de seguridad y acceso
es crear destinos de montaje de Amazon EFS en todas las zonas de disponibilidad en las que planea alojar
tareas de Amazon ECS.
Para obtener más información, consulteVolúmenes de Amazon EFSen laGuía del desarrollador de Amazon
Elastic Container.
39
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Performance
obtener más información, consulteCifrado de datos en Amazon EFSen laGuía del usuario de Amazon
Elastic File System.
Además del cifrado de datos, también puede utilizar Amazon EFS para restringir el acceso a un sistema de
archivos. Existen tres formas de implementar el control de acceso en EFS.
• Grupos de seguridad: con los destinos de montaje de Amazon EFS, puede configurar un grupo de
seguridad que se utilice para permitir y denegar el tráfico de red. Puede configurar el grupo de seguridad
adjunto a Amazon EFS para permitir el tráfico NFS (puerto 2049) del grupo de seguridad adjunto a sus
instancias de Amazon ECS o, cuando utilice elawsvpc, la tarea Amazon ECS.
• IAM: puede restringir el acceso a un sistema de archivos de Amazon EFS mediante IAM. Cuando se
configuran, las tareas de Amazon ECS requieren un rol de IAM para el acceso al sistema de archivos
a fin de montar un sistema de archivos EFS. Para obtener más información, consulteUso de IAM para
controlar el acceso a los datos del sistema de archivosen laGuía del usuario de Amazon Elastic File
System.
Las políticas de IAM también pueden imponer condiciones predefinidas como exigir a un cliente que
utilice TLS al conectarse a un sistema de archivos de Amazon EFS. Para obtener más información,
consulteClaves de condición Amazon EFS para clientesen laGuía del usuario de Amazon Elastic File
System.
• Puntos de acceso de Amazon EFSLos puntos de acceso de Amazon EFS son puntos de entrada
específicos de la aplicación en un sistema de archivos de Amazon EFS. Puede utilizar puntos de
acceso para imponer una identidad de usuario, incluidos los grupos POSIX del usuario, para todas las
solicitudes del sistema de archivos que se realizan a través del punto de acceso. Los puntos de acceso
también pueden imponer un directorio raíz diferente para el sistema de archivos. Esto es para que los
clientes solo puedan acceder a los datos del directorio especificado o de sus subdirectorios.
"volumes": [
{
"efsVolumeConfiguration": {
"fileSystemId": "fs-1234",
"authorizationConfig": {
"acessPointId": "fsap-1234",
"iam": "ENABLED"
},
"transitEncryption": "ENABLED",
"rootDirectory": ""
},
"name": "my-filesystem"
}
]
Performance
Amazon EFS ofrece dos modos de rendimiento: Propósito general y E/S máx. de uso general es adecuado
para aplicaciones sensibles a la latencia como sistemas de gestión de contenido y herramientas CI/CD.
40
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Throughput
Por el contrario, los sistemas de archivos de E/S Max son adecuados para cargas de trabajo como análisis
de datos, procesamiento de medios y aprendizaje automático. Estas cargas de trabajo necesitan realizar
operaciones paralelas desde cientos o incluso miles de contenedores y requieren el mayor rendimiento
agregado posible y las IOPS. Para obtener más información, consulteModos de rendimiento de Amazon
EFSen laGuía del usuario de Amazon Elastic File System.
Algunas cargas de trabajo sensibles a la latencia requieren los niveles de E/S más altos proporcionados
por el modo de desempeño de E/S máximo y la latencia más baja proporcionada por el modo de
desempeño de uso general. Para este tipo de carga de trabajo, recomendamos crear varios sistemas de
archivos en modo de desempeño de uso general. De este modo, puede distribuir la carga de trabajo de las
aplicaciones entre todos estos sistemas de archivos, siempre que la carga de trabajo y las aplicaciones lo
admitan.
Throughput
Todos los sistemas de archivos de Amazon EFS tienen un rendimiento medido asociado determinado
por la cantidad de rendimiento aprovisionado para los sistemas de archivos que utilizanRendimiento
provisionadoo la cantidad de datos almacenados en la clase de almacenamiento estándar EFS o One
Zone para sistemas de archivos que utilizanDesempeño por ráfaga de. Para obtener más información,
consulteDescripción del rendimiento medidoen laGuía del usuario de Amazon Elastic File System.
El modo de rendimiento predeterminado para los sistemas de archivos de Amazon EFS es el modo de
fragmentación. Con el modo de fragmentación, el rendimiento disponible para un sistema de archivos se
amplía hacia dentro o hacia fuera a medida que crece un sistema de archivos. Dado que las cargas de
trabajo basadas en archivos suelen generar picos, lo que requiere altos niveles de desempeño durante
períodos de tiempo y bajos niveles de desempeño el resto del tiempo, Amazon EFS se ha diseñado para
transmitir por ráfagas altos niveles de desempeño durante períodos de tiempo. Además, debido a que
muchas cargas de trabajo son de lectura pesada, las operaciones de lectura se miden en una proporción
de 1:3 respecto a otras operaciones NFS (como escritura).
Todos los sistemas de archivos de Amazon EFS ofrecen un rendimiento de línea de base coherente de
50 MB/s por cada TB de almacenamiento de Amazon EFS Standard o Amazon EFS One Zone. Todos
los sistemas de archivos (independientemente del tamaño) pueden explotar hasta 100 MB/s. Los file
systems con más de 1 TB de almacenamiento EFS Standard o EFS One Zone pueden expandir hasta
100 MB/s por cada TB. Debido a que las operaciones de lectura se miden en una proporción de 1:3,
puede conducir hasta 300 MIBs/s por cada TiB de rendimiento de lectura. A medida que agrega datos al
sistema de archivos, el rendimiento máximo disponible para el sistema de archivos se escala de forma
lineal y automática con el almacenamiento en la clase de almacenamiento estándar de Amazon EFS. Si
necesita más rendimiento del que puede lograr con la cantidad de datos almacenados, puede configurar el
rendimiento aprovisionado en la cantidad específica que su carga de trabajo requiera.
El rendimiento del sistema de archivos se comparte en todas las instancias de Amazon EC2 conectadas
a un sistema de archivos. Por ejemplo, un sistema de archivos de 1 TB que puede ráfagas a 100 MB/s de
rendimiento puede conducir 100 MB/s desde una única instancia de Amazon EC2 puede cada unidad de
10 MB/s. Para obtener más información, consulteDesempeño de Amazon EFSen laGuía del usuario de
Amazon Elastic File System.
41
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Protección de los datos
de archivos compartidos de Amazon EFS. Al hacerlo, aunque las aplicaciones sigan compartiendo el
mismo sistema de archivos, no pueden acceder a los datos a menos que usted lo autorice.
A medida que aumentan los datos, Amazon EFS le ayuda a mover automáticamente los archivos a los que
se accede con poca frecuencia a una clase de almacenamiento inferior. La clase de almacenamiento de
acceso infrecuente estándar de Amazon EFS (IA) reduce los costos de almacenamiento de los archivos
a los que no se tiene acceso todos los días. Esto lo hace sin que la alta disponibilidad, alta durabilidad,
elasticidad y acceso al sistema de archivos POSIX que proporciona Amazon EFS se vean afectados. Para
obtener más información, consulteClase de almacenamiento de Amazon EFSen laGuía del usuario de
Amazon Elastic File System.
Considere la posibilidad de utilizar políticas de ciclo de vida de Amazon EFS para ahorrar dinero
automáticamente moviendo archivos a los que se accede con poca frecuencia al almacenamiento de
Amazon EFS IA Para obtener más información, consulteGestión del ciclo de vida de Amazon EFSen
laGuía del usuario de Amazon Elastic File System.
Al crear un sistema de archivos de Amazon EFS, puede elegir si Amazon EFS replica los datos en varias
zonas de disponibilidad (estándar) o almacena los datos de forma redundante en una única zona de
disponibilidad. La clase de almacenamiento One Zone de Amazon EFS puede reducir los costes de
almacenamiento en un margen significativo en comparación con las clases de almacenamiento estándar
de Amazon EFS. Considere la posibilidad de utilizar la clase de almacenamiento One Zone de Amazon
EFS para cargas de trabajo que no requieran resistencia Multi-AZ. Puede reducir aún más el coste del
almacenamiento de una zona de Amazon EFS moviendo los archivos a los que se accede con poca
frecuencia a Amazon EFS One Zone Infrequent Access. Para obtener más información, consulteAcceso
poco frecuente de Amazon EFS.
Al igual que con cualquier entorno, es una práctica recomendada tener una copia de seguridad y crear
salvaguardias contra la eliminación accidental. En el caso de los datos de Amazon EFS, esa práctica
recomendada incluye una copia de seguridad funcional y probada regularmente medianteAWS Backup.
Los sistemas de archivos que utilizan clases de almacenamiento One Zone de Amazon EFS están
configurados para realizar automáticamente copias de seguridad de los archivos de forma predeterminada
en la creación del sistema de archivos, a menos que decida desactivar esta funcionalidad. Para obtener
más información, consulteProtección de datos para Amazon EFSen laGuía del usuario de Amazon Elastic
File System.
Casos de uso
Amazon EFS ofrece acceso compartido paralelo que aumenta y disminuye automáticamente a medida
que se añaden y eliminan archivos. Como resultado, Amazon EFS es adecuado para cualquier aplicación
que requiera un almacenamiento con funcionalidades como baja latencia, alto rendimiento y consistencia
de lectura tras escritura. Amazon EFS es un back-end de almacenamiento ideal para aplicaciones que
escalan horizontalmente y requieren un sistema de archivos compartido. Algunas cargas de trabajo como
el análisis de datos, el procesamiento de contenido multimedia, la administración de contenido y el servicio
web son algunos de los casos de uso comunes de Amazon EFS.
Un caso de uso en el que Amazon EFS podría no ser adecuado es para aplicaciones que requieren
una latencia inferior a milisegundos. Esto es generalmente un requisito para los sistemas de bases
de datos transaccionales. Recomendamos ejecutar pruebas de rendimiento del almacenamiento para
determinar el impacto del uso de Amazon EFS para aplicaciones sensibles a la latencia. Si el rendimiento
42
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Volúmenes de Docker
de las aplicaciones se degrada al utilizar Amazon EFS, considere Amazon EBS io2 Block Express, que
proporciona latencia de E/S de baja varianza y submilisegundos en las instancias de Nitro. Para obtener
más información, consulte Tipos de volumen de Amazon EBS en la Guía del usuario de Amazon EC2 para
instancias de Linux.
Volúmenes de Docker
Los volúmenes Docker son una característica del tiempo de ejecución del contenedor Docker que permite
que los contenedores conserven los datos mediante el montaje de un directorio desde el sistema de
archivos del host. Los controladores de volúmenes de Docker (denominados también «complementos») se
usan para integrar volúmenes de contenedores con sistemas de almacenamiento externos como Amazon
EBS. Los volúmenes de Docker solo se admiten cuando se alojan tareas de Amazon ECS en instancias de
Amazon EC2.
Las tareas de Amazon ECS pueden utilizar volúmenes Docker para conservar los datos mediante
volúmenes de Amazon EBS. Esto se realiza adjuntando un volumen de Amazon EBS a una instancia
de Amazon EC2 y, a continuación, montando el volumen en una tarea mediante volúmenes Docker. Un
volumen Docker se puede compartir entre varias tareas de Amazon ECS en el host.
La limitación de los volúmenes de Docker es que el sistema de archivos que utiliza la tarea está vinculado
a la instancia específica de Amazon EC2. Si la instancia se detiene por cualquier motivo y la tarea se
coloca en otra instancia, los datos se pierden. Puede asignar tareas a instancias para asegurarse de que
los volúmenes de EBS asociados estén siempre disponibles para las tareas.
Para obtener más información, consulteVolúmenes de Dockeren laGuía del desarrollador de Amazon
Elastic Container.
El segundo es cuando el ciclo de vida del volumen es independiente del ciclo de vida de la tarea. Esto es
especialmente útil para aplicaciones que requieren almacenamiento de alto rendimiento y baja latencia,
pero no necesitan conservar los datos una vez finalizada la tarea. Por ejemplo, una carga de trabajo ETL
que procesa grandes volúmenes de datos puede requerir un almacenamiento de alto rendimiento. Amazon
EBS es adecuado para este tipo de carga de trabajo, ya que proporciona volúmenes de alto rendimiento
que proporcionan hasta 256.000 IOPS. Cuando finaliza la tarea, la réplica de reemplazo se puede colocar
de forma segura en cualquier host de Amazon EC2 del clúster. Siempre que la tarea tenga acceso a un
back-end de almacenamiento que pueda cumplir sus requisitos de rendimiento, la tarea puede realizar su
función. Por lo tanto, no se necesitan restricciones de ubicación de tareas en este caso.
Si las instancias de Amazon EC2 del clúster tienen varios tipos de volúmenes de Amazon EBS asociados a
ellas, puede utilizar restricciones de ubicación de tareas para asegurarse de que las tareas se coloquen en
instancias con un volumen adecuado de Amazon EBS adjunto. Por ejemplo, supongamos que un clúster
tiene algunas instancias con ungp2volumen, mientras que otros usanio1Volúmenes de. Puede adjuntar
atributos personalizados a instancias conio1y, a continuación, utilizar restricciones de ubicación de
43
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Disponibilidad de datos de Amazon EBS
tareas para garantizar que las tareas intensivas de E/S se coloquen siempre en instancias de contenedor
conio1Volúmenes de.
Los siguientes ejemplos deAWS CLIpara colocar atributos en una instancia de contenedor de Amazon
ECS.
Al ejecutar tareas independientes, puede controlar qué zona de disponibilidad se coloca la tarea
estableciendo restricciones de ubicación mediante el atributo de zona de disponibilidad.
attribute:ecs.availability-zone == us-east-1a
44
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Controles de seguridad y acceso
Amazon ECS admite el uso de Amazon FSx for Windows File Server en las definiciones de tareas de
Amazon ECS Windows que permiten el almacenamiento persistente como punto de montaje a través del
protocolo SMBv3 mediante una función SMB denominada GlobalMappings.
Para configurar la integración de Amazon FSx for Windows File Server y Amazon ECS, la instancia
contenedor de Windows debe ser un miembro de dominio en un servicio de dominio de Active Directory
(AD DS), alojado en unAWS Directory Service for Microsoft Active Directory, Active Directory local o Active
Directory alojado en Amazon EC2.AWS Secrets Managerse utiliza para almacenar datos confidenciales
como el nombre de usuario y la contraseña de una credencial de Active Directory que se utiliza para
asignar el recurso compartido en la instancia contenedor de Windows.
Para utilizar volúmenes de sistema de archivos de Amazon FSx for Windows File Server para sus
contenedores, debe especificar las configuraciones del volumen y el punto de montaje en su definición
de tarea. A continuación, se incluye un fragmento de una definición de tarea que utiliza Amazon FSx for
Windows File Server para el almacenamiento del contenedor.
{
"containerDefinitions": [{
"name": "container-using-fsx",
"image": "iis:2",
"entryPoint": [
"powershell",
"-command"
],
"mountPoints": [{
"sourceVolume": "myFsxVolume",
"containerPath": "\\mount\\fsx",
"readOnly": false
}]
}],
"volumes": [{
"fsxWindowsFileServerVolumeConfiguration": {
"fileSystemId": "fs-ID",
"authorizationConfig": {
"domain": "ADDOMAIN.local",
"credentialsParameter": "arn:aws:secretsmanager:us-
east-1:111122223333:secret:SecretName"
},
"rootDirectory": "share"
}
}]
}
Para obtener más información, consulteVolúmenes de Amazon FSx for Windows File Serveren laGuía del
desarrollador de Amazon Elastic Container.
Cifrado de datos
Amazon FSx for Windows File Server admite dos formas de cifrado para sistemas de archivos. Son el
cifrado de datos en tránsito y en reposo. El cifrado de datos en tránsito es compatible con los recursos
45
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Casos de uso
compartidos de archivos asignados en una instancia de contenedor compatible con el protocolo SMB 3.0 o
posterior. El cifrado de los datos en reposo se activa automáticamente al crear un sistema de archivos de
Amazon FSx. Amazon FSx cifra automáticamente los datos en tránsito mediante el cifrado SMB a medida
que accede a su sistema de archivos sin necesidad de modificar sus aplicaciones. Para obtener más
información, consulteCifrado de datos en Amazon FSxen laGuía del usuario de Amazon FSx for Windows
File Server.
"rootDirectory": "\\path\\to\\my\\data\App01",
"credentialsParameter": "arn-1234",
"domain": "corp.fullyqualified.com",
En otro ejemplo, una tarea tiene acceso a la carpetaApp02mediante una credencial guardada en el
Administrador de Secretos. Su ARN es 6789.
"rootDirectory": "\\path\\to\\my\\data\App02",
"credentialsParameter": "arn-6789",
"domain": "corp.fullyqualified.com",
Casos de uso
Los contenedores no están diseñados para persistir los datos. Sin embargo, algunas aplicaciones de.NET
contenedorizadas pueden requerir carpetas locales como almacenamiento persistente para guardar
los resultados de las aplicaciones. Amazon FSx for Windows File Server ofrece una carpeta local en
el contenedor. Esto permite que varios contenedores lean y escriban en el mismo sistema de archivos
respaldado por un recurso compartido SMB.
46
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modelo de responsabilidad compartida
Temas
• Modelo de responsabilidad compartida (p. 47)
• AWS Identity and Access Management (p. 49)
• Uso de funciones de IAM con tareas de Amazon ECS (p. 51)
• Seguridad de la red (p. 56)
• Administración de secretos (p. 60)
• Compliance (p. 61)
• Registro y monitorización (p. 62)
• Seguridad de AWS Fargate (p. 64)
• Seguridad de tareas y contenedores (p. 65)
• Seguridad de tiempo de ejecución (p. 69)
• AWSSocios (p. 70)
47
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Modelo de responsabilidad compartida
Antes de extender sus servicios a la nube, debe comprender qué aspectos de seguridad y cumplimiento de
los que es responsable.
48
Amazon Elastic Container Service
Guía de prácticas recomendadas de
AWS Identity and Access Management
Recommendations
Le recomendamos que realice las siguientes acciones al configurar las funciones y políticas de IAM.
Cuando haga referencia a un ARN en una política, utilice el nuevo formato ARN más largo. Para
obtener más información, consulteNombres de recursos de Amazon (ARN) e IDen laGuía del
desarrollador de Amazon Elastic Container.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:StopTask"
],
"Condition": {
"ArnEquals": {
"ecs:cluster": "arn:aws:ecs:<region>:<aws_account_id>:cluster/<cluster_name>"
}
},
"Resource": [
49
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recommendations
"arn:aws:ecs:<region>:<aws_account_id>:task-definition/<task_family>:*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:DeleteCluster"
],
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
},
"Resource": ["*"]
}
]
}
Las etiquetas aplicadas a los servicios se propagan a todas las tareas que forman parte de ese servicio.
Debido a esto, puede crear roles con el ámbito de los recursos de Amazon ECS con etiquetas específicas.
En la siguiente directiva, una entidad de IAM inicia y detiene todas las tareas con una clave de etiqueta
deDepartmenty un valor de etiqueta deAccounting.
{
"Version": "2012-10-17",
"Statement": [
50
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Uso de funciones de IAM con tareas de Amazon ECS
{
"Effect": "Allow",
"Action": [
"ecs:StartTask",
"ecs:StopTask",
"ecs:RunTask"
],
"Resource": "arn:aws:ecs:*",
"Condition": {
"StringEquals": {"ecs:ResourceTag/Department": "Accounting"}
}
}
]
}
Al asignar roles de IAM a una tarea, debe utilizar la siguiente directiva de confianza para que cada una de
las tareas pueda asumir un rol de IAM distinto del que utiliza la instancia de EC2. De esta forma, la tarea
no hereda el rol de la instancia de EC2.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Cuando agrega un rol de tarea a una definición de tarea, el agente contenedor de Amazon
ECS crea automáticamente un token con un identificador de credencial único (por
ejemplo,12345678-90ab-cdef-1234-567890abcdef) para la tarea. Este token y las
credenciales de rol se agregan a la caché interna del agente. El agente rellena la variable de
entornoAWS_CONTAINER_CREDENTIALS_RELATIVE_URIen el contenedor con el URI del ID de
credencial (por ejemplo,/v2/credentials/12345678-90ab-cdef-1234-567890abcdef).
51
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Rol de ejecución de tareas
Puede recuperar manualmente las credenciales de rol temporales desde el interior de un contenedor
añadiendo la variable de entorno a la dirección IP del agente de contenedor de Amazon ECS y ejecutando
el comandocurlen la cadena resultante.
curl 192.0.2.0$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
{
"RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-
DASWWSF2WGD6",
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token": "IQoJb3JpZ2luX2VjEEM/Example==",
"Expiration": "2021-01-16T00:51:53Z"
}
Las versiones más recientes de laAWSLos SDK obtienen automáticamente estas credenciales de
laAWS_CONTAINER_CREDENTIALS_RELATIVE_URIvariable al hacerAWSLlamadas al API.
El resultado incluye un par de claves de acceso que consta de un ID de clave de acceso secreta y
una clave secreta que la aplicación utiliza para acceder aAWSde AWS. También incluye un token
queAWSutiliza para comprobar que las credenciales son válidas. De forma predeterminada, las
credenciales asignadas a tareas que utilizan roles de tarea son válidas durante seis horas. A continuación,
el agente de contenedor de Amazon ECS los rota de forma automática.
52
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Función de instancia de contenedor de Amazon EC2
Fargate necesita un rol de IAM que le permita extraer imágenes de Amazon ECR y escribir registros en
CloudWatch Logs. También se requiere un rol de IAM cuando una tarea hace referencia a un secreto
almacenado enAWS Secrets Manager, como un secreto de extracción de imagen.
Note
Si extraes imágenes como usuario autenticado, es menos probable que se vea afectado por los
cambios que se produjeron enLímites de velocidad de extracción de Docker Hub. Para obtener
más información, consulteAutenticación de registros privados para instancias de.
Al utilizar Amazon ECR y Amazon ECR Public, puede evitar los límites impuestos por Docker. Si
extrae imágenes de Amazon ECR, esto también ayuda a acortar los tiempos de extracción de la
red y reduce los cambios en la transferencia de datos cuando el tráfico sale de la VPC.
Important
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeTags",
"ecs:CreateCluster",
"ecs:DeregisterContainerInstance",
"ecs:DiscoverPollEndpoint",
"ecs:Poll",
"ecs:RegisterContainerInstance",
"ecs:StartTelemetrySession",
"ecs:UpdateContainerInstancesState",
"ecs:Submit*",
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
En esta política, elecrylogspermiten a los contenedores que se ejecutan en las instancias extraer
imágenes de Amazon ECR y escribir registros en Amazon CloudWatch. Laecspermiten al agente registrar
53
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Roles vinculados a servicios
y anular el registro de instancias y comunicarse con el plano de control de Amazon ECS. De éstos,
elecs:CreateClusteres opcional.
Si elimina sin querer el rol vinculado al servicio, puede volver a crearlo. Para obtener
instrucciones, consulteCreación del rol vinculado a servicio.
Recommendations
Le recomendamos que haga lo siguiente al configurar las funciones y políticas de IAM de la tarea.
Para evitar que las tareas se ejecuten enpuentepara acceder a los metadatos de Amazon EC2, ejecute
el siguiente comando o actualice los datos de usuario de la instancia. Para obtener más instrucciones
sobre cómo actualizar los datos de usuario de una instancia, consulte esteAWSArtículo de Support de.
Para obtener más información sobre el modo de puente de definición de tareas, consultemodo de red de
definición de tarea.
Para que este cambio persista después de un reinicio, ejecute el siguiente comando específico para su
imagen de máquina de Amazon (AMI):
• Amazon Linux 2
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now
iptables
• Amazon Linux
54
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recommendations
UsarawsvpcModo de red
Utilizar la redawsvpcpara restringir el flujo de tráfico entre diferentes tareas o entre sus tareas y otros
servicios que se ejecutan dentro de su Amazon VPC. Esto añade una capa de seguridad adicional.
Laawsvpcproporciona aislamiento de red a nivel de tarea para las tareas que se ejecutan en Amazon EC2.
Es el modo predeterminado enAWS Fargate. Es el único modo de red que puede utilizar para asignar un
grupo de seguridad a las tareas.
Ejecute el siguiente comando para generar un informe que muestre la última información de acceso para la
directiva a la que se hace referencia:
Utilice laJobIdque estaba en la salida para ejecutar el siguiente comando. Cuando haya terminado de
hacer esto, puede ver los resultados del informe.
Puede identificar las acciones que realizan tareas con un rol de IAM enAWS CloudTrailmirando
eluserIdentityPropiedad. En el siguiente ejemplo, elarnincluye el nombre de la función asumida,s3-
write-go-bucket-role, seguido del nombre de la tarea,7e9894e088ad416eb5cab92afExample.
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample",
"arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-
role/7e9894e088ad416eb5cab92afExample",
...
}
Note
Cuando las tareas que asumen un rol se ejecutan en instancias de contenedor de Amazon EC2,
el agente contenedor de Amazon ECS registra una solicitud en el registro de auditoría del agente
que se encuentra en una dirección en el/var/log/ecs/audit.log.YYYY-MM-DD-HHformato.
55
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Seguridad de la red
Seguridad de la red
La seguridad de red es un tema amplio que abarca varios subtemas. Estos incluyen cifrado en tránsito,
segmentación y aislamiento de red, cortafuegos, enrutamiento de tráfico y observabilidad.
Cifrado en tránsito
El cifrado del tráfico de red impide que los usuarios no autorizados intercepten y lean datos cuando esos
datos se transmiten a través de una red. Con Amazon ECS, el cifrado de red se puede implementar de
cualquiera de las siguientes formas.
conAWS App Mesh, puede configurar conexiones TLS entre los proxies de Envoy que se implementan
con extremos de malla. Dos ejemplos son los nodos virtuales y las puertas de enlace virtuales. Los
certificados TLS pueden provenir deAWS Certificate Manager(ACM). O bien, puede provenir de su
propia autoridad de certificación privada.
• Habilitar seguridad de la capa de transporte (TLS)
• Habilite el cifrado de tráfico entre servicios enAWS App Meshusar certificados ACM o certificados
proporcionados por el cliente
• Tutorial de TLS ACM
• Tutorial del archivo TLS
• Envoy
• Uso de instancias Nitro:
De forma predeterminada, el tráfico se cifra automáticamente entre los siguientes tipos de instancias de
Nitro: C5n, C5dn, M5dn, M5dn, M5dn, R5dn y R5dn. El tráfico no se cifra cuando se enruta a través de
una puerta de enlace de tránsito, un equilibrador de carga o un intermediario similar.
• Cifrado en tránsito
• Novedades de la contabilidad de 2019
• Esta charla de Re:Inforce 2019
• Utilizar la indicación de nombre de servidor (SNI) con un Application Load Balancer:
El Application Load Balancer (ALB) y el Network Load Balancer (NLB) admiten la indicación de nombre
de servidor (SNI). Mediante el uso de SNI, puede colocar varias aplicaciones seguras detrás de un
solo oyente. Para esto, cada uno tiene su propio certificado TLS. Le recomendamos que aprovisione
certificados para el balanacer de carga usandoAWS Certificate Manager(ACM) y, a continuación,
agréguelos a la lista de certificados del agente de escucha. LaAWSEl balanceador de carga utiliza un
algoritmo de selección de certificados inteligentes con SNI. Si el nombre de host proporcionado por un
cliente coincide con un solo certificado de la lista de certificados, el balanceador de carga elige dicho
certificado. Si un nombre de host proporcionado por un cliente coincide con varios certificados de la
lista, el balanceador de carga selecciona un certificado que el cliente puede admitir. Algunos ejemplos
incluyen un certificado autofirmado o un certificado generado a través de ACM.
• SNI con Application Load Balancer
• SNI con Network Load Balancer
• Cifrado integral con certificados TLS:
Esto implica implementar un certificado TLS con la tarea. Esto puede ser un certificado autofirmado
o un certificado de una autoridad de certificación de confianza. Puede obtener el certificado haciendo
56
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Integración en red de las tareas
referencia a un secreto para el certificado. De lo contrario, puede optar por ejecutar un contenedor que
emita una solicitud de firma de certificados (CSR) a ACM y, a continuación, monta el secreto resultante
en un volumen compartido.
• Mantener la seguridad de la capa de transporte hasta los contenedores mediante el Network Load
Balancer con Amazon ECS, parte 1
• Mantenimiento de la seguridad de la capa de transporte (TLS) hasta la parte 2 del contenedor: Uso de
AWS Certificate Manager Private Certificate Authority
App Mesh también le ofrece la posibilidad de utilizar Mutual Transport Layer Security (MTL) donde tanto el
cliente como el servidor se autentican mutuamente mediante certificados. La comunicación subsiguiente
entre el cliente y el servidor se cifran mediante TLS. Al requerir MTL entre servicios en una malla, puede
verificar que el tráfico proviene de una fuente de confianza. Para obtener más información, consulte los
siguientes temas:
• Autenticación MTL
• Tutorial de MTLs Secret Discovery Service (SDS)
• Tutorial de archivos de MTLS
AWS PrivateLink
AWS PrivateLinkes una tecnología de red que le permite crear endpoints privados para diferentesAWS,
incluido Amazon ECS. Los endpoints son necesarios en entornos aislados donde no hay Internet Gateway
(IGW) conectado a Amazon VPC y no hay rutas alternativas a Internet. UsoAWS PrivateLinkgarantiza
57
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Configuración del agente de contenedores de Amazon ECS
que las llamadas al servicio Amazon ECS permanezcan dentro de la VPC de Amazon y no atraviesan
Internet. Para obtener instrucciones sobre cómo crearAWS PrivateLinkpara Amazon ECS y otros servicios
relacionados, consulteInterfaz Amazon ECS puntos de enlace de la VPC de Amazon.
Important
Tanto Amazon ECR como Amazon ECS admiten políticas de endpoints. Estas directivas le permiten refinar
el acceso a las API de un servicio. Por ejemplo, podría crear una política de endpoints para Amazon ECR
que solo permita que las imágenes se envíen a los registros, en particularAWSCuentas. Una política como
esta podría utilizarse para evitar que los datos se exfiltren a través de imágenes de contenedor y, al mismo
tiempo, permitir que los usuarios envíen a los registros autorizados de Amazon ECR. Para obtener más
información, consulteUsar políticas de punto de enlace de la VPC.
La siguiente política permite a todos losAWSen su cuenta para realizar todas las acciones contra sus
repositorios de Amazon ECR:
{
"Statement": [
{
"Sid": "LimitECRAccess",
"Principal": "*",
"Action": "*",
"Effect": "Allow",
"Resource": "arn:aws:ecr:region:your_account_id:repository/*"
},
]
}
Puede mejorar aún más esto estableciendo una condición que utilice el
nuevoPrincipalOrgIDPropiedad. Esto evita la inserción y extracción de imágenes por parte de
una entidad de IAM que no forma parte de suAWS Organizations. Para obtener más información,
consulteaws:PrincipalOrgID.
Recommendations
Le recomendamos que realice lo siguiente al configurar Amazon VPC, los equilibradores de carga y la red.
58
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recommendations
Los navegadores modernos advierten a los usuarios cuando se conectan a sitios inseguros. Si su servicio
está dirigido por un equilibrador de carga orientado al público, use TLS/SSL para cifrar el tráfico desde el
navegador del cliente al equilibrador de carga y volver a cifrarlo en el back-end si es necesario.
Los grupos de seguridad también deben utilizarse para controlar el tráfico entre tareas y otros recursos
dentro de la VPC de Amazon, como las bases de datos de Amazon RDS.
59
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Administración de secretos
Note
Debido a la naturaleza temporal de los contenedores, los registros de flujo no siempre pueden ser
una forma eficaz de analizar patrones de tráfico entre diferentes contenedores o contenedores y
otros recursos de red.
Administración de secretos
Los secretos, como las claves API y las credenciales de base de datos, son utilizados con frecuencia por
las aplicaciones para obtener acceso a otros sistemas. A menudo consisten en un nombre de usuario y
una contraseña, un certificado o una clave API. El acceso a estos secretos debe restringirse a entidades
de IAM específicas que utilizan IAM y se inyectan en contenedores en tiempo de ejecución.
Los secretos se pueden inyectar sin problemas en contenedores desdeAWS Secrets ManagerEl almacén
de parámetros Amazon EC2 Systems Manager. Estos secretos se pueden hacer referencia en su tarea
como cualquiera de los siguientes.
Recommendations
Le recomendamos que haga lo siguiente al configurar la gestión de secretos.
Tareas que hacen referencia a un secreto deAWS Secrets ManagerEl almacén de parámetros
Amazon EC2 Systems Manager requieren unRol de ejecución de tareascon una política que
otorga a Amazon ECS acceso al secreto deseado y, si procede, alAWS KMSClave utilizada para
cifrar y descifrar ese secreto.
Important
Los secretos a los que se hace referencia en las tareas no se rotan automáticamente. Si su
secreto cambia, debe forzar una nueva implementación o iniciar una nueva tarea para recuperar
el valor secreto más reciente. Para obtener más información, consulte los siguientes temas:
60
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recursos adicionales
En Amazon EC2, el volumen en el que se escribe el secreto se puede cifrar con unAWS
KMSclave administrada por el cliente. EnAWS Fargate, el almacenamiento por volumen se cifra
automáticamente mediante una clave administrada por servicio.
Recursos adicionales
• Transferir secretos a los contenedores en una tarea de Amazon ECS
• Cámaraes un contenedor para almacenar secretos en el almacén de parámetros Amazon EC2 Systems
Manager
Compliance
Su responsabilidad de conformidad al utilizar Amazon ECS se determina en función de la confidencialidad
de los datos, los objetivos de conformidad de su empresa, así como de la legislación y los reglamentos
aplicables.
61
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Normas de Seguridad de Datos del
Sector de las Tarjetas de Pago (PCI DSS
Para obtener información adicional sobre cómo lograr el cumplimiento de PCI DSS en Amazon ECS,
consulte los siguientes documentos técnicos.
Varios mecanismos para cifrar en reposo están disponibles con cadaAWS, como Amazon S3, Amazon
EBS yAWS KMS. Puede implementar una red de superposición (como VNS3 o Weave Net) para garantizar
el cifrado completo de la PHI transferida entre contenedores o para proporcionar una capa de cifrado
redundante. También debe habilitarse el registro completo y todos los registros de contenedor deben
dirigirse a Amazon CloudWatch. Para obtener más información, consulteArquitecting for HIPAA Security
and Compliance.
Recommendations
Debe involucrar a los propietarios del programa de cumplimiento dentro de su empresa con anticipación
y utilizar elAWSModelo de responsabilidad compartidapara identificar la propiedad del control de
cumplimiento para el éxito con los programas de cumplimiento pertinentes.
Registro y monitorización
El registro y la supervisión son un aspecto importante del mantenimiento de la fiabilidad, la disponibilidad
y el rendimiento de Amazon ECS y suAWSSoluciones de.AWSproporciona varias herramientas para
monitorizar sus recursos de Amazon ECS y responder a posibles incidentes.
62
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Registro de contenedores con bit fluido
Puede configurar los contenedores de las tareas para enviar información de registro a los Amazon
CloudWatch Logs. Si utiliza laAWS FargatePara sus tareas, puede ver los registros de los contenedores.
Si utiliza el tipo de lanzamiento de Amazon EC2, puede ver distintos registros desde sus contenedores en
una ubicación cómoda. Esto también evita que los registros de contenedor ocupen espacio en disco en sus
instancias de contenedor.
Para obtener más información acerca de los Amazon CloudWatch Logs, consulteMonitoree registros de
instancias Amazon EC2en laGuía del usuario de Amazon CloudWatch. Para obtener instrucciones sobre
cómo enviar registros de contenedor desde sus tareas a los Amazon CloudWatch Logs, consulteMediante
laawslogscontrolador de registro.
Por ejemplo, puede extraer la últimaAWSpara la imagen de bit fluido usando este comando Docker CLI:
Consulte también las siguientes entradas de blog para obtener más información sobre Fluent Bit y
características relacionadas:
63
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Seguridad de AWS Fargate
FireLens funciona con Fluentd y Fluent Bit. Proporcionamos elAWSpara la imagen de bit fluido. O bien,
puede utilizar su propia imagen Fluentd o Fluent Bit.
Debe tener en cuenta las siguientes condiciones y consideraciones al utilizar FireLens para Amazon ECS:
• FireLens para Amazon ECS es compatible con tareas alojadas tanto enAWS Fargatey Amazon EC2.
• FireLens para Amazon ECS es compatible conAWS CloudFormationplantillas de. Para obtener más
información, consulteFirelensConfiguration de AWS::ECS::TaskDefinitionen laAWS CloudFormationGuía
del usuario.
• En el caso de las tareas que utilizan elbridgePara ello, los contenedores con la configuración FireLens
deben iniciarse antes de que se inicie cualquiera de los contenedores de aplicación que se basan en él.
Para controlar el orden en que se inicien los contenedores, utilice las condiciones de dependencia en la
definición de la tarea. Para obtener más información, consulteDependencia de contenedor.
Ejemplo: Iniciar una tarea Amazon ECS enAWS FargateVersión 1.4.0 de la plataforma con cifrado efímero
El siguiente comando iniciará una tarea de Amazon ECS enAWS FargateVersión de la plataforma 1.4.
Dado que esta tarea se inicia como parte del clúster de Amazon ECS, utiliza los 20 GB de almacenamiento
efímero que se cifra automáticamente.
Tareas que se inician enAWS Fargatesolo admite agregar elSYS_PTRACECapacidad del kernel.
Consulte el video tutorial a continuación que muestra cómo usar esta función a través de
SysdigFalcoProyecto de.
64
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Seguridad de tareas y contenedores
Recommendations
Le recomendamos que haga lo siguiente al configurar las tareas y los contenedores.
Docker tiene un mecanismo para crear imágenes a partir de una imagen reservada y mínima conocida
comorasguño. Información de Formore, consulteCrear una imagen principal simple usandorasguñoen la
documentación de Docker. Con lenguajes como Go, puede crear un binario vinculado estático y hacer
referencia a él en su Dockerfile. El siguiente ejemplo muestra cómo lograr esto.
############################
# STEP 1 build executable binary
############################
FROM golang:alpine AS builder
# Install git.
# Git is required for fetching the dependencies.
RUN apk update && apk add --no-cache git
WORKDIR $GOPATH/src/mypackage/myapp/
COPY . .
# Fetch dependencies.
# Using go get.
RUN go get -d -v
# Build the binary.
RUN go build -o /go/bin/hello
############################
# STEP 2 build a small image
############################
FROM scratch
# Copy our static executable.
COPY --from=builder /go/bin/hello /go/bin/hello
# Run the hello binary.
ENTRYPOINT ["/go/bin/hello"]
This creates a container image that consists of your application and nothing else, making
it extremely secure.
El ejemplo anterior es también un ejemplo de una compilación de varias etapas. Estos tipos de
compilaciones son atractivos desde el punto de vista de la seguridad, ya que puede usarlos para minimizar
el tamaño de la imagen final enviada al registro del contenedor. Las imágenes de contenedor carentes
de herramientas de compilación y otros binarios extraños mejoran la postura de seguridad al reducir la
65
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recommendations
superficie de ataque de la imagen. Para obtener más información acerca de las compilaciones de varias
etapas, consultecreación de compilaciones de varias etapas.
Docker Desktop Edge versión 2.3.6.0o posterior puedescanimágenes locales. Las exploraciones están
alimentadas porSnyk, un servicio de seguridad de aplicaciones. Cuando se descubren vulnerabilidades,
Snyk identifica las capas y dependencias con la vulnerabilidad en Dockerfile. También recomienda
alternativas seguras como usar una imagen base más delgada con menos vulnerabilidades o actualizar un
paquete en particular a una versión más reciente. Mediante el análisis Docker, los desarrolladores pueden
resolver posibles problemas de seguridad antes de enviar sus imágenes al registro.
• Automatizar el cumplimiento de las imágenes mediante Amazon ECR yAWS Security Hubexplica
cómo mostrar la información de vulnerabilidad de Amazon ECR enAWS Security Huby automatizar la
corrección bloqueando el acceso a imágenes vulnerables.
Para quitar estos permisos especiales de estos archivos, agregue la siguiente directiva a la imagen del
contenedor.
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true
66
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recommendations
parte de las 1000 mejores imágenes tienen vulnerabilidades. Puede encontrar una lista de esas imágenes
y sus vulnerabilidades enhttps://vulnerablecontainers.org/.
Docker Desktop realiza exploraciones locales usando Snyk. También se puede utilizar para encontrar
vulnerabilidades y posibles problemas de licencias en bibliotecas de código abierto. Se puede integrar
directamente en los flujos de trabajo de desarrolladores, lo que le permite mitigar los riesgos que plantean
las bibliotecas de código abierto. Para obtener más información, consulte los siguientes temas:
Como parte de su canalización CI/CD, debe pelusas Dockerfiles para buscar elUSERy fallar la compilación
si falta. Para obtener más información, consulte los siguientes temas:
• Dockerfile-pelusaes una herramienta de código abierto de RedHat que se puede utilizar para comprobar
si el archivo se ajusta a las mejores prácticas.
• Hadolintes otra herramienta para crear imágenes Docker que se ajusten a las mejores prácticas.
67
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Recommendations
Amazon ECS enAWS Fargaterequieren que especifique límites de CPU y memoria porque utiliza
estos valores para fines de facturación. Una tarea que acapara todos los recursos del sistema no
es un problema para Amazon ECS Fargate porque cada tarea se ejecuta en su propia instancia
dedicada. Si no especifica un límite de memoria, Amazon ECS asigna un mínimo de 4 MB a cada
contenedor. Del mismo modo, si no se establece ningún límite de CPU para la tarea, el agente
contenedor de Amazon ECS le asigna un mínimo de 2 CPU.
Si un contenedor no requiere todas las capacidades del núcleo de Docker enumeradas anteriormente,
considere soltarlas del contenedor. Para obtener más información acerca de cada función de Docker,
consulteKernalCapabilities. Puede averiguar qué capacidades están en uso haciendo lo siguiente:
• Instale el paquete del SOlibcap-ngy ejecute lapscappara enumerar las capacidades que cada proceso
está utilizando.
68
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Seguridad de tiempo de ejecución
Utilice una clave gestionada por el cliente (CMK) para cifrar las
imágenes enviadas a Amazon ECR
Debe utilizar una clave gestionada por el cliente (CMK) para invalidar las imágenes que se envían a
Amazon ECR. Las imágenes que se envían a Amazon ECR se cifran automáticamente en reposo con
unAWS Key Management Service(AWS KMS) clave administrada. Si prefiere utilizar su propia clave,
Amazon ECR admite ahoraAWS KMScifrado con claves administradas por el cliente (CMK). Antes
de habilitar el cifrado del lado del servidor con un CMK, revise las consideraciones enumeradas en la
documentación deCifrado en reposo.
Con informática segura (seccomp) puede evitar que una aplicación contenedorizada realice ciertos
syscalls al kernel del sistema operativo host subyacente. Mientras que el sistema operativo Linux tiene
unos cientos de llamadas al sistema, la mayoría de ellas no son necesarias para ejecutar contenedores. Al
restringir qué syscalls puede hacer un contenedor, puede disminuir eficazmente la superficie de ataque de
su aplicación.
Para comenzar con seccomp, puede usarstracepara generar un seguimiento de pila para
ver qué llamadas al sistema está realizando su aplicación. Puede utilizar una herramienta
comosyscall2seccomppara crear un perfil seccomp a partir de los datos recopilados del seguimiento de
la pila. Para obtener más información, consultestraceysyscall2seccomp.
A diferencia del módulo de seguridad SELinux, seccomp no puede aislar contenedores entre
sí. Sin embargo, protege el núcleo del host de syscalls no autorizados. Funciona interceptando
syscalls y permitiendo que pasen solo aquellos que han sido permitidos en la lista. Docker tiene
unapredeterminadaperfil seccomp adecuado para la mayoría de las cargas de trabajo de propósito
general.
Note
También es posible crear sus propios perfiles para cosas que requieren privilegios adicionales.
AppArmor es un módulo de seguridad de Linux similar a seccomp, pero restringe las capacidades
de un contenedor incluyendo el acceso a partes del sistema de archivos. Se puede ejecutar
enenforcementorcomplainModo. Dado que crear perfiles de AppArmor puede ser un reto, le
recomendamos que utilice una herramienta comobane. Para obtener más información sobre AppArmor,
consulte laAppArmor(Se ha creado el certificado).
Important
AppArmor sólo está disponible para las distribuciones Ubuntu y Debian de Linux.
Recommendations
Le recomendamos que realice las siguientes acciones al configurar la seguridad en tiempo de ejecución.
69
Amazon Elastic Container Service
Guía de prácticas recomendadas de
AWSSocios
AWSSocios
Puede utilizar cualquiera de las siguientesAWSProductos asociados para añadir seguridad y
características adicionales a sus cargas de trabajo de Amazon ECS. Para obtener más información,
consulteSocios de Amazon ECS.
Aqua Security
Puede usarAqua Securitypara proteger sus aplicaciones nativas de la nube desde el desarrollo hasta
la producción. Aqua Cloud Native Security Platform se integra con sus recursos nativos de la nube y
herramientas de orquestación para proporcionar seguridad transparente y automatizada. Puede prevenir
actividades sospechosas y ataques en tiempo real, y ayudar a hacer cumplir las políticas y simplificar el
cumplimiento normativo.
Palo Alto Networksproporciona seguridad y protección para sus hosts, contenedores e infraestructura sin
servidor en la nube y durante todo el ciclo de vida de desarrollo y software.
Twistlock es suministrado por Palo Alto Networks y puede integrarse con Amazon ECS FireLens. Con
él, tiene acceso a registros e incidentes de seguridad de alta fidelidad que se agregan sin problemas
en variosAWSServicios de . Estos incluyen Amazon CloudWatch, Amazon Athena y Amazon Kinesis.
Twistlock protege las cargas de trabajo que se implementan enAWSServicios de contenedores.
Sysdig
Puede usarSysdigpara ejecutar cargas de trabajo nativas de la nube seguras y compatibles en escenarios
de producción. Sysdig Secure DevOps Platform cuenta con funciones integradas de seguridad y
cumplimiento normativo para proteger sus cargas de trabajo nativas de la nube, y también ofrece
escalabilidad, rendimiento y personalización de nivel empresarial.
70
Amazon Elastic Container Service
Guía de prácticas recomendadas de
71
Amazon Elastic Container Service
Guía de prácticas recomendadas de
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la
traducción y la version original de inglés, prevalecerá la version en inglés.
lxxii