Qual é a diferença entre Elastic Beanstalk e CloudFormation para um projeto .NET?

121

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?

kspearrin
fonte
Esta questão está um pouco fora do assunto para Stackoverflow, mas provavelmente não se encaixaria bem no ServerFault também ... Propus um novo site para questões como esta, siga se você concordar! area51.stackexchange.com/proposals/82757/…
Dan Ciborowski - MSFT

Respostas:

212

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.

Jamieb
fonte
Obrigado! Parece que vou continuar com o EBS por enquanto.
kspearrin
37
@xxkylexx FYI: "EBS" refere-se ao serviço AWS denominado "Elastic Block Store". Acho que você quer dizer "Elastic Beanstalk" em vez de "EBS".
ekillaby
2
Acho que eles usaram e automatizaram o modelo de formação de nuvem para criar o ambiente Elastic Beanstalk para o aplicativo que você criou - .Net ou qualquer outro ... FWIW
codeputer
51

Para começar a implantar rapidamente um aplicativo da web .NET padrão, o Elastic Beanstalk é o serviço certo para você.

Gráfico de comparação de serviços de aplicativos

AWS CloudFormation : "Provisionamento orientado a modelos"

O AWS CloudFormation oferece aos desenvolvedores e administradores de sistemas uma maneira fácil de criar e gerenciar uma coleção de recursos AWS relacionados, provisionando e atualizando-os de maneira ordenada e previsível.

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"

O AWS Elastic Beanstalk é um serviço fácil de usar para implantar e escalonar aplicativos e serviços da web desenvolvidos com Java , .NET , PHP , Node.js , Python , Ruby , Go e Docker em servidores familiares como Apache, Nginx, Passenger e IIS.

Você pode simplesmente fazer upload de seu código e o 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.

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:

  • Deseja gerenciar todos os recursos da AWS do seu aplicativo diretamente;
  • Deseja gerenciar ou personalizar fortemente seu processo de provisionamento ou implantação de instância;
  • Precisa usar uma plataforma de aplicativo não suportada pelo Elastic Beanstalk; ou
  • Só não quero / preciso de nenhum dos recursos do Elastic Beanstalk de nível superior

em seguida, use CloudFormation diretamente e evite a camada de configuração adicionada do Elastic Beanstalk.

wjordan
fonte
14

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.

Edwin
fonte
10

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 ...

Matt
fonte
3

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.

Mohit Sharma
fonte
1

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.

Mahesh Bablu
fonte