Implantando APIs com o AWS Elastic Beanstalk



No final de janeiro, realizamos outro curso intensivo online "Backend PHP Developer" . Desta vez, o tópico de uma lição aberta foi a criação de um bot do Telegram para encomendar café em uma instituição e pagar on-line . O webinar acabou por ser muito rico, por isso se estendeu por dois dias: "Dia 1" e "Dia 2" . Trazemos a sua atenção uma versão em texto do primeiro dia de intensivo on-line. Tratava-se de apresentar o AWS Elastic Beanstalk e implantar a API com ele.

Palestrante - Michael Kamorin , desenvolvedor sênior de back-end da Skyeng.


Computação em nuvem


O uso da computação em nuvem em geral e a AWS em particular nos traz as seguintes vantagens:

  1. Acesso conveniente à rede sob demanda. Podemos nos conectar a qualquer momento 365 dias por ano 24/7.
  2. Fundo geral de recursos de computação configuráveis. A computação em nuvem nos permite usar um determinado fundo comum de recursos de computação, que são muito maiores que os recursos de uma máquina, quando comparados a um servidor privado.
  3. Fornecimento e liberação imediata. Podemos obter recursos adicionais em pouco tempo, se necessário. E libere rapidamente esses recursos assim que se tornarem desnecessários.
  4. Custos operacionais mais baixos. Dependendo do nível de abstração, é necessário um nível diferente de investimento financeiro, mas geralmente é mínimo.

Que problemas resolvemos:

  1. Auto-atendimento. Quando nos comunicamos com um provedor regular dos mesmos servidores VPS, escrevemos uma carta, solicitamos a alocação dos recursos necessários etc. Em resposta, recebemos tarifas e opções de configuração. Nós escolhemos, pagamos e muito mais. Na AWS, tudo é muito mais simples: o cartão é anexado imediatamente, nós escolhemos o ambiente e começamos tudo levando em conta nossas necessidades. É um autoatendimento completo, o que é muito conveniente.
  2. Hospedagem Naturalmente, para executar nosso código em uma máquina remota, obtemos a hospedagem necessária. Em princípio, não apenas as nuvens resolvem esse problema.
  3. Conjunto de recursos configurável. Um bot específico do Telegram, é claro, não exigirá muitos recursos, mas acontece que estamos falando de tarefas de negócios mais complexas ou de crescimento de projetos.
  4. Elasticidade. O que se entende aqui? Quando temos uma sazonalidade acentuada (mesmo dentro do dia), quando sabemos a hora do início do horário nobre e das cargas de pico, podemos economizar. É claro que, se usarmos os recursos de computação que cobrem picos de carga 24/7, pagaremos em excesso. A elasticidade nos permite aumentar os recursos de computação pouco antes do horário nobre e liberá-los imediatamente após sua conclusão. Assim, reduzimos significativamente o custo de manutenção de nossa infraestrutura.
  5. Mensurabilidade. Vemos o número de chamadas para nossas funções (no caso, por exemplo, do AWS Lambda), vemos recursos (quantas máquinas virtuais funcionam, qual é a carga), ou seja, temos um monitoramento bastante avançado e preciso.

Níveis de abstração

Vamos falar um pouco sobre os níveis de abstração:

  1. Nas tradicionais instalações locais, fornecemos tudo, desde a compra do hardware até a configuração do aplicativo que lançamos.
  2. O IaaS nos fornece algum hardware e um hipervisor. Além disso, podemos selecionar e instalar independentemente o sistema operacional, o ambiente, podemos fazer a escala, etc.
  3. CaaS . O nível de Container como Serviço se destacou recentemente, com o desenvolvimento da conteinerização em geral e da dockerização em particular. No caso do CaaS, não precisamos configurar o sistema operacional - já somos fornecidos a partir de um determinado conjunto de sistemas operacionais pré-configurados.
  4. PaaS . Um nível bastante antigo de abstração, que apareceu muito antes do CaaS se destacar. Nesse nível, também somos fornecidos com um ambiente de tempo de execução, que é, de fato, uma hospedagem clássica. Suponha que tenhamos alguma versão do PHP para escolher com um conjunto de extensões. No nível deste PHP, podemos fazer qualquer coisa: instalar balanceadores, escrever nosso próprio código, etc.
  5. FaaS . Um exemplo é o mesmo AWS Lambda. Nesse caso, o dimensionamento já é fornecido por meio do provedor de nuvem que fornece a funcionalidade e não temos problemas quando o aplicativo começa a crescer. O mesmo AWS Lambda pode oferecer suporte a milhares de instâncias sem a necessidade de configuração (apenas pague).
  6. SaaS . Nesse caso, só temos acesso à opção de configuração que os programadores colocam no software que usamos.



Para não ser infundado, damos exemplos sobre os níveis de abstração:

  • IaaS - Amazon Elastic Compute Cloud (EC2) - trabalharemos com ele hoje;
  • CaaS - Amazon Elastic Container Service (ECS);
  • PaaS - Google App Engine;
  • FaaS - AWS Lambda;
  • SaaS - Gmail.

Compartilhamento de recursos

Como as nuvens são geralmente usadas? Existem vários cenários:

  1. Nuvem privada. Toda a infraestrutura está localizada no data center e pertence à empresa (ela pertence no sentido de que ninguém, exceto nós, pode trabalhar com esses recursos).
  2. Nuvem pública. Toda a infraestrutura está na nuvem. Sabemos apenas que temos um serviço do nível selecionado, que é fornecido a nós. Não sabemos como é organizado em níveis inferiores. Não possuímos totalmente nossos dados, apenas porque, se queremos que nossos dados sejam excluídos, não temos garantia de que isso aconteça. Além disso, se o provedor for hackeado, a probabilidade de perda de informações confidenciais é alta. Sim, esses riscos existem com uma nuvem privada, mas aqui estamos falando sobre hackers direcionados aos seus recursos, e aqui você pode obter a distribuição, como eles dizem, por acaso e para a empresa.
  3. Nuvem híbrida. Existem opções possíveis:

  • no modo normal, sua própria infraestrutura é usada, uma nuvem é conectada em picos de carga;
  • alienados de nossos cálculos de software são levados para a nuvem;
  • no modo normal, a nuvem é usada; em situações de emergência, ocorre a mudança para sua infraestrutura.

Aws


Falando na AWS, primeiro mencionamos alguns dos componentes que precisaremos e serão usados ​​sob o capô.

AWS IAM

O IAM (Gerenciamento de identidade e acesso) é a primeira coisa que você precisa enfrentar ao se inscrever. O IAM permite configurar direitos de acesso à conta, gerenciar funções, grupos e usuários.

A Amazon sugere que sigamos as Melhores práticas, embora tenhamos que violá-las um pouco durante a lição. Estas são as seguintes práticas:

  • para cada pessoa física - um usuário separado;
  • para cada aplicativo - um papel separado;
  • os acessos que serão emitidos não são confirmados, não estamos atrapalhando, não estamos usando o código;
  • nunca use uma conta raiz que não seja a configuração inicial. Se você acidentalmente acender uma senha em algum lugar, alguém poderá comprar máquinas virtuais da sua conta root. E mesmo se você configurar todos os alertas necessários, poderá obter mil e meio dólares rapidamente.

AWS EC2

EC2 - IaaS (Elastic Compute Cloud) - um serviço da web que nos oferece a capacidade de implantar máquinas virtuais. O EC2 fornece:

  • gerenciamento do poder de computação que usaremos (quando você registra uma conta gratuita, o acesso é concedido a apenas um tipo de instância);
  • Suíte Amazon Machine Image (AMI) - imagens de máquinas virtuais com aplicativos, bibliotecas, etc;

Além disso, geralmente para trabalhar com o EC2, você precisará usar o Amazon S3 (Simple Storage Service) - armazenamento de arquivos.

Deve-se notar aqui que não tocaremos diretamente no EC2, pois é necessário configurar tudo sozinho, começando no ambiente e terminando com as configurações de acesso à rede. No entanto, deve-se entender que, sob o capô, o EC2 está sempre lá.

AWS Elastic Beanstalk

Elastic Beanstalk - serviço de orquestração (PaaS ou CaaS, dependendo do que você irá orquestrar). Se a conteinerização é trabalhar com o próprio contêiner e seu preenchimento, a orquestração é trabalhar com contêineres, digamos, no nível meta. A orquestração é, de fato, um mecanismo que nos permite iniciar contêineres / máquinas virtuais por API ou por meio do console.

O Beanstalk adiciona, no topo do SO, uma camada de ambiente para uma linguagem de programação específica, um servidor da Web, containerização, um conjunto de bibliotecas, extensões etc.

Usaremos o PHP 7.3 com o servidor da web Apache (o nginx não é fornecido, isso não é bom nem ruim, mas é apenas um fato a ter em mente). Como não vamos gerenciar tudo isso, nós, em princípio, não nos importamos.

Instalação e configuração


Bem, vamos à prática. A primeira etapa é o registro e a configuração dos direitos de acesso:

  1. registre-se em amazon.com . Temos uma conta gratuita com um conjunto mínimo de carros;
  2. faça login. Como o Elastic Beanstalk oferece a região do Oregon por padrão, selecione Oregon no AWS Management Console:
  3. acesse o serviço IAM através do console (escreva iam na barra de pesquisa):
  4. lá vemos um painel no qual realizamos certas ações

  5. Para trabalhar com o Elastic Beanstalk, criamos e configuramos um novo usuário (apenas acesso programático):


  6. adicione um grupo com direitos AWSElasticBeanstalkFullAccess:
  7. faça o download dos detalhes de acesso e salve-os em um local seguro. Se você perder o arquivo, o usuário precisará recriá-lo.




Portanto, temos um usuário e continuaremos trabalhando com esse usuário. Nesta fase, tudo.

EB CLI

Agora você precisa instalar o próprio console do ElasticBeanstalk. Este é um processo bastante demorado, aqui está uma breve visão geral do que precisa ser feito:

  1. Clonamos o repositório https://github.com/aws/aws-elastic-beanstalk-cli-setup .
  2. Lemos com atenção o leia-me e executamos as ações necessárias para o seu sistema operacional (problemas em potencial também são descritos em leia-me).
  3. Após a instalação, não esqueça de exportar variáveis ​​com caminhos.
  4. Verifique se tudo funciona, eb –version .



Inicializando o Elastic Beanstalk

Agora precisamos inicializar o Elastic Beanstalk em nosso projeto. Para fazer isso:

  • descompacte o arquivo morto com o código fonte ;
  • executar instalação do compositor;
  • execute eb init;
  • selecione uma região (o padrão é Oregon) e especifique os detalhes de acesso no arquivo baixado;
  • especifique o nome do aplicativo, a linguagem de programação PHP e a versão 7.3.

Observe que não usaremos o CodeCommit e o acesso ssh .

Após a inicialização, a pasta .elasticbeanstalk aparece no aplicativo, dentro do qual haverá um arquivo de configuração.



Criando e executando uma instância do EC2

Agora você precisa criar e executar a instância do EC2 através do Beanstalk. Para fazer isso:

  • execute eb create ;
  • especifique o nome do ambiente, DNS CNAME , selecione balanceador de carga (aplicativo) ;
  • recusar frota spot (elasticidade sob carga);
  • verifique o status de eb status / eb health ;
  • tentando abrir o site aberto eb .

Curiosamente, mas estamos enfrentando o erro 403. O que poderia ter dado errado? Como nosso aplicativo está no Laravel, o ponto de entrada está localizado no diretório /public e o EB espera um ponto de entrada no diretório raiz por padrão.



Correção de configuração

O próximo passo é corrigir a configuração:

  • vá para o console no Elastic Beanstalk;
  • selecione nosso aplicativo e vá para Configuração;
  • na seção Software, clique no botão Modificar;
  • instale a raiz do documento em / public;
  • clique em Aplicar;
  • Verificamos o desempenho ( /api/v1/goods ).

Configuração de verificação de integridade

Na verdade, resta configurar a verificação de integridade . Para fazer isso:

  • vá para o console no Elastic Beanstalk;
  • selecione nosso aplicativo e vá para Configuração;
  • na seção Load Balancer, clique no botão Modify;
  • na seção Processos, selecione padrão e selecione a ação Editar;
  • especifique Path / api / v1 / goods e o código HTTP 200 na seção Health Check;
  • clique em Salvar e aplicar.

Discutimos ainda o monitoramento e o primeiro dia de intensivo on-line chegou ao fim. Se você estiver interessado neste tópico, é melhor revisar a lição completamente e repetir todas as etapas para o professor. Além disso, também é recomendável prestar atenção à continuação. Lembre-se de que o resultado de um intensivo on-line de 2 dias foi a criação de um bot do Telegram para encomendar café na instituição e pagar on-line:

Source: https://habr.com/ru/post/pt485910/


All Articles