Eu tenho um processo Python dockerized que um cliente gostaria de executar uma ou duas vezes por mês. Ele chama várias APIs do Google e armazena os resultados em uma Planilha do Google. Não aceita solicitações de rede. Quero fornecer um "botão mágico" que gire o contêiner do Docker e depois desligue tudo.
Alguns antecedentes: eu já havia implantado isso em uma micro instância do AWS EC2 via Docker Cloud. Meu cliente obteve uma conta do Docker Cloud e conseguiu executar o contêiner sob demanda, de forma relativamente indolor. Existem dois problemas com este fluxo de trabalho:
- A instância do EC2 provisionada (host do Docker) estava em execução 24/7, independentemente de o contêiner do Docker ter sido executado ou não. Isso ficou caro.
- A nuvem do Docker foi desativada há um mês.
Alternativas parecem ser os serviços do Google e da AWS Kubernetes. Minha reserva é que eles serão muito complicados para o meu cliente usar. Adendo?
Respostas:
A AWS oferece agora o fargate, que é gerenciado por eles em vez de ser um serviço como o ECS, para o qual você executou os servidores e eles gerenciam o plano de controle. O Fargate é basicamente um ECS "sem servidor". Você pode usar um cloudwatch agendado até mesmo para executar algo ocasionalmente em um agendamento em um cluster do ECS do fargate. Portanto, você está pagando apenas pelo que está usando. Algo a considerar é que o fargate é um pouco mais caro do que o ECS executando em sua própria instância do EC2, mas se você estiver executando com frequência, provavelmente verá uma economia bastante marginal.
Outra opção seria automatizar algo semelhante. Portanto, crie um cluster ECS com um ASG fazendo o backup e ajuste a escala para atender à demanda do ECS e use o cloudwatch para iniciar o contêiner. O ECS pode ser escalado para cima e para baixo, mas isso pode ser complicado, porque esse método geralmente é usado para dimensionar automaticamente os clusters do ECS com base nos gatilhos do cloutwatch; portanto, você pode precisar entrar no cloudwatch e possivelmente hackear um script lambda, já que você é tecnicamente não usá-lo da maneira que se destina. No final, isso provavelmente seria o mais econômico, mas no seu caso a economia de custos poderia ser insignificante.
Na minha opinião, Kubernetes é um martelo de dez toneladas que você usaria para pendurar uma foto na parede. É um exagero.
Você pode explorar essas duas opções e ver se elas são econômicas e fáceis de gerenciar. Outra orquestração de contêiner costuma ser um exagero, o ECS tem a vantagem (geralmente uma desvantagem) de ser estúpido e simples e você paga muito pouco e basicamente não tem custos operacionais para o plano de controle.
fonte
A maneira mais barata é usar o Registro de contêineres do Heroku .
É totalmente gratuito, fácil de usar e implantar (você nem precisa da CLI heroku, basta encaixar a imagem no dock.heroku.com com seu token de autenticação)
Pode não ser o melhor, mas com base nos seus comentários, acho que deve ser bom para você, veja os contras aqui .
Outra alternativa barata é hyper.sh .
fonte
Você pode misturar o poderoso Zappa e Hug para converter seu código em uma função do AWS Lambda sem servidor, adicionando apenas um decorador à função principal do processo python
Depois disso, você poderá implantar no AWS Lambda
zappa deploy prod
e precisará chamar o URL retornado duas vezes por mês.fonte
Embora eu normalmente concorde com as outras respostas de que o Kubernetes é um exagero, o KubeSail simplifica o máximo possível, a fim de facilitar a execução de tarefas como a sua. Há um nível gratuito que deve permitir que você execute seu trabalho indefinidamente. Você só precisa fazer login no GitHub, obter sua configuração do Kube e, em seguida, você pode usar o seguinte:
Apenas salve o descrito acima em
my-job.yaml
, substituindoimage: asciimo/my-python-image
pelo nome da sua imagem no dockerhub (ou outro registro) e, em seguida, executeSe você quiser saber mais sobre tarefas, os documentos do Kubernetes contêm muito mais informações e opções: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
Divulgação completa, sou um dos fundadores da KubeSail
fonte
O serviço ECS da Amazon é realmente simples e permite agendar tarefas de contêiner
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html
fonte
O módulo ec2 Ansible exigiu a funcionalidade (instâncias de inicialização, executa algumas tarefas e as encerra) imediatamente . E ainda tem exemplo de manual.
fonte