AWS Lambda
Guia do desenvolvedor

Criar um aplicativo com entrega contínua no console do Lambda

Você pode usar o console do Lambda para criar um aplicativo com um pipeline de entrega contínua integrado. Com a entrega contínua, cada alteração que você envia para o repositório de controle de origem aciona um pipeline que cria e implanta o aplicativo automaticamente. O console do Lambda fornece modelos para criar tipos de aplicativos comuns com código de exemplo e modelos que criam recursos de suporte.

nota

Esse recurso está na versão beta.

Neste tutorial, você vai criar os recursos a seguir.

  • Aplicativo – a função Node.js do Lambda, especificação de compilação e modelo do Modelo de aplicativo sem servidor da AWS (AWS SAM).

  • Pipeline – um pipeline do AWS CodePipeline que conecta os outros recursos para permitir a entrega contínua.

  • Repositório – um repositório Git no AWS CodeCommit. Quando você envia uma alteração, o pipeline copia o código-fonte em um bucket do Amazon S3 e o transmite para o projeto de compilação.

  • Disparador – uma regra do Eventos do Amazon CloudWatch que observa a ramificação mestre do repositório e aciona o pipeline.

  • Projeto de compilação – uma compilação do AWS CodeBuild obtém o código-fonte do pipeline e empacota o aplicativo. A origem inclui uma especificação de compilação com comandos que instalam dependências e preparam um modelo do aplicativo para a implantação.

  • Configuração de implantação – o estágio de implantação do pipeline define um conjunto de ações que tiram o modelo do AWS SAM processado da saída de compilação e implantam a nova versão com AWS CloudFormation.

  • Bucket – um bucket do Amazon Simple Storage Service (Amazon S3) para armazenamento de artefato de implantação.

  • Funções – os estágios de origem, criação e implantação do pipeline têm funções do IAM que permitem gerenciar recursos do AWS. A função do aplicativo tem uma função de execução que permite que ele carregue logs e pode ser estendida para acessar outros serviços.

Os recursos de aplicativos e pipeline são definidos em modelos do AWS CloudFormation que você pode personalizar e estender. O repositório de aplicativos inclui um modelo que você pode modificar para adicionar tabelas do Amazon DynamoDB, uma API do Amazon API Gateway e outros recursos de aplicativos. O pipeline de entrega contínua é definido em um modelo separado fora do controle de origem e tem sua própria pilha.

O pipeline mapeia uma única ramificação em um repositório para uma única pilha de aplicativo. Você pode criar pipelines adicionais para adicionar ambientes para outras ramificações no mesmo repositório. Você também pode adicionar estágios ao pipeline para testes, preparação e aprovações manuais. Para obter mais informações sobre o AWS CodePipeline, consulte O que é o AWS CodePipeline?.

Pré-requisitos

Este tutorial pressupõe que você tenha algum conhecimento das operações básicas do Lambda e do console do Lambda. Caso ainda não tenha feito isso, siga as instruções em Conceitos básicos do AWS Lambda para criar sua primeira função do Lambda.

Para seguir os procedimentos neste manual, você precisa de um terminal de linha de comando ou de um shell para executar os comandos. Nas listagens, os comandos são mostrados precedidos por um símbolo de prompt ($) e pelo nome do diretório atual, quando apropriado:

~/lambda-project$ this is a command this is output

Para comandos longos, um caractere de escape (\) é usado para dividir um comando em várias linhas.

No Linux e no macOS, use seu gerenciador preferido de pacotes e de shell. No Windows 10, você pode instalar o Subsistema Windows para Linux para obter uma versão do Ubuntu integrada com o Windows e o Bash.

Este tutorial usa CodeCommit para controle de origem. Para configurar sua máquina local para acessar e atualizar o código do aplicativo, consulte Configurar no Guia do usuário do AWS CodeCommit.

Criar um aplicativo

Crie um aplicativo no console do Lambda.

Para criar um aplicativo.

  1. Abra o console do Lambda.

  2. Escolha Applications.

  3. Selecione Criar aplicativo.

  4. Escolha Author from scratch.

  5. Defina as configurações do aplicativo.

    • Application name (Nome do aplicativo)my-app.

    • Application description (Descrição do aplicativo)my application.

    • Runtime (Tempo de execução)Node.js 10.x.

    • Repository provider (Provedor de repositório)CodeCommit.

    • Repository provider (Provedor de repositório)my-app-repo.

    • Permissions (Permissões)Create roles and permissions boundary (Criar limite de funções e permissões).

  6. Selecione Deploy (Implantar).

O Lambda cria o pipeline e os recursos relacionados e confirma o código de aplicativo de exemplo para o repositório Git. À medida que os recursos são criados, eles aparecem na página de visão geral.

Invocar a função

Invoque a função para verificar se ela funciona.

Para invocar a função do aplicativo

  1. Abra o console do Lambda.

  2. Selecione Applications (Aplicativos).

  3. Escolha my-app.

  4. Em Resources (Recursos), escolha helloFromLambdaFunction.

  5. Escolha Test.

  6. Configure um evento de teste.

    • Event name (Nome do evento)test

    • Body (Corpo){}

  7. Escolha Criar.

  8. Escolha Test.

O console do Lambda executa sua função e exibe o resultado. Expanda a seção Details (Detalhes) sob o resultado para ver os detalhes de saída e execução.

Adicionar um recurso da AWS

Quando você cria seu aplicativo, o console do Lambda cria um repositório Git que contém o aplicativo de exemplo. Para obter uma cópia do código do aplicativo em sua máquina local, clone o repositório do projeto.

Para clonar o repositório do projeto

  1. Abra o console do Lambda.

  2. Selecione Applications (Aplicativos).

  3. Escolha my-app.

  4. Escolha Code (Código).

  5. Copie o URI do repositório HTTP ou SSH, dependendo do modo de autenticação configurado durante a configuração.

  6. Clone o repositório.

    ~$ git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/my-app-repo

O repositório contém o modelo para o aplicativo, uma especificação de compilação e código. Adicione uma tabela do DynamoDB ao modelo de aplicativo.

Para adicionar uma tabela do DynamoDB

  1. Em um editor de texto, abra template.yml.

  2. Adicione um recurso de tabela, uma variável de ambiente que passa o nome da tabela para a função e uma política de permissões que permite à função gerenciá-la.

    exemplo template.yml - Recursos

    ... Resources: ddbTable: Type: AWS::Serverless::SimpleTable Properties: PrimaryKey: Name: id Type: String ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1 helloFromLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: src/handlers/hello-from-lambda.helloFromLambdaHandler Runtime: nodejs10.x MemorySize: 128 Timeout: 100 Description: This is a hello from Lambda example. Environment: Variables: DDB_TABLE: !Ref ddbTable Policies: - DynamoDBCrudPolicy: TableName: !Ref ddbTable - AWSLambdaBasicExecutionRole
  3. Confirme e envie a alteração.

    ~/my-app-repo$ git commit -am "Add DynamoDB table" ~/my-app-repo$ git push

Quando você envia uma alteração, ela aciona o pipeline do aplicativo. Use a guia Deployments (Implantações) da tela do aplicativo para rastrear a alteração à medida que ela flui pelo pipeline. Quando a implantação estiver concluída, avance para a próxima etapa.

Atualizar o limite de permissões

O aplicativo de exemplo aplica um limite de permissões à função de execução de sua função. O limite de permissões limita as permissões que você pode adicionar à função da função. Sem o limite, os usuários com acesso de gravação ao repositório do projeto poderiam modificar o modelo do projeto para dar à função permissão para acessar recursos e serviços fora do escopo do aplicativo de amostra.

Para que a função use a permissão do DynamoDB que você adicionou à sua função de execução na etapa anterior, você deve estender o limite de permissões para permitir as permissões adicionais. O console do Lambda detecta recursos que não estão no limite de permissões e fornece uma política atualizada que você pode usar para atualizá-lo.

Para atualizar o limite de permissões do aplicativo

  1. Abra o console do Lambda.

  2. Selecione Applications (Aplicativos).

  3. Escolha o aplicativo.

  4. Em Resources (Recursos), escolha Edit permissions boundary (Editar limite de permissões).

  5. Siga as instruções mostradas para atualizar o limite para permitir o acesso à nova tabela.

Para obter mais informações sobre limites de permissões, consulte Limites de permissões no guia do usuário do IAM.

Atualizar o código da função

Atualize o código de função para usar a tabela. O código a seguir usa a tabela para rastrear o número de chamadas processadas por cada instância da função. Ele usa o ID do fluxo de log como um identificador exclusivo. Novas instâncias são criadas quando você atualiza uma função e para lidar com várias chamadas simultâneas.

Para atualizar o código da função

  1. Em um editor de texto, abra src/handlers/hello-from-lambda.js.

  2. Altere o código para o seguinte.

    exemplo hello-from-lambda.js

    const dynamodb = require('aws-sdk/clients/dynamodb'); const docClient = new dynamodb.DocumentClient(); exports.helloFromLambdaHandler = async (event, context) => { const message = 'Hello from Lambda!'; const tableName = process.env.DDB_TABLE; const logStreamName = context.logStreamName; var params = { TableName : tableName, Key: { id : logStreamName }, UpdateExpression: 'set invocations = if_not_exists(invocations, :start) + :inc', ExpressionAttributeValues: { ':start': 0, ':inc': 1 }, ReturnValues: 'ALL_NEW' }; await docClient.update(params).promise(); const response = { body: JSON.stringify(message) }; console.log(`body: ${response.body}`); return response; }
  3. Confirme e envie a alteração.

    ~/my-app-repo$ git commit -am "Use DynamoDB table" ~/my-app-repo$ git push

Depois que a alteração de código é implantada, chame a função algumas vezes para atualizar a tabela do DynamoDB.

Para visualizar a tabela do DynamoDB

  1. Abra a página Tables (Tabelas) no console do DynamoDB.

  2. Escolha a tabela que começa com my-app.

  3. Escolha Items (Itens).

  4. Selecione Start search (Iniciar pesquisa).

Próximas etapas

O modelo do AWS CloudFormation que define os recursos do aplicativo usa a transformação do Modelo de aplicativo sem servidor da AWS para simplificar a sintaxe das definições de recursos e automatizar o carregamento do pacote de implantação e de outros artefatos. O AWS SAM também fornece uma interface de linha de comando (a CLI do AWS SAM), que tem a mesma funcionalidade de empacotamento e implantação que a AWS CLI, com recursos adicionais específicos para aplicativos Lambda. Use a CLI do AWS SAM para testar o aplicativo localmente em um contêiner do Docker que emula o ambiente de execução do Lambda.

O AWS Cloud9 fornece um ambiente de desenvolvimento online que inclui Node.js, a CLI do AWS SAM e o Docker. Com o AWS Cloud9, você pode começar a desenvolver rapidamente e acessar seu ambiente de desenvolvimento a partir de qualquer computador. Para obter instruções, consulte Conceitos básicos no Guia do usuário do AWS Cloud9.

Para o desenvolvimento local, os toolkits da AWS para ambientes de desenvolvimento integrado (IDEs) permitem testar e depurar funções antes de as enviar para o repositório.

Solução de problemas

À medida que desenvolver seu aplicativo, você provavelmente encontrará os seguintes tipos de erros.

  • Erros de compilação – problemas que ocorrem durante a fase de compilação, incluindo erros de compilação, teste e empacotamento.

  • Erros de implantação – problemas que ocorrem quando o AWS CloudFormation não é capaz de atualizar a pilha de aplicativos. Estes incluem erros de permissões, limites de conta, problemas de serviço ou erros de modelo.

  • Erros de chamada – erros que são retornados pelo código de uma função ou tempo de execução.

Para erros de compilação e implantação, você pode identificar a causa de um erro no console do Lambda.

Para solucionar erros de aplicativos

  1. Abra o console do Lambda.

  2. Selecione Applications (Aplicativos).

  3. Escolha o aplicativo.

  4. Escolha Deployments (Implantações).

  5. Para exibir o pipeline do aplicativo, escolha Deployment pipeline (Pipeline de implantação).

  6. Identifique a ação que encontrou um erro.

  7. Para exibir o erro no contexto, escolha Details (Detalhes).

Para erros de implantação que ocorrem durante a ação ExecuteChangeSet, o pipeline vincula uma lista de eventos de pilha no console do AWS CloudFormation. Procure um evento com o status UPDATE_FAILED. Como o AWS CloudFormation reverte após um erro, o evento relevante está em vários outros eventos na lista. Se o AWS CloudFormation não puder criar um conjunto de alterações, o erro será exibido em Change sets (Conjuntos de alterações) em vez de em Events (Eventos).

Uma causa comum de erros de implantação e invocação é a falta de permissões em uma ou mais funções. O pipeline tem uma função para implantações (CloudFormationRole) equivalente às permissões de usuário que você usaria para atualizar uma pilha do AWS CloudFormation diretamente. Se você adicionar recursos ao aplicativo ou habilitar recursos do Lambda que exigem permissões de usuário, a função de implantação será usada. Você pode encontrar um link para a função de implantação em Infrastructure (Infraestrutura) na visão geral do aplicativo.

Se a função acessar outros produtos ou recursos da AWS, ou se você habilitar recursos que exigem que a função tenha permissões adicionais, a função de execução da função será usada. Todas as funções de execução criadas no modelo de aplicativo também estão sujeitas ao limite de permissões do aplicativo. Esse limite exige que você conceda explicitamente acesso a serviços e recursos adicionais no IAM depois de adicionar permissões à função de execução no modelo.

Por exemplo, para conectar uma função a uma nuvem privada virtual (VPC), você precisa de permissões de usuário para descrever os recursos da VPC. A função de execução precisa de permissão para gerenciar interfaces de rede. Isso requer as etapas a seguir.

  1. Adicione as permissões de usuário necessárias à função de implantação no IAM.

  2. Adicione as permissões de função de execução ao limite de permissões em IAM.

  3. Adicione as permissões de função de execução à função de execução no modelo de aplicativo.

  4. Confirme e envie para implantar a função de execução atualizada.

Depois de resolver erros de permissões, escolha Release change (Liberar alteração) na visão geral do pipeline para executar novamente a compilação e a implantação.

Limpar

Você pode continuar a modificar e usar a amostra para desenvolver seu próprio aplicativo. Se você tiver terminado de usar a amostra, exclua o aplicativo para evitar pagar pelo pipeline, repositório e armazenamento.

Para excluir o aplicativo

  1. Abra o console do AWS CloudFormation.

  2. Exclua a pilha de aplicativos – my-app.

  3. Abra o console do Amazon S3.

  4. Exclua o bucket de artefato – aws-us-east-2-123456789012-my-app-pipe.

  5. Retorne ao console do AWS CloudFormation e exclua a pilha de infraestrutura – serverlessrepo-my-app-toolchain.