Header Ads

Como criar funções Lambda usando SAM

Embora o Lambda tenha um editor baseado na Web para atualizar suas funções, ele é destinado a iniciantes e não é o que você deve usar na prática. A criação de funções com modelos de SAM permite mover as funções do Lambda para o controle de origem existente e o pipeline de CI / CD.

O problema

Se você está aprendendo AWS e Lambda, provavelmente já viu esta interface:

Este é o editor da web do Lambda, que permite editar a função diretamente da página para essa função. É ótimo para iniciantes e pode ser usado extensivamente para pequenos projetos quando estendido com o IDE Cloud9, que permite a depuração local e remota.

No entanto, essa não é a maneira real de você escrever funções Lambda, especialmente se você estiver gerenciando um back-end inteiro de microsserviços, executando centenas deles.

A solução é o modelo de aplicativo sem servidor da AWS, ou SAM, para abreviar. A AWS caracteriza o SAM como um esquilo, por algum motivo:

Na realidade, porém, o SAM é um modelo YAML. Dentro do modelo, você define seu aplicativo e todos os recursos necessários (como funções individuais do Lambda). Em vez de atualizar suas funções manualmente, você pode implantar atualizações através do SAM, que tratará disso para você e atualizará todas as suas funções de uma só vez.

SAM é uma extensão do AWS CloudFormation. Eles compartilham a mesma sintaxe, mas o SAM é otimizado e projetado especificamente para o Lambda. Sempre que uma nova alteração é feita e implantada, o SAM atualiza a pilha do CloudFormation criada quando você implantou o modelo inicialmente.

Como o SAM é apenas um arquivo YAML, ele pode ser rastreado e controlado por versão, juntamente com todas as suas funções. Isso permite incorporá-lo a um pipeline de CI / CD para automatizar a criação e a implantação diretamente do Git. Com tudo configurado, você pode armazenar suas funções do Lambda em um repositório Git e, sempre que enviar novas confirmações, o CodePipeline fará as novas alterações e executará automaticamente uma implantação do SAM para criar uma nova versão do Lambda. É até capaz de diminuir a velocidade do tráfego entre versões usando o alias de balanceamento de tráfego, o que pode ajudá-lo a detectar erros antes que eles se tornem problemas.

Se você gostaria de aprender mais sobre o uso do SAM em um pipeline de CI / CD para automatizar as implantações do Lambda, leia nosso guia aqui. Por enquanto, vamos nos concentrar no uso do próprio SAM e na execução de implantações manuais a partir da CLI.

Como gravar um arquivo SAM

Um arquivo SAM típico seguirá este formato básico:

 AWSTemplateFormatVersion: '2010-09-09' Transformação: AWS :: Serverless-2016-10-31 Descrição: Um modelo de especificação sem servidor da AWS que descreve sua função Recursos: HelloWorld: Tipo: AWS :: Serverless :: Function Propriedades: Manipulador: HelloWorld / index. handler Tempo de execução: nodejs8.10 

Este modelo simplesmente define algumas variáveis ​​de configuração e, em seguida, nos "Recursos" ” seção, define as funções do Lambda por nome. Por exemplo, aqui estamos criando uma função chamada "HelloWorld". ” essa função é executada no nodejs8.10 e seu manipulador (ponto de partida) está localizado em um subdiretório em um arquivo index. js.

Podemos salvar esse modelo como template. yml e colocá-lo em um diretório de projeto, ao lado de diretórios individuais que contêm o código de função.

 Diretório do projeto | - template. yml | - HelloWorld | -index. js 

Isso já apresenta uma maneira muito mais fácil de gerenciar funções Lambda. Várias funções podem ser agrupadas em um modelo e todas implantadas de uma só vez.

No entanto, o Lambda não é apenas um código e precisa de muito mais configuração para começar a funcionar. Mais notavelmente, as funções Lambda precisam de um evento para disparar. Você pode definir isso nas "Propriedades" ” seção para uma função. Por exemplo, para definir a função para ativar um gateway de API

 AWSTemplateFormatVersion: '2010-09-09' Transformação: AWS :: Serverless-2016-10-31 Descrição: Um modelo de especificação sem servidor da AWS que descreve sua função Recursos: HelloWorld: Tipo: AWS :: Serverless :: Function Propriedades: Manipulador: HelloWorld / index. handler Tempo de execução: nodejs8.10 Eventos: HelloWorldApi: Tipo: Api Propriedades: Caminho: / helloworld Método: GET 

Quando isso é implantado, um novo API Gateway para o projeto Lambda será criado automaticamente pelo SAM no CloudFormation e vinculado à função recém-criada nos caminhos especificados.

SAM suporta todos os outros tipos de fonte de eventos do Lambda. Você pode encontrar mais documentação para os outros tipos na página Github do SAM.

O SAM também pode implantar mais do que apenas funções Lambda. Por ser uma extensão completa do CloudFormation, você pode implantar outros recursos necessários para o seu aplicativo, tudo a partir do SAM. Por exemplo, use o Lambda com o API Gateway, você precisará conceder permissão ao API Gateway para chamar sua função. Você pode fazer isso com o seguinte bit de código que define um recurso AWS :: Lambda :: Permission:

 AWSTemplateFormatVersion: '2010-09-09' Transformação: AWS :: Serverless-2016-10-31 Descrição: um modelo de Especificação sem servidor da AWS que descreve sua função Recursos: HelloWorld: Tipo: AWS :: Serverless :: Function Propriedades: Manipulador: HelloWorld / index. handler Tempo de execução: nodejs8.10 HelloWorldPermission: Tipo: AWS :: Lambda :: Propriedades da permissão: Ação: lambda: InvokeFunction FunctionName: Fn :: GetAtt: - HelloWorld - Arn Principal: apigateway. amazonaws. com SourceArn: Fn :: Sub: arn: aws: execute-api: $: $: * / * / * / * 

Isso é um pouco mais complicado, mas basicamente concede permissão ao API Gateway para chamar a função na propriedade FunctionName. O Fn :: GetAtt é uma função intrínseca, que retorna o ARN para o “ HelloWorld ” função, porque você não sabe qual será o ARN exato.

Isso está apenas arranhando a superfície de tudo o que o SAM pode fazer. Para obter mais informações sobre a especificação do modelo SAM, consulte o esquema completo no Github ou leia os Guias do desenvolvedor da AWS para usar o SAM.

Implantando um arquivo SAM

Para que o arquivo SAM efetivamente faça alguma coisa, ele precisará ser implantado. Isso é tratado automaticamente se você estiver usando o CodePipeline, mas também pode ativar uma implantação manualmente, o que é melhor para iniciantes.

O SAM tem sua própria CLI, separada da AWS padrão. Você pode instalá-lo a partir do pip:

 pip install aws-sam-cli 

Primeiro, você precisará empacotar tudo e enviar os artefatos para um bucket S3:

 sam package \ --template-file template. yml \ --output-template-file package. yml \ --s3-bucket bucket-name 

Em seguida, você pode executar a implantação, usando o modelo de saída gerado a partir do comando anterior:

 sam deploy \ --template-file package. yml \ --stack-name sam-hello-world \ --capabilities CAPABILITY_IAM 

Observe que este comando implementa uma pilha com um nome específico definido por este comando; não há nada que defina o nome da pilha no próprio modelo SAM. Se você deseja implantar uma nova pilha, pode alterar esse nome aqui. Caso contrário, mantenha o mesmo nome e a pilha será atualizada.

Quando a implantação do SAM for concluída, você verá um novo aplicativo com suas funções, bem como uma nova pilha no CloudFormation:

Via: How to Geek

Nenhum comentário