Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] ECS com Docker Hub

Olá!

Estou com dificuldades para rodar minha imagem privada hospedada no Docker Hub no ECS, todos os exemplos que eu encontrei são com imagens públicas ou com imagens hospedadas no ECR, tentei configurar de várias formas meu login e senha utilizando AWS Secrets Manager mas não obtive sucesso. Poderiam me mostrar um exemplo?

4 respostas

Olá, Deise.

Tudo bem?

Entendo que você esteja enfrentando dificuldades para utilizar uma imagem privada do Docker Hub no Amazon ECS.

Primeiro, é importante garantir que você está armazenando suas credenciais do Docker Hub de forma segura utilizando o AWS Secrets Manager. Aqui está um exemplo básico de como você pode configurar isso:

  1. Crie um novo segredo no AWS Secrets Manager:

    • Vá até o AWS Secrets Manager e clique em "Store a new secret".
    • Selecione "Other type of secrets" (pois suas credenciais não se encaixam nas categorias pré-definidas).
    • Insira as informações de chave/valor:
      • username: seu nome de usuário no Docker Hub
      • password: sua senha no Docker Hub
    • Escolha um nome para o segredo e salve.
  2. Modificar a definição da tarefa do ECS para usar o segredo:

    • No arquivo de definição da tarefa (task definition), você precisa adicionar a referência ao segredo que contém suas credenciais. Isso geralmente é feito na seção secrets do container definition. Aqui está um exemplo de como isso pode ser feito:
    "containerDefinitions": [
        {
            "name": "meu-container",
            "image": "meu_usuario_dockerhub/minha_imagem_privada:tag",
            "secrets": [
                {
                    "name": "DOCKERHUB_USERNAME",
                    "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:nome-do-seu-segredo-username"
                },
                {
                    "name": "DOCKERHUB_PASSWORD",
                    "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:nome-do-seu-segredo-password"
                }
            ]
        }
    ]
    
    • Substitua region, account-id, nome-do-seu-segredo-username e nome-do-seu-segredo-password pelos valores apropriados.
  3. Configurar o ECS Agent para autenticar no Docker Hub:

    • Certifique-se de que o ECS agent esteja configurado para usar as credenciais do Secrets Manager para puxar imagens privadas. Isso geralmente é gerenciado automaticamente pelo ECS, mas é bom verificar se a versão do seu ECS Agent suporta essa funcionalidade.

Após configurar esses passos, tente rodar sua tarefa novamente. Se tudo estiver configurado corretamente, o ECS deverá ser capaz de puxar a imagem privada do Docker Hub usando as credenciais armazenadas de forma segura no Secrets Manager.

Nesse exemplo de código que deixei, não esqueça de trocar as credenciais pelas suas.

Espero que essas instruções ajudem a resolver o problema. Qualquer dúvida manda aqui. Bons estudos!

Olá!

Consegui fazer o acesso colocando o usarname e o password no mesmo secret, e atualizando a política para o role que estava executando a tarefa, mas agora acho que estou com um problema para rodar o container, é um aplicação angular que estou tentando rodar, quando eu acesso o IP gerado na execução da tarefa pelo cluster, nada aparece, segue abaixo a configuração da task:

{
    "taskDefinitionArn": "arn:aws:ecs:us-east-1:XXXXXXX:task-definition/XXXXX-app-task:10",
    "containerDefinitions": [
        {
            "name": "XXXXXXX-app",
            "image": "XXXXXX/XXXXX-app:latest",
            "repositoryCredentials": {
                "credentialsParameter": "arn:aws:secretsmanager:us-east-1:XXXXXX:secret:DOCKER_LOGIN-NZXZbn"
            },
            "cpu": 0,
            "portMappings": [
                {
                    "name": "XXXXX-app-4200-tcp",
                    "containerPort": 4200,
                    "hostPort": 4200,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "/ecs/XXXXXX-app-task",
                    "awslogs-region": "us-east-1",
                    "awslogs-stream-prefix": "ecs"
                },
                "secretOptions": []
            },
            "systemControls": []
        }
    ],
    "family": "XXXXX-app-task",
    "executionRoleArn": "arn:aws:iam::XXXXXX:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "revision": 10,
    "volumes": [],
    "status": "ACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "ecs.capability.private-registry-authentication.secretsmanager"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "1024",
    "memory": "3072",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    },
    "registeredAt": "2024-05-09T01:19:54.484Z",
    "registeredBy": "arn:aws:iam::XXXXXX:root",
    "tags": []
}

Parece que sua configuração da tarefa está correta em relação à definição do contêiner e ao mapeamento de porta. No entanto, alguns pontos podem ser verificados para tentar resolver o problema de não conseguir acessar sua aplicação Angular após iniciar a tarefa no ECS.

Os principais pontos para verificar inicialmente são:

  1. Verificação da inicialização da aplicação Angular dentro do contêiner: Garantir que a aplicação Angular esteja sendo iniciada corretamente dentro do contêiner. Se a aplicação não estiver sendo iniciada, não haverá nada para acessar, independentemente de outras configurações estarem corretas.

  2. Verificação do mapeamento de porta e do grupo de segurança: Certifique-se de que o mapeamento de porta no contêiner esteja correto e de que o grupo de segurança associado permita o tráfego na porta específica utilizada pela aplicação Angular. Se a porta não estiver corretamente mapeada ou o grupo de segurança não estiver configurado adequadamente, o acesso à aplicação será bloqueado.

  3. Verificação das permissões de segurança: É importante que as políticas de permissões associadas ao papel ECS Task Execution Role permitam que o contêiner se comunique com outros recursos necessários. Se as permissões estiverem incorretas, a aplicação pode ser incapaz de acessar recursos externos, como bancos de dados ou APIs.

Ao revisar esses pontos, você deve ser capaz de identificar e resolver qualquer problema que esteja impedindo sua aplicação Angular de ser executada corretamente no ECS. Se você ainda estiver enfrentando problemas, não hesite em compartilhar mais detalhes para que eu possa ajudá-lo melhor.

Qualquer novidade ou dúvida manda aqui.

solução!

Olá!

Consegui fazer funcionar, faltava liberar a porta 80 no security group, obrigada!