Estou tentando implantar uma docker
imagem de contêiner para AWS
usar ECS
, mas a instância EC2 não está sendo criada. Eu vasculhei a internet em busca de uma explicação de por que estou recebendo o seguinte erro:
"Ocorreu um erro de cliente (InvalidParameterException) ao chamar a operação RunTask: Nenhuma instância de contêiner foi encontrada em seu cluster."
Aqui estão meus passos:
1. Enviei uma imagem docker do Ubuntu para meu repositório Amazon ECS.
2. Registrou uma definição de tarefa ECS:
aws ecs register-task-definition --cli-input-json file://path/to/my-task.json
3. Executou a tarefa:
aws ecs run-task --task-definition my-task
Ainda assim, ele falha.
Aqui está minha tarefa:
{
"family": "my-task",
"containerDefinitions": [
{
"environment": [],
"name": "my-container",
"image": "my-namespace/my-image",
"cpu": 10,
"memory": 500,
"portMappings": [
{
"containerPort": 8080,
"hostPort": 80
}
],
"entryPoint": [
"java",
"-jar",
"my-jar.jar"
],
"essential": true
}
]
}
Também tentei usar o console de gerenciamento para configurar um cluster e serviços, mas recebo o mesmo erro. Como faço para configurar o cluster para ter instâncias ec2 e que tipo de instâncias de contêiner devo usar? Para começar, pensei que todo esse processo fosse criar as instâncias do EC2 !!
fonte
Respostas:
Eu descobri isso depois de mais algumas horas de investigação. Amazon, se você estiver ouvindo, deve declarar isso em algum lugar em seu console de gerenciamento ao criar um cluster ou adicionar instâncias ao cluster:
Aqui está o truque:
1. Vá para o Painel do EC2 e clique no
Launch Instance
botão.2. Em
Community AMIs
, Pesquiseecs-optimized
e selecione aquele que melhor se adapta às necessidades do seu projeto. Qualquer um vai funcionar. Clique próximo.3. Quando você chegar a Configurar Detalhes da Instância, clique em
create new IAM role link
e crie uma nova função chamadaecsInstanceRole
.4. Anexe a
AmazonEC2ContainerServiceforEC2Role
política a essa função.5. Em seguida, conclua a configuração de sua instância ECS.
NOTA: Se você estiver criando um servidor da web, deverá criar um securityGroup para permitir o acesso à porta 80.
Depois de alguns minutos, quando a instância for inicializada e em execução, você poderá atualizar a guia Instâncias do ECS que está tentando adicionar também.
fonte
EC2
como o tipo de inicialização quando recebeu este erro ...#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
nosAdvanced Details -> User data
se você tiver seu próprio cluster padrão, não. Caso contrário, a instância EC2 recém-criada criará o cluster padrão.Atualmente, a interface da web do Amazon AWS pode criar instâncias automaticamente com o AMI correto e o nome correto para que seja registrado no cluster correto.
Mesmo que todas as instâncias tenham sido criadas pela Amazon com as configurações corretas, minhas instâncias não eram registradas. Nos fóruns da Amazon AWS , encontrei uma pista. Acontece que seus clusters precisam de acesso à Internet e, se seu VPC privado não tiver um gateway de Internet, os clusters não poderão se conectar.
O conserto
No painel VPC, você deve criar um novo gateway de Internet e conectá-lo ao VPC usado pelo cluster. Depois de anexado, você deve atualizar (ou criar) a tabela de rota para o VPC e adicionar como última linha
Onde igw-24b16740 é o nome do seu gateway de Internet recém-criado.
fonte
aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID
- posso sugerir adicionar isso à resposta?Eu tive esse problema ao usar o Fargate. Consertei quando defini explicitamente
launchType="FARGATE"
ao chamarrun_task
.fonte
--launch-type FARGATE
Outras verificações sugeridas
Selecionar o AMI sugerido que foi especificado para a região determinada resolveu meu problema.
Para descobrir o AMI - marque Launching a Amazon ECS Container Instance .
Por padrão, todas as instâncias ec2 são adicionadas ao cluster padrão. Portanto, o nome do cluster também é importante.
Consulte o ponto 10 em Launching an Amazon ECS Container Instance .
Mais informações disponíveis neste tópico .
fonte
Para o caso de outra pessoa estar bloqueada com este problema como eu ... Já tentei de tudo aqui e não funcionou.
Além do que foi falado aqui em relação ao Papel da Instância EC2, como comentei aqui , no meu caso só funcionou se eu ainda configurasse a Instância EC2 com informações simples. Usando os dados do usuário, um script inicial como este:
Informar o nome do cluster ECS relacionado criado neste arquivo de configuração do ecs resolveu meu problema. Sem essa configuração, o log do agente do ECS na instância do EC2 estava mostrando um erro que não era possível se conectar ao ECS, fazendo isso eu tenho a instância do EC2 visível para o cluster do ECS.
Depois de fazer isso, poderia obter a instância EC2 disponível para meu cluster EC2:
A documentação da AWS disse que esta parte é opcional, mas no meu caso, não funcionou sem esta configuração "opcional".
fonte
Se você se deparou com esse problema depois de criar o cluster
Vá para a instância ECS na lista de instâncias EC2 e verifique a função IAM que você atribuiu à instância. Você pode identificar as instâncias facilmente com o nome da instância que começa com
ECS Instance
Depois disso, clique na função IAM e ele o direcionará para o console do IAM. Selecione a
AmazonEC2ContainerServiceforEC2Role
política na lista de políticas de permissão e salve a função.Suas instâncias estarão disponíveis no cluster logo após salvá-lo.
fonte
O verdadeiro problema é a falta de permissão. Contanto que você crie e atribua uma função IAM com permissão AmazonEC2ContainerServiceforEC2Role, o problema desaparece.
fonte
Outra possível causa que encontrei foi a atualização de meu cluster AMI ECS para um "Amazon Linux 2" AMI em vez de um "Amazon Linux AMI", o que fez com que meu script de inicialização user_data EC2 não funcionasse.
fonte
Quando isso acontecer, você precisa observar o seguinte:
AmazonEC2ContainerServiceforEC2Role
política gerenciada anexada a elaecs-optimized
(você pode verificar isso no painel EC2)Na maioria das vezes, esse problema aparece devido ao VPC configurado incorretamente. De acordo com a documentação :
CITAÇÃO: Se você não tiver um ponto de extremidade VPC de interface configurado e suas instâncias de contêiner não tiverem endereços IP públicos, eles devem usar a conversão de endereço de rede (NAT) para fornecer esse acesso.
Esses são os motivos pelos quais você não vê as instâncias do EC2 listadas no painel do ECS.
fonte