Eu desenvolvi um aplicativo .NET MVC e comecei a brincar com a AWS e implantá-lo por meio do Visual Studio Toolkit. Implantei com sucesso o aplicativo usando a opção Elastic Beanstalk no kit de ferramentas.
Conforme eu repassava os tutoriais para implantar aplicativos .NET no AWS com o kit de ferramentas, percebi que há tutoriais para implantar com Elastic Beanstalk e CloudFormation . Qual é a diferença entre esses dois?
Pelo que posso dizer, parece que ambos estão essencialmente fazendo a mesma coisa - tornando mais fácil implantar seu aplicativo na nuvem AWS (configurar instâncias EC2, balanceador de carga, escalonamento automático, etc). Tentei ler sobre os dois, mas não consigo entender nada além de um monte de palavras da moda que soam como a mesma coisa para mim. Eu até encontrei um FAQ no site da AWS que deveria responder exatamente a essa pergunta, mas eu realmente não entendo.
Devo usar um ou outro? Ambos?
Respostas:
Na verdade, eles são muito diferentes. O Elastic Beanstalk visa tornar a vida dos desenvolvedores mais fácil. O CloudFormation tem como objetivo facilitar a vida dos engenheiros de sistemas.
Elastic Beanstalk é uma camada semelhante a PaaS sobre os serviços IaaS da AWS que abstrai as instâncias EC2 subjacentes, Elastic Load Balancers, grupos de escalonamento automático, etc. Isso torna muito mais fácil para os desenvolvedores, que não querem lidar com todos as coisas dos sistemas, para que seu aplicativo seja rapidamente implantado na AWS. É muito semelhante a outros produtos PaaS, como Heroku, EngineYard, Google App Engine, etc. Com o Elastic Beanstalk, você não precisa entender como qualquer uma das mágicas subjacentes funciona.
CloudFormation, por outro lado, não faz nada automaticamente. É simplesmente uma maneira de definir todos os recursos necessários para implantação em um arquivo JSON enorme. Portanto, um modelo CloudFormation pode realmente criar dois ambientes ElasticBeanstalk (produção e teste), alguns clusters ElasticCache, uma tabela DyanmoDB e, em seguida, o DNS adequado no Route53. Em seguida, carrego este modelo no AWS, saio e, 45 minutos depois, tudo está pronto e esperando. Como é apenas um arquivo JSON de texto simples, posso colocá-lo no meu controle de origem, o que fornece uma ótima maneira de criar versões de minhas implantações de aplicativos. Ele também garante que eu tenha uma configuração "boa" repetível e que possa ser implantada rapidamente em uma região diferente.
fonte
Para começar a implantar rapidamente um aplicativo da web .NET padrão, o Elastic Beanstalk é o serviço certo para você.
AWS CloudFormation : "Provisionamento orientado a modelos"
CloudFormation (CFn) é uma abstração leve e de baixo nível sobre APIs AWS existentes. Usando um documento de modelo JSON / YAML estático , você declara um conjunto de recursos (como uma instância EC2 ou um intervalo S3 ) que correspondem às operações CRUD nas APIs da AWS.
Quando você cria uma pilha CloudFormation, CloudFormation chama as APIs correspondentes para criar os Recursos associados, e quando você exclui uma pilha, CloudFormation chama as APIs correspondentes para excluí-los. A maioria (mas não todas) das APIs da AWS são compatíveis.
AWS Elastic Beanstalk : "Web Apps Made Easy"
Elastic Beanstalk (EB) é uma 'plataforma como serviço' (PaaS) gerenciada de nível superior para hospedar aplicativos da web, semelhante em escopo ao Heroku . Em vez de lidar com recursos de baixo nível da AWS diretamente, o EB fornece uma plataforma totalmente gerenciada onde você cria um ambiente de aplicativo usando uma interface da web , seleciona qual plataforma seu aplicativo usa, cria e carrega um pacote de origem e o EB trata do resto.
Usando EB, você obtém todos os tipos de recursos integrados para monitorar seu ambiente de aplicativo e implantar novas versões de seu aplicativo .
Nos bastidores, o EB usa CloudFormation para criar e gerenciar os vários recursos AWS do aplicativo. É possível customizar e estender o ambiente EB padrão incluindo CloudFormation Resources em um arquivo de configuração EB implementado com seu aplicativo.
Conclusão
Se seu aplicativo é um aplicativo de nível da web padrão usando uma das plataformas suportadas do Elastic Beanstalk, e você deseja uma hospedagem fácil de gerenciar e altamente escalável para seu aplicativo, use o Elastic Beanstalk .
Se vocês:
em seguida, use CloudFormation diretamente e evite a camada de configuração adicionada do Elastic Beanstalk.
fonte
Formação de nuvem é um serviço que permite implantar serviços da AWS. Você cria um arquivo de modelo que descreve quais serviços você deseja. Quando você implanta esse modelo, o Cloud Formation cria os recursos para você como um "pacote". Todos os recursos que você definiu em seu modelo são iniciados e encerrados juntos. Exemplos de tipos de recursos que podem ser criados com o Cloud Formation são: S3, instâncias EC2, AutoScaling, DynamoDb, etc. Para EC2, o Cloud Formation também oferece a capacidade de usar scripts "cfn-init"; que pode ser usado em conjunto com o modelo para inicializar suas instâncias.
Elastic Beanstalk usa modelos de formação de nuvem e scipts para: 1. Criar um balanceador de carga e grupo de escalonamento automático, 2. Copiar seu código para S3, 3. inicializar uma instância Ec2 para baixar o código de S3 e implantá-lo.
A formação de nuvem não é tão fácil de usar quanto EB, mas é muito mais poderosa, porque você pode criar recursos diferentes de instâncias EC2, controlar como o script cfn-init e etc.
fonte
Existem outras diferenças dignas de nota. Elastic beanstalk é projetado como um contêiner para um único aplicativo. Tenho um conjunto de vários sites e serviços, mas achei muito difícil implantar vários sites com beanstalk e fui aconselhado, após várias tentativas, pela ajuda da AWS a usar a formação de nuvem nesta situação, pois tem a flexibilidade extra. Há um artigo realmente útil sobre como inicializar a formação da nuvem da AWS e atualizar um site em execução aqui, que é muito mais claro do que as páginas da AWS. Ainda tentando descobrir se podemos implantar do VS direto para o modelo de formação de nuvem armazenado no S3 e fazer com que ele seja atualizado automaticamente como beanstalk ...
fonte
Esses serviços são projetados para se complementar. O AWS Elastic Beanstalk fornece um ambiente para implementar e executar facilmente aplicativos na nuvem. Ele é integrado às ferramentas do desenvolvedor e fornece uma experiência completa para você gerenciar o ciclo de vida de seus aplicativos. O AWS CloudFormation é um mecanismo de provisionamento conveniente para uma ampla variedade de recursos da AWS e de terceiros. Ele oferece suporte às necessidades de infraestrutura de muitos tipos diferentes de aplicativos, como aplicativos corporativos existentes, aplicativos legados, aplicativos desenvolvidos com uma variedade de recursos da AWS e soluções baseadas em contêiner (incluindo aqueles criados com o AWS Elastic Beanstalk).
O AWS CloudFormation oferece suporte a ambientes de aplicativos Elastic Beanstalk como um dos tipos de recursos da AWS. Isso permite que você, por exemplo, crie e gerencie um aplicativo hospedado no AWS Elastic Beanstalk junto com um banco de dados RDS para armazenar os dados do aplicativo. Além das instâncias RDS, qualquer outro recurso AWS compatível também pode ser adicionado ao grupo.
fonte
Elastic Beanstalk lida automaticamente com a implantação, desde o provisionamento de capacidade, balanceamento de carga, escalonamento automático e monitoramento da integridade do aplicativo com base no código que você carrega nele, onde CloudFormation é um mecanismo de provisionamento automatizado projetado para implantar ambientes de nuvem inteiros por meio de um script JSON.
fonte