AWS

AWS Lambda

ECR

Serverless

Função Lambda a partir de imagem de contêiner:

09 Sep 2021 Postado por Filipe Soares

Nesse artigo iremos abordar a construção de um Lambda a partir de imagens de contêiner, apresentando em detalhes a sua criação e utilização. O artigo também irá discutir brevemente as vantagens de utilizar o Elastic Container Registry (ECR) da Amazon. 

O que é uma imagem de contêiner: 

Uma imagem de contêiner é um arquivo estático com código executável, usado para criar um contêiner em um sistema de computação. A mesma é imutável e não pode ser alterada, desta forma, sua implementação pode ser feita de forma consistente em qualquer ambiente computacional. Basicamente, ela inclui tudo que um contêiner necessita para ser executado, como por exemplo, bibliotecas do sistema, utilitários, mecanismo de contêiner, definições de configuração e cargas de serviços próprios que devem ser executadas no contêiner. A imagem compartilha o kernel do sistema operacional (SO) do host, assim, não é necessário incluir um SO completo. Além disso, a imagem de contêiner é composta por camadas, acrescentadas a uma imagem pai. Tais camadas incentivam a reutilização de vários componentes para que o usuário não precise criar tudo do zero para cada projeto, ajudando na redução do tamanho do contêiner e na melhora de seu desempenho. 

Por que construir um Lambda a partir de uma imagem de contêiner? 

A construção de uma imagem de contêiner funciona como uma forma de bolo, após criada, é possível reutiliza-la quantas vezes forem necessárias. A sua usabilidade é guardar uma imagem de cada release do seu serviço, caso queira usar uma versão anterior, basta criar um contêiner dela. Além disso, é possível reutilizar as imagens já existentes para trazer implementações confiáveis e testadas. Uma vez que a imagem é imutável, sua implantação se torna independente do ambiente, admitindo a implantação de arquivos e pacotes maiores onde as imagens de contêiner podem ter até 10GB, tornando viável implementações mais pesadas. As imagens de contêiner simplificam a prática de desenvolvimento de funções em linguagens não nativas do AWS Lambda. Também existem outras vantagens como por exemplo, utilizar o SO personalizado e versões de tempo de execução customizadas para atender as condições e práticas padrões de cada empresa. Existe ainda a otimização de processos, que proporciona mais agilidade, segurança e escalabilidade, principalmente em produção. 

Elastic Container Registry (ECR) 

O ECR é um serviço da Amazon que, basicamente, consiste no registro do contêiner de forma completamente gerenciada, facilitando o armazenamento, compartilhamento, gerenciamento e a implantação de imagens e artefatos de contêiner. O mesmo recebe suas imagens em uma arquitetura altamente disponível e com grande desempenho, tornando possível a implantação dos aplicativos de contêiner de forma confiável. Além disso, também é possível o compartilhamento de softwares de contêiner, tanto em modo privado para uma organização ou de forma pública para que outras pessoas consigam visualiza-los na galeria pública do ECR. Adicionalmente, o ECR também funciona com outros serviços da Amazon como, AWS Lambda, EKS e ECS, reduzindo o fluxo de trabalho do desenvolvimento até a produção. Como o AWS Lambda, o ECR não é cobrado antecipadamente ou há compromissos, sendo pago somente pela quantidade de dados armazenados no repositório e pelos dados transferidos para a internet. 

Vantagens : 

  • Reduz seus esforços fornecendo um registro totalmente gerenciado 
  • Compartilhar e fazer download de imagens de contêiner com segurança 
  • Fornece acesso rápido e altamente disponível 
  • Simplifica seu fluxo de trabalho de implantação 
  • Reutilização das imagens existentes para implementações confiáveis. 
  • É possível empacotar e implantar funções Lambda com imagens de contêiner de até 10GB. 

Exemplo (Hands-On) 

Criando um repositório de imagem de contêiner no ECR. 

Na criação do repositório podemos colocar ele de forma pública ou privada. 

Após a criação do repositório, clicamos no botão “View push commands”.  

Que abrira essa aba a seguir: 

Logo após abrir a aba, mostrada acima, pegamos cada um desses comandos e rodamos no terminal do VS code, para criarmos uma imagem da função que usamos no artigo passado. 

Explicando o que o dockerfile está fazendo: 

FROM: De onde vamos construir a Imagem, nesse caso Python 3.8. 

COPY: Copia tudo que está no repositório para dentro da imagem. 

RUN: Executa comando, nesse caso, está executando um comando de requests. 

CMD: Comando que será executado nessa imagem. 

Após utilizar os comandos no terminal do VS code a imagem estará pronta. 

Com a imagem pronta conseguimos criar uma função Lambda a partir de uma imagem de contêiner. 

É possível copiar a URI da imagem de contêiner ou clicando no botão “Procurar Imagens”, que abrirá a aba abaixo com o repositório de imagens do AWS ECR: 

Sendo assim, o usuário poderá selecionar a imagem de contêiner que deseja e criar a sua função Lambda. 

Assim que criada, se necessário configure suas variáveis de ambiente e também o seu tempo limite de execução da função. 

Conclusão 

Com os tópicos apresentados acima, temos uma explicação do que é uma imagem e um contêiner, o ECR e suas vantagens, além de um exemplo prático de como utilizar o ECR para a dockerização de uma função Lambda. Tendo em vista isso, temos boas práticas da utilização do ECR e do Lambda. Como a própria criação do Lambda, o uso do ECR também é bem amigável e prático em sua interface. Para a última parte dessa série de artigos, teremos uma apresentação de Pipeline CI/CD para a otimização de processos em produção de funções Lambdas. 

Referencias: 

www.youtube.com/watch?v=97jWpWp4Pnc

www.youtube.com/watch?v=-pUZBovqRcU&t

www.aws.amazon.com/pt/ecr/ 

www.docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html 

www.aws.amazon.com/pt/blogs/aws/new-for-aws-lambda-container-image-support/ 

www.meupositivo.com.br/panoramapositivo/container-docker/ 

www.docs.aws.amazon.com/lambda/latest/dg/lambda-images.html 

www.acloudguru.com/blog/engineering/packaging-aws-lambda-functions-as-container-images 

Tags:

AWS

AWS Lambda

ECR

Serverless

Últimas

Assine a newsletter e fique por dentro das novidades