Uso de montagens vinculadas com o Amazon ECS - Amazon Elastic Container Service

Uso de montagens vinculadas com o Amazon ECS

Com montagens vinculadas, um arquivo ou diretório em um host, como uma instância do Amazon EC2, é montado em um contêiner. As montagens bind são compatíveis com tarefas hospedadas em instâncias do Fargate e do Amazon EC2. Montagens vinculadas estão associadas ao ciclo de vida do contêiner que as usa. A partir do momento em que todos os contêineres que utilizam uma montagem bind forem interrompidos, por exemplo, quando uma tarefa é interrompida, os dados serão removidos. Para tarefas hospedadas em instâncias do Amazon EC2, os dados podem ser vinculados ao ciclo de vida da instância do Amazon EC2 do host especificando um host e um valor opcional de sourcePath na definição de tarefa. Para obter mais informações, consulte Montagens bind na documentação do Docker.

Veja a seguir alguns casos de uso comuns de montagens bind.

  • Para fornecer um volume de dados vazio para ser montado em um ou mais contêineres.

  • Para montar um volume de dados de host em um ou mais contêineres.

  • Para compartilhar um volume de dados de um contêiner de origem com outros contêineres na mesma tarefa.

  • Para expor um caminho e seu conteúdo de um Dockerfile para um ou mais contêineres.

Considerações quando forem usadas montagens bind

Ao usar montagens bind, considere o seguinte.

  • Por padrão, as tarefas hospedadas no AWS Fargate usando a versão da plataforma 1.4.0 ou posterior (Linux) ou 1.0.0 ou posterior (Windows) recebem, no mínimo, 20 GiB de armazenamento temporário para montagens vinculadas. É possível aumentar a quantidade total de armazenamento temporário, até um máximo de 200 GiB, com a especificação do parâmetro ephemeralStorage na definição da tarefa.

  • Para expor arquivos de um Dockerfile a um volume de dados quando uma tarefa é executada, o plano de dados do Amazon ECS procura uma diretiva VOLUME. Se o caminho absoluto especificado na diretiva VOLUME é o mesmo que o containerPath especificado na definição de tarefa, os dados no caminho da diretiva VOLUME são copiados para o volume de dados. No exemplo de Dockerfile a seguir, um arquivo denominado examplefile do diretório /var/log/exported é gravado no host e, em seguida, montado no contêiner.

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

    Por padrão, as permissões de volume são definidas como 0755 e o proprietário como root. É possível personalizar essas permissões no Dockerfile. O exemplo a seguir define o proprietário do diretório 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 tarefas hospedadas em instâncias do Amazon EC2, quando umhost e sourcePath não são especificados, o daemon do Docker gerencia a montagem bind para você. Quando nenhum contêiner fizer referência a essa montagem bind, o serviço de limpeza de tarefas do agente de contêiner do Amazon ECS acabará excluindo-a. Isso ocorre por padrão três horas após o encerramento do contêiner. Porém, é possível configurar essa duração com a variável de agente ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION. Para obter mais informações, consulte Configuração do agente de contêiner do Amazon ECS. Se você precisar que esses dados persistam além do ciclo de vida do contêiner, especifique um valor sourcePath para a montagem bind.

  • Para tarefas hospedadas em instâncias gerenciadas do Amazon ECS, partes do sistema de arquivos raiz são somente de leitura. As montagens de ligação de leitura/gravação devem utilizar diretórios graváveis, como /var para dados persistentes ou /tmp para dados temporários. A tentativa de criar montagens vinculadas de leitura/gravação em outros diretórios faz com que a tarefa não seja iniciada, gerando um erro semelhante ao seguinte:

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

    Montagens de associação somente leitura (configuradas com "readOnly": true no parâmetro mountPoints) podem apontar para qualquer diretório acessível no host.

    Para visualizar uma lista completa dos caminhos graváveis, você pode executar uma tarefa em uma Instância Gerenciada do Amazon ECS e usar o comando para inspecionar a tabela de montagens da instância. Crie uma definição de tarefa com as seguintes configurações para acessar o sistema de arquivos do host:

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

    Em seguida, execute os seguintes comandos dentro do contêiner:

    # 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

    A configuração privileged concede ao contêiner recursos estendidos no host, equivalentes ao acesso root. Neste exemplo, ele é utilizado para examinar a tabela de montagens do host para fins de diagnóstico. Para obter mais informações, consulte Evitar executar contêineres como privilegiados (Amazon EC2).

    Para obter mais informações sobre como executar comandos de forma interativa em contêineres, consulte Monitoramento de contêineres do Amazon ECS com o ECS Exec.