

# Opciones de almacenamiento para las tareas de Amazon ECS
<a name="using_data_volumes"></a>

Amazon ECS ofrece opciones de almacenamiento de datos flexibles, rentables y de uso fácil según sus necesidades. Amazon ECS admite las opciones siguientes de volumen de datos para contenedores:


| Volumen de datos | Capacidad compatible | Sistemas operativos compatibles | Persistencia del almacenamiento | Casos de uso | 
| --- | --- | --- | --- | --- | 
| Amazon Elastic Block Store (Amazon EBS) | Fargate, Amazon EC2 e instancias administradas de Amazon ECS | Linux, Windows (solo en Amazon EC2) | Se puede mantener cuando se adjunta a una tarea independiente. Efímero cuando se adjunta a una tarea que mantiene un servicio. | Los volúmenes de Amazon EBS proporcionan almacenamiento en bloques rentable, duradero y de alto rendimiento para cargas de trabajo en contenedores con uso intensivo de datos. Entre los casos de uso más comunes se incluyen cargas de trabajo transaccionales, como bases de datos, escritorios virtuales y volúmenes raíz, y cargas de trabajo con un rendimiento intensivo, como las cargas de trabajo de procesamiento de registros y ETL. Para obtener más información, consulte [Uso de volúmenes de Amazon EBS con Amazon ECS](ebs-volumes.md). | 
| Amazon Elastic File System (Amazon EFS) | Fargate, Amazon EC2 e instancias administradas de Amazon ECS | Linux | Persistente | Los volúmenes de Amazon EFS proporcionan almacenamiento compartido de archivos sencillo, escalable y persistente para utilizarlo con las tareas de Amazon ECS. Dicho almacenamiento aumenta y se reduce automáticamente a medida que agrega o elimina archivos. Los volúmenes de Amazon EFS admiten la simultaneidad y son útiles para las aplicaciones en contenedores que se escalan horizontalmente y necesitan funcionalidades de almacenamiento como baja latencia, rendimiento alto y coherencia de lectura tras escritura. Entre los casos de uso más comunes se incluyen las cargas de trabajo como el análisis de datos, el procesamiento multimedia, la administración de contenido y los servidores web. Para obtener más información, consulte [Uso de volúmenes de Amazon EFS con Amazon ECS](efs-volumes.md). | 
| Amazon FSx para Windows File Server | Amazon EC2 | Windows | Persistente | Los volúmenes FSx para Windows File Server proporcionan servidores de archivos de Windows completamente administrados que pueden utilizarse para aprovisionar las tareas de Windows que necesitan almacenamiento de archivos persistente, distribuido, compartido y estático. Entre los casos de uso más comunes se incluyen aplicaciones de .NET que pueden requerir carpetas locales, como el almacenamiento persistente para guardar los resultados de las aplicaciones. Amazon FSx para Windows File Server ofrece una carpeta local en el contenedor que permite la lectura y escritura de varios contenedores en el mismo sistema de archivos respaldado por un recurso compartido de archivos SMB. Para obtener más información, consulte [Uso de volúmenes de FSx para Windows File Server con Amazon ECS](wfsx-volumes.md). | 
| Amazon FSx para NetApp ONTAP | Amazon EC2 | Linux | Persistente | Los volúmenes de Amazon FSx para NetApp ONTAP proporcionan sistemas de archivos NetApp ONTAP totalmente administrados que puede utilizar para aprovisionar sus tareas de Linux que necesitan un almacenamiento de archivos compartido persistente, de alto rendimiento y rico en características. Amazon FSx para NetApp ONTAP es compatible con los protocolos NFS y SMB, y proporciona características de nivel empresarial, como instantáneas, clonación y deduplicación de datos. Los casos de uso comunes incluyen cargas de trabajo de computación de alto rendimiento, repositorios de contenido y aplicaciones que requieren un almacenamiento compartido compatible con POSIX. Para obtener más información, consulte [Mounting Amazon FSx for NetApp ONTAP file systems from Amazon ECS containers](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/mount-ontap-ecs-containers.html). | 
| Volúmenes de Docker | Amazon EC2 | Windows, Linux | Persistente | Los volúmenes de Docker son una característica del tiempo de ejecución de contenedores de Docker que permite a los contenedores conservar los datos mediante el montaje de un directorio desde el sistema de archivos del host. Los controladores de volúmenes de Docker (también se les conocen como complementos) se utilizan para integrar los volúmenes de contenedores con sistemas de almacenamiento externos. Los volúmenes de Docker se pueden administrar mediante controladores de terceros o mediante el controlador integrado local. Entre los casos de uso más comunes de los volúmenes de Docker se incluyen proporcionar volúmenes de datos persistentes o compartir volúmenes en distintas ubicaciones de contenedores diferentes en la misma instancia de contenedor. Para obtener más información, consulte [Uso de volúmenes de Docker con Amazon ECS](docker-volumes.md). | 
| Montajes de enlace | Fargate, Amazon EC2 e instancias administradas de Amazon ECS | Windows, Linux | Efímero | Los montajes de unión consisten en un archivo o directorio del host, por ejemplo, una instancia de Amazon EC2 o AWS Fargate, que se monta en un contenedor. Entre los casos de uso más comunes de los montajes de unión se incluyen compartir un volumen de un contenedor de origen con otros contenedores en la misma tarea o montar un volumen del host o un volumen vacío en uno o varios contenedores. Para obtener más información, consulte [Uso de montajes de unión con Amazon ECS](bind-mounts.md). | 

# Uso de volúmenes de Amazon EBS con Amazon ECS
<a name="ebs-volumes"></a>

Los volúmenes de Amazon Elastic Block Store (Amazon EBS) proporcionan almacenamiento en bloque de alta disponibilidad, rentable, duradero y de alto rendimiento para las cargas de trabajo con un uso intensivo de datos. Los volúmenes de Amazon EBS se pueden utilizar con las tareas de Amazon ECS para las aplicaciones de alto rendimiento y con un uso intensivo de transacciones. Para obtener más información sobre los volúmenes de Amazon EBS, consulte [Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes.html) en la *Guía del usuario de Amazon EBS*.

Amazon ECS administra los volúmenes de Amazon EBS que se adjuntan a las tareas de Amazon ECS en su nombre. Durante el lanzamiento de una tarea independiente, puede proporcionar la configuración que se utilizará para adjuntar un volumen de EBS a la tarea. Durante la creación o la actualización del servicio, puede proporcionar la configuración que se utilizará para adjuntar un volumen de EBS por tarea a cada tarea administrada por el servicio de Amazon ECS. Puede configurar volúmenes nuevos y vacíos para adjuntarlos o puede utilizar instantáneas para cargar los datos de los volúmenes existentes.

**nota**  
Cuando utiliza instantáneas para configurar los volúmenes, puede especificar un valor de `volumeInitializationRate`, en MiB/s, que indica la velocidad la que se obtienen los datos de la instantánea para crear volúmenes que se inicialicen por completo en un período de tiempo predecible. Para obtener más información sobre la inicialización de volúmenes, consulte [Inicialización de volúmenes de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html) en la *Guía del usuario de Amazon EBS*. Para obtener más información sobre la configuración de los volúmenes de Amazon EBS, consulte [Aplazamiento de la configuración del volumen a la hora de lanzamiento en la definición de la tarea de Amazon ECS](specify-ebs-config.md) y [Especificación de la configuración del volumen de Amazon EBS durante la implementación de Amazon ECS](configure-ebs-volume.md).

La configuración del volumen se aplaza hasta el momento del lanzamiento mediante el parámetro `configuredAtLaunch` de la definición de la tarea. Al proporcionar la configuración del volumen en el momento del lanzamiento y no en la definición de la tarea, se logran crear definiciones de tareas que no se limitan a un tipo de volumen de datos específico ni a una configuración de volumen de EBS específica. A continuación, puede reutilizar las definiciones de tareas en distintos tiempos de ejecución. Por ejemplo, durante la implementación, puede proporcionar un mayor rendimiento para las cargas de trabajo de producción que para los entornos de preproducción.

 Los volúmenes de Amazon EBS adjuntos a las tareas se pueden cifrar con claves de AWS Key Management Service (AWS KMS) para proteger los datos. Para obtener más información, consulte [Datos cifrados almacenados en volúmenes de Amazon EBS adjuntos a tareas de Amazon ECS](ebs-kms-encryption.md).

Para supervisar el rendimiento del volumen, también puede utilizar las métricas de Amazon CloudWatch. Para obtener más información acerca de las métricas de Amazon ECS correspondientes a los volúmenes de Amazon EBS, consulte [Métricas de CloudWatch de Amazon ECS](available-metrics.md) y [Amazon ECS Container Insights metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-ECS.html).

Se admite adjuntar un volumen de Amazon EBS a una tarea en todas las [Regiones de AWS](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#region) comerciales y de China que admiten Amazon ECS.

## Sistemas operativos y capacidad compatibles
<a name="ebs-volumes-configuration"></a>

En la siguiente tabla se proporcionan las configuraciones de sistema operativo y la capacidad compatibles.


| Capacidad | Linux  | Windows | 
| --- | --- | --- | 
| Fargate |  Los volúmenes de Amazon EBS son compatibles con la versión de la plataforma 1.4.0 o posterior (Linux). Para obtener más información, consulte [Versiones de la plataforma Fargate para Amazon ECS](platform-fargate.md). | No admitido | 
| EC2 | Los volúmenes de Amazon EBS son compatibles para tareas alojadas en instancias basadas en Nitro con imágenes de máquina de Amazon (AMI) optimizadas para Amazon ECS. Para más información acerca de los tipos de instancias, consulte [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) en la Guía del usuario de Amazon EC2. Los volúmenes de Amazon EBS son compatibles con una AMI optimizada para ECS `20231219` o posterior. Para obtener más información, consulte [Recuperación de los metadatos de la AMI optimizada para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html). | Tareas alojadas en instancias basadas en Nitro con imágenes de máquina de Amazon (AMI) optimizadas para Amazon ECS. Para más información acerca de los tipos de instancias, consulte [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) en la Guía del usuario de Amazon EC2. Los volúmenes de Amazon EBS son compatibles con una AMI optimizada para ECS `20241017` o posterior. Para obtener más información, consulte [Recuperación de los metadatos de la AMI de Windows optimizada para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_windows_AMI.html). | 
| Instancias administradas de Amazon ECS | Los volúmenes de Amazon EBS son compatibles con las tareas alojadas en instancias de instancias administradas de Amazon ECS en Linux. | No admitido | 

## Consideraciones
<a name="ebs-volume-considerations"></a>

 Al utilizar los volúmenes de Amazon EBS, tenga en cuenta lo siguiente:
+ No puede configurar los volúmenes de Amazon EBS para adjuntarlos a las tareas de Amazon ECS en Fargate en la zona de disponibilidad `use1-az3`.
+ No se admite el tipo de volumen magnético (`standard`) de Amazon EBS para las tareas de Fargate. Para obtener más información sobre los volúmenes de Amazon EBS, consulte [Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html) en la *Guía del usuario de Amazon EC2*.
+ Se requiere un rol de IAM en la infraestructura de Amazon ECS al crear un servicio o una tarea independiente que consiste en configurar un volumen en el momento de la implementación. Puede adjuntar la política de IAM `AmazonECSInfrastructureRolePolicyForVolumes` administrada por AWS al rol, o puede utilizar la política administrada como guía para crear y adjuntar su propia política con los permisos que cumplan sus necesidades específicas. Para obtener más información, consulte [Rol de IAM de infraestructura de Amazon ECS](infrastructure_IAM_role.md).
+ Puede adjuntar como máximo un volumen de Amazon EBS a cada tarea de Amazon ECS y debe ser un volumen nuevo. No se puede adjuntar un volumen existente de Amazon EBS a una tarea. Sin embargo, puede configurar un volumen nuevo de Amazon EBS en el momento de la implementación mediante la instantánea de un volumen existente.
+ Para utilizar los volúmenes de Amazon EBS con los servicios de Amazon ECS, el controlador de implementación debe ser `ECS`. Cuando se utiliza este controlador de implementación, se admiten estrategias de implementación azul/verde y continua.
+ Para que un contenedor de la tarea escriba en el volumen de Amazon EBS montado, el contenedor debe tener los permisos de sistema de archivos adecuados. Cuando especifica un usuario que no es usuario raíz en la definición del contenedor, Amazon ECS configura automáticamente el volumen con permisos basados en grupos que permiten al usuario especificado leer y escribir en el volumen. Si no se especifica ningún usuario, el contenedor se pone en marcha como raíz y tiene acceso total al volumen.
+ Amazon ECS agrega automáticamente las etiquetas reservadas `AmazonECSCreated` y `AmazonECSManaged` al volumen adjunto. Si elimina estas etiquetas del volumen, Amazon ECS no podrá administrar el volumen en su nombre. Para obtener más información acerca del etiquetado de volúmenes de Amazon EBS, consulte [Tagging Amazon EBS volumes](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specify-ebs-config.html#ebs-volume-tagging). Para obtener más información acerca del etiquetado de recursos de Amazon ECS, consulte [Tagging your Amazon ECS resources](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html).
+ No se admite el aprovisionamiento de volúmenes a partir de una instantánea de un volumen de Amazon EBS que contiene particiones.
+ Los volúmenes adjuntos a tareas administradas por un servicio no se conservan y siempre se eliminan al terminar la tarea.
+ No puede configurar los volúmenes de Amazon EBS para adjuntarlos a las tareas de Amazon ECS que se ejecutan en AWS Outposts.

# Comportamiento de usuarios no raíz
<a name="ebs-non-root-behavior"></a>

Cuando especifica un usuario que no es usuario raíz en la definición del contenedor, Amazon ECS configura automáticamente el volumen de Amazon EBS con permisos basados en grupos que permiten al usuario especificado leer y escribir en el volumen. El volumen se monta con las características siguientes:
+ El volumen es propiedad del usuario raíz y del grupo raíz.
+ Los permisos de grupo están configurados para permitir el acceso de lectura y escritura.
+ El usuario que no es raíz se agrega al grupo correspondiente para acceder al volumen.

Siga estas prácticas recomendadas cuando utilice los volúmenes de Amazon EBS con contenedores que no sean raíz:
+ Utilice id. de usuario (UID) e id. de grupo (GID) coherentes en las imágenes del contenedor para garantizar la coherencia de los permisos.
+ Cree previamente los directorios de puntos de montaje en la imagen del contenedor y establezca la propiedad y los permisos adecuados.
+ Pruebe los contenedores con volúmenes de Amazon EBS en un entorno de desarrollo para confirmar que los permisos del sistema de archivos funcionan según lo previsto.
+ Si varios contenedores de la misma tarea comparten un volumen, asegúrese de que utilizan UID/GID compatibles o que montan el volumen con unas expectativas de acceso coherentes.

# Aplazamiento de la configuración del volumen a la hora de lanzamiento en la definición de la tarea de Amazon ECS
<a name="specify-ebs-config"></a>

Para configurar un volumen de Amazon EBS para adjuntarlo a la tarea, debe indicar la configuración del punto de montaje en la definición de la tarea y asignar un nombre al volumen. También debe establecer `configuredAtLaunch` en `true` porque los volúmenes de Amazon EBS no se pueden configurar para adjuntarlos en la definición de la tarea. En su lugar, los volúmenes de Amazon EBS se configuran para que se adjunten durante la implementación.

Para registrar la definición de la tarea mediante la AWS Command Line Interface (AWS CLI), guarde la plantilla como archivo JSON y, luego, pase el archivo como entrada para el comando `[register-task-definition](https://docs.aws.amazon.com/cli/latest/reference/ecs/register-task-definition.html)`. 

Para crear y registrar una definición de tarea mediante la Consola de administración de AWS, consulte [Creación de una definición de tareas de Amazon ECS mediante la consola](create-task-definition.md).

La definición de la tarea siguiente muestra la sintaxis de los objetos `mountPoints` y `volumes` en la definición de la tarea. Para más información acerca de los parámetros de la definición de la tarea, consulte [Parámetros en la definición de tareas de Amazon ECS para Fargate](task_definition_parameters.md). Para utilizar este ejemplo, sustituya `user input placeholders` por su propia información.

## Linux
<a name="linux-example"></a>

```
{
    "family": "mytaskdef",
    "containerDefinitions": [
        {
            "name": "nginx",
            "image": "public.ecr.aws/nginx/nginx:latest",
            "networkMode": "awsvpc",
           "portMappings": [
                {
                    "name": "nginx-80-tcp",
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "mountPoints": [
                {
                    "sourceVolume": "myEBSVolume",
                    "containerPath": "/mount/ebs",
                    "readOnly": true
                }
            ]
        }
    ],
    "volumes": [
        {
            "name": "myEBSVolume",
            "configuredAtLaunch": true
        }
    ],
    "requiresCompatibilities": [
        "FARGATE", "EC2"
    ],
    "cpu": "1024",
    "memory": "3072",
    "networkMode": "awsvpc"
}
```

## Windows
<a name="windows-example"></a>

```
{
    "family": "mytaskdef",
     "memory": "4096",
     "cpu": "2048",
    "family": "windows-simple-iis-2019-core",
    "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
    "runtimePlatform": {"operatingSystemFamily": "WINDOWS_SERVER_2019_CORE"},
    "requiresCompatibilities": ["EC2"]
    "containerDefinitions": [
        {
             "command": ["New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc"],
            "entryPoint": [
                "powershell",
                "-Command"
            ],
            "essential": true,
            "cpu": 2048,
            "memory": 4096,
            "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
            "name": "sample_windows_app",
            "portMappings": [
                {
                    "hostPort": 443,
                    "containerPort": 80,
                    "protocol": "tcp"
                }
            ],
            "mountPoints": [
                {
                    "sourceVolume": "myEBSVolume",
                    "containerPath": "drive:\ebs",
                    "readOnly": true
                }
            ]
        }
    ],
    "volumes": [
        {
            "name": "myEBSVolume",
            "configuredAtLaunch": true
        }
    ],
    "requiresCompatibilities": [
        "FARGATE", "EC2"
    ],
    "cpu": "1024",
    "memory": "3072",
    "networkMode": "awsvpc"
}
```

`mountPoints`  
Tipo: matriz de objetos  
Obligatorio: no  
Puntos de montaje para los volúmenes de datos del contenedor. Este parámetro asigna a `Volumes` en la API create-container de Docker y la opción `--volume` a docker run.  
Los contenedores de Windows pueden montar directorios completos en la misma unidad que `$env:ProgramData`. Los contenedores de Windows no pueden montar directorios en una unidad diferente y los puntos de montaje no se pueden utilizar entre unidades. Debe especificar los puntos de montaje para adjuntar un volumen de Amazon EBS directamente a una tarea de Amazon ECS.    
`sourceVolume`  
Tipo: cadena  
Obligatorio: sí, si se utilizan `mountPoints`.  
El nombre del volumen a montar.  
`containerPath`  
Tipo: cadena  
Obligatorio: sí, si se utilizan `mountPoints`.  
La ruta del contenedor donde se montará el volumen.  
`readOnly`  
Tipo: Booleano  
Obligatorio: no  
Si este valor es `true`, el acceso del contenedor al volumen es de solo lectura. Si este valor es `false`, el contenedor puede escribir en el volumen. El valor predeterminado es `false`.  
Para las tareas que se ejecutan en instancias de EC2 que ejecutan el sistema operativo Windows, deje el valor predeterminado de `false`.

`name`  
Tipo: cadena  
Requerido: no  
El nombre del volumen. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones (`-`) y caracteres de subrayado (`_`). Se hace referencia a este nombre en el parámetro `sourceVolume` del objeto `mountPoints` de la definición de contenedor.

`configuredAtLaunch`  
Tipo: booleano  
Obligatorio: sí, cuando quiera adjuntar un volumen de EBS directamente a una tarea.  
Indica si un volumen se puede configurar durante el lanzamiento. Cuando se establece en `true`, puede configurarlo se ejecuta una tarea independiente o cuando se crea o actualiza un servicio. Cuando se establece en `false`, no podrá proporcionar otra configuración de volumen en la definición de la tarea. Este parámetro debe proporcionarse y establecerse en `true` para configurar un volumen de Amazon EBS para adjuntarlo a una tarea.

# Datos cifrados almacenados en volúmenes de Amazon EBS adjuntos a tareas de Amazon ECS
<a name="ebs-kms-encryption"></a>

Puede utilizar AWS Key Management Service (AWS KMS) para crear y administrar claves criptográficas que protejan los datos. Los volúmenes de Amazon EBS se cifran en reposo mediante AWS KMS keys. Se cifran los tipos de datos siguientes:
+ Datos almacenados en reposo en el volumen
+ E/S de disco
+ Instantáneas creadas a partir del volumen
+ Volúmenes nuevos creados a partir de las instantáneas cifradas

Los volúmenes de Amazon EBS adjuntos a las tareas se pueden cifrar mediante una Clave administrada de AWS predeterminada con el alias `alias/aws/ebs` o una clave simétrica administrada por el cliente especificada en la configuración del volumen. Las Claves administradas por AWS predeterminadas son exclusivas de cada Cuenta de AWS por Región de AWS y se crean automáticamente. Para crear una clave simétrica administrada por el cliente, siga los pasos que se indican en la sección [Creating symmetric encryption KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) en *AWS KMS Developer Guide*.

Puede configurar el cifrado de Amazon EBS de manera predeterminada para que todos los volúmenes nuevos creados y adjuntos a una tarea en una Región de AWS específica se cifren mediante la clave de KMS que configure para su cuenta. Para obtener más información acerca del cifrado de Amazon EBS y el cifrado de manera predeterminada, consulte [Cifrado de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) en la *Guía del usuario de Amazon EBS*.

## Comportamiento de instancias administradas de Amazon ECS
<a name="managed-instances"></a>

Puede cifrar los volúmenes de Amazon EBS. Para ello, habilite el cifrado, ya sea mediante el cifrado de forma predeterminada o habilite el cifrado al crear un volumen que quiera cifrar. Para obtener información acerca de cómo habilitar el cifrado de manera predeterminada (a nivel de cuenta), consulte [Cifrado de manera predeterminada](https://docs.aws.amazon.com/ebs/latest/userguide/encryption-by-default.html) en la *Guía del usuario de Amazon EBS*.

Puede configurar cualquier combinación de estas claves. El orden de prioridad de las claves de KMS es el siguiente:

1. La clave de KMS especificada en la configuración del volumen. Al especificar una clave de KMS en la configuración del volumen, esta anula la clave predeterminada de Amazon EBS y cualquier clave de KMS que se especifique de la cuenta.

1. La clave de KMS especificada de la cuenta. Cuando especifica una clave de KMS para el cifrado a nivel de clúster del almacenamiento administrado de Amazon ECS, esta anula el cifrado predeterminado de Amazon EBS, pero no anula ninguna clave de KMS que se especifique en la configuración del volumen.

1. Cifrado predeterminado de Amazon EBS. El cifrado predeterminado se aplica cuando no se especifica una clave de KMS por cuenta ni una clave en la configuración del volumen. Si activa el cifrado de Amazon EBS de forma predeterminada, el valor predeterminado es la clave de KMS que especifique para el cifrado predeterminado. De lo contrario, el valor predeterminado es la Clave administrada de AWS con el alias `alias/aws/ebs`.
**nota**  
Si establece `encrypted` en `false` en la configuración del volumen, no especifica ninguna clave de KMS a nivel de cuenta y activa el cifrado de Amazon EBS de forma predeterminada, el volumen seguirá estando cifrado con la clave especificada para el cifrado de Amazon EBS predeterminado.

## Comportamiento de instancias administradas no relacionadas con Amazon ECS
<a name="non-managed-instances"></a>

También puede configurar el cifrado a nivel de clúster de Amazon ECS para el almacenamiento administrado de Amazon ECS al crear o actualizar un clúster. El cifrado del clúster se aplica a la tarea y se puede utilizar para cifrar los volúmenes de Amazon EBS asociados a cada tarea que se pone en marcha en un clúster específico mediante la clave KMS especificada. Para obtener más información acerca de la configuración del cifrado del clúster para cada tarea, consulte [ManagedStorageConfiguration](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedStorageConfiguration.html) en la *Referencia de la API de Amazon ECS*.

Puede configurar cualquier combinación de estas claves. El orden de prioridad de las claves de KMS es el siguiente:

1. La clave de KMS especificada en la configuración del volumen. Al especificar una clave de KMS en la configuración del volumen, esta anula la clave predeterminada de Amazon EBS y cualquier clave de KMS que se especifique a nivel de clúster.

1. La clave de KMS especificada a nivel de clúster. Cuando especifica una clave de KMS para el cifrado a nivel de clúster del almacenamiento administrado de Amazon ECS, esta anula el cifrado predeterminado de Amazon EBS, pero no anula ninguna clave de KMS que se especifique en la configuración del volumen.

1. Cifrado predeterminado de Amazon EBS. El cifrado predeterminado se aplica cuando no se especifica una clave de KMS a nivel de clúster ni una clave en la configuración del volumen. Si activa el cifrado de Amazon EBS de forma predeterminada, el valor predeterminado es la clave de KMS que especifique para el cifrado predeterminado. De lo contrario, el valor predeterminado es la Clave administrada de AWS con el alias `alias/aws/ebs`.
**nota**  
Si establece `encrypted` como `false` en su configuración de volumen, no especifica ninguna clave de KMS a nivel de clúster y activa el cifrado de Amazon EBS de forma predeterminada, el volumen seguirá estando cifrado con la clave especificada para el cifrado de Amazon EBS predeterminado.

## Política de claves de KMS administradas por el cliente
<a name="ebs-kms-encryption-policy"></a>

Para cifrar un volumen de EBS adjunto a la tarea mediante una clave administrada por el cliente, debe configurar su política de claves de KMS para garantizar que el rol de IAM que utiliza para la configuración del volumen tenga los permisos necesarios para utilizar la clave. La política de claves debe incluir los permisos `kms:CreateGrant` y `kms:GenerateDataKey*`. Los permisos `kms:ReEncryptTo` y `kms:ReEncryptFrom` son necesarios para cifrar los volúmenes que se crean mediante instantáneas. Si quiere configurar y cifrar solo los volúmenes nuevos y vacíos para adjuntarlos, puede excluir los permisos `kms:ReEncryptTo` y `kms:ReEncryptFrom`. 

En el fragmento de código siguiente de JSON se muestran la instrucciones de la política de claves que puede adjuntar a la política de claves de KMS. El uso de estas instrucciones proporcionará acceso para que Amazon ECS utilice la clave para cifrar el volumen de EBS. Para utilizar las instrucciones de la política de ejemplo, sustituya `user input placeholders` por su propia información. Como siempre, configure únicamente los permisos que necesite.

```
{
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/ecsInfrastructureRole" },
      "Action": "kms:DescribeKey",
      "Resource":"*"
    },
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/ecsInfrastructureRole" },
      "Action": [
      "kms:GenerateDataKey*",
      "kms:ReEncryptTo",
      "kms:ReEncryptFrom"
      ],
      "Resource":"*",
      "Condition": {
        "StringEquals": {
          "kms:CallerAccount": "aws_account_id",
          "kms:ViaService": "ec2.region.amazonaws.com"
        },
        "ForAnyValue:StringEquals": {
          "kms:EncryptionContextKeys": "aws:ebs:id"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/ecsInfrastructureRole" },
      "Action": "kms:CreateGrant",
      "Resource":"*",
      "Condition": {
        "StringEquals": {
          "kms:CallerAccount": "aws_account_id",
          "kms:ViaService": "ec2.region.amazonaws.com"
        },
        "ForAnyValue:StringEquals": {
          "kms:EncryptionContextKeys": "aws:ebs:id"
        },
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
```

Para más información acerca de los permisos y las políticas de claves, consulte [Key policies in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) y [AWS KMS permissions](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) en la *Guía para desarrolladores de AWS KMS*. Para solucionar los problemas de la conexión de volúmenes de EBS relacionados con los permisos de claves, consulte [Solución de problemas de conexión de volúmenes de Amazon EBS a las tareas de Amazon ECS](troubleshoot-ebs-volumes.md).

# Especificación de la configuración del volumen de Amazon EBS durante la implementación de Amazon ECS
<a name="configure-ebs-volume"></a>

Tras registrar una definición de la tarea con el parámetro `configuredAtLaunch` establecido en `true`, puede configurar un volumen de Amazon EBS durante la implementación cuando ejecute una tarea independiente o cuando cree o actualice un servicio. Para obtener más información acerca de cómo aplazar la configuración del volumen hasta el momento del lanzamiento mediante el parámetro `configuredAtLaunch`, consulte [Aplazamiento de la configuración del volumen a la hora de lanzamiento en la definición de la tarea de Amazon ECS](specify-ebs-config.md).

Para configurar un volumen, puede utilizar las API de Amazon ECS o pasar un archivo JSON como entrada para los comandos siguientes de la AWS CLI:
+ `[run-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html)` para ejecutar una tarea de ECS independiente.
+ `[start-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/start-task.html)` para ejecutar una tarea de ECS independiente en una instancia de contenedor específica. Este comando no se aplica a las tareas de Fargate.
+ `[create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html)` para crear un nuevo servicio de ECS.
+ `[update-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html)` para actualizar un servicio existente.

**nota**  
Para que un contenedor de la tarea escriba en el volumen de Amazon EBS montado, el contenedor debe tener los permisos de sistema de archivos adecuados. Cuando especifica un usuario que no es usuario raíz en la definición del contenedor, Amazon ECS configura automáticamente el volumen con permisos basados en grupos que permiten al usuario especificado leer y escribir en el volumen. Si no se especifica ningún usuario, el contenedor se pone en marcha como raíz y tiene acceso total al volumen.

 También puede configurar un volumen de Amazon EBS mediante Consola de administración de AWS. Para obtener más información, consulte [Ejecución de una aplicación como tarea de Amazon ECS](standalone-task-create.md), [Creación de una implementación de actualización continua de Amazon ECS](create-service-console-v2.md) y [Actualización de un servicio de Amazon ECS](update-service-console-v2.md).

El siguiente fragmento de código JSON muestra todos los parámetros de un volumen de Amazon EBS que se pueden configurar durante la implementación. Para utilizar estos parámetros en la configuración el volumen, sustituya `user input placeholders` por su propia información. Para más información acerca de estos parámetros, consulte [Volume configurations](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#sd-volumeConfigurations).

```
"volumeConfigurations": [
        {
            "name": "ebs-volume", 
            "managedEBSVolume": {
                "encrypted": true, 
                "kmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", 
                "volumeType": "gp3", 
                "sizeInGiB": 10, 
                "snapshotId": "snap-12345", 
                "volumeInitializationRate":100,
                "iops": 3000, 
                "throughput": 125, 
                "tagSpecifications": [
                    {
                        "resourceType": "volume", 
                        "tags": [
                            {
                                "key": "key1", 
                                "value": "value1"
                            }
                        ], 
                        "propagateTags": "NONE"
                    }
                ], 
                "roleArn": "arn:aws:iam::1111222333:role/ecsInfrastructureRole", 
                 "terminationPolicy": {
                    "deleteOnTermination": true//can't be configured for service-managed tasks, always true 
                },
                "filesystemType": "ext4"
            }
        }
    ]
```

**importante**  
Asegúrese de que la propiedad `volumeName` que indicó en la configuración sea la misma que la propiedad `volumeName` que indicó en la definición de la tarea.

Para obtener información acerca de la comprobación del estado conexión de volúmenes, consulte [Solución de problemas de conexión de volúmenes de Amazon EBS a las tareas de Amazon ECS](troubleshoot-ebs-volumes.md). Para obtener información acerca del rol de AWS Identity and Access Management (IAM) de la infraestructura de Amazon ECS necesaria para adjuntar volúmenes de EBS, consulte [Rol de IAM de infraestructura de Amazon ECS](infrastructure_IAM_role.md).

A continuación, se muestran ejemplos de fragmentos de código de JSON que muestran la configuración de los volúmenes de Amazon EBS. Estos ejemplos se pueden utilizar si se guardan los fragmentos de código en archivos JSON y si se pasan como parámetros (con el parámetro `--cli-input-json file://filename`) para los comandos de la AWS CLI. Sustituya `user input placeholders` por su propia información.

## Configuración de un volumen para una tarea independiente
<a name="ebs-run-task"></a>

En el siguiente fragmento de código se muestra la sintaxis para configurar los volúmenes de Amazon EBS para adjuntarlos a una tarea independiente. En el siguiente fragmento de código de JSON se muestra la sintaxis para configurar los valores `volumeType`, `sizeInGiB`, `encrypted` y `kmsKeyId`. La configuración indicada en el archivo JSON se utiliza para crear y adjuntar un volumen de EBS a la tarea independiente.

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "volumeConfigurations": [
        {
            "name": "datadir",
            "managedEBSVolume": {
                "volumeType": "gp3",
                "sizeInGiB": 100,
                "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
                "encrypted": true,
                "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            }
        }
   ]
}
```

## Configuración de un volumen durante la creación del servicio
<a name="ebs-create-service"></a>

En el siguiente fragmento de código se muestra la sintaxis para configurar los volúmenes de Amazon EBS para adjuntarlos a tareas administradas por un servicio. Los volúmenes se obtienen de la instantánea especificada mediante el parámetro `snapshotId` a una velocidad de 200 MiB/s. La configuración indicada en el archivo JSON se utiliza para crear y adjuntar un volumen de EBS a cada tarea administrada por el servicio.

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "serviceName": "mysvc",
   "desiredCount": 2,
   "volumeConfigurations": [
        {
            "name": "myEbsVolume",
            "managedEBSVolume": {
              "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
              "snapshotId": "snap-12345",
              "volumeInitializationRate": 200
            }
        }
   ]
}
```

## Configuración de un volumen durante la actualización del servicio
<a name="ebs-update-service"></a>

El siguiente fragmento de código JSON muestra la sintaxis para actualizar un servicio que anteriormente no tenía los volúmenes de Amazon EBS configurados para adjuntarlos a las tareas. Debe proporcionar el ARN de una revisión de la definición de las tareas con el parámetro `configuredAtLaunch` establecido en `true`. En el siguiente fragmento de código de JSON se muestra la sintaxis para configurar los valores `volumeType`, `sizeInGiB`, `throughput`, `iops` y `filesystemType`. Esta configuración se utiliza para crear y adjuntar un volumen de EBS a cada tarea administrada por el servicio.

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "service": "mysvc",
   "desiredCount": 2,
   "volumeConfigurations": [
        {
            "name": "myEbsVolume",
            "managedEBSVolume": {
              "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
               "volumeType": "gp3",
                "sizeInGiB": 100,
                 "iops": 3000, 
                "throughput": 125, 
                "filesystemType": "ext4"
            }
        }
   ]
}
```

### Configuración de un servicio para que deje de utilizar los volúmenes de Amazon EBS
<a name="ebs-service-disable-ebs"></a>

El siguiente fragmento de código JSON muestra la sintaxis para actualizar un servicio para que deje de utilizar los volúmenes de Amazon EBS. Debe proporcionar el ARN de una definición de tareas con el parámetro `configuredAtLaunch` establecido en `false` o una definición de tareas sin el parámetro `configuredAtLaunch`. También debe proporcionar un objeto `volumeConfigurations` vacío.

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "service": "mysvc",
   "desiredCount": 2,
   "volumeConfigurations": []
}
```

## Política de finalización para volúmenes de Amazon EBS
<a name="ebs-volume-termination-policy"></a>

Cuando termina una tarea de Amazon ECS, dicho servicio utiliza el valor `deleteOnTermination` para determinar si se debe eliminar el volumen de Amazon EBS asociado a la tarea terminada. De manera predeterminada, los volúmenes de EBS asociados a las tareas se eliminan al finalizar la tarea. En el caso de las tareas independientes, puede cambiar esta configuración para conservar el volumen al terminar la tarea.

**nota**  
Los volúmenes adjuntos a tareas administradas por un servicio no se conservan y siempre se eliminan al terminar la tarea.

## Etiquetar volúmenes de Amazon EBS
<a name="ebs-volume-tagging"></a>

Puede etiquetar los volúmenes de Amazon EBS mediante el objeto `tagSpecifications`. Con el objeto, puede proporcionar sus propias etiquetas y establecer la propagación de las etiquetas a partir de la definición de la tarea o del servicio, en función de si el volumen está adjunto a una tarea independiente o a una tarea de un servicio. La cantidad máxima de etiquetas que puede adjuntarse a un volumen es 50.

**importante**  
Amazon ECS adjunta automáticamente las etiquetas reservadas `AmazonECSCreated` y `AmazonECSManaged` a un volumen de Amazon EBS. Esto significa que puede controlar la conexión de un máximo de 48 etiquetas adicionales a un volumen. Estas etiquetas adicionales pueden ser etiquetas definidas por el usuario, administradas por ECS o propagadas.

Si quiere agregar etiquetas administradas por Amazon ECS al volumen, debe establecer `enableECSManagedTags` en `true` en la llamada de `UpdateService`, `CreateService`, `RunTask` o `StartTask`. Si activa las etiquetas administradas por Amazon ECS, este servicio etiquetará el volumen automáticamente con información del clúster y del servicio (`aws:ecs:clusterName` y `aws:ecs:serviceName`). Para obtener más información acerca del etiquetado de recursos de Amazon ECS, consulte [Tagging your Amazon ECS resources](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html).

El siguiente fragmento de código JSON muestra la sintaxis para etiquetar cada volumen de Amazon EBS adjunto a cada tarea de un servicio con una etiqueta definida por el usuario. Para utilizar este ejemplo y crear un servicio, sustituya `user input placeholders` por su propia información.

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "serviceName": "mysvc",
   "desiredCount": 2,
   "enableECSManagedTags": true,
   "volumeConfigurations": [
        {
            "name": "datadir",
            "managedEBSVolume": {
                "volumeType": "gp3",
                "sizeInGiB": 100,
                 "tagSpecifications": [
                    {
                        "resourceType": "volume", 
                        "tags": [
                            {
                                "key": "key1", 
                                "value": "value1"
                            }
                        ], 
                        "propagateTags": "NONE"
                    }
                ],
                "roleArn":"arn:aws:iam:1111222333:role/ecsInfrastructureRole",
                "encrypted": true,
                "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            }
        }
   ]
}
```

**importante**  
Debe indicar un tipo de recurso `volume` para etiquetar los volúmenes de Amazon EBS.

# Rendimiento de los volúmenes de Amazon EBS para las tareas bajo demanda de Fargate
<a name="ebs-fargate-performance-limits"></a>

El IOPS y el rendimiento de los volúmenes de referencia de Amazon EBS disponibles para una tarea bajo demanda de Fargate varían en función del total de unidades de CPU que solicite para la tarea. Si solicita 0,25, 0,5 o 1 unidad de CPU virtual (vCPU) para la tarea de Fargate, recomendamos configurar un volumen SSD de uso general (`gp2` o `gp3`) o un volumen de unidad de disco duro (HDD) (`st1` o `sc1`). Si solicita más de 1 vCPU para la tarea de Fargate, se aplicarán los siguientes límites de rendimiento básico a un volumen de Amazon EBS adjunto a la tarea. Es posible que obtenga temporalmente un rendimiento de EBS superior a los límites siguientes. Sin embargo, recomendamos planificar la carga de trabajo en función de estos límites.


| Unidades de CPU solicitadas (en vCPU) | IOPS de referencia de Amazon EBS (E/S de 16 KiB) | Rendimiento de referencia de Amazon EBS (en MiBps, E/S de 128 KiB) | Ancho de banda de referencia (en Mbps) | 
| --- | --- | --- | --- | 
| 2 | 3000 | 75 | 360 | 
| 4 | 5 000 | 120 | 1.150 | 
| 8 | 10 000 | 250 | 2.300 | 
| 16 | 15.000 | 500 | 4500 | 

**nota**  
 Al configurar un volumen de Amazon EBS para adjuntarlo a una tarea de Fargate, el límite de rendimiento de Amazon EBS de la tarea de Fargate se comparte entre el almacenamiento efímero de la tarea y el volumen adjunto.

# Rendimiento de los volúmenes de Amazon EBS para tareas de EC2
<a name="ebs-fargate-performance-limits-ec2"></a>

Amazon EBS proporciona tipos de volúmenes, que difieren en cuanto a rendimiento y precio, para que pueda adaptar el rendimiento y el costo del almacenamiento a las necesidades de las aplicaciones. Para obtener información sobre el rendimiento, incluidas las IOPS por volumen y el rendimiento por volumen, consulte [Tipos de volumen de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html) en la *Guía del usuario de Amazon Elastic Block Store*.

# Rendimiento de los volúmenes de Amazon EBS para tareas de instancias administradas de Amazon ECS
<a name="ebs-managed-instances-performance"></a>

Amazon EBS proporciona tipos de volúmenes, que difieren en cuanto a rendimiento y precio, para que pueda adaptar el rendimiento y el costo del almacenamiento a las necesidades de las aplicaciones. Para obtener información sobre el rendimiento, incluidas las IOPS por volumen y el rendimiento por volumen, consulte [Tipos de volumen de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html) en la *Guía del usuario de Amazon Elastic Block Store*.

# Solución de problemas de conexión de volúmenes de Amazon EBS a las tareas de Amazon ECS
<a name="troubleshoot-ebs-volumes"></a>

Es posible que deba solucionar los problemas de conexión de los volúmenes de Amazon EBS a las tareas de Amazon ECS, o comprobarla.

## Compruebe el estado de conexión de volúmenes
<a name="troubleshoot-ebs-volumes-location"></a>

Puede utilizar la Consola de administración de AWS para ver el estado de conexión de un volumen de Amazon EBS a una tarea de Amazon ECS. Si la tarea se inicia y se produce un error al adjuntar el volumen, también verá un motivo de estado que podrá utilizar para solucionar el problema. El volumen creado se eliminará y la tarea se detendrá. Para más información acerca de los motivos de estado, consulte [Motivos del estado de la conexión de volúmenes de Amazon EBS a las tareas de Amazon ECS](troubleshoot-ebs-volumes-scenarios.md).

**Para ver el estado de conexión de un volumen y el motivo del estado mediante la consola**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clústeres**, elija el clúster en el que se ejecuta la tarea. Se abrirá la página de detalles del clúster.

1. En la página de detalles del clúster, elija la pestaña **Tareas**.

1. Elija la tarea para ver el estado de conexión de volúmenes. Puede que tenga que utilizar **Filtrar estado deseado** y elegir **Detenido** si la tarea que quiere examinar se ha detenido.

1. En la página de detalles de la tarea, elija la pestaña **Volúmenes**. Podrá ver el estado de la conexión de Amazon EBS en **Estado de la conexión**. Si el volumen no se puede conectar a la tarea, puede elegir el estado en **Estado de la conexión** para mostrar la causa del error.

También puede ver el estado de la conexión del volumen de una tarea y el motivo del estado asociado mediante la API [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html).

## Errores en las tareas y los servicios
<a name="service-task-failures"></a>

Es posible que se produzcan errores en el servicio o en las tareas que no sean específicos de los volúmenes de Amazon EBS y que puedan afectar a la conexión de volúmenes. Para más información, consulte
+ [Mensajes de eventos de servicio](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-event-messages.html)
+ [Códigos de error de tareas detenidas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/stopped-task-error-codes.html)
+ [Motivos de los errores de la API](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/api_failures_messages.html)

# El contenedor no puede escribir en el volumen de Amazon EBS
<a name="troubleshoot-non-root-container"></a>

Usuario no raíz sin los permisos adecuados  
Cuando especifica un usuario que no es usuario raíz en la definición del contenedor, Amazon ECS configura automáticamente el volumen con permisos basados en grupos que permiten acceso de escritura. Sin embargo, si sigue teniendo problemas con los permisos, haga lo siguiente:  
+ Compruebe que el parámetro `user` esté especificado de manera correcta en la definición del contenedor mediante el formato `uid:gid` (por ejemplo, `1001:1001`).
+ Asegúrese de que la imagen del contenedor no anule los permisos de usuario una vez montado el volumen.
+ Compruebe que la aplicación se pone en marcha con el id. de usuario esperado. Para ello, examine los registros del contenedor o utilice Amazon ECS Exec para inspeccionar el contenedor en marcha.

Usuario raíz con problemas de permisos  
Si no se especifica ningún usuario en la definición del contenedor, este se pone en marcha como raíz y debe tener acceso total al volumen. Si tiene problemas, haga lo siguiente:  
+ Compruebe que el volumen esté montado de manera correcta. Compruebe los puntos de montaje dentro del contenedor.
+ Asegúrese de que el volumen no esté configurado como de solo lectura en la configuración del punto de montaje.

Tareas de varios contenedores con diferentes usuarios  
En las tareas en las que varios contenedores se ponen en marcha como usuarios diferentes, Amazon ECS administra automáticamente los permisos de grupo para permitir que todos los usuarios especificados escriban en el volumen. Si los contenedores no pueden escribir, haga lo siguiente:  
+ Compruebe que todos los contenedores que requieren acceso de escritura tengan el parámetro `user` configurado de manera correcta.
+ Compruebe que el volumen esté montado en todos los contenedores que necesiten acceder a este.

Para obtener más información acerca de la configuración de los usuarios en las definiciones de contenedores, consulte [Parámetros de la definición de tareas de Amazon ECS para Fargate](https://docs.aws.amazon.com/./task_definition_parameters.html). 

# Motivos del estado de la conexión de volúmenes de Amazon EBS a las tareas de Amazon ECS
<a name="troubleshoot-ebs-volumes-scenarios"></a>

Utilice la siguiente referencia para solucionar los problemas que puedan surgir como motivos de estado en la Consola de administración de AWS cuando configure los volúmenes de Amazon EBS para adjuntarlos a las tareas de Amazon ECS. Para obtener más información sobre la ubicación de estos motivos de estado, consulte [Compruebe el estado de conexión de volúmenes](troubleshoot-ebs-volumes.md#troubleshoot-ebs-volumes-location).

ECS no pudo suponer el rol de la infraestructura de ECS configurado “arn:aws:iam::*111122223333*:role/*ecsInfrastructureRole*”. Compruebe que el rol que se va a transferir tenga la relación de confianza adecuada con Amazon ECS  
Este motivo de estado aparece en los escenarios siguientes.  
+  Usted proporciona un rol de IAM sin adjuntar la política de confianza necesaria. Amazon ECS no puede acceder al rol de IAM de la infraestructura de Amazon ECS que proporciona si el rol no tiene la política de confianza necesaria. La tarea puede bloquearse en el estado `DEPROVISIONING`. Para más información acerca de la política de confianza necesaria, consulte [Rol de IAM de infraestructura de Amazon ECS](infrastructure_IAM_role.md).
+ El usuario de IAM no tiene permiso para transferir el rol de infraestructura de Amazon ECS a Amazon ECS. La tarea puede bloquearse en el estado `DEPROVISIONING`. Para evitar este problema, puede adjuntar el permiso `PassRole` a su usuario. Para obtener más información, consulte [Rol de IAM de infraestructura de Amazon ECS](infrastructure_IAM_role.md).
+ Su rol de IAM no tiene los permisos necesarios para adjuntar los volúmenes de Amazon EBS. La tarea puede bloquearse en el estado `DEPROVISIONING`. Para más información acerca de los permisos específicos necesarios para adjuntar los volúmenes de Amazon EBS a las tareas, consulte [Rol de IAM de infraestructura de Amazon ECS](infrastructure_IAM_role.md).
Es posible que también vea este mensaje de error debido a un retraso en la propagación de los roles. Si volver a usar el rol después de esperar unos minutos no soluciona el problema, es posible que la política de confianza del rol este mal configurada.

ECS no pudo configurar el volumen de EBS. Se encontró IdempotentParameterMismatch”; “El token de cliente que ha proporcionado está asociado a un recurso que ya se eliminó. Utilice otro token de cliente."  
Los siguientes escenarios de la clave de AWS KMS pueden provocar la aparición de un mensaje `IdempotentParameterMismatch`:  
+ Indica un ARN, identificador o alias de la clave de KMS que no es válido. En este escenario, puede parecer que la tarea se ha iniciado correctamente, pero finalmente se produce un error porque AWS autentica la clave de KMS de forma asíncrona. Para más información, consulte [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) en *Amazon EC2 User Guide*.
+ Proporciona una clave administrada por el cliente que carece de los permisos que permiten que el rol de IAM de la infraestructura de Amazon ECS utilice la clave para el cifrado. Para evitar problemas de permisos relacionados con la política de claves, consulte la política de claves de AWS KMS de ejemplo en [Data encryption for Amazon EBS volumes](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-kms-encryption).
Puede configurar Amazon EventBridge para enviar eventos de volumen de Amazon EBS y eventos de cambio de estado de las tareas de Amazon ECS a un destino, como los grupos de Amazon CloudWatch. A continuación, puede utilizar estos eventos para identificar el problema específico relacionado con las claves administradas por el cliente que afectó a la conexión del volumen. Para más información, consulte  
+  [¿Cómo se puede crear un grupo de registro de CloudWatch para utilizarlo como destino de una regla de EventBridge?](https://repost.aws/knowledge-center/cloudwatch-log-group-eventbridge) en AWS re:Post.
+ [Task state change events](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html#ecs_task_events).
+ [Eventos de Amazon EventBridge para Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-cloud-watch-events.html) en la *Guía del usuario de Amazon EBS*.

Se agotó el tiempo de espera de ECS al configurar la conexión del volumen de EBS a la tarea.  
Los escenarios siguientes de formato del sistema de archivos dan lugar a este mensaje.  
+ El formato del sistema de archivos que indique durante la configuración no es compatible con el [sistema operativo de la tarea](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RuntimePlatform.html).
+ Usted configura la creación de un volumen de Amazon EBS a partir de una instantánea y el formato del sistema de archivos de la instantánea no es compatible con el sistema operativo de la tarea. En el caso de los volúmenes creados a partir de una instantánea, debe especificar el mismo tipo de sistema de archivos que utilizaba el volumen cuando se creó la instantánea.
Puede utilizar los registros del agente del contenedor de Amazon ECS para solucionar este mensaje en las tareas de EC2. Para más información, consulte [Amazon ECS log file locations](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/logs.html) y [Amazon ECS log collector](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logs-collector.html).

# Uso de volúmenes de Amazon EFS con Amazon ECS
<a name="efs-volumes"></a>

Amazon Elastic File System (Amazon EFS) proporciona almacenamiento de archivos sencillo y escalable para usarlo con tareas de Amazon ECS. Con Amazon EFS, la capacidad de almacenamiento es elástica. Aumenta y disminuye automáticamente a medida que se agregan o eliminan archivos. Las aplicaciones disponen del almacenamiento que necesitan, cuando lo necesitan.

Puede utilizar sistemas de archivos de Amazon EFS con Amazon ECS para exportar los datos del sistema de archivos a través de la flota de instancias de contenedor. De esa forma, las tareas tienen acceso al mismo almacenamiento persistente, con independencia de la instancia en la que aterricen. Las definiciones de tareas deben hacer referencia a montajes de volúmenes en la instancia de contenedor para utilizar el sistema de archivos.

Para ver un tutorial, consulte [Configuración de sistemas de archivos de Amazon EFS para Amazon ECS mediante la consola](tutorial-efs-volumes.md).

## Consideraciones
<a name="efs-volume-considerations"></a>

 Al utilizar volúmenes de Amazon EFS, tenga en cuenta lo siguiente:
+ Para las tareas que utilizan EC2, se agregó compatibilidad con el sistema de archivos de Amazon EFS como vista previa pública en la AMI optimizada para Amazon ECS versión `20191212` con el agente de contenedor versión 1.35.0. Sin embargo, el sistema de archivos de Amazon EFS está disponible con carácter general a partir de la versión `20200319` de la AMI optimizada para Amazon ECS con el agente de contenedor versión 1.38.0, que contenía las características de punto de acceso de Amazon EFS y autorización de IAM. Recomendamos utilizar la AMI optimizada para Amazon ECS versión `20200319` o una posterior para usar estas características. Para obtener más información, consulte [AMI de Linux optimizadas para Amazon ECS](ecs-optimized_AMI.md).
**nota**  
Si crea su propia AMI, debe usar el agente de contenedor 1.38.0 o posterior, `ecs-init` versión 1.38.0-1 o una posterior, y ejecutar los siguientes comandos en su instancia de Amazon EC2 para habilitar el complemento de volúmenes de Amazon ECS. Los comandos dependen de si utiliza Amazon Linux 2 o Amazon Linux como imagen base.  
Amazon Linux 2  

  ```
  yum install amazon-efs-utils
  systemctl enable --now amazon-ecs-volume-plugin
  ```
Amazon Linux  

  ```
  yum install amazon-efs-utils
  sudo shutdown -r now
  ```
+ Para las tareas que están alojadas en Fargate, los sistemas de archivos de Amazon EFS son compatibles con la versión 1.4.0 o una posterior (Linux) de la plataforma. Para obtener más información, consulte [Versiones de la plataforma Fargate para Amazon ECS](platform-fargate.md).
+ Cuando se utilizan volúmenes de Amazon EFS para tareas alojadas en Fargate, Fargate crea un contenedor supervisor que es responsable de administrar el volumen de Amazon EFS. El contenedor supervisor utiliza una pequeña cantidad de la memoria de la tarea y de CPU. El contenedor supervisor puede verse al consultar la versión 4 del punto de conexión de metadatos de la tarea. Además, está visible en CloudWatch Container Insights (Información de contenedores de CloudWatch) como el nombre del contenedor `aws-fargate-supervisor`. Para obtener más información acerca del uso de EC2, consulte [Versión 4 del punto de conexión de metadatos de tareas de Amazon ECS](task-metadata-endpoint-v4.md). Para obtener más información acerca del uso de Fargate, consulte [Versión 4 del punto de conexión de los metadatos de tareas de Amazon ECS para tareas en Fargate](task-metadata-endpoint-v4-fargate.md).
+ No se admite la utilización de volúmenes de Amazon EFS ni la especificación de un `EFSVolumeConfiguration` en instancias externas.
+ Se admite el uso de volúmenes de Amazon EFS para las tareas que se ponen en marcha en instancias administradas de Amazon ECS.
+ Se recomienda establecer el parámetro `ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION` del archivo de configuración del agente en un valor inferior al predeterminado (aproximadamente 1 hora). Este cambio ayuda a evitar que caduquen las credenciales de montaje de EFS y permite limpiar los montajes que no están en uso.  Para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md).

## Uso de puntos de acceso de Amazon EFS
<a name="efs-volume-accesspoints"></a>

Los puntos de acceso de Amazon EFS son puntos de entrada específicos de la aplicación a un sistema de archivos de EFS para administrar el acceso de las aplicaciones a conjuntos de datos compartidos. Para obtener más información acerca de los puntos de acceso de Amazon EFS y cómo controla el acceso a ellos, consulte [Uso de puntos de acceso de Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html) en la *Guía del usuario de Amazon Elastic File System*.

Los puntos de acceso pueden 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 de ellos. Los puntos de acceso también pueden aplicar un directorio raíz diferente para el sistema de archivos. Esto permite que los clientes solo puedan acceder a los datos del directorio especificado o de sus subdirectorios.

**nota**  
Cuando se crea un punto de acceso EFS, especifique una ruta en el sistema de archivos para que sirva como directorio raíz. Cuando se hace referencia al sistema de archivos de EFS con un ID de punto de acceso en la definición de tareas de Amazon ECS, el directorio raíz se debe omitir o establecer en `/`, lo que aplicará la ruta establecida en el punto de acceso de EFS.

Puede utilizar un rol de IAM para la tarea de Amazon ECS y exigir que determinadas aplicaciones utilicen un punto de acceso específico. Al combinar políticas de IAM con puntos de acceso, puede proporcionar acceso seguro a conjuntos de datos específicos para sus aplicaciones. Para obtener más información acerca de cómo utilizar los roles de IAM, consulte [Rol de IAM de tarea de Amazon ECS](task-iam-roles.md).

# Prácticas recomendadas para utilizar los volúmenes de Amazon EFS con Amazon ECS
<a name="efs-best-practices"></a>

Tome nota de las siguientes de prácticas recomendadas cuando utilice Amazon EFS con Amazon ECS.

## Controles de seguridad y acceso para los volúmenes de Amazon EFS
<a name="storage-efs-security"></a>

Amazon EFS ofrece características de control de acceso que puede utilizar para garantizar que los datos almacenados en un sistema de archivos de Amazon EFS estén seguros y solo se pueda acceder a ellos desde las aplicaciones que los necesiten. Para proteger los datos, habilite el cifrado en reposo y en tránsito. Para obtener más información, consulte [Cifrado de datos en Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/encryption.html) en la *Guí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. Hay 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 de NFS (puerto 2049) desde el grupo de seguridad conectado a las instancias de Amazon ECS o, si utiliza el modo de red `awsvpc`, desde la tarea de 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 acceder al sistema de archivos a fin de montar un sistema de archivos de EFS. Para más información, consulte [Uso de IAM para controlar el acceso a los datos del sistema de archivos](https://docs.aws.amazon.com/efs/latest/ug/iam-access-control-nfs-efs.html) en la *Guí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 más información, consulte [Amazon EFS condition keys for clients](https://docs.aws.amazon.com/efs/latest/ug/iam-access-control-nfs-efs.html#efs-condition-keys-for-nfs) en *Amazon Elastic File System User Guide*.
+ **Puntos de acceso de Amazon EFS**: los puntos de acceso de Amazon EFS son puntos de entrada específicos de la aplicación a un sistema de archivos de Amazon EFS. Puede utilizar los 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 hacen a través del punto de acceso. Los puntos de acceso también pueden aplicar un directorio raíz diferente para el sistema de archivos. Esto permite que los clientes solo puedan acceder a los datos del directorio especificado o de sus subdirectorios.

### Políticas de IAM
<a name="storage-efs-security-iam"></a>

Puede utilizar políticas de IAM para controlar el acceso al sistema de archivos de Amazon EFS.

Puede especificar las siguientes acciones para clientes que acceden a un sistema de archivos mediante una política de sistema de archivos.


| Action | Descripción | 
| --- | --- | 
|  `elasticfilesystem:ClientMount`  |  Proporciona acceso de solo lectura a un sistema de archivos.  | 
|  `elasticfilesystem:ClientWrite`  |  Proporciona permisos de escritura en un sistema de archivos.  | 
|  `elasticfilesystem:ClientRootAccess`  |  Proporciona la capacidad de utilizar el usuario raíz al acceder a un sistema de archivos.  | 

Debe especificar cada acción en una política. Las políticas pueden definirse de las siguientes maneras:
+ Basado en cliente: adjunte la política al rol de tareas.

  Defina la opción de **autorización de IAM** al crear la definición de la tarea. 
+ Basado en recursos: adjunte la política al sistema de archivos de Amazon EFS.

  Si la política basada en recursos no existe, de forma predeterminada, al crear el sistema de archivos, el acceso se concede a todas las entidades principales (\$1). 

Al configurar la opción de **autorización de IAM**, combinamos la política asociada al rol de la tarea y la política basada en recursos de Amazon EFS. La opción de **autorización de IAM** transfiere la identidad de la tarea (el rol de la tarea) con la política a Amazon EFS. Esto permite que la política basada en recursos de Amazon EFS tenga contexto para el rol o usuario de IAM especificado en la política. Si no establece la opción, la política de nivel de recursos de Amazon EFS identifica al usuario de IAM como “anónimo”.

Considere la posibilidad de implementar los tres controles de acceso en un sistema de archivos de Amazon EFS para obtener la máxima seguridad. Por ejemplo, puede configurar el grupo de seguridad adjunto a un punto de montaje de Amazon EFS para que solo permita la entrada de tráfico de NFS desde un grupo de seguridad asociado a la instancia de contenedor o tarea de Amazon ECS. Además, puede configurar que Amazon EFS requiera un rol de IAM para acceder al sistema de archivos, incluso si la conexión se origina en un grupo de seguridad permitido. Por último, puede utilizar los puntos de acceso de Amazon EFS para aplicar los permisos de usuario de POSIX e indicar los directorios raíz de las aplicaciones.

El siguiente fragmento de código de la definición de tareas muestra cómo montar un sistema de archivos de Amazon EFS mediante un punto de acceso.

```
"volumes": [
    {
      "efsVolumeConfiguration": {
        "fileSystemId": "fs-1234",
        "authorizationConfig": {
          "accessPointId": "fsap-1234",
          "iam": "ENABLED"
        },
        "transitEncryption": "ENABLED",
        "rootDirectory": ""
      },
      "name": "my-filesystem"
    }
]
```

## Desempeño de los volúmenes de Amazon EFS
<a name="storage-efs-performance"></a>

Amazon EFS ofrece dos modos de rendimiento: Uso general y E/S máx. Uso general es adecuado para las aplicaciones sensibles a la latencia, como los sistemas de administración de contenido y las herramientas de CI/CD. Por el contrario, los sistemas de archivos de E/S máx. son adecuados para las cargas de trabajo como el análisis de datos, el procesamiento multimedia y el machine learning. Estas cargas de trabajo deben hacer operaciones en paralelo desde cientos o incluso miles de contenedores y requieren el mayor rendimiento agregado e IOPS posibles. Para más información, consulte [Amazon EFS performance modes](https://docs.aws.amazon.com/efs/latest/ug/performance.html#performancemodes) en *Amazon Elastic File System User Guide*.

Algunas cargas de trabajo sensibles a la latencia requieren los niveles de E/S más altos proporcionados por el modo de rendimiento de E/S máximo y la latencia más baja proporcionada por el modo de rendimiento 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 ese modo, puede distribuir la carga de trabajo de la aplicación entre todos estos sistemas de archivos, siempre que la carga de trabajo y las aplicaciones lo admitan.

## Rendimiento de los volúmenes de Amazon EFS
<a name="storage-efs-performance-throughput"></a>

Todos los sistemas de archivos de Amazon EFS tienen un rendimiento medido asociado que se determina mediante la cantidad del rendimiento aprovisionado para los sistemas de archivos que utilizan el *rendimiento aprovisionado* o la cantidad de datos almacenados en la clase de almacenamiento EFS Standard o One Zone para los sistemas de archivos que utilizan *rendimiento por ráfagas*. Para más información, consulte [Understanding metered throughput](https://docs.aws.amazon.com/efs/latest/ug/performance.html#read-write-throughput) en *Amazon Elastic File System User Guide*.

El modo de rendimiento predeterminado de los sistemas de archivos de Amazon EFS es el modo por ráfagas. Con el modo por ráfagas, el rendimiento disponible para un sistema de archivos aumenta o disminuye a medida que el sistema de archivos crece. Dado que las cargas de trabajo basadas en archivos suelen tener picos, lo que requiere altos niveles de rendimiento durante periodos y bajos niveles de rendimiento el resto del tiempo, Amazon EFS se ha diseñado para permitir altos niveles de rendimiento durante periodos de tiempo. Además, dado que muchas cargas de trabajo son de lectura intensiva, las operaciones de lectura se miden en una proporción de 1:3 con respecto a otras operaciones de NFS (como la escritura). 

Todos los sistemas de archivos de Amazon EFS ofrecen un rendimiento de referencia coherente de 50 MB/s por cada TB de almacenamiento de Amazon EFS Standard o Amazon EFS One Zone. Todos los sistemas de archivos (con independencia de su tamaño), pueden transmitir por ráfagas hasta 100 MB/s. Los sistemas de archivos con más de 1 TB de almacenamiento EFS Standard o EFS One Zone pueden alcanzar los 100 MB/s por cada TB. Como las operaciones de lectura se miden en una proporción de 1:3, puede generar hasta 300 MiB/s por cada TiB de rendimiento de lectura. A medida que agrega los datos al sistema de archivos, el rendimiento máximo disponible para el sistema de archivos se escala lineal y automáticamente con el almacenamiento en la clase de almacenamiento de Amazon EFS Standard. Si es necesario un rendimiento superior al que se puede lograr con la cantidad de datos almacenados, puede configurar el rendimiento aprovisionado en función de la cantidad específica que requiera la carga de trabajo.

El rendimiento del sistema de archivos se comparte entre todas las instancias de Amazon EC2 conectadas a un sistema de archivos. Por ejemplo, un sistema de archivos de 1 TB que puede transmitir por ráfagas hasta 100 MB/s de rendimiento puede generar 100 MB/s desde una sola instancia de Amazon EC2, cada una de las cuales puede generar 10 MB/s. Para obtener más información, consulte [Rendimiento de Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/performance.html) en la *Guía del usuario de Amazon Elastic File System*.

## Optimización de costos de los volúmenes de Amazon EFS
<a name="storage-efs-costopt"></a>

Amazon EFS simplifica el escalado del almacenamiento. Los sistemas de archivos de Amazon EFS crecen automáticamente a medida que se agregan más datos. Sobre todo con el modo *Rendimiento por ráfagas* de Amazon EFS, el rendimiento de Amazon EFS se escala cuando aumenta el tamaño del sistema de archivos en la clase de almacenamiento estándar. Para mejorar el rendimiento sin pagar un costo adicional por el rendimiento aprovisionado en un sistema de archivos de EFS, puede compartir un sistema de archivos de Amazon EFS con varias aplicaciones. Con puntos de acceso de Amazon EFS, puede implementar el aislamiento del almacenamiento en sistemas de archivos de Amazon EFS compartidos. De este modo, aunque las aplicaciones sigan compartiendo el mismo sistema de archivos, no podrán acceder a los datos a menos que usted lo autorice.

A medida que sus datos crecen, Amazon EFS ayuda a mover automáticamente los archivos de acceso poco frecuente a una clase de almacenamiento inferior. La clase de almacenamiento Standard-Infrequent Access (IA) de Amazon EFS Standard reduce los costos de almacenamiento de los archivos a los que no se accede todos los días. Todo ello, sin que se afecte a la alta disponibilidad, alta durabilidad, elasticidad y acceso al sistema de archivos POSIX que proporciona Amazon EFS. Para obtener más información, consulte [Clases de almacenamiento de EFS](https://docs.aws.amazon.com/efs/latest/ug/features.html) en la *Guía del usuario de Amazon Elastic File System*.

Considere la posibilidad de utilizar las políticas de ciclo de vida de Amazon EFS para ahorrar dinero de forma automática al mover los archivos de acceso poco frecuente al almacenamiento de acceso poco frecuente de Amazon EFS. Para obtener más información, consulte [Amazon EFS lifecycle management](https://docs.aws.amazon.com/efs/latest/ug/lifecycle-management-efs.html) (Administración del ciclo de vida de Amazon EFS) en la *Guí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 los almacena de forma redundante en una única zona de disponibilidad. La clase de almacenamiento Amazon EFS One Zone puede reducir los costos de almacenamiento en un margen significativo en comparación con las clases de almacenamiento Amazon EFS Standard. Considere la posibilidad de utilizar la clase de almacenamiento Amazon EFS One Zone para las cargas de trabajo que no requieren resiliencia multi-AZ. Para reducir aún más el costo del almacenamiento de Amazon EFS One Zone, mueva los archivos a los que se accede con poca frecuencia a Amazon EFS One Zone de acceso poco frecuente. Para obtener más información, consulte [Acceso poco frecuente de Amazon EFS](https://aws.amazon.com/efs/features/infrequent-access/).

## Protección de los datos de volúmenes de Amazon EFS
<a name="storage-efs-dataprotection"></a>

Amazon EFS almacena los datos de manera redundante en varias zonas de disponibilidad de los sistemas de archivos mediante las clases de almacenamiento estándar. Si selecciona las clases de almacenamiento Amazon EFS One Zone, los datos se almacenan de manera redundante en una única zona de disponibilidad. Además, Amazon EFS se ha diseñado para ofrecer una durabilidad del 99,999999999 % (11 9) durante un año concreto.

Como ocurre con cualquier entorno, se recomienda disponer de una copia de seguridad y crear medidas de protección contra la eliminación accidental. En el caso de los datos de Amazon EFS, esa práctica recomendada incluye una copia de seguridad que funcione y se pruebe periódicamente con AWS Backup. Los sistemas de archivos que utilizan las clases de almacenamiento Amazon EFS One Zone están configurados para hacer copias de seguridad automáticas de los archivos de manera predeterminada al crear el sistema de archivos, a menos que decida deshabilitar esta funcionalidad. Para obtener más información, consulte [Realización de copias de seguridad de sistemas de archivos EFS](https://docs.aws.amazon.com/efs/latest/ug/awsbackup.html) en la *Guía del usuario de Amazon Elastic File System*.

# Especificación de un sistema de archivos de Amazon EFS en la definición de tareas de Amazon ECS
<a name="specify-efs-config"></a>

Para usar volúmenes del sistema de archivos de Amazon EFS para sus contenedores, debe especificar las configuraciones de volumen y punto de montaje en su definición de tarea. El siguiente fragmento de JSON de definición de tareas muestra la sintaxis de los objetos `volumes` y `mountPoints` para un contenedor.

```
{
    "containerDefinitions": [
        {
            "name": "container-using-efs",
            "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
            "entryPoint": [
                "sh",
                "-c"
            ],
            "command": [
                "ls -la /mount/efs"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "myEfsVolume",
                    "containerPath": "/mount/efs",
                    "readOnly": true
                }
            ]
        }
    ],
    "volumes": [
        {
            "name": "myEfsVolume",
            "efsVolumeConfiguration": {
                "fileSystemId": "fs-1234",
                "rootDirectory": "/path/to/my/data",
                "transitEncryption": "ENABLED",
                "transitEncryptionPort": integer,
                "authorizationConfig": {
                    "accessPointId": "fsap-1234",
                    "iam": "ENABLED"
                }
            }
        }
    ]
}
```

`efsVolumeConfiguration`  
Tipo: objeto  
Obligatorio: no  
Este parámetro se especifica cuando se usan volúmenes de Amazon EFS.    
`fileSystemId`  
Tipo: cadena  
Obligatorio: sí  
El ID del sistema de archivos de Amazon EFS que se va a usar.  
`rootDirectory`  
Tipo: cadena  
Obligatorio: no  
Directorio del sistema de archivos de Amazon EFS que se va a montar como directorio raíz dentro del host. Si se omite este parámetro, se utiliza la raíz del volumen de Amazon EFS. Si se especifica `/`, se obtiene el mismo efecto que si se omite este parámetro.  
Si se especifica un punto de acceso de EFS en el `authorizationConfig`, se debe omitir el parámetro del directorio raíz o establecerlo en `/`, lo que aplicará la ruta establecida en el punto de acceso de EFS.  
`transitEncryption`  
Tipo: cadena  
Valores válidos: `ENABLED` \$1 `DISABLED`  
Obligatorio: no  
Especifica si se habilita el cifrado para los datos en tránsito de Amazon EFS entre el host de Amazon ECS y el servidor de Amazon EFS. Si se utiliza la autorización de IAM en Amazon EFS, el cifrado en tránsito debe estar habilitado. Si se omite este parámetro, se usa el valor predeterminado de `DISABLED`. Para obtener más información, consulte [Cifrado de datos en tránsito](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html) en la *Guía del usuario de Amazon Elastic File System*.  
`transitEncryptionPort`  
Tipo: entero  
Obligatorio: no  
El puerto que se utilizará al enviar datos cifrados entre el host de Amazon ECS y el servidor de Amazon EFS. Si no se especifica un puerto de cifrado en tránsito, se emplea la estrategia de selección de puertos que utiliza el ayudante de montaje de Amazon EFS. Para obtener más información, consulte [Ayudante de montaje de EFS](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html) en la *Guía del usuario de Amazon Elastic File System*.  
`authorizationConfig`  
Tipo: objeto  
Obligatorio: no  
Los detalles de configuración de autorización en el sistema de archivos de Amazon EFS.    
`accessPointId`  
Tipo: cadena  
Requerido: no  
ID de punto de acceso que se va a utilizar. Si se especifica un punto de acceso, el valor del directorio raíz en `efsVolumeConfiguration` se debe omitir o establecer en `/`, lo que aplica la ruta establecida en el punto de acceso EFS. Si se utiliza un punto de acceso, el cifrado de tránsito debe estar habilitado en el `EFSVolumeConfiguration`. Para obtener más información, consulte [Trabajo con puntos de acceso de Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html) en la *Guía del usuario de Amazon Elastic File System*.  
`iam`  
Tipo: cadena  
Valores válidos: `ENABLED` \$1 `DISABLED`  
Obligatorio: no  
 Especifica si utilizar el rol de IAM de tarea de Amazon ECS definido en una definición de tareas al montar el sistema de archivos de Amazon EFS. Si está habilitado, el cifrado de tránsito debe estar habilitado en el `EFSVolumeConfiguration`. Si se omite este parámetro, se usa el valor predeterminado de `DISABLED`. Para obtener más información, consulte [Roles de IAM para las tareas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html).

# Configuración de sistemas de archivos de Amazon EFS para Amazon ECS mediante la consola
<a name="tutorial-efs-volumes"></a>

Obtenga información sobre cómo utilizar los sistemas de archivos de Amazon Elastic File System (Amazon EFS) con Amazon ECS.

## Paso 1: Crear un clúster de Amazon ECS
<a name="efs-create-cluster"></a>

Siga estos pasos para crear un clúster de Amazon ECS. 

**Para crear un nuevo clúster (consola de Amazon ECS)**

Antes de empezar, asigne el permiso de IAM correspondiente. Para obtener más información, consulte [Ejemplos de clústeres de Amazon ECS](security_iam_id-based-policy-examples.md#IAM_cluster_policies).

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la barra de navegación, seleccione la región a utilizar.

1. En el panel de navegación, seleccione **Clusters (Clústeres)**.

1. En la página **Clusters** (Clústeres), elija **Create Cluster** (Crear clúster).

1. En **Configuración de clúster**, para **Nombre del clúster**, ingrese `EFS-tutorial`.

1. (Opcional) Para cambiar la VPC y las subredes donde se inician sus tareas y servicios, en **Networking** (Redes), realice cualquiera de las siguientes operaciones:
   + Para eliminar una subred, en **Subnets** (Subredes), elija **X**para cada subred que desea eliminar.
   + Para cambiar a una VPC distinta de la VPC **predeterminada**, en **VPC**, elija una **VPC** existente y, a continuación, en **Subredes**, seleccione cada subred.

1.  Para agregar instancias de Amazon EC2 al clúster, expanda **Infraestructura** y, a continuación, seleccione **Instancias de Amazon EC2**. A continuación, configure el grupo de Auto Scaling que actúa como proveedor de capacidad:

   1. Para crear un grupo de Auto Scaling, desde **Auto Scaling group (ASG)** (Grupo de Auto Scaling), seleccione **Create new group** (Crear nuevo grupo) y, a continuación, proporcione los siguientes detalles sobre el grupo:
     + En **Sistema operativo/arquitectura**, elija Amazon Linux 2.
     + En **EC2 instance type (Tipo de instancia EC2)**, elija `t2.micro`.

        Para **Par de clave de SSH**, elija el par que demuestre su identidad cuando se conecta a la instancia.
     + En **Capacidad**, escriba `1`.

1. Seleccione **Crear**.

## Paso 2: Crear un grupo de seguridad para las instancias de Amazon EC2 y el sistema de archivos de Amazon EFS
<a name="efs-security-group"></a>

En este paso, se crea un grupo de seguridad para las instancias de Amazon EC2 que permiten el tráfico de red entrante en el puerto 80 y para el sistema de archivos de Amazon EFS que permite obtener acceso de entrada desde las instancias de contenedor. 

Cree un grupo de seguridad para las instancias de Amazon EC2 con las siguientes opciones:
+ **Nombre del grupo de seguridad**: un nombre único para el grupo de seguridad.
+ **VPC**: la VPC que identificó anteriormente para el clúster.
+ **Regla de entrada**
  + **Tipo**: **HTTP**
  + **Fuente** - **0.0.0.0/0**.

Cree un grupo de seguridad para el sistema de archivos de Amazon EFS con las siguientes opciones:
+ **Nombre del grupo de seguridad**: un nombre único para el grupo de seguridad. Por ejemplo, `EFS-access-for-sg-dc025fa2`.
+ **VPC**: la VPC que identificó anteriormente para el clúster.
+ **Regla de entrada**
  + **Tipo**: **NFS**
  + **Fuente**: **personalizada** con el ID del grupo de seguridad que creó para las instancias.

Para obtener información sobre cómo crear un grupo de seguridad, consulte [Creación de un grupo de seguridad para instancias de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-security-group.html) en la *Guía del usuario de Amazon EC2*.

## Paso 3: Crear un sistema de archivos de Amazon EFS
<a name="efs-create-filesystem"></a>

En este paso, se crea un sistema de archivos de Amazon EFS.

**Para crear un sistema de archivos de Amazon EFS para tareas de Amazon ECS.**

1. Abra la consola de Amazon Elastic File System en [https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/).

1. Seleccione **Create file system (Crear sistema de archivos)**.

1. Introduzca un nombre para el sistema de archivos y, a continuación, elija la VPC en la que están alojadas las instancias de contenedor. De forma predeterminada, cada subred de la VPC especificada recibe un destino de montaje que utiliza el grupo de seguridad predeterminado para dicha VPC. A continuación, seleccione **Personalizar**.
**nota**  
Este tutorial asume que su sistema de archivos de Amazon EFS, el clúster de Amazon ECS, las instancias de contenedor y las tareas deben estar en la misma VPC. Para más información sobre cómo montar un sistema de archivos desde una VPC diferente, consulte [Walkthrough: Mount a file system from a different VPC](https://docs.aws.amazon.com/efs/latest/ug/efs-different-vpc.html) en la *Guía del usuario de Amazon EFS*.

1. En la página de **Configuración del sistema de archivos**, configure los ajustes opcionales y, a continuación, en **Configuración de rendimiento**, elija el modo de rendimiento **Por ráfagas** para el sistema de archivos. Una vez que haya configurado los ajustes, seleccione **Siguiente**.

   1. Añada etiquetas para su sistema de archivos. Este paso es opcional. Por ejemplo, es posible especificar un nombre único para el sistema de archivos al escribirlo en la columna **Value** situada junto a la clave **Name**.

   1. (Opcional) Habilite la administración del ciclo de vida para ahorrar dinero en el almacenamiento al que se accede con poca frecuencia. Para obtener más información, consulte [Administración del ciclo de vida de EFS](https://docs.aws.amazon.com/efs/latest/ug/lifecycle-management-efs.html) en la *Guía del usuario de Amazon Elastic File System*.

   1. (Opcional) Habilite el cifrado. Seleccione la casilla de verificación para habilitar el cifrado del sistema de archivos de Amazon EFS en reposo.

1. En la página **Acceso a la red**, en **Destinos de montaje**, reemplace la configuración del grupo de seguridad existente para cada zona de disponibilidad con el grupo de seguridad que creó para el sistema de archivos en [Paso 2: Crear un grupo de seguridad para las instancias de Amazon EC2 y el sistema de archivos de Amazon EFS](#efs-security-group) y, a continuación, seleccione **Siguiente**.

1.  No necesita configurar la **Política del sistema de archivos** para este tutorial, por lo que puede omitir la sección seleccionando **Siguiente**.

1. Revise las opciones del sistema de archivos y elija **Crear** para completar el proceso.

1. Desde la pantalla **Sistemas de archivos**, registre el **ID del sistema de archivos**. En el siguiente paso, hará referencia a este valor en la definición de tareas de Amazon ECS.

## Paso 4: Agregar contenido al sistema de archivos de Amazon EFS
<a name="efs-add-content"></a>

En este paso, se va a montar el sistema de archivos de Amazon EFS en una instancia de Amazon EC2 y a agregar contenido en ella. Esto se hace para realizar pruebas en este tutorial e ilustrar la naturaleza persistente de los datos. Por lo general, cuando se utiliza estas características, se cuenta con una aplicación u otro método de escritura de datos en el sistema de archivos de Amazon EFS.

**Para crear una instancia de Amazon EC2 y montar el sistema de archivos de Amazon EFS**

1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Elija **Iniciar instancia**.

1. En **Imágenes de aplicaciones y sistema operativo (Imagen de máquina de Amazon)**, seleccione la **AMI de Linux 2 de Amazon (HVM)**.

1. En **Tipo de instancia**, mantenga el tipo de instancia predeterminado, `t2.micro`.

1.  En **Par de claves (inicio de sesión)**, seleccione un par de claves para el acceso SSH a la instancia.

1. En **Configuración de red**, seleccione la VPC que especificó en el sistema de archivos de Amazon EFS y el clúster de Amazon ECS. Seleccione una subred y el grupo de seguridad de la instancia que se creó en [Paso 2: Crear un grupo de seguridad para las instancias de Amazon EC2 y el sistema de archivos de Amazon EFS](#efs-security-group). Configure el grupo de seguridad de la instancia. Asegúrese de que **Asignar automáticamente IP pública** esté habilitado.

1. En **Configurar almacenamiento**, pulse el botón **Editar** para los sistemas de archivos y, a continuación, elija **EFS**. Seleccione el sistema de archivos que creó en [Paso 3: Crear un sistema de archivos de Amazon EFS](#efs-create-filesystem). Si lo desea, puede cambiar el punto de montaje o dejar el valor predeterminado.
**importante**  
Debe seleccionar una subred antes de poder agregar un sistema de archivos a la instancia.

1. Desactive **Crear y adjuntar grupos de seguridad automáticamente**. Deje seleccionada la otra casilla de verificación. Elija **Agregar sistema de archivos compartidos**.

1. En **Advanced Details** (Detalles avanzados), asegúrese de que el script de datos del usuario se rellene automáticamente con los pasos de montaje del sistema de archivos de Amazon EFS.

1.  En **Resumen**, asegúrese de que el **Número de instancias** sea **1**. Seleccione **Iniciar instancia**.

1. En la página **Lanzar una instancia**, seleccione **Ver todas las instancias** para ver el estado de las instancias. Al principio, el estado del **Estado de instancia** es `PENDING`. Una vez que el estado cambie a `RUNNING` y la instancia supere todas las comprobaciones de estado, la instancia estará lista para su uso.

Ahora, se conecta a la instancia de Amazon EC2 y agrega contenido al sistema de archivos de Amazon EFS.

**Para conectarse a la instancia de Amazon EC2 y agregar contenido al sistema de archivos de Amazon EFS**

1. SSH a la instancia de Amazon EC2 que creó. Para obtener más información, consulte [Conexión a la instancia de Linux mediante SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) en la *Guía del usuario de Amazon EC2*.

1. Desde la ventana del terminal, ejecute el comando **df -T** para comprobar que el sistema de archivos de Amazon EFS esté montado. En el siguiente resultado, hemos resaltado el montaje del sistema de archivos de Amazon EFS.

   ```
   $ df -T
   Filesystem     Type            1K-blocks    Used        Available Use% Mounted on
   devtmpfs       devtmpfs           485468       0           485468   0% /dev
   tmpfs          tmpfs              503480       0           503480   0% /dev/shm
   tmpfs          tmpfs              503480     424           503056   1% /run
   tmpfs          tmpfs              503480       0           503480   0% /sys/fs/cgroup
   /dev/xvda1     xfs               8376300 1310952          7065348  16% /
   127.0.0.1:/    nfs4     9007199254739968       0 9007199254739968   0% /mnt/efs/fs1
   tmpfs          tmpfs              100700       0           100700   0% /run/user/1000
   ```

1. Vaya al directorio en el que está montado el sistema de archivos de Amazon EFS. En el ejemplo anterior, es `/mnt/efs/fs1`.

1. Cree un archivo denominado `index.html` con el siguiente contenido:

   ```
   <html>
       <body>
           <h1>It Works!</h1>
           <p>You are using an Amazon EFS file system for persistent container storage.</p>
       </body>
   </html>
   ```

## Paso 5: Crear una definición de tarea
<a name="efs-task-def"></a>

La siguiente definición de tarea crea un volumen de datos llamado `efs-html`. El contenedor `nginx` monta el volumen de datos host en raíz de NGINX, `/usr/share/nginx/html`.

**Para crear una nueva definición de tareas utilizando la consola de Amazon ECS**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, elija **Task Definitions** (Definiciones de tareas).

1. Elija **Create new task definition** (Crear nueva definición de tarea) y **Create new task definition with JSON** (Crear nueva definición de tarea con JSON).

1. En el cuadro editor de JSON, copie y pegue el siguiente texto JSON, sustituyendo `fileSystemId` por el ID del sistema de archivos de Amazon EFS.

   ```
   {
       "containerDefinitions": [
           {
               "memory": 128,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "containerPort": 80,
                       "protocol": "tcp"
                   }
               ],
               "essential": true,
               "mountPoints": [
                   {
                       "containerPath": "/usr/share/nginx/html",
                       "sourceVolume": "efs-html"
                   }
               ],
               "name": "nginx",
               "image": "public.ecr.aws/docker/library/nginx:latest"
           }
       ],
       "volumes": [
           {
               "name": "efs-html",
               "efsVolumeConfiguration": {
                   "fileSystemId": "fs-1324abcd",
                   "transitEncryption": "ENABLED"
               }
           }
       ],
       "family": "efs-tutorial",
       "executionRoleArn":"arn:aws:iam::111122223333:role/ecsTaskExecutionRole"
   }
   ```
**nota**  
Para el rol de IAM de ejecución de tareas de Amazon ECS no es necesario ningún permiso específico relacionado con Amazon EFS para montar un sistema de archivos de Amazon EFS. De manera predeterminada, si no existe la política basada en recursos de Amazon EFS, al crear el sistema de archivos, el acceso se concede a todas las entidades principales (\$1).  
El rol de tarea de Amazon ECS solo es necesario si la “autorización de IAM de EFS” está habilitada en la definición de tareas de Amazon ECS. Cuando está habilitada, la identidad del rol de la tarea debe poder acceder al sistema de archivos de Amazon EFS en la política basada en recursos de Amazon EFS, y el acceso anónimo debe estar inhabilitado.

1. Seleccione **Crear**.

## Paso 6: Ejecutar una tarea y ver los resultados
<a name="efs-run-task"></a>

Ahora que se creó el sistema de archivos de Amazon EFS y hay contenido web para que el contenedor de NGINX lo sirva, puede ejecutar una tarea mediante la definición de tareas que creó. Los servidores web de NGINX dan servicio a su sencilla página HTML. Si actualiza el contenido en el sistema de archivos de Amazon EFS, esos cambios se propagan a cualquier contenedor que también haya montado ese sistema de archivos.

La tarea se ejecuta en la subred que definió para el clúster.

**Para ejecutar una tarea y ver los resultados mediante la consola**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clusters** (Clústeres), seleccione el clúster que va a ejecutar la tarea independiente.

   Determine el recurso desde el que lanza el servicio.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/tutorial-efs-volumes.html)

1. (Opcional) Elija cómo se distribuye la tarea programada en su infraestructura de clúster. Expanda **Compute configuration** (Configuración de computación) y, a continuación, haga lo siguiente:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/tutorial-efs-volumes.html)

1. En **Application type** (Tipo de aplicación), elija **Task** (Tarea).

1. En **Definición de tarea**, elija la definición de tarea `efs-tutorial` que creó anteriormente.

1. En **Tareas deseadas**, ingrese `1`.

1. Seleccione **Crear**.

1. En la página **Clúster**, elija **Infraestructura**.

1. En **Instancias de contenedor**, elija la instancia de contenedor a la que se va a conectar.

1. En la página **Instancia de contenedor**, en **Redes** registre la **IP pública** para la instancia.

1. Abra un navegador e ingrese la dirección IP pública. Debería ver el siguiente mensaje:

   ```
   It works!
   You are using an Amazon EFS file system for persistent container storage.
   ```
**nota**  
Si no ve el mensaje, asegúrese de que el grupo de seguridad de la instancia de contenedor permita el tráfico de red entrante en el puerto 80 y que el grupo de seguridad del sistema de archivos permita el acceso entrante desde la instancia de contenedor.

# Uso de volúmenes de FSx para Windows File Server con Amazon ECS
<a name="wfsx-volumes"></a>

FSx para Windows File Server proporciona servidores de archivos de Windows completamente administrados y respaldados por un sistema de archivos de Windows. Cuando se utiliza FSx for Windows File Server junto con ECS, las tareas de Windows se pueden aprovisionar con almacenamiento de archivos estático, compartido, distribuido y persistente. Para obtener más información, consulte [¿Qué es FSx for Windows File Server?](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html).

**nota**  
Las instancias EC2 que utilizan la AMI completa de Windows Server 2016 optimizada para Amazon ECS no admiten volúmenes de tareas de ECS de FSx for Windows File Server.  
No se pueden utilizar los volúmenes de FSx para Windows File Server en contenedores de Windows en la configuración de Fargate. En su lugar, puede [modificar los contenedores para montarlos al inicio](https://aws.amazon.com/blogs/containers/use-smb-storage-with-windows-containers-on-aws-fargate/).

Puede utilizar FSx for Windows File Server para implementar cargas de trabajo de Windows que requieren acceso a almacenamiento externo compartido, almacenamiento regional de alta disponibilidad o almacenamiento de alto rendimiento. Puede montar uno o varios volúmenes del sistema de archivos de FSx para Windows File Server en un contenedor de Amazon ECS que se ejecute en una instancia de Windows de Amazon ECS. Puede compartir volúmenes del sistema de archivos de FSx para Windows File Server entre varios contenedores de Amazon ECS en una sola tarea de Amazon ECS.

Para habilitar el uso de FSx for Windows File Server con ECS, incluya el ID del sistema de archivos FSx for Windows File Server y la información relacionada en una definición de tareas. Esto se muestra en el siguiente fragmento JSON de definición de tareas de ejemplo. Antes de crear y ejecutar una definición de tareas, necesita lo siguiente.
+ Una instancia de EC2 de Windows ECS unida a un dominio válido. Puede alojarla [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html), Active Directory en las instalaciones o Active Directory con alojamiento propio en Amazon EC2.
+ Un parámetro de Systems Manager o secreto de AWS Secrets Manager que contenga las credenciales que se utilizan para unir el dominio de Active Directory y asociar el sistema de archivos de FSx para Windows File Server. Las credenciales son el nombre y la contraseña que especificó al crear el Active Directory.

Para ver un tutorial relacionado, consulte [Obtenga información sobre cómo configurar FSx para sistemas de archivos de Windows File Server para Amazon ECS.](tutorial-wfsx-volumes.md).

## Consideraciones
<a name="wfsx-volume-considerations"></a>

Tenga en cuenta lo siguiente al utilizar volúmenes de FSx for Windows File Server:
+ Los volúmenes de FSx para Windows File Server son compatibles de forma nativa con Amazon ECS en las instancias de Amazon EC2 de Windows: Amazon ECS administra de manera automática el montaje mediante la configuración de definición de tareas.

  En las instancias de Amazon EC2 de Linux, Amazon ECS no puede montar de manera automática los volúmenes de FSx para Windows File Server mediante definiciones de tareas. Sin embargo, puede montar de forma manual un recurso compartido de archivos de FSx para Windows File Server en una instancia de EC2 de Linux a nivel de host y, a continuación, realizar un montaje vinculado de esa ruta en sus contenedores de Amazon ECS. Para obtener más información, consulte [Montaje de archivos compartidos de Amazon FSx desde Linux](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/map-shares-linux.html).
**importante**  
Esta es una configuración autoadministrada. Para obtener instrucciones sobre el montaje y el mantenimiento de recursos compartidos de archivos de FSx para Windows File Server en Linux, consulte [la documentación de FSx para Windows File Server](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/).
**importante**  
Cuando se utiliza un recurso compartido de FSx para Windows File Server montado de forma manual en instancias de EC2 de Linux, Amazon ECS y FSx para Windows File Server funcionan de forma independiente: Amazon ECS no supervisa el montaje de Amazon FSx y FSx para Windows File Server no rastrea la ubicación de las tareas de Amazon ECS ni los eventos del ciclo de vida. Usted es responsable de garantizar la accesibilidad de la red entre sus instancias de contenedor de Amazon ECS y el sistema de archivos Amazon FSx, implementar comprobaciones de estado de montaje y gestionar la lógica de reconexión para tolerar los eventos de conmutación por error.
+ FSx for Windows File Server con Amazon ECS no admite AWS Fargate.
+ FSx para Windows File Server con Amazon ECS no se admite en instancias administradas de Amazon ECS.
+ FSx for Windows File Server con Amazon ECS y modo de red `awsvpc` requiere la versión `1.54.0` o posterior del agente de contenedor.
+ Para una tarea de Amazon ECS, se pueden utilizar 23 letras de unidad, como máximo. A cada tarea con un volumen de FSx for Windows File Server se le asigna una letra de unidad.
+ De forma predeterminada, el tiempo de limpieza de los recursos de tareas es de tres horas una vez finalizada la tarea. Incluso si no hay tareas que lo utilicen, una asignación de archivos creado por una tarea persiste durante tres horas. Para configurar el tiempo de limpieza predeterminado, se puede usar la variable de entorno de Amazon ECS `ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION`. Para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md).
+ Por lo general, las tareas solo se ejecutan en la misma VPC que el sistema de archivos FSx for Windows File Server. Sin embargo, es posible que exista compatibilidad entre VPC si hay una conectividad de red establecida entre la VPC del clúster de Amazon ECS y el sistema de archivos FSx for Windows File Server mediante interconexión de VPC.
+ Para controlar el acceso a un sistema de archivos FSx for Windows File Server en el nivel de red, se configuran los grupos de seguridad de VPC. Solo las tareas alojadas en instancias de EC2 unidas al dominio de Active Directory con grupos de seguridad de Active Directory correctamente configurados podrán acceder al uso compartido de archivos de FSx para Windows File Server. Si los grupos de seguridad están mal configurados, Amazon ECS no lanza la tarea y se muestra el mensaje de error siguiente: “”.: `unable to mount file system fs-id`.” 
+ FSx for Windows File Server está integrado con AWS Identity and Access Management (IAM) para controlar las acciones que los usuarios y grupos de IAM pueden realizar en los recursos específicos de FSx for Windows File Server. Con autorización de cliente, los clientes pueden definir roles de IAM que permiten o deniegan el acceso a sistemas de archivos FSx for Windows File Server específicos, que opcionalmente requieren acceso de solo lectura y que opcionalmente permiten o no permiten el acceso raíz al sistema de archivos desde el cliente. Para obtener más información, consulte [Seguridad](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/security.html) en la Guía del usuario de Windows para Amazon FSx.

# Prácticas recomendadas para el uso de FSx para Windows File Server con Amazon ECS
<a name="wfsx-best-practices"></a>

Tome nota de las siguientes de prácticas recomendadas cuando utilice FSx para Windows File Server con Amazon ECS.

## Controles de seguridad y acceso de FSx para Windows File Server
<a name="wfsx-security-access-controls"></a>

FSx para Windows File Server ofrece las siguientes características de control de acceso que puede utilizar para garantizar que los datos almacenados en un sistema de archivos de FSx para Windows File Server estén seguros y solo se pueda acceder a ellos desde las aplicaciones que los necesiten.

### Cifrado de datos para volúmenes de FSx para Windows File Server
<a name="storage-fsx-security-encryption"></a>

FSx para Windows File Server admite dos formas de cifrado para sistemas de archivos. Estas son el cifrado de datos en tránsito y cifrado en reposo. El cifrado de los datos en tránsito se admite en los recursos compartidos de archivos que están asignados en una instancia de contenedor compatible con el protocolo SMB 3.0 o posterior. El cifrado de los datos en reposo se activa de forma automática al crear un sistema de archivos Amazon FSx. Amazon FSx cifra de manera automática los datos en tránsito con el cifrado SMB, cuando el usuario accede al sistema de archivos, sin necesidad de modificar las aplicaciones. Para más información, consulte [Data encryption in Amazon FSx](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/encryption.html) en la *Guía del usuario de Amazon FSx para Windows File Server*.

### Uso de las ACL de Windows para el control de acceso a carpetas
<a name="storage-fsx-security-access"></a>

La instancia de Amazon EC2 de Windows accede a los recursos compartidos de archivos de Amazon FSx con las credenciales de Active Directory. Utiliza las listas de control de acceso (ACL) estándar de Windows para tener un control de acceso detallado a archivos y carpetas. Puede crear varias credenciales, cada una para una carpeta específica del recurso compartido que se asigne a una tarea específica.

En el ejemplo siguiente, la tarea tiene acceso a la carpeta `App01` mediante una credencial guardada en Secrets Manager. Su nombre de recurso de Amazon (ARN) es `1234`.

```
"rootDirectory": "\\path\\to\\my\\data\App01",
"credentialsParameter": "arn-1234",
"domain": "corp.fullyqualified.com",
```

En otro ejemplo, una tarea tiene acceso a la carpeta `App02` mediante una credencial guardada en Secrets Manager. Su ARN es `6789`.

```
"rootDirectory": "\\path\\to\\my\\data\App02",
"credentialsParameter": "arn-6789",
"domain": "corp.fullyqualified.com",
```

# Especificación de un sistema de archivos de FSx para Windows File Server en la definición de tareas de Amazon ECS
<a name="specify-wfsx-config"></a>

Para usar volúmenes del sistema de archivos de FSx for Windows File Server para sus contenedores, especifique las configuraciones de volumen y punto de montaje en la definición de tarea. El siguiente fragmento de JSON de definición de tareas muestra la sintaxis de los objetos `volumes` y `mountPoints` para un contenedor.

```
{
    "containerDefinitions": [
        {
            "entryPoint": [
                "powershell",
                "-Command"
            ],
            "portMappings": [],
            "command": ["New-Item -Path C:\\fsx-windows-dir\\index.html -ItemType file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>It Works!</h2> <p>You are using Amazon FSx for Windows File Server file system for persistent container storage.</p>' -Force"],
            "cpu": 512,
            "memory": 256,
            "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
            "essential": false,
            "name": "container1",
            "mountPoints": [
                {
                    "sourceVolume": "fsx-windows-dir",
                    "containerPath": "C:\\fsx-windows-dir",
                    "readOnly": false
                }
            ]
        },
        {
            "entryPoint": [
                "powershell",
                "-Command"
            ],
            "portMappings": [
                {
                    "hostPort": 443,
                    "protocol": "tcp",
                    "containerPort": 80
                }
            ],
            "command": ["Remove-Item -Recurse C:\\inetpub\\wwwroot\\* -Force; Start-Sleep -Seconds 120; Move-Item -Path C:\\fsx-windows-dir\\index.html -Destination C:\\inetpub\\wwwroot\\index.html -Force; C:\\ServiceMonitor.exe w3svc"],
            "mountPoints": [
                {
                    "sourceVolume": "fsx-windows-dir",
                    "containerPath": "C:\\fsx-windows-dir",
                    "readOnly": false
                }
            ],
            "cpu": 512,
            "memory": 256,
            "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
            "essential": true,
            "name": "container2"
        }
    ],
    "family": "fsx-windows",
    "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
    "volumes": [
        {
            "name": "fsx-windows-dir",
            "fsxWindowsFileServerVolumeConfiguration": {
                "fileSystemId": "fs-0eeb5730b2EXAMPLE",
                "authorizationConfig": {
                    "domain": "example.com",
                    "credentialsParameter": "arn:arn-1234"
                },
                "rootDirectory": "share"
            }
        }
    ]
}
```

`FSxWindowsFileServerVolumeConfiguration`  
Tipo: objeto  
Obligatorio: no  
Este parámetro se especifica cuando se utiliza el sistema de archivos [FSx for Windows File Server](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html) para el almacenamiento de tareas.    
`fileSystemId`  
Tipo: cadena  
Obligatorio: sí  
ID del sistema de archivos FSx for Windows File Server que se va a utilizar.  
`rootDirectory`  
Tipo: cadena  
Obligatorio: sí  
Directorio dentro del sistema de archivos de FSx for Windows File Server que se va a montar como directorio raíz dentro del host.  
`authorizationConfig`    
`credentialsParameter`  
Tipo: cadena  
Obligatorio: sí  
Opciones de credenciales de autorización:  
+ Nombre de recurso de Amazon (ARN) de un secreto de [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html).
+ Nombre de recurso de Amazon (ARN) de un parámetro de [Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-ps-secretsmanager.html).  
`domain`  
Tipo: cadena  
Obligatorio: sí  
Nombre de dominio completo alojado por un directorio de [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)(AWS Managed Microsoft AD) o un directorio de Active Directory de EC2 con alojamiento propio.

## Métodos para almacenar credenciales de volúmenes de FSx para Windows File Server
<a name="creds"></a>

Existen dos métodos diferentes de almacenamiento de credenciales que se utilizan con el parámetro de credenciales.
+ **AWS Secrets Manager secret**

  Esta credencial se puede crear en la consola de AWS Secrets Manager en la categoría *Other type of secret* (Otro tipo de secreto). Agregue una fila para cada par clave/valor, nombre de usuario/administrador y contraseña/*contraseña*.
+ **Parámetro de Systems Manager**

  Para crear esta credencial en la consola de parámetros de Systems Manager, ingrese texto en el formulario que se muestra en el siguiente fragmento de código de ejemplo.

  ```
  {
    "username": "admin",
    "password": "password"
  }
  ```

El `credentialsParameter` del parámetro `FSxWindowsFileServerVolumeConfiguration` de la definición de tarea contiene el ARN secreto o el ARN del parámetro de Systems Manager. Para obtener más información, consulte[¿Qué es AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) en la *Guía del usuario de Secrets Manager* y [Parameter Store de Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del usuario de Systems Manager*.

# Obtenga información sobre cómo configurar FSx para sistemas de archivos de Windows File Server para Amazon ECS.
<a name="tutorial-wfsx-volumes"></a>

Obtenga información sobre cómo lanzar una instancia de Windows optimizada para Amazon ECS que aloje un sistema de archivos de FSx para Windows File Server y contenedores que puedan acceder al sistema de archivos. Para hacerlo, primero debe crear un Microsoft Active Directory Directory Service administrado por AWS. A continuación, cree un sistema de archivos de FSx para Windows File Server y un clúster con una instancia de Amazon EC2 y una definición de tareas. Configure la definición de tareas de los contenedores para que utilicen el sistema de archivos FSx for Windows File Server. Por último, pruebe el sistema de archivos.

Cada vez que se lanza o se elimina el sistema de archivos Active Directory o FSx for Windows File Server, el proceso tarda entre 20 y 45 minutos. Prepárese para dedicar al menos 90 minutos a completar el tutorial o complételo en varias sesiones.

## Requisitos previos para el tutorial
<a name="wfsx-prerequisites"></a>
+ Un usuario administrativo. Consulte [Configuración para utilizar Amazon ECS](get-set-up-for-amazon-ecs.md).
+ (Opcional) Un par de claves `PEM` para conectarse a la instancia EC2 de Windows a través del acceso RDP. Para obtener información acerca de cómo crear pares de claves, consulte [Pares de claves de Amazon EC2 e instancias de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) en la *Guía del usuario de Amazon EC2*.
+ Una VPC con al menos una subred pública y una subred privada, y un grupo de seguridad. Puede utilizar la VPC predeterminada. No necesita una gateway ni un dispositivo NAT. Directory Service no admite la traducción de direcciones de red (NAT) en Active Directory. Para que esto funcione, Active Directory, el sistema de archivos FSx para Windows File Server, el clúster de ECS y la instancia de EC2 deben ubicarse dentro de la VPC. Para obtener más información sobre las VPC y Active Directories, consulte [Crear una VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) y [Requisitos previos para crear un AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html#ms_ad_getting_started_prereqs).
+ Los permisos ecsInstanceRole y ecsTaskExecutionRole de IAM están asociados a la cuenta. Estos roles vinculados a servicios permiten que los servicios realicen llamadas a la API y accedan a los contenedores, los secretos, los directorios y los servidores de archivos en su nombre.

## Paso 1: Crear roles de IAM de acceso
<a name="iam-roles"></a>

**Cree un clúster desde la Consola de administración de AWS.**

1. Consulte [Rol de IAM de instancia de contenedor de Amazon ECS](instance_IAM_role.md) para comprobar si dispone de un ecsInstanceRole y, si no dispone de ninguno, ver cómo puede crear uno.

1. Recomendamos personalizar las políticas de roles con permisos mínimos en un entorno de producción real. Para poder trabajar con este tutorial, compruebe que la siguiente política administrada por AWS esté asociada a ecsInstanceRole. Si la política aún no está asociada, asóciela ahora.
   + AmazonEC2ContainerServiceforEC2Role
   + AmazonSSMManagedInstanceCore
   + AmazonSSMDirectoryServiceAccess

   Para asociar una política administrada por AWS

   1. Abra la [consola de IAM](https://console.aws.amazon.com//iam/).

   1. Seleccione **Roles** en el panel de navegación.

   1. Elija un **Rol administrado de AWS**.

   1. Elija **Permisos y Asociar políticas**.

   1. Para reducir la lista de políticas disponibles a asociar, utilice la función **Filter** (Filtro).

   1. Seleccione la política pertinente y, a continuación, elija **Attach Policy** (Asociar política).

1. Consulte [Rol de IAM de ejecución de tareas de Amazon ECS](task_execution_IAM_role.md) para comprobar si dispone de un ecsTaskExecutionRole y, si no dispone de ninguno, ver cómo puede crear uno.

   Recomendamos personalizar las políticas de roles con permisos mínimos en un entorno de producción real. Para poder trabajar con este tutorial, compruebe que las siguientes políticas administradas por AWS estén asociadas a ecsTaskExecutionRole. Si las políticas no están asociadas, asócielas ahora. Para asociar las políticas administradas por AWS, utilice el procedimiento indicado en la sección anterior.
   + SecretsManagerReadWrite
   + AmazonFSxReadOnlyAccess
   + AmazonSSMReadOnlyAccess
   + AmazonECSTaskExecutionRolePolicy

## Paso 2: Crear Windows Active Directory (AD)
<a name="wfsx-create-ads"></a>

1. Siga los pasos que se indican en [Creación del directorio de Microsoft AD administrado por AWS](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html#ms_ad_getting_started_create_directory) en la *Guía de administración de AWS Directory Service*. Utilice la VPC que haya designado para este tutorial. En el paso 3 de *Creación de AWS Managed Microsoft AD*, guarde el nombre de usuario y la contraseña del administrador para utilizarlos en el siguiente paso. Además, tenga en cuenta el nombre de DNS del directorio calificado completo para futuros pasos. Puede completar el siguiente paso mientras se crea Active Directory.

1. Cree un secreto de AWS Secrets Manager para utilizarlo en los siguientes pasos. Para obtener más información, consulte [Introducción a Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html#get-started) en la *Guía del usuario de AWS Secrets Manager*.

   1. Abra la [consola de Secrets Manager](https://console.aws.amazon.com//secretsmanager/).

   1. Haga clic en **Store a new secret** (Almacenar un nuevo secreto).

   1. Seleccione **Other type of secrets** (Otro tipo de secretos).

   1. En **Secret key/value** (Clave/valor secreto), cree una clave **username**con el valor **admin** en la primera fila. Haga clic en.**\$1 Add a row** (\$1 Agregar una fila).

   1. En la nueva fila, cree una clave **password**. Para el valor, escriba la contraseña que ingresó en el paso 3 de *Creación del Directorio de AD administrado por AWS*.

   1. Haga clic en el botón **Next** (Siguiente).

   1. Proporcione un nombre y una descripción para el secreto. Haga clic en **Next (Siguiente)**.

   1. Haga clic en **Next (Siguiente)**. Haga clic en **Store** (Almacenar).

   1. En la lista que aparece en la página **Secrets** (Secretos), haga clic en el secreto que acaba de crear.

   1. Guarde el ARN del nuevo secreto para utilizarlo en los pasos siguientes.

   1. Puede continuar con el paso siguiente mientras se crea Active Directory.

## Paso 3: Comprobar y actualizar el grupo de seguridad
<a name="wfsx-sg"></a>

En este paso, compruebe y actualice las reglas del grupo de seguridad que está utilizando. Para eso, puede utilizar el grupo de seguridad predeterminado que se creó para la VPC.

**Verifique y actualice el grupo de seguridad.**

Debe crear o editar el grupo de seguridad para que envíe datos a través de los puertos, que se describen en [Grupos de seguridad de Amazon VPC](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/limit-access-security-groups.html#fsx-vpc-security-groups) en la *Guía del usuario de FSx for Windows File Server*. Para hacerlo, puede crear la regla de entrada del grupo de seguridad que se muestra en la primera fila de la siguiente tabla de reglas de entrada. Esta regla permite el tráfico entrante procedente de las interfaces de red (y las instancias asociadas) asignadas al mismo grupo de seguridad. Todos los recursos en la nube que cree están dentro de la misma VPC y asociados al mismo grupo de seguridad. Por lo tanto, esta regla permite que el tráfico se envíe a través del sistema de archivos FSx for Windows File Server, Active Directory y la instancia de ECS, según corresponda. Las otras reglas de entrada permiten que el tráfico atienda al sitio web y al acceso RDP para conectarse a la instancia de ECS.

En la tabla siguiente, se muestran las reglas de entrada del grupo de seguridad requeridas para este tutorial.


| Tipo | Protocolo | Intervalo de puertos | Origen | 
| --- | --- | --- | --- | 
|  Todo el tráfico  |  Todos  |  Todos  |  *sg-securitygroup*  | 
|  HTTPS  |  TCP  |  443  |  0.0.0.0/0  | 
|  RDP  |  TCP  |  3389  |  Dirección IP de la computadora portátil  | 

En la tabla siguiente, se muestran las reglas de salida del grupo de seguridad requeridas para este tutorial.


| Tipo | Protocolo | Rango de puerto | Destino | 
| --- | --- | --- | --- | 
|  Todo el tráfico  |  Todos  |  Todos  |  0.0.0.0/0  | 

1. Abra la [consola de EC2](https://console.aws.amazon.com//ec2/) y seleccione **Security Groups** (Grupos de seguridad) en el menú de la izquierda.

1. En la lista de grupos de seguridad que se muestra ahora, seleccione la casilla de verificación situada a la izquierda del grupo de seguridad que está utilizando para este tutorial.

   Se muestran los detalles del grupo de seguridad.

1. Para editar las reglas de entrada y salida, seleccione las pestañas **Reglas de entrada** o **Reglas de salida** y elija los botones **Editar reglas de entrada** o **Editar reglas de salida**. Edite las reglas para que coincidan con las que se muestran en las tablas anteriores. Después de crear la instancia de EC2 más adelante en este tutorial, edite el origen RDP de la regla de entrada con la dirección IP pública de la instancia de EC2 como se describe en [Conectarse a una instancia de Windows mediante RDP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html) en la *Guía del usuario de Amazon EC2*.

## Paso 4: Crear un sistema de archivos FSx for Windows File Server
<a name="wfsx-create-fsx"></a>

Después de comprobar y actualizar el grupo de seguridad y de crear Active Directory y dejarlo en estado activo, cree el sistema de archivos FSx for Windows File Server en la misma VPC en la que se encuentra Active Directory. Siga estos pasos para crear un sistema de archivos FSx for Windows File Server para las tareas de Windows.

**Cree el primer sistema de archivos.**

1. Abra la [consola de Amazon FSx](https://console.aws.amazon.com//fsx/).

1. En el panel, elija **Create file system** (Crear sistema de archivos) para iniciar el asistente de creación de sistemas de archivos.

1. En la página **Seleccionar tipo de sistema de archivos**, elija **FSx para Windows File Server** y, a continuación, elija **Siguiente**. Aparece la página **Crear sistema de archivos**.

1. En la sección **File system details** (Detalles del sistema de archivos), proporcione un nombre para el sistema de archivos. Dar nombre a los sistemas de archivos hace que sea más fácil encontrarlos y administrarlos. Puede usar hasta 256 caracteres Unicode. Los caracteres permitidos son letras, números, espacios y los caracteres especiales signo más (\$1), signo menos (-), signo igual (=), punto (.), guion bajo (\$1), dos puntos (:) y barra inclinada (/).

1. En **Deployment type** (Tipo de implementación), elija **Single-AZ** (Zona de disponibilidad única) para implementar un sistema de archivos que se implemente en una sola zona de disponibilidad. *Single-AZ 2* es la última generación de sistemas de archivos de zona de disponibilidad única y admite almacenamiento SSD y HDD.

1. En **Storage type** (Tipo de almacenamiento), elija **HDD**.

1. En **Storage capacity** (Capacidad de almacenamiento), ingrese la capacidad de almacenamiento mínima. 

1. En el campo **Throughput capacity** (Capacidad de rendimiento), mantenga la configuración predeterminada.

1. En la sección **Network & security** (Red y seguridad), elija la misma Amazon VPC que eligió para el directorio Directory Service.

1. En **VPC Security Groups** (Grupos de seguridad de la VPC), elija el grupo de seguridad que verificó en el *Paso 3: Comprobar y actualizar el grupo de seguridad*.

1. En **Autenticación de Windows**, elija **AWS Managed Microsoft Active Directory** y, a continuación, elija el directorio Directory Service de la lista.

1. En **Encryption** (Cifrado), conserve el valor predeterminado **aws/fsx (default)** en el campo **Encryption key** (Clave de cifrado).

1. En **Maintenance preferences** (Preferencias de mantenimiento), conserve la configuración predeterminada.

1. Haga clic en el botón **Next** (Siguiente).

1. Revise la configuración del sistema de archivos que se muestra en la página **Create File System** (Crear sistema de archivos). Para su referencia, anote qué configuración del sistema de archivos puede modificar después de crear el sistema de archivos. Seleccione **Crear sistema de archivos**. 

1. Anote el ID del sistema de archivos. Lo utilizará en un paso posterior.

   Vaya a los pasos siguientes para crear un clúster y una instancia EC2 mientras se crea el sistema de archivos FSx for Windows File Server.

## Paso 5: Crear un clúster de Amazon ECS
<a name="wfsx-create-cluster"></a>

**Crear un clúster mediante la consola clásica de Amazon ECS**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la barra de navegación, seleccione la región a utilizar.

1. En el panel de navegación, seleccione **Clusters (Clústeres)**.

1. En la página **Clusters** (Clústeres), elija **Create Cluster** (Crear clúster).

1. En **Configuración de clúster**, en **Nombre del clúster**, ingrese **windows-fsx-cluster**.

1. Expanda **Infraestructura**, desactive AWS Fargate (sin servidor) y, a continuación, seleccione **Instancias de Amazon EC2**.

   1. Para crear un grupo de Auto Scaling, desde **Auto Scaling group (ASG)** (Grupo de Auto Scaling), seleccione **Create new group** (Crear nuevo grupo) y, a continuación, proporcione los siguientes detalles sobre el grupo:
     + En **Sistema operativo/arquitectura**, elija **Windows Server 2019 Core**.
     + Para el **Tipo de instancia de EC2**, seleccione t2.medium o t2.micro.

1. Seleccione **Crear**.

## Paso 6: Crear una instancia de Amazon EC2 optimizada para Amazon ECS
<a name="wfsx-create-instance"></a>

Cree una instancia de contenedor de Amazon ECS para Windows.

**Para crear una instancia de Amazon ECS**

1. Utilice el comando `aws ssm get-parameters` para recuperar el nombre de la AMI de la región que aloja la VPC. Para obtener más información, consulte [Recuperación de los metadatos de la AMI optimizada para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_windows_AMI.html).

1. Utilice la consola de Amazon EC2 para lanzar la instancia.

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. En la barra de navegación, seleccione la región a utilizar.

   1. En el **panel de EC2**, elija **Launch Instance** (Lanzar instancia).

   1. En **Name (Nombre)**, escriba un nombre único.

   1. En **Imágenes de aplicaciones y SO (Imagen de máquina de Amazon)**, en el campo **Buscar**, introduzca la AMI que recuperó.

   1. En **Tipo de instancia**, seleccione t2.medium o t2.micro.

   1. En **Key pair (login)** (Par de claves [inicio de sesión]), elija un par de claves. Si no especifica ningún para de clave 

   1. En **Configuración de red**, para **VPC** y **Subred**, elija su VPC y una subred pública.

   1. En **Network settings** (Configuración de red), para **Security groups** (Grupo de seguridad), seleccione un grupo de seguridad existente o cree uno nuevo. Asegurarse de que el grupo de seguridad que elija tenga las reglas de entrada y salida definidas en [Requisitos previos para el tutorial](#wfsx-prerequisites)

   1. En **Network settings** (Configuración de red), para **Auto-assign Public IP** (Asignar automáticamente una IP pública), selecciona **Enable** (Activar). 

   1. Expanda **Detalles avanzados** y, a continuación, en **Directorio de unión a dominios**, seleccione el ID del Active Directory que creó. Este dominio opcional se une al AD cuando se lanza la instancia EC2.

   1. En **Advanced details** (Detalles avanzados), en **IAM instance profile** (Perfil de instancia de IAM), elija **ecsInstanceRole**.

   1. Configure su instancia de contenedor de Amazon ECS con los siguientes datos de usuario. En **Advanced details** (Detalles avanzados), pegue el siguiente script en el campo **User data** (Datos de usuario), reemplazando *cluster\$1name* con el nombre de su clúster.

      ```
      <powershell>
      Initialize-ECSAgent -Cluster windows-fsx-cluster -EnableTaskIAMRole
      </powershell>
      ```

   1. Cuando esté listo, seleccione el campo de confirmación y después elija **Launch Instances**. 

   1. Verá una página de confirmación que indicará que la instancia se está lanzando. Elija **View instances** para cerrar la página de confirmación y volver a la consola.

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, seleccione **Clústeres** y, luego, seleccione **windows-fsx-cluster**.

1. Seleccione la pestaña **Infraestructura** y compruebe que la instancia se haya registrado en el clúster **windows-fsx-cluster**.

## Paso 7: Registrar una definición de tareas de Windows
<a name="register_windows_task_def"></a>

Antes de poder ejecutar los contenedores de Windows en el clúster de Amazon ECS, debe registrar una definición de tarea. El siguiente ejemplo de definición de tareas muestra una página web sencilla. La tarea lanza dos contenedores que tienen acceso al sistema de archivos FSx. El primer contenedor escribe un archivo HTML en el sistema de archivos. El segundo contenedor descarga el archivo HTML del sistema de archivos y atiende la página web.

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, elija **Task Definitions** (Definiciones de tareas).

1. Elija **Create new task definition** (Crear nueva definición de tarea) y **Create new task definition with JSON** (Crear nueva definición de tarea con JSON).

1. En el cuadro del editor JSON, sustituya los valores del rol de ejecución de tareas y los detalles del sistema de archivos FSx y, a continuación, elija **Guardar**.

   ```
   {
       "containerDefinitions": [
           {
               "entryPoint": [
                   "powershell",
                   "-Command"
               ],
               "portMappings": [],
               "command": ["New-Item -Path C:\\fsx-windows-dir\\index.html -ItemType file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>It Works!</h2> <p>You are using Amazon FSx for Windows File Server file system for persistent container storage.</p>' -Force"],
               "cpu": 512,
               "memory": 256,
               "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
               "essential": false,
               "name": "container1",
               "mountPoints": [
                   {
                       "sourceVolume": "fsx-windows-dir",
                       "containerPath": "C:\\fsx-windows-dir",
                       "readOnly": false
                   }
               ]
           },
           {
               "entryPoint": [
                   "powershell",
                   "-Command"
               ],
               "portMappings": [
                   {
                       "hostPort": 443,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ],
               "command": ["Remove-Item -Recurse C:\\inetpub\\wwwroot\\* -Force; Start-Sleep -Seconds 120; Move-Item -Path C:\\fsx-windows-dir\\index.html -Destination C:\\inetpub\\wwwroot\\index.html -Force; C:\\ServiceMonitor.exe w3svc"],
               "mountPoints": [
                   {
                       "sourceVolume": "fsx-windows-dir",
                       "containerPath": "C:\\fsx-windows-dir",
                       "readOnly": false
                   }
               ],
               "cpu": 512,
               "memory": 256,
               "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
               "essential": true,
               "name": "container2"
           }
       ],
       "family": "fsx-windows",
       "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
       "volumes": [
           {
               "name": "fsx-windows-dir",
               "fsxWindowsFileServerVolumeConfiguration": {
                   "fileSystemId": "fs-0eeb5730b2EXAMPLE",
                   "authorizationConfig": {
                       "domain": "example.com",
                       "credentialsParameter": "arn:arn-1234"
                   },
                   "rootDirectory": "share"
               }
           }
       ]
   }
   ```

## Paso 8: Ejecutar una tarea y ver los resultados
<a name="wfsx-run-task"></a>

Antes de ejecutar la tarea, compruebe que el estado del sistema de archivos FSx for Windows File Server sea **Available** (Disponible). Una vez que esté disponible, puede ejecutar una tarea mediante la definición de tareas que creó. La tarea comienza por crear contenedores que mezclan un archivo HTML entre ellos mediante el sistema de archivos. Después de la mezcla, un servidor web atiende la página HTML simple.

**nota**  
Es posible que no pueda conectarse al sitio web desde una VPN.

**Ejecute una tarea y observe los resultados con la consola de Amazon ECS.**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, seleccione **Clústeres** y, luego, seleccione **windows-fsx-cluster**.

1. Elija la pestaña de **Tareas** y, a continuación, **Ejecutar nueva tarea**.

1. En **Launch Type**, elija **EC2**.

1. En configuración de la implementación, en **Definición de tareas**, elija **fsx-windows** y, a continuación, elija **Crear**.

1. Cuando el estado de la tarea sea **EN EJECUCIÓN**, haga clic en el ID de la tarea.

1. En **Contenedores**, cuando el estado del contenedor1 sea **DETENIDO**, seleccione el contenedor 2 para ver los detalles del contenedor.

1.  En **Detalles del contenedor para container2**, seleccione **Enlaces de red** y, a continuación, haga clic en la dirección IP externa asociada al contenedor. Se abrirá el navegador y mostrará el siguiente mensaje.

   ```
   Amazon ECS Sample App
   It Works! 
   You are using Amazon FSx for Windows File Server file system for persistent container storage.
   ```
**nota**  
Puede que transcurran unos minutos hasta que se muestre el mensaje. Si no ve este mensaje después de unos minutos, compruebe que no se esté ejecutando en una VPN y asegúrese de que el grupo de seguridad de la instancia de contenedor permita el tráfico HTTP de red entrante en el puerto 443.

## Paso 9: limpiar
<a name="wfsx-cleanup"></a>

**nota**  
El proceso de eliminación del sistema de archivos FSx for Windows File Server o el AD tarda entre 20 y 45 minutos. Debe esperar hasta que se hayan completado las operaciones de eliminación del sistema de archivos FSx for Windows File Server antes de iniciar las operaciones de eliminación de AD.

**Elimine el sistema de archivos de FSx para Windows File Server.**

1. Abra la [consola de Amazon FSx](https://console.aws.amazon.com//fsx/).

1. Elija el botón de la radio a la izquierda del sistema de archivos FSx para Windows File Server que acaba de crear.

1. Elija **Acciones**.

1. Seleccione **Delete file system** (Eliminar sistema de archivos).

**Eliminar AD.**

1. Abra la [consola de Directory Service](https://console.aws.amazon.com//directoryservicev2/).

1. Haga clic en el botón de radio situado a la izquierda del AD que acaba de crear.

1. Elija **Acciones**.

1. Seleccione **Delete directory** (Eliminar directorio).

**Elimine el clúster.**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En el panel de navegación, seleccione **Clústeres** y, luego, seleccione **windows-fsx-cluster**.

1. Seleccione **Delete cluster (Eliminar clúster)**.

1. Escriba la frase y, a continuación, elija **Eliminar**.

**Termine la instancia de EC2.**

1. Abra la [consola de Amazon EC2](https://console.aws.amazon.com//ec2/).

1. En el menú de la izquierda, seleccione **Instances** (Instancias).

1. Marque la casilla de verificación situada a la izquierda de la instancia de EC2 que creó.

1. Haga clic en el botón **Estado de instancia** y en **Terminar instancia**.

**Elimine el secreto.**

1. Abra la [consola de Secrets Manager](https://console.aws.amazon.com//secretsmanager/).

1. Seleccione el secreto que creó para este ejercicio.

1. Haga clic en **Actions** (Acciones).

1. Seleccione **Delete secret** (Eliminar secreto).

# Uso de volúmenes de Docker con Amazon ECS
<a name="docker-volumes"></a>

Cuando se utilizan volúmenes de Docker, se puede usar el controlador `local` integrado o un controlador de volumen de terceros. Los volúmenes de Docker los administra Docker, y se crea un directorio en `/var/lib/docker/volumes` en la instancia de contenedor que contiene los datos del volumen.

Para utilizar volúmenes de Docker, especifique `dockerVolumeConfiguration` en su definición de tarea. Para obtener más información, consulte [Volúmenes](https://docs.docker.com/engine/storage/volumes/) en la documentación de Docker.

Algunos casos de uso comunes de volúmenes de Docker son los siguientes:
+ Proporción de volúmenes de datos persistentes para su uso con contenedores
+ Uso compartido de un volumen de datos definido en distintas ubicaciones de distintos contenedores en la misma instancia de contenedor
+ Definición de un volumen de datos no persistentes vacío y montaje en varios contenedores dentro de la misma tarea
+ Proporcionar un volumen de datos a la tarea que está administrado por un controlador de terceros

## Consideraciones sobre el uso de volúmenes de Docker
<a name="docker-volume-considerations"></a>

Al utilizar volúmenes de Amazon Docker, tenga en cuenta lo siguiente:
+ Los volúmenes de Docker solo se admiten cuando se utiliza el tipo de lanzamiento de EC2 o instancias externas.
+ Los contenedores de Windows solo admiten el uso del controlador `local`.
+ Si se utiliza un controlador de terceros, asegúrese de que está instalado y activo en la instancia de contenedor antes de iniciar el agente de contenedor. Si el controlador de terceros no está activo antes de iniciar el agente, puede reiniciar el agente de contenedor con uno de los siguientes comandos:
  + Para la AMI de Amazon Linux 2 optimizada para Amazon ECS:

    ```
    sudo systemctl restart ecs
    ```
  + Para la AMI de Amazon Linux optimizada para Amazon ECS:

    ```
    sudo stop ecs && sudo start ecs
    ```

Para obtener información sobre cómo especificar un volumen de Docker en una definición de tarea, consulte [Especificación de un volumen de Docker en la definición de tareas de Amazon ECS](specify-volume-config.md).

# Especificación de un volumen de Docker en la definición de tareas de Amazon ECS
<a name="specify-volume-config"></a>

Para que los contenedores puedan utilizar volúmenes de datos, debe especificar las configuraciones del volumen y el punto de montaje en su definición de tarea. En esta sección se describe la configuración de volumen para un contenedor. Para las tareas que usan un volumen de Docker, especifique `dockerVolumeConfiguration`. Para las tareas que usan un volumen de host de montaje vinculado, especifique `host` y, si lo desea, `sourcePath`.

El siguiente JSON de definición de tareas muestra la sintaxis de los objetos `volumes` y `mountPoints` para un contenedor.

```
{
    "containerDefinitions": [
        {
            "mountPoints": [
                {
                    "sourceVolume": "string",
                    "containerPath": "/path/to/mount_volume",
                    "readOnly": boolean
                }
            ]
        }
    ],
    "volumes": [
        {
            "name": "string",
            "dockerVolumeConfiguration": {
                "scope": "string",
                "autoprovision": boolean,
                "driver": "string",
                "driverOpts": {
                    "key": "value"
                },
                "labels": {
                    "key": "value"
                }
            }
        }
    ]
}
```

`name`  
Tipo: cadena  
Requerido: no  
El nombre del volumen. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones (`-`) y caracteres de subrayado (`_`). Se hace referencia a este nombre en el parámetro `sourceVolume` del objeto `mountPoints` de la definición de contenedor.

`dockerVolumeConfiguration`  
Type: objeto de [DockerVolumeConfiguration](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DockerVolumeConfiguration.html)  
Obligatorio: no  
Este parámetro se especifica cuando se usan volúmenes de Docker. Los volúmenes de Docker se admiten solo cuando se ejecutan tareas en instancias de EC2. Los contenedores de Windows admiten solo el uso del controlador `local`. Para utilizar montajes vinculados, especifique `host` en su lugar.    
`scope`  
Tipo: cadena  
Valores válidos: `task` \$1 `shared`  
Obligatorio: no  
El ámbito del volumen de Docker, que determina su ciclo de vida. Los volúmenes de Docker con un ámbito de `task` se aprovisionan automáticamente cuando se inicia la tarea y se destruyen cuando la tarea se detiene. Los volúmenes de Docker cuyo ámbito es `shared` se conservan una vez detenida la tarea.  
`autoprovision`  
Tipo: booleano  
Valor predeterminado: \$1: `false`  
Obligatorio: no  
Si este valor es `true`, el volumen de Docker se crea si aún no existe. Este campo se usa solo si `scope` es `shared`. Si el `scope` es `task`, este parámetro debe omitirse.  
`driver`  
Tipo: cadena  
Requerido: no  
El controlador del volumen de Docker que se va a usar. El valor de controlador debe coincidir con el nombre del controlador proporcionado por Docker, ya que se utiliza para la colocación de tareas. Si el controlador se instaló mediante la CLI del complemento de Docker, utilice `docker plugin ls` para recuperar el nombre de controlador de la instancia de contenedor. Si el controlador se instaló con otro método, utilice la detección de complementos de Docker para recuperar el nombre del controlador.  
`driverOpts`  
Tipo: cadena  
Requerido: no  
Un mapa de las opciones específicas del controlador de Docker que se deben transferir. Este parámetro se corresponde con `DriverOpts` en la sección Crear un volumen de Docker.  
`labels`  
Tipo: cadena  
Requerido: no  
Metadatos personalizados que se añaden al volumen de Docker.

`mountPoints`  
Tipo: matriz de objetos  
Obligatorio: no  
Puntos de montaje para los volúmenes de datos del contenedor. Este parámetro asigna a `Volumes` en la API create-container de Docker y la opción `--volume` a docker run.  
Los contenedores de Windows pueden montar directorios completos en la misma unidad que `$env:ProgramData`. Los contenedores de Windows no pueden montar directorios en una unidad diferente y los puntos de montaje no se pueden utilizar entre unidades. Debe especificar los puntos de montaje para adjuntar un volumen de Amazon EBS directamente a una tarea de Amazon ECS.    
`sourceVolume`  
Tipo: cadena  
Obligatorio: sí, si se utilizan `mountPoints`.  
El nombre del volumen a montar.  
`containerPath`  
Tipo: cadena  
Obligatorio: sí, si se utilizan `mountPoints`.  
La ruta del contenedor donde se montará el volumen.  
`readOnly`  
Tipo: Booleano  
Obligatorio: no  
Si este valor es `true`, el acceso del contenedor al volumen es de solo lectura. Si este valor es `false`, el contenedor puede escribir en el volumen. El valor predeterminado es `false`.  
Para las tareas que se ejecutan en instancias de EC2 con sistema operativo Windows, deje el valor predeterminado `false`.

# Ejemplos de volúmenes de Docker para Amazon ECS
<a name="docker-volume-examples"></a>

En los ejemplos siguientes se muestra cómo proporcionar almacenamiento efímero para un contenedor, cómo proporcionar un volumen compartido para varios contenedores y cómo proporcionar almacenamiento persistente de NFS para un contenedor.

**Para proporcionar almacenamiento efímero para un contenedor con un volumen de Docker**

En este ejemplo, un contenedor utiliza un volumen de datos vacío que se elimina después de finalizar la tarea. Como caso de uso de ejemplo, podría tener un contenedor que necesita obtener acceso a una ubicación de almacenamiento de archivos scratch durante una tarea. Esta tarea se puede lograr utilizando un volumen de Docker.

1. En sección de definición de tarea de `volumes`, defina un volumen de datos con los valores `name` y `DockerVolumeConfiguration`. En este ejemplo, especifique el ámbito como `task` para que el volumen se elimine una vez que se detenga la tarea y utilice el controlador `local` integrado.

   ```
   "volumes": [
       {
           "name": "scratch",
           "dockerVolumeConfiguration" : {
               "scope": "task",
               "driver": "local",
               "labels": {
                   "scratch": "space"
               }
           }
       }
   ]
   ```

1. En la sección `containerDefinitions`, defina un contenedor con valores `mountPoints` que hagan referencia al nombre del volumen definido y el valor `containerPath` en el que desea montar el volumen en el contenedor.

   ```
   "containerDefinitions": [
       {
           "name": "container-1",
           "mountPoints": [
               {
                 "sourceVolume": "scratch",
                 "containerPath": "/var/scratch"
               }
           ]
       }
   ]
   ```

**Para proporcionar almacenamiento persistente para varios contenedores con un volumen de Docker**

En este ejemplo, desea usar un volumen compartido para varios contenedores y desea que se conserve una vez que se detenga cualquiera de las tareas que lo usa. El controlador `local` integrado se está utilizando. Esto es para que el volumen siga vinculado al ciclo de vida de la instancia de contenedor.

1. En sección de definición de tarea de `volumes`, defina un volumen de datos con los valores `name` y `DockerVolumeConfiguration`. En este ejemplo, especifique un alcance `shared` para que el volumen persista, establezca el aprovisionamiento automático en `true`. Esto es para que el volumen se cree para su uso. A continuación, utilice también el controlador `local` integrado.

   ```
   "volumes": [
       {
           "name": "database",
           "dockerVolumeConfiguration" : {
               "scope": "shared",
               "autoprovision": true,
               "driver": "local",
               "labels": {
                   "database": "database_name"
               }
           }
       }
   ]
   ```

1. En la sección `containerDefinitions`, defina un contenedor con valores `mountPoints` que hagan referencia al nombre del volumen definido y el valor `containerPath` en el que desea montar el volumen en el contenedor.

   ```
   "containerDefinitions": [
       {
           "name": "container-1",
           "mountPoints": [
           {
             "sourceVolume": "database",
             "containerPath": "/var/database"
           }
         ]
       },
       {
         "name": "container-2",
         "mountPoints": [
           {
             "sourceVolume": "database",
             "containerPath": "/var/database"
           }
         ]
       }
     ]
   ```

**Para proporcionar almacenamiento persistente de NFS para un contenedor con un volumen de Docker**

 En este ejemplo, un contenedor utiliza un volumen de datos de NFS que se monta automáticamente cuando inicia la tarea y se desmonta cuando la tarea finaliza. Utiliza el controlador integrado `local` de Docker. Un caso de uso de ejemplo es que puede tener un almacenamiento de NFS local y necesita acceder a él desde una tarea de ECS Anywhere. Esto se puede lograr con un volumen de Docker con la opción de controlador de NFS.

1. En sección de definición de tarea de `volumes`, defina un volumen de datos con los valores `name` y `DockerVolumeConfiguration`. En este ejemplo, especifique un alcance `task` para que el volumen se desmonte cuando finaliza la tarea. Utilice el controlador `local` y configure `driverOpts` con las opciones `type`, `device` y `o` en consecuencia. Sustituya `NFS_SERVER` por el punto de conexión del servidor de NFS.

   ```
   "volumes": [
          {
              "name": "NFS",
              "dockerVolumeConfiguration" : {
                  "scope": "task",
                  "driver": "local",
                  "driverOpts": {
                      "type": "nfs",
                      "device": "$NFS_SERVER:/mnt/nfs",
                      "o": "addr=$NFS_SERVER"
                  }
              }
          }
      ]
   ```

1. En la sección `containerDefinitions`, defina un contenedor con valores `mountPoints` que hagan referencia al nombre del volumen definido y el valor `containerPath` en el que desea montar el volumen en el contenedor.

   ```
   "containerDefinitions": [
          {
              "name": "container-1",
              "mountPoints": [
                  {
                    "sourceVolume": "NFS",
                    "containerPath": "/var/nfsmount"
                  }
              ]
          }
      ]
   ```

# Uso de montajes de unión con Amazon ECS
<a name="bind-mounts"></a>

Con los montajes de unión, se monta un archivo o directorio de un host en un contenedor, como, por ejemplo, una instancia de Amazon EC2. Se admiten montajes de enlace para tareas que están alojadas en instancias de Fargate y Amazon EC2. Los montajes de unión están vinculados al ciclo de vida del contenedor que los utiliza. Una vez que se detienen todos los contenedores que utilizan un montaje de enlace, como cuando se detiene una tarea, se eliminan los datos. En el caso de las tareas que están alojadas en instancias de Amazon EC2, para vincular los datos al ciclo de vida de la instancia de Amazon EC2 del host, se puede especificar un `host` y un valor de `sourcePath` opcional en la definición de tareas. Para obtener más información, consulte [Montajes vinculados](https://docs.docker.com/engine/storage/bind-mounts/) en la documentación de Docker.

A continuación, se indican algunos casos de uso comunes de los montajes de enlace.
+ Para proporcionar un volumen de datos vacío y montarlo en uno o más contenedores.
+ Para montar un volumen de datos del host en uno o más contenedores.
+ Para compartir un volumen de datos de un contenedor de origen con otros contenedores de la misma tarea.
+ Para exponer una ruta de acceso y su contenido desde un Dockerfile a uno o más contenedores.

## Consideraciones acerca del uso de los montajes de enlace
<a name="bind-mount-considerations"></a>

Al utilizar montajes de enlace, tenga en cuenta lo siguiente.
+ De manera predeterminada, las tareas alojadas en AWS Fargate que utilizan la versión de la plataforma `1.4.0` o una posterior (Linux) o `1.0.0` o una posterior (Windows) reciben un mínimo de 20 GiB de almacenamiento efímero para los montajes de unión. Para aumentar la cantidad total de almacenamiento efímero, hasta un máximo de 200 GiB, indique el parámetro `ephemeralStorage` en la definición de tareas.
+ Para exponer los archivos de un Dockerfile a un volumen de datos cuando se ejecuta una tarea, el plano de datos de Amazon ECS busca una directiva `VOLUME`. Si la ruta absoluta especificada en la directiva `VOLUME` es la misma que la `containerPath` especificada en la definición de tarea, los datos de la ruta de la directiva `VOLUME` se copian en el volumen de datos. En el siguiente ejemplo de Dockerfile, un archivo con el nombre `examplefile` en el directorio `/var/log/exported` se escribe en el host y, a continuación, se monta dentro del contenedor.

  ```
  FROM public.ecr.aws/amazonlinux/amazonlinux:latest
  RUN mkdir -p /var/log/exported
  RUN touch /var/log/exported/examplefile
  VOLUME ["/var/log/exported"]
  ```

  De forma predeterminada, los permisos de los volúmenes se establecen en`0755` y el propietario como `root`. Puede personalizar estos permisos en el Dockerfile. En el siguiente ejemplo, se define al propietario del directorio como `node`.

  ```
  FROM public.ecr.aws/amazonlinux/amazonlinux:latest
  RUN yum install -y shadow-utils && yum clean all
  RUN useradd node
  RUN mkdir -p /var/log/exported && chown node:node /var/log/exported
  RUN touch /var/log/exported/examplefile
  USER node
  VOLUME ["/var/log/exported"]
  ```
+ Para las tareas que están alojadas en instancias de Amazon EC2, cuando no se especifica el valor de `host` ni de `sourcePath`, es el daemon de Docker el que administra el montaje de enlace. Cuando ningún contenedor hace referencia a este montaje de enlace, el servicio de limpieza de tareas del agente de contenedor de Amazon ECS lo elimina finalmente. De forma predeterminada, esto sucede tres horas después de que el contenedor se cierre. Sin embargo, es posible configurar esta duración con la variable de agente `ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION`. Para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md). Si necesita que estos datos persistan más allá del ciclo de vida del contenedor, especifique un valor de `sourcePath` para el montaje de enlace.
+ En el caso de las tareas alojadas en instancias administradas por Amazon ECS, algunas partes del sistema de archivos del host son de solo lectura. Los montajes de enlace de lectura/escritura deben utilizar directorios que admitan escritura, por ejemplo, `/var` para datos persistentes o `/tmp` para datos temporales. Si se intenta crear montajes de enlace de lectura y escritura en otros directorios, la tarea no se podrá iniciar y se producirá un error similar al siguiente:

  ```
  error creating empty volume: error while creating volume path '/path': mkdir /path: read-only file system
  ```

  Los montajes de enlace de solo lectura (configurados con `"readOnly": true` en el parámetro `mountPoints`) pueden apuntar a cualquier directorio accesible del host.

  Para ver una lista completa de rutas que admiten escritura, puede ejecutar una tarea en una instancia administrada por Amazon ECS y utilizarla para inspeccionar la tabla de montaje de la instancia. Cree una definición de tarea con los siguientes ajustes para acceder al sistema de archivos del host:

  ```
  {
      "pidMode": "host",
      "containerDefinitions": [{
          "privileged": true,
          ...
      }]
  }
  ```

  A continuación, ejecute los siguientes comandos desde dentro del contenedor:

  ```
  # List writable mounts
  cat /proc/1/root/proc/1/mounts | awk '$4 ~ /^rw,/ || $4 == "rw" {print $2}' | sort
  
  # List read-only mounts
  cat /proc/1/root/proc/1/mounts | awk '$4 ~ /^ro,/ || $4 == "ro" {print $2}' | sort
  ```
**importante**  
La configuración `privileged` otorga al contenedor capacidades ampliadas en el host, equivalentes al acceso raíz. En este ejemplo, se utiliza para inspeccionar la tabla de montaje del host con fines de diagnóstico. Para obtener más información, consulte [Evitar ejecutar contenedores con privilegios (Amazon EC2)](security-tasks-containers.md#security-tasks-containers-recommendations-avoid-privileged-containers).

  Para obtener más información sobre la ejecución de comandos interactivos en contenedores, consulte [Supervisión de los contenedores de Amazon ECS con ECS Exec](ecs-exec.md).

# Especificación de un montaje de unión en la definición de tareas de Amazon ECS
<a name="specify-bind-mount-config"></a>

En el siguiente fragmento de JSON de definición de tareas, se muestra la sintaxis de los objetos `volumes`, `mountPoints` y `ephemeralStorage` para una definición de las tareas de Amazon ECS alojadas en instancias de Amazon EC2 o Fargate.

```
{
   "family": "",
   ...
   "containerDefinitions" : [
      {
         "mountPoints" : [
            {
               "containerPath" : "/path/to/mount_volume",
               "sourceVolume" : "string"
            }
          ],
          "name" : "string"
       }
    ],
    ...
    "volumes" : [
       {
          "name" : "string"
       }
    ],
    "ephemeralStorage": {
	   "sizeInGiB": integer
    }
}
```

Para las tareas de Amazon ECS que están alojadas en instancias de Amazon EC2, puede utilizar el parámetro `host` opcional y un `sourcePath` al especificar los detalles del volumen de tareas. Cuando se especifica, vincula el montaje de enlace al ciclo de vida de la tarea en lugar del contenedor.

```
"volumes" : [
    {
        "host" : {
            "sourcePath" : "string"
        },
        "name" : "string"
    }
]
```

A continuación, se describe en más detalle cada uno de los parámetros de la definición de tarea.

`name`  
Tipo: cadena  
Requerido: no  
El nombre del volumen. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones (`-`) y caracteres de subrayado (`_`). Se hace referencia a este nombre en el parámetro `sourceVolume` del objeto `mountPoints` de la definición de contenedor.

`host`  
Obligatorio: no  
El parámetro `host` se utiliza para vincular el ciclo de vida del montaje de enlace a la instancia de Amazon EC2 del host, en lugar de a la tarea, y donde se almacena. Si el parámetro `host` está vacío, entonces el daemon de Docker asigna una ruta de host a su volumen de datos, pero no se garantiza que los datos persistan después de que los contenedores asociados dejen de funcionar.  
Los contenedores de Windows pueden montar directorios completos en la misma unidad que `$env:ProgramData`.  
El parámetro `sourcePath` se admite solo cuando se utilizan las tareas que se alojan en instancias de Amazon EC2 o instancias administradas de Amazon ECS.  
`sourcePath`  
Tipo: cadena  
Requerido: no  
Cuando utilice el parámetro `host`, especifique una `sourcePath` para declarar la ruta de la instancia de Amazon EC2 del host que se presenta al contenedor. Si este parámetro está vacío, el daemon de Docker asigna una ruta de host. Si el parámetro `host` contiene una ubicación de archivos `sourcePath`, el volumen de datos persiste en la ubicación especificada en la instancia de Amazon EC2 del host hasta que la elimine manualmente. Si el valor `sourcePath` no existe en la instancia de Amazon EC2 del host, el daemon de Docker lo crea. Si la ubicación existe, el contenido de la carpeta de la ruta de origen se exporta.

`mountPoints`  
Tipo: matriz de objetos  
Obligatorio: no  
Puntos de montaje para los volúmenes de datos del contenedor. Este parámetro asigna a `Volumes` en la API create-container de Docker y la opción `--volume` a docker run.  
Los contenedores de Windows pueden montar directorios completos en la misma unidad que `$env:ProgramData`. Los contenedores de Windows no pueden montar directorios en una unidad diferente y los puntos de montaje no se pueden utilizar entre unidades. Debe especificar los puntos de montaje para adjuntar un volumen de Amazon EBS directamente a una tarea de Amazon ECS.    
`sourceVolume`  
Tipo: cadena  
Obligatorio: sí, si se utilizan `mountPoints`.  
El nombre del volumen a montar.  
`containerPath`  
Tipo: cadena  
Obligatorio: sí, si se utilizan `mountPoints`.  
La ruta del contenedor donde se montará el volumen.  
`readOnly`  
Tipo: Booleano  
Obligatorio: no  
Si este valor es `true`, el acceso del contenedor al volumen es de solo lectura. Si este valor es `false`, el contenedor puede escribir en el volumen. El valor predeterminado es `false`.  
Para las tareas que se ejecutan en instancias de EC2 con sistema operativo Windows, deje el valor predeterminado `false`.

`ephemeralStorage`  
Tipo: objeto  
Obligatorio: no  
Cantidad de almacenamiento efímero que se asignará a la tarea. Este parámetro se utiliza para expandir la cantidad total de almacenamiento efímero disponible, más allá de la cantidad predeterminada, para las tareas alojadas en AWS Fargate que utilizan la versión `1.4.0` o posterior (Linux) o `1.0.0` o posterior (Windows) de la plataforma.  
Se puede utilizar la CLI de Copilot, CloudFormation, el SDK de AWS o la CLI para especificar almacenamiento efímero para un montaje de enlace.

# Ejemplos de montajes vinculados para Amazon ECS
<a name="bind-mount-examples"></a>

En los siguientes ejemplos se cubren los casos de uso más comunes de montaje vinculado para los contenedores.

**Para asignar una mayor cantidad de espacio de almacenamiento efímero a una tarea de Fargate**

Para las tareas de Amazon ECS alojadas en Fargate que utilizan la versión `1.4.0` o posterior (Linux) o `1.0.0` (Windows) de la plataforma, se puede asignar una cantidad mayor de almacenamiento efímero que la predeterminada para que la utilicen los contenedores de la tarea. Este ejemplo se puede incorporar a los otros ejemplos para asignar un almacenamiento más efímero para sus tareas de Fargate.
+ En la definición de tarea, defina un objeto `ephemeralStorage`. El valor de `sizeInGiB` se expresa en GiB y debe ser un número entero entre `21` y `200`.

  ```
  "ephemeralStorage": {
      "sizeInGiB": integer
  }
  ```

**Para proporcionar un volumen de datos vacío para uno o más contenedores**

En algunos casos, es posible que desee proporcionar a los contenedores de una tarea algo de espacio de almacenamiento temporal. Por ejemplo, podría tener dos contenedores de base de datos que deben acceder a la misma ubicación de almacenamiento de archivos scratch durante una tarea. Esto se puede lograr con un montaje de enlace.

1. En la sección de definición de tarea `volumes`, defina un montaje vinculado con el nombre `database_scratch`.

   ```
     "volumes": [
       {
         "name": "database_scratch"
       }
     ]
   ```

1. En la sección `containerDefinitions`, cree las definiciones de contenedor de base de datos. Esto es para que monten el volumen.

   ```
   "containerDefinitions": [
       {
         "name": "database1",
         "image": "my-repo/database",
         "cpu": 100,
         "memory": 100,
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "database_scratch",
             "containerPath": "/var/scratch"
           }
         ]
       },
       {
         "name": "database2",
         "image": "my-repo/database",
         "cpu": 100,
         "memory": 100,
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "database_scratch",
             "containerPath": "/var/scratch"
           }
         ]
       }
     ]
   ```

**Para exponer una ruta y su contenido en un Dockerfile a un contenedor**

En este ejemplo, tiene un Dockerfile que escribe los datos que va a montar dentro de un contenedor. Este ejemplo funciona para tareas que están alojadas en instancias de Fargate o Amazon EC2.

1. Cree un Dockerfile. En el siguiente ejemplo, se utiliza la imagen de contenedor pública de Amazon Linux 2 y se crea un archivo con el nombre `examplefile` en el directorio `/var/log/exported` que queremos montar dentro del contenedor. La directiva `VOLUME` debe especificar una ruta absoluta.

   ```
   FROM public.ecr.aws/amazonlinux/amazonlinux:latest
   RUN mkdir -p /var/log/exported
   RUN touch /var/log/exported/examplefile
   VOLUME ["/var/log/exported"]
   ```

   De forma predeterminada, los permisos de los volúmenes se establecen en`0755` y el propietario como `root`. Estos permisos se pueden cambiar en el Dockerfile. En el ejemplo siguiente, el propietario del directorio `/var/log/exported` se establece como `node`.

   ```
   FROM public.ecr.aws/amazonlinux/amazonlinux:latest
   RUN yum install -y shadow-utils && yum clean all
   RUN useradd node
   RUN mkdir -p /var/log/exported && chown node:node /var/log/exported					    
   USER node
   RUN touch /var/log/exported/examplefile
   VOLUME ["/var/log/exported"]
   ```

1. En la sección de definición de tarea de `volumes`, defina un volumen con el nombre `application_logs`.

   ```
     "volumes": [
       {
         "name": "application_logs"
       }
     ]
   ```

1. En la sección `containerDefinitions`, cree las definiciones de contenedor de aplicaciones. Esto es para que monten el almacenamiento. El valor de `containerPath` debe coincidir con la ruta absoluta especificada en la directiva `VOLUME` del Dockerfile.

   ```
     "containerDefinitions": [
       {
         "name": "application1",
         "image": "my-repo/application",
         "cpu": 100,
         "memory": 100,
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "application_logs",
             "containerPath": "/var/log/exported"
           }
         ]
       },
       {
         "name": "application2",
         "image": "my-repo/application",
         "cpu": 100,
         "memory": 100,
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "application_logs",
             "containerPath": "/var/log/exported"
           }
         ]
       }
     ]
   ```

**Para proporcionar un volumen de datos vacío para un contenedor que está vinculado al ciclo de vida de la instancia de Amazon EC2 del host**

Para las tareas que están alojadas en instancias de Amazon EC2, se pueden utilizar montajes de enlace y vincular los datos al ciclo de vida de la instancia de Amazon EC2 del host. Para ello, se utiliza el parámetro `host` y se especifica un valor de `sourcePath`. Cualquier archivo que exista en `sourcePath` se presenta a los contenedores con el valor `containerPath`. Cualquier archivo que se escriba en el valor `containerPath`, se escribe en el valor `sourcePath` en la instancia de Amazon EC2 del host.
**importante**  
Amazon ECS no sincroniza el almacenamiento en todas las instancias de Amazon EC2. Las tareas que utilizan almacenamiento persistente se pueden colocar en cualquier instancia de Amazon EC2 del clúster que tenga capacidad disponible. Si las tareas requieren almacenamiento persistente después de detenerse y reiniciarse, especifique siempre la misma instancia de Amazon EC2 en el momento de lanzar la tarea con el comando [start-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/start-task.html) de la AWS CLI. También puede utilizar volúmenes de Amazon EFS para el almacenamiento persistente. Para obtener más información, consulte [Uso de volúmenes de Amazon EFS con Amazon ECS](efs-volumes.md).

1. En la sección de la definición de tarea `volumes`, defina un montaje vinculado con los valores de `name` y `sourcePath`. En el ejemplo siguiente, la instancia de Amazon EC2 del host contiene datos de `/ecs/webdata` que va a montar dentro del contenedor.

   ```
     "volumes": [
       {
         "name": "webdata",
         "host": {
           "sourcePath": "/ecs/webdata"
         }
       }
     ]
   ```

1. En la sección `containerDefinitions`, defina un contenedor con un valor de `mountPoints` que haga referencia al nombre del montaje de enlace y el valor de `containerPath` en el que va a realizar el montaje de enlace en el contenedor.

   ```
     "containerDefinitions": [
       {
         "name": "web",
         "image": "public.ecr.aws/docker/library/nginx:latest",
         "cpu": 99,
         "memory": 100,
         "portMappings": [
           {
             "containerPort": 80,
             "hostPort": 80
           }
         ],
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "webdata",
             "containerPath": "/usr/share/nginx/html"
           }
         ]
       }
     ]
   ```

**Para montar un volumen definido en varios contenedores en diferentes ubicaciones**

Puede definir un volumen de datos en una definición de tarea y montarlo en diferentes ubicaciones en distintos contenedores. Por ejemplo, el contenedor del host tiene una carpeta de datos del sitio web en `/data/webroot`. Es posible que desee montar ese volumen de datos como de solo lectura en dos servidores web diferentes que tengan diferentes raíces de documentos.

1. En la sección de definición de tarea de `volumes`, defina un volumen de datos con el nombre `webroot` y la ruta de origen `/data/webroot`.

   ```
     "volumes": [
       {
         "name": "webroot",
         "host": {
           "sourcePath": "/data/webroot"
         }
       }
     ]
   ```

1. En la sección `containerDefinitions`, defina un contenedor para cada servidor web con valores de `mountPoints` que permitan asociar el volumen de `webroot` con el valor de `containerPath` apuntando a la raíz de documentos para ese contenedor.

   ```
     "containerDefinitions": [
       {
         "name": "web-server-1",
         "image": "my-repo/ubuntu-apache",
         "cpu": 100,
         "memory": 100,
         "portMappings": [
           {
             "containerPort": 80,
             "hostPort": 80
           }
         ],
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "webroot",
             "containerPath": "/var/www/html",
             "readOnly": true
           }
         ]
       },
       {
         "name": "web-server-2",
         "image": "my-repo/sles11-apache",
         "cpu": 100,
         "memory": 100,
         "portMappings": [
           {
             "containerPort": 8080,
             "hostPort": 8080
           }
         ],
         "essential": true,
         "mountPoints": [
           {
             "sourceVolume": "webroot",
             "containerPath": "/srv/www/htdocs",
             "readOnly": true
           }
         ]
       }
     ]
   ```

**Para montar volúmenes desde otro contenedor con `volumesFrom`**

Para las tareas alojadas en instancias de Amazon EC2, puede definir uno o más volúmenes en un contenedor y, a continuación, utilizar el parámetro `volumesFrom` en una definición de contenedor diferente dentro de la misma tarea para montar todos los volúmenes de `sourceContainer` en sus puntos de montaje definidos originalmente. El parámetro `volumesFrom` se aplica a volúmenes definidos en la definición de tarea, y a los que están integrados en la imagen con un Dockerfile.

1. (Opcional) Para compartir un volumen integrado en una imagen, utilice la instrucción `VOLUME` del Dockerfile. En el siguiente ejemplo de Dockerfile se utiliza una imagen `httpd` y, a continuación, se agrega un volumen y se lo monta en `dockerfile_volume` en la raíz de documentos de Apache. Es la carpeta que utiliza el servidor web `httpd`.

   ```
   FROM httpd
   VOLUME ["/usr/local/apache2/htdocs/dockerfile_volume"]
   ```

   Puede crear una imagen con este Dockerfile y enviarla a un repositorio, como Docker Hub, y utilizarla en su definición de tarea. La imagen de ejemplo `my-repo/httpd_dockerfile_volume` que se utiliza en los pasos siguientes se diseñó con el Dockerfile anterior.

1. Cree una definición de tarea que defina los otros volúmenes y puntos de montaje para los contenedores. En esta sección de ejemplo `volumes`, se crea un volumen vacío llamado `empty`, que será administrado por el daemon de Docker. También hay un volumen de host definido denominado `host_etc`. Exporta la carpeta `/etc` en la instancia de contenedor del host.

   ```
   {
     "family": "test-volumes-from",
     "volumes": [
       {
         "name": "empty",
         "host": {}
       },
       {
         "name": "host_etc",
         "host": {
           "sourcePath": "/etc"
         }
       }
     ],
   ```

   En la sección de definiciones de contenedor, cree un contenedor para montar los volúmenes definidos anteriormente. En este ejemplo, el contenedor `web` monta los volúmenes `empty` y `host_etc`. Este es el contenedor que utiliza la imagen creada con un volumen en el Dockerfile.

   ```
   "containerDefinitions": [
       {
         "name": "web",
         "image": "my-repo/httpd_dockerfile_volume",
         "cpu": 100,
         "memory": 500,
         "portMappings": [
           {
             "containerPort": 80,
             "hostPort": 80
           }
         ],
         "mountPoints": [
           {
             "sourceVolume": "empty",
             "containerPath": "/usr/local/apache2/htdocs/empty_volume"
           },
           {
             "sourceVolume": "host_etc",
             "containerPath": "/usr/local/apache2/htdocs/host_etc"
           }
         ],
         "essential": true
       },
   ```

   Cree otro contenedor que utiliza `volumesFrom` para montar todos los volúmenes que están asociados con el contenedor `web`. Todos los volúmenes del contenedor `web` se montan también en el contenedor `busybox`. Esto incluye el volumen especificado en el Dockerfile que se utilizó para crear la imagen `my-repo/httpd_dockerfile_volume`.

   ```
       {
         "name": "busybox",
         "image": "busybox",
         "volumesFrom": [
           {
             "sourceContainer": "web"
           }
         ],
         "cpu": 100,
         "memory": 500,
         "entryPoint": [
           "sh",
           "-c"
         ],
         "command": [
           "echo $(date) > /usr/local/apache2/htdocs/empty_volume/date && echo $(date) > /usr/local/apache2/htdocs/host_etc/date && echo $(date) > /usr/local/apache2/htdocs/dockerfile_volume/date"
         ],
         "essential": false
       }
     ]
   }
   ```

   Cuando esta tarea se ejecuta, los dos contenedores montan los volúmenes y el `command` en el contenedor `busybox` escribe la fecha y la hora en un archivo. Este archivo se denomina `date` en cada una de las carpetas de volumen. Las carpetas se pueden ver en el sitio web mostrado por el contenedor `web`.
**nota**  
Como el contenedor `busybox` ejecuta un comando rápido y, a continuación, se cierra, debe establecerse como `"essential": false` en la definición de contenedor. De no ser así, detiene toda la tarea cuando se cierra.