Tutorial: Compilar e testar uma aplicação sem servidor com o AWS Lambda
Você pode compilar uma aplicação sem servidor do Lambda usando um modelo do AWS Toolkit for Visual Studio. Os modelos de projeto do Lambda incluem um para uma aplicação sem servidor da AWS, que é a implementação do AWS Toolkit for Visual Studio do AWS Serverless Application Model (AWS SAM)
Para obter pré-requisitos e informações sobre como configurar o AWS Toolkit for Visual Studio, consulte Using the AWS Lambda Templates in the AWS Toolkit for Visual Studio.
Tópicos
Criar um projeto de aplicação sem servidor da AWS
Os projetos de aplicações sem servidor da AWS criam funções do Lambda com um modelo sem servidor do CloudFormation. Os modelos do CloudFormation permitem que você defina recursos adicionais, como bancos de dados, adicione perfis do IAM e implante várias funções ao mesmo tempo. Isso difere dos projetos do AWS Lambda, que se concentram no desenvolvimento e na implantação de uma única função do Lambda.
O procedimento a seguir descreve como criar um projeto de aplicação sem servidor da AWS.
-
No Visual Studio, expanda o menu Arquivo, expanda Novo e selecione Projeto.
-
Na caixa de diálogo Novo projeto, verifique se as caixas suspensas Idioma, Plataforma e Tipo de projeto estão definidas como “Todos…” e insira
aws lambdano campo Pesquisar. -
Selecione o modelo AWS Serverless Application with Tests (.NET Core - C#).
nota
É possível que o modelo Aplicação sem servidor da AWS com testes (.NET Core - C#) não seja preenchido no topo dos resultados.
-
Clique em Avançar para abrir a caixa de diálogo Configurar novo projeto.
-
Na caixa de diálogo Configurar novo projeto, insira
ServerlessPowertoolsem Nome e preencha os campos restantes de acordo com sua preferência. Clique no botão Criar para prosseguir até a caixa de diálogo Selecionar esquema. -
Na página Selecionar esquema, escolha o esquema Powertools para AWS Lambda e selecione Concluir para criar o projeto do Visual Studio.
Revisar os arquivos da aplicação sem servidor
As seções a seguir fornecem uma visão detalhada de três arquivos de aplicação sem servidor criados para o projeto:
-
serverless.template
-
Functions.cs
-
aws-lambda-tools-defaults.json
1. serverless.template
Um arquivo serverless.template é um modelo do AWS CloudFormation para declarar as funções sem servidor e outros recursos da AWS. O arquivo incluído neste projeto contém uma declaração para uma única função do Lambda que será exposta por meio do Amazon API Gateway como uma operação HTTP *Get*. Você pode editar esse modelo para personalizar a função existente ou adicionar mais funções e outros recursos exigidos pela sua aplicação.
Este é um exemplo de um arquivo serverless.template:
{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Description": "An AWS Serverless Application.", "Resources": { "Get": { "Type": "AWS::Serverless::Function", "Properties": { "Architectures": [ "x86_64" ], "Handler": "ServerlessPowertools::ServerlessPowertools.Functions::Get", "Runtime": "dotnet8", "CodeUri": "", "MemorySize": 512, "Timeout": 30, "Role": null, "Policies": [ "AWSLambdaBasicExecutionRole" ], "Environment": { "Variables": { "POWERTOOLS_SERVICE_NAME": "ServerlessGreeting", "POWERTOOLS_LOG_LEVEL": "Info", "POWERTOOLS_LOGGER_CASE": "PascalCase", "POWERTOOLS_TRACER_CAPTURE_RESPONSE": true, "POWERTOOLS_TRACER_CAPTURE_ERROR": true, "POWERTOOLS_METRICS_NAMESPACE": "ServerlessGreeting" } }, "Events": { "RootGet": { "Type": "Api", "Properties": { "Path": "/", "Method": "GET" } } } } } }, "Outputs": { "ApiURL": { "Description": "API endpoint URL for Prod environment", "Value": { "Fn::Sub": "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" } } } }
Observe que muitos dos campos de declaração ...AWS:: Serverless::Function... são semelhantes aos campos de uma implantação de projeto do Lambda. O registro em log, as métricas e o rastreamento do Powertools são configurados por meio das seguintes variáveis de ambiente:
POWERTOOLS_SERVICE_NAME=ServerlessGreeting
POWERTOOLS_LOG_LEVEL=Info
POWERTOOLS_LOGGER_CASE=PascalCase
POWERTOOLS_TRACER_CAPTURE_RESPONSE=true
POWERTOOLS_TRACER_CAPTURE_ERROR=true
POWERTOOLS_METRICS_NAMESPACE=ServerlessGreeting
Para obter definições e detalhes adicionais sobre as variáveis de ambiente, consulte o site Referências do Powertools para AWS Lambda
2. Functions.cs
Functions.cs é um arquivo de classe que contém um método C# mapeado para uma única função declarada no arquivo de modelo. A função do Lambda responde aos métodos HTTP Get do API Gateway. Veja a seguir um exemplo do arquivo Functions.cs:
public class Functions { [Logging(LogEvent = true, CorrelationIdPath = CorrelationIdPaths.ApiGatewayRest)] [Metrics(CaptureColdStart = true)] [Tracing(CaptureMode = TracingCaptureMode.ResponseAndError)] public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context) { Logger.LogInformation("Get Request"); var greeting = GetGreeting(); var response = new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.OK, Body = greeting, Headers = new Dictionary (string, string) { { "Content-Type", "text/plain" } } }; return response; } [Tracing(SegmentName = "GetGreeting Method")] private static string GetGreeting() { Metrics.AddMetric("GetGreeting_Invocations", 1, MetricUnit.Count); return "Hello Powertools for AWS Lambda (.NET)"; } }
3. aws-lambda-tools-defaults.json
aws-lambda-tools-defaults.json fornece os valores padrão para o assistente de implantação da AWS dentro do Visual Studio e os comandos do AWS Lambda adicionados à CLI do .NET Core. Veja a seguir um exemplo do arquivo aws-lambda-tools-defaults.json incluído no projeto:
{ "profile": "Default", "region": "us-east-1", "configuration": "Release", "s3-prefix": "ServerlessPowertools/", "template": "serverless.template", "template-parameters": "" }
Implantar o aplicativo sem servidor
Para implantar a aplicação sem servidor, execute as seguintes etapas:
-
No Explorador de soluções, abra o menu de contexto do seu projeto (clique com o botão direito do mouse) e selecione Publicar no AWS Lambda para abrir a caixa de diálogo Publicar aplicação sem servidor da AWS.
-
Na caixa de diálogo Publicar aplicação sem servidor da AWS, insira um nome para o contêiner da pilha do CloudFormation no campo Nome da pilha.
-
No campo Bucket do S3, escolha um bucket do Amazon S3 para o qual o pacote da aplicação será carregado ou clique no botão Novo... e insira o nome de um novo bucket do Amazon S3. Depois, selecione Publicar para implantar a aplicação.
nota
Sua pilha do CloudFormation e o bucket do Amazon S3 devem existir na mesma região da AWS. As configurações restantes do seu projeto são definidas no arquivo
serverless.template.
-
A janela de visualização Pilha é aberta durante o processo de publicação. Quando a implantação é concluída, o campo Status exibe:
CREATE_COMPLETE.
Testar o aplicativo sem servidores
Quando a criação da pilha estiver concluída, você poderá visualizar a aplicação usando o URL sem servidor da AWS. Se você concluiu este tutorial sem adicionar nenhuma função ou parâmetro adicional, acessar o URL sem servidor da AWS exibirá a seguinte frase em seu navegador da web: Hello Powertools for AWS Lambda (.NET).