Definições de tarefa do daemon
Uma definição de tarefa de daemon é o esquema para o seu daemon. Os Daemons Gerenciados do Amazon ECS utilizam um recurso de definição de tarefa de daemon dedicado, distinto das definições de tarefa padrão do Amazon ECS. Você registra uma definição de tarefa de daemon para especificar a imagem do contêiner, os requisitos de recursos e a configuração do seu daemon.
Criação de uma definição de tarefa de daemon
Você pode criar uma definição de tarefa de daemon usando o Console de gerenciamento da AWS ou a AWS CLI.
Utilização do Console de gerenciamento da AWS
-
Abra o console do Amazon ECS. Na barra de navegação à esquerda, selecione Definições de tarefas de daemon.
-
Escolha Criar uma nova definição de tarefa de daemon.
-
Para Família de definições de tarefas de daemon, insira um nome exclusivo. O nome pode conter até 255 caracteres alfanuméricos, hífens e sublinhados.
-
(Opcional) Em Perfil da tarefa, escolha um perfil do IAM que conceda permissões às aplicações em execução nos seus contêineres. Deixe esse campo em branco se seus contêineres não chamam APIs da AWS.
-
(Opcional) Em Perfil de execução de tarefas, selecione
ecsTaskExecutionRole. Para o Amazon ECS, é necessário que o perfil tenha acesso para baixar imagens de contêineres e publicar logs. -
(Opcional) Em Tamanho da tarefa, especifique a CPU e a memória a serem reservadas para o seu daemon. Por exemplo, memória
0.25 vCPUe512 MB. -
Configure os detalhes do seu contêiner:
-
Nome do contêiner: insira um nome para o seu contêiner. O nome pode conter até 255 caracteres alfanuméricos, hífens e sublinhados.
-
Contêiner essencial: selecione Sim. Para cada definição de tarefa de daemon, é necessário pelo menos um contêiner essencial. Se um contêiner essencial apresentar falha, o Amazon ECS interrompe toda a tarefa.
-
URI da imagem: insira o URI da imagem do Docker. Você pode pesquisar imagens do Amazon ECR ou usar imagens públicas do Docker Hub ou de outros registros.
-
-
(Opcional) Configure a alocação de recursos, a verificação de integridade, as variáveis de ambiente, a coleta de logs e as etiquetas conforme necessário.
-
Verifique sua configuração e escolha Criar.
Como usar o AWS CLI
Registre uma definição de tarefa de daemon criando um arquivo JSON e usando o comando register-daemon-task-definition.
A seguir, um exemplo de arquivo JSON:
{ "family": "my-daemon-task", "containerDefinitions": [ { "name": "daemon-container", "image": "public.ecr.aws/docker/library/busybox:latest", "essential": true, "command": ["sh", "-c", "while true; do echo 'Daemon running'; sleep 30; done"], "memoryReservation": 512 } ] }
Execute o seguinte comando para registrar a definição da tarefa do daemon:
aws ecs register-daemon-task-definition --cli-input-json file://daemon-taskdef.json
Parâmetros de definição da tarefa do daemon
Você pode usar os seguintes parâmetros ao registrar uma definição de tarefa de daemon.
Parâmetros obrigatórios
-
family: o nome da família de definições de tarefas. Isso agrupa várias revisões da mesma definição de tarefa do daemon. -
containerDefinitions: uma matriz de objetosDaemonContainerDefinitionque descrevem os contêineres em sua tarefa daemon.
Parâmetros opcionais
-
cpu: unidades de CPU por tarefa como uma string (por exemplo,"256"). -
memory: memória por tarefa em MiB como uma string (por exemplo,"512"). -
taskRoleArn: o ARN do perfil do IAM que concede permissões aos contêineres na sua tarefa de daemon. -
executionRoleArn: o ARN do perfil do IAM que o agente de contêineres do Amazon ECS utiliza para realizar chamadas de API AWS em seu nome (por exemplo, para baixar imagens do Amazon ECR). -
volumes: um matriz de objetosDaemonVolume. Os volumes daemon suportam apenas montagens de vinculação comhostesourcePath. As definições de tarefas do Daemon não são compatíveis com Amazon EBS, Amazon EFS, FSx for Windows File Server, volumes do Docker ou armazenamento efêmero. -
tags: uma matriz de pares chave-valor para a marcação da definição da tarefa do seu daemon. -
pidMode: controla o modo de namespace PID para o daemon. -
ipcMode: controla o modo de namespace IPC para o daemon.
Modo de rede
Os daemons utilizam um modo de rede especial daemon_bridge que o Amazon ECS configura automaticamente. Não é possível especificar um modo de rede na definição da tarefa do daemon. Todos os daemons em uma instância compartilham um único namespace de rede e podem ser acessados localmente por meio de um endereço IP estático da ponte de daemons (169.254.172.2 para IPv4 ou fd00:ec2::172:2 para IPv6). As aplicações (que não sejam daemons) podem se comunicar com os daemons nesse endereço sem necessidade de configuração adicional de rede.
Como os daemons são executados em um namespace de rede separado das tarefas de aplicações, as tarefas que não são daemons não precisam se preocupar com conflitos de porta com os daemons. No entanto, como todas as tarefas de daemon compartilham o mesmo namespace, os daemons na mesma instância não podem se conectar à mesma porta. Ao realizar a implantação de vários daemons, certifique-se de que cada um utilize uma porta exclusiva.
Recursos privilegiados
Nas instâncias gerenciadas do Amazon ECS, os daemons oferecem suporte a recursos privilegiados do Linux para operações em nível de sistema. Para funcionar corretamente, os agentes de segurança, as ferramentas de monitoramento de rede e os agentes de observabilidade necessitam de acesso ao nível do kernel.
Você pode conceder permissões de duas maneiras:
Modo com privilégios totais concede todos os recursos do Linux ao contêiner. Use isso quando o acesso ao sistema for necessário para seu agente:
{ "containerDefinitions": [{ "name": "security-daemon", "image": "my-security-agent:latest", "privileged": true }] }
Capacidades individuais concede apenas as permissões de que seu daemon precisa, seguindo o princípio do privilégio mínimo. Use o campo linuxParameters.capabilities para adicionar recursos individuais, como SYS_ADMIN, NET_ADMIN, SYS_PTRACE, BPF e PERFMON:
{ "containerDefinitions": [{ "name": "monitoring-daemon", "image": "my-monitoring-agent:latest", "linuxParameters": { "capabilities": { "add": ["NET_ADMIN", "SYS_PTRACE"] } } }] }
Compartilhamento de namespace PID e IPC
Em instâncias gerenciadas do Amazon ECS, os daemons oferecem suporte ao compartilhamento de namespaces PID e IPC para permitir casos de uso como agentes de segurança, ferramentas de monitoramento e daemons de observabilidade que precisam de visibilidade dos processos de tarefas do aplicativo ou dos recursos de IPC.
pidMode-
Tipo: string
Obrigatório: não
Valores válidos:
none|sharedPadrão:
noneO modo de namespace PID para o daemon. Se
nonefor especificado ou nenhum valor for fornecido, o daemon será executado com seu próprio namespace PID, isolado de outras tarefas. Sesharedfor especificado, o daemon ingressará no namespace PID do host, tornando-o acessível a tarefas não pertencentes a daemons que usempidMode: "host"ou outros daemons que usempidMode: "shared". ipcMode-
Tipo: string
Obrigatório: não
Valores válidos:
none|sharedPadrão:
noneO modo de namespace IPC para o daemon. Se
nonefor especificado ou nenhum valor for fornecido, o daemon será executado com seu próprio namespace IPC, isolado de outras tarefas. Sesharedfor especificado, o daemon ingressará no namespace IPC do host, tornando-o acessível a tarefas não pertencentes a daemons que usemipcMode: "host"ou outros daemons que usemipcMode: "shared".
O exemplo a seguir mostra uma definição de tarefa de daemon com o compartilhamento de namespace PID e IPC ativado:
{ "family": "my-monitoring-daemon", "pidMode": "shared", "ipcMode": "shared", "containerDefinitions": [ { "name": "monitoring-agent", "image": "public.ecr.aws/my-company/monitoring-agent:latest", "essential": true } ] }
Para compartilhar o namespace PID com um daemon que tenha pidMode definido como shared, uma tarefa que não pertence ao daemon precisa especificar pidMode: "host" em sua definição de tarefa. Isso permite que os contêineres da tarefa visualizem os processos do daemon e possibilita casos de uso como monitoramento de processos e entrega de sinais.
Para compartilhar o namespace IPC com um daemon que tenha ipcMode definido como shared, uma tarefa que não pertence ao daemon precisa especificar ipcMode: "host" em sua definição de tarefa. Isso permite que os contêineres da tarefa acessem os recursos IPC do daemon, como segmentos de memória compartilhada e filas de mensagens.
Volumes
Os Daemons gerenciados oferecem suporte a montagens bind utilizando volumes do host com uma especificação sourcePath. Isso permite que os contêineres de daemon montem diretórios do host para acessar logs, métricas e informações do sistema na instância do Amazon EC2 subjacente. Agentes de coleta de logs, exportadores de métricas e scanners de segurança costumam utilizar isso para obter visibilidade dos dados no nível do host.
A definição da tarefa do daemon suporta especificações de volume do host com sourcePath. Os volumes do Daemon permanecem ativos durante todo o ciclo de vida da instância do contêiner subjacente.
nota
Volumes do Amazon EBS, volumes do Amazon EFS, volumes do FSx for Windows File Server, volumes do Docker e armazenamento efêmero não são compatíveis com definições de tarefas de daemon.
nota
Os daemons não suportam o compartilhamento de volumes entre si. Cada daemon opera com sua própria configuração de volume independente.
O exemplo a seguir mostra um daemon coletor de logs com uma montagem de vinculação:
{ "containerDefinitions": [{ "name": "log-collector", "image": "fluent/fluentd:latest", "mountPoints": [{ "sourceVolume": "var-log", "containerPath": "/var/log" }] }], "volumes": [{ "name": "var-log", "host": { "sourcePath": "/var/log" } }] }
Parâmetros de contêineres compatíveis
As definições de contêineres de daemon suportam os seguintes parâmetros:
-
image(necessário): URI da imagem do contêiner -
name(necessário): Nome do contêiner -
cpu: unidades de CPU reservadas para o contêiner -
memory/memoryReservation: limites rígidos e flexíveis de memória -
essential: se o contêiner é essencial (padrão: verdadeiro) -
command/entryPoint: substituir o comando do contêiner ou o ponto de entrada -
environment/environmentFiles/secrets: configuração do ambiente -
privileged: execute o contêiner no modo privilegiado -
user: usuário para executar o contêiner como -
workingDirectory: diretório de trabalho dentro do contêiner -
readonlyRootFilesystem: montar o sistema de arquivos raiz como somente leitura -
mountPoints: pontos de montagem de volume (montagens bind apenas com host e sourcePath) -
logConfiguration: configuração de log (compatível com awslogs, splunk e awsfirelens) -
healthCheck: configuração da verificação de integridade do contêiner -
dependsOn: dependências de inicialização do contêiner -
ulimits: limites de recursos -
systemControls: parâmetros do kernel -
linuxParameters.capabilities: recursos do Linux para adicionar ou remover -
linuxParameters.initProcessEnabled: executar um processo de inicialização no contêiner -
repositoryCredentials: credenciais para registros privados -
restartPolicy: política de reinicialização de contêineres