AWS Lambda - Teoria, conhecimento

Um rápido tour pela AWS Lambda


O que é isso


AWS Lambda: este é um serviço de computação que permite executar código para quase qualquer tipo de aplicativo ou serviço de servidor - tudo sem administração. O AWS Lambda faz toda a administração para você, incluindo manutenção de servidores e sistemas operacionais, alocação de recursos e dimensionamento automático, monitoramento e registro de código. Tudo o que você precisa fazer é enviar seu código em um dos idiomas suportados pelo AWS Lambda.

Por que usar isso?


  • O dinheiro Você paga apenas pelo tempo em que o serviço está sendo executado.
  • Velocidade. O próprio Lambda sobe e trabalha muito rápido.
  • Conveniência. O Lambda possui muitos recursos para integração com os serviços da AWS.
  • Performance. Em paralelo, pode ser executado, dependendo da região, de no máximo 1000 a 3000 cópias. E, se desejar, esse limite pode ser aumentado escrevendo em suporte.

Essa abordagem tem suas desvantagens, você não pode controlar o sistema operacional no qual o código é executado, não pode controlar a CPU, memória e recursos. Tudo isso é feito pela AWS.

Tudo o que você pode fazer é escolher um idioma no AWS Lambda suportado.

O que pode?


A seguir, é apresentada uma breve lista dos principais recursos do AWS Lambda. A seguir, consideraremos tudo em ordem.



1. Gatilhos


Os gatilhos são os "patógenos" da lambda. De certa forma, o lambda pode ser comparado ao PHP, no sentido de que para nós ele roda e morre . A seguir, consideraremos em detalhes o mecanismo de trabalho. Por enquanto, você precisa entender que o lambda é uma função executada a pedido dos gatilhos.

Abaixo está uma lista de todos os gatilhos possíveis:

Gateway de API
AWS IoT
Alexa Skills Kit
Alexa Smart Home
Balanceador de carga de aplicativo
Cloudfront
Eventos Cloudwatch
Logs do Cloudwatch
CodeCommit
Gatilho de sincronização do Cognito
Dynamodb
Kinesis
S3
SNS
SQS

Para cada um deles, você precisará configurar parâmetros exclusivos que estão disponíveis para esses gatilhos. Você também pode configurar vários gatilhos em um lambda. Depende do tipo de gatilho se o lambda será executado de forma síncrona ou assíncrona.
Aviso: Observe que a lambda pode ser executada usando a AWS CLI, o AWS SDK no modo manual, passando todos os parâmetros necessários. Incluindo se será executado de forma síncrona ou não

Vejamos um exemplo:


1. API do Gateway - permite extrair o lambda na solicitação http e requer que o resultado seja retornado ao usuário. Essa operação não pode ser executada de forma assíncrona, porque requer uma resposta. Para operações síncronas, algumas funções não estão disponíveis.

2. SQS - por exemplo, se nosso lambda processa mensagens do SQS, você não precisa retornar o resultado em nenhum lugar e ele pode ser executado de forma assíncrona. Com a execução assíncrona, vários novos recursos aparecem, por exemplo, podemos configurar a execução repetida em caso de erro ou enviar essas solicitações ainda mais para a fila SQS "inoperante".

2. Permissões para os serviços da AWS


Esses são serviços da AWS aos quais o lambda tem acesso padrão. O que isso significa? Você sempre pode conectar o AWS SDK à função que escreverá e, sem as chaves ou nenhum parâmetro de autorização, poderá usar os serviços disponíveis. Você define todos os serviços disponíveis na função IAM que você usa para este lambda.

Cada idioma usado possui seu próprio SDK que pode se comunicar com os principais serviços da AWS.
Aviso: para cada lambda, você configura a Função do IAM da pessoa que executará o lambda

3. VPC


Você pode configurar uma rede virtual para o seu lambda, por exemplo, para conectar - se com segurança ao RDS .

4. Editor Online


O AWS Lambda também oferece a capacidade de editar o código de sua função diretamente da interface do seu navegador.



5. Log


Todas as solicitações de lambda são registradas no CloudWatch , os dados em tempo de execução e a memória também são registrados lá; esses dados podem ser muito úteis para definir limites. Além disso, o código tem a capacidade de registrar seus próprios dados (por exemplo, no Node.js via console.log).

Além disso, você sempre pode ver estatísticas sobre o uso de lambda na guia Monitoramento .

6. Variáveis ​​de ambiente


Você tem a oportunidade de transferir variáveis ​​de ambiente com segurança para o código, o que permite configurar partes importantes do sistema sem fornecer código. É possível criptografar variáveis ​​de ambiente através de chaves.
Aviso: Observe que há uma lista de variáveis ​​de ambiente predefinidas

7. Código


Agora a parte mais interessante, o lambda em si consiste em várias partes.

1. Camadas - a camada inferior. Não é necessário, mas se você precisar adicionar algumas bibliotecas para usar o lambda, precisará colocá-las separadamente do código principal, para economizar bastante a quantidade de código principal e a velocidade da própria função.

As camadas no AWS Lambda são um pouco semelhantes às camadas na janela de encaixe , pois são permanentes com relação à função e precisam ser alteradas separadamente. Eles também podem ser reutilizados em outras lambdas.

2. Ambiente da Função - o código deve necessariamente conter uma função que será executada diretamente toda vez que o lambda (Handler) for iniciado. Sobre ela abaixo. E diante dela está o ambiente dela, o que pedimos. O fato é que o gerenciamento de recursos ocorre de forma que esse ambiente seja armazenado separadamente da função por algum tempo após sua conclusão. E na próxima partida, ele será retomado sem gastar tempo e recursos na inicialização. Assim, tudo o que é possível precisa ser inicializado na função em si, por exemplo, configuração, bibliotecas de conexão etc.

3. Manipulador - o código executado diretamente, dependendo do idioma, é definido de maneira diferente. Por exemplo, considere Node.Js. Para que seu código seja executado, você precisa:

  1. arquivo js - 1pc
  2. export.yourFunction = () => {// Seu código} - 1pc

Por padrão, o index.js é iniciado e procura por uma função chamada "manipulador". Então executa. Sua função pode ser assíncrona no código. Isso não afeta a execução síncrona do lambda.

Abaixo está um código de exemplo, tentarei descrever o que acontece lá:

//AWS SDK  ,     e var AWS = require('aws-sdk'); //   //   ,    //   API Gateway. // ,    http  exports.handler = async(event, context) => { // event       // context     aws lambda : //   ,      console.log('testing cloud watch'); // ^       Cloud Watch   return { //     http ,     statusCode: 200, body: 'Hello world', headers: {} }; }; exports.handler = (event, context, callback) => { //    callback, // -      callback( null, //<-  ,       { //     statusCode: 200, body: 'Hello world' } ); }; 

8. Versionamento


O serviço suporta controle de versão conveniente. Em resumo, podemos emitir uma versão para cada cópia baixada. E adicione aliases que apontam para alguma versão. Como isso funciona? Veja a tabela abaixo.



E agora, vamos descobrir o que precisa ser feito para obter o que vemos no diagrama


Estado um


  1. Crie a primeira versão do nosso lambda. Juntamente com a primeira versão, criamos um ponteiro para a versão "$ LATEST" . Sempre indica a versão mais recente adicionada.
  2. Adicione o alias "Dev" . Aqui nós escolhemos onde ligar, temos várias opções - crie um ponteiro para um número de versão específico, no nosso caso "1" , ligue o ponteiro a "$ LATEST" ou ligue a outro alias. Nesse caso, anexamos o ponteiro "$ LATEST" e agora nosso alias "Dev" sempre aponta para o último ramo, para que possamos sempre testar nosso aplicativo com a versão mais recente do lambda no ambiente de desenvolvimento. E se de repente precisamos verificar como funciona na versão antiga, basta alternar o alias no gatilho ou alterar o link do alias para a versão sem tocar em nosso aplicativo
  3. Adicione o alias do Stage e ligue-o à primeira versão do nosso lambda
  4. Adicione o pseudônimo "Prod" e repita o que fizemos no "Stage"

Nota: aqui é descrito como trabalhar com aliases na prática. A parte prática do lambda estará no próximo artigo, juntamente com o SQS

E assim, agora temos algo incompreensível, na verdade 3 aliases se referem a uma versão, não está claro. Mas nada, tudo em ordem

Segundo estado


  1. Crie uma segunda versão do nosso lambda (é possível adicionar a segunda saída do "Hello world"). Aqui, quero observar que, neste momento, "$ LATEST" analisará imediatamente a segunda versão. E como "Dev" está vinculado a "$ LATEST" , ele também analisará a segunda versão.
  2. Em seguida, queremos que o nosso Stage analise a segunda versão. Agora está vinculado à versão "1" . Aqui, precisamos alterar manualmente a versão indicada por "Stage ".
  3. Alegrai-vos. Temos o que vemos como o segundo estado no gráfico. Ou seja, nosso "Prod" analisa a primeira versão e "Dev" e "Stage" na segunda.

Terceiro estado


Agora, para obter o terceiro estado, precisamos adicionar mais algumas linhas ao nosso código e haverá uma terceira versão do nosso lambda. E "Dev" agora olha para ela.

Resumir


E então o que nós temos?

Um pouco. Rápido. Relativamente barato. Escala automática. Versão. Função
Neste artigo, consideramos apenas a parte teórica, familiaridade com este serviço. O mesmo que no SQS no último artigo. No próximo artigo, consideraremos como esses dois serviços interagem entre si e, na forma prática, aprenderemos como configurá-los e usá-los.

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


All Articles