

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# AWS Lambda
<a name="lambda-index"></a>

Desenvolva e implante suas funções C\$1 Lambda baseadas em .NET Core com o. AWS Toolkit for Visual Studio AWS Lambda é um serviço de computação que permite executar código sem provisionar ou gerenciar servidores. O Toolkit for Visual Studio AWS Lambda inclui modelos de projeto do.NET Core para Visual Studio. 

Para obter mais informações sobre AWS Lambda, consulte o [AWS Lambda Developer Guide](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html).

Para obter mais informações sobre o .NET Core, consulte o guia do Microsoft [.NET Core](https://docs.microsoft.com/en-us/dotnet/articles/core/). Para obter os pré-requisitos e as instruções de instalação do .NET Core para plataformas Windows, macOS e Linux, consulte [Downloads do .NET Core](https://www.microsoft.com/net/download/core).

Os tópicos a seguir descrevem como trabalhar com o AWS Lambda uso do Toolkit for Visual Studio.

**Topics**
+ [AWS Lambda Projeto básico](lambda-creating-project-in-visual-studio.md)
+ [AWS Lambda Projeto básico de criação de imagem Docker](lambda-creating-project-docker-image.md)
+ [Tutorial: Crie e teste um aplicativo sem servidor com AWS Lambda](lambda-build-test-severless-app.md)
+ [Tutorial: Creating an Amazon Rekognition Lambda Application](lambda-rekognition-example.md)
+ [Tutorial: Usando o Amazon Logging Frameworks AWS Lambda para criar registros de aplicativos](cw-log-frameworks.md)

# AWS Lambda Projeto básico
<a name="lambda-creating-project-in-visual-studio"></a>

Você pode criar uma função do Lambda usando modelos de projeto do Microsoft .NET Core, no AWS Toolkit for Visual Studio.

## Criar um projeto do Lambda do Visual Studio .NET Core
<a name="create-a-visual-studio-net-core-lam-project"></a>

Você pode usar modelos e esquemas do Lambda no Visual Studio para ajudar a acelerar a inicialização do seu projeto. Os esquemas do Lambda contêm funções pré-escritas que simplificam a criação de uma base de projeto flexível.

**nota**  
O serviço Lambda tem limites de dados para diferentes tipos de pacotes. Para obter informações detalhadas sobre os limites de dados, consulte o tópico [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) no Guia do usuário do *AWS Lambda*.

**Como criar um projeto do Lambda no Visual Studio**

1. No Visual Studio, expanda o menu **Arquivo**, expanda **Novo** e selecione **Projeto**.

1. Na caixa de diálogo **Novo projeto**, defina as caixas suspensas **Idioma**, **Plataforma** e **Tipo de projeto** como “Todos” e digite **aws lambda** no campo **Pesquisar**. Escolha o modelo **Projeto do AWS Lambda (.NET Core - C\$1)**.

1. No campo **Nome**, insira **AWSLambdaSample**, especifique o **Local** do arquivo desejado e clique em **Criar** para prosseguir.

1. Na página **Selecionar esquema**, selecione o esquema **Função vazia** e clique em **Concluir** para criar o projeto do Visual Studio.

## Revisar os arquivos de projeto
<a name="review-the-project-files"></a>

Há dois arquivos de projeto revisar: `aws-lambda-tools-defaults.json` e `Function.cs`.

O exemplo a seguir mostra o arquivo `aws-lambda-tools-defaults.json`, criado automaticamente como parte do projeto. É possível definir as opções de compilação usando os campos nesse arquivo. 

**nota**  
 Os modelos de projeto no Visual Studio contêm muitos campos diferentes. Observe o seguinte:  
**function-handler**: especifica o método executado quando a função do Lambda é executada.
A especificação de um valor no campo **function-handler** preenche previamente esse valor no assistente de publicação.
Se você renomear a função, a classe ou o conjunto, precisará atualizar o campo correspondente no arquivo `aws-lambda-tools-defaults.json`.

```
{
  "Information": [
    "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.",
    "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.",
    "dotnet lambda help",
    "All the command line options for the Lambda command can be specified in this file."
  ],
  "profile": "default",
  "region": "us-west-2",
  "configuration": "Release",
  "function-architecture": "x86_64",
  "function-runtime": "dotnet8",
  "function-memory-size": 512,
  "function-timeout": 30,
  "function-handler": "AWSLambdaSample::AWSLambdaSample.Function::FunctionHandler"
}
```

Examine o arquivo `Function.cs`. O `Function.cs` define as funções c\$1 a serem expostas como funções do Lambda. Esse `FunctionHandler` é a funcionalidade do Lambda que é executada quando a função do Lambda é executada. Neste projeto, há uma função definida: `FunctionHandler`, que chama `ToUpper()` no texto de entrada. 

O projeto já está pronto para ser publicado no Lambda.

## Publicar no Lambda
<a name="publish-to-lam"></a>

O procedimento e a imagem a seguir demonstram como fazer upload de uma função no Lambda usando o AWS Toolkit for Visual Studio.

![\[Invocação da página da função de teste\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/uploadnet8.png)


**Publicar uma função no Lambda**

1. Navegue até o AWS Explorer expandindo **Exibir** e escolhendo **AWS Explorer**.

1. No **Solution Explorer**, abra o menu de contexto do projeto que você deseja publicar (clique com o botão direito do mouse) e escolha **Publish to AWS Lambda para** abrir a janela **Carregar função Lambda**.

1. Na janela **Fazer upload de função do Lambda**, preencha os seguintes campos:

   1. **Tipo de pacote**: escolha **Zip**. Um arquivo ZIP será criado como resultado do processo de compilação e será carregado no Lambda. Você também pode escolher **Image** como **Tipo de pacote**. O [Tutorial: Projeto básico do Lambda para criação de imagens do Docker](lambda-creating-project-docker-image.md) descreve como publicar usando o **Tipo de pacote** **Image**.

   1. **Runtime do Lambda**: escolha o runtime do Lambda no menu suspenso.

   1. **Arquitetura**: selecione sua opção de arquitetura preferida.

   1. **Nome da função**: selecione a opção **Criar nova função**, depois insira um nome de exibição para a instância do Lambda. Esse nome é referenciado tanto pelo AWS Explorer quanto pelas Console de gerenciamento da AWS telas.

   1. **Manipulador**: use este campo para especificar um manipulador de funções. Por exemplo: **AWSLambdaSample::AWSLambdaSample.Function::FunctionHandler**.

   1. *(Opcional) ***Descrição**: insira um texto descritivo que será exibido com a instância no Console de gerenciamento da AWS.

   1. **Configuração**: escolha a configuração desejada no menu suspenso.

   1. **Framework**: escolha o framework desejado no menu suspenso.

   1. **Salvar configurações**: selecione essa caixa para salvar as configurações atuais em `aws-lambda-tools-defaults.json` como padrão para implantações futuras.

   1. Clique em **Próximo** para prosseguir até a janela **Detalhes avançados da função**.

1. Na janela **Detalhes avançados da função**, preencha os seguintes campos:

   1. **Nome da função**: escolha uma função associada à sua conta. A função fornece credenciais temporárias para todas as chamadas de AWS serviço feitas pelo código na função. Se você não tiver uma função, role para localizar **Nova função com base na política AWS gerenciada** no seletor suspenso e escolha. **AWSLambdaBasicExecutionRole** Essa função tem permissões de acesso mínimas. 
**nota**  
Sua conta deve ter permissão para executar a ListPolicies ação do IAM, ou a lista de **nomes da função** ficará vazia e você não poderá continuar.

   1. *(Opcional)* Se a função do Lambda acessar recursos em uma Amazon VPC, selecione as sub-redes e os grupos de segurança.

   1. *(Opcional)* Defina todas as variáveis de ambiente das quais a função do Lambda precisa. As chaves são criptografadas automaticamente pela chave de serviço padrão, que é gratuita. Como alternativa, você pode especificar uma AWS KMS chave, pela qual há uma cobrança. [KMS](https://aws.amazon.com/kms/) é um serviço gerenciado que você pode usar para criar e controlar chaves de criptografia usadas para criptografar os dados. Se você tiver uma AWS KMS chave, poderá selecioná-la na lista.

1. Selecione **Fazer upload** para abrir a janela **Upload da função** e iniciar o processo de upload.
**nota**  
A página **Função de Uploading** é exibida enquanto a função está sendo carregada para. AWS Para manter o assistente aberto após o upload, de maneira que você possa visualizar o relatório, desmarque **Fechar o assistente automaticamente após a conclusão bem-sucedida** na parte inferior do formulário antes da conclusão do upload.   
Depois que a função for carregada, sua função do Lambda estará ativa. A página **Função:** é aberta e exibe a configuração da sua nova função do Lambda.

1. Na guia **Função de teste**, insira `hello lambda!` no campo de entrada de texto e selecione **Invocar** para invocar manualmente a função do Lambda. O texto aparece na guia **Resposta**, convertido para maiúsculas. 
**nota**  
Você pode reabrir a visualização **Função:** a qualquer momento clicando duas vezes na instância implantada, localizada no **AWS Explorer** abaixo do nó **AWS Lambda**.  
![\[Invocação da página da função de teste\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/invokeBasic.PNG)

1. *(Opcional)* Para confirmar que você publicou com sucesso sua função Lambda, faça login no Console de gerenciamento da AWS e escolha Lambda. O console exibe todas as funções do Lambda publicadas, incluindo a que você acabou de criar.

## Limpeza
<a name="cleanup-lam"></a>

Se você não quiser continuar desenvolvendo com este exemplo, exclua a função que implantada para que você não receba cobranças por recursos não utilizados em sua conta.

**nota**  
O Lambda monitora automaticamente as funções do Lambda para você, relatando métricas por meio da Amazon. CloudWatch Para monitorar e solucionar problemas de sua função, consulte o tópico [Solução de problemas e monitoramento de funções AWS Lambda com a CloudWatch Amazon](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html) no Guia AWS Lambda do desenvolvedor.

**Como excluir uma função**

1. No **AWS Explorer**, expanda o nó **AWS Lambda**.

1. Clique com o botão direito do mouse na instância implantada e selecione **Excluir**.

# AWS Lambda Projeto básico de criação de imagem Docker
<a name="lambda-creating-project-docker-image"></a>

Você pode usar o Toolkit for Visual Studio para implantar AWS Lambda sua função como uma imagem do Docker. Usando o Docker, você tem maior controle sobre o runtime. Por exemplo, é possível escolher runtimes personalizados, como o .NET 8.0. A imagem do Docker é implantada da mesma forma que qualquer outra imagem de contêiner. Este tutorial é muito semelhante ao [Tutorial: Projeto básico do Lambda](lambda-creating-project-in-visual-studio.md), com duas diferenças:
+ Um Dockerfile está incluído no projeto.
+ Uma configuração de publicação alternativa é escolhida.

Para obter informações sobre imagens de contêiner do Lambda, consulte [Pacotes de implantação do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) no *Guia do desenvolvedor do AWS Lambda *.

Para obter informações adicionais sobre como trabalhar com o Lambda AWS Toolkit for Visual Studio, consulte [Usando os AWS Lambda modelos no AWS Toolkit for Visual Studio](lambda-index.md) tópico deste Guia do usuário.

## Criar um projeto do Lambda do Visual Studio .NET Core
<a name="create-a-visual-studio-net-core-lam-project"></a>

É possível usar modelos e esquemas do Lambda no Visual Studio para ajudar a acelerar a inicialização do seu projeto. Os esquemas do Lambda contêm funções pré-escritas que simplificam a criação de uma base de projeto flexível.

**Como criar um projeto do Lambda do Visual Studio .NET Core**

1. No Visual Studio, expanda o menu **Arquivo**, expanda **Novo** e selecione **Projeto**.

1. Na caixa de diálogo **Novo projeto**, defina as caixas suspensas **Idioma**, **Plataforma** e **Tipo de projeto** como “Todos” e digite **aws lambda** no campo **Pesquisar**. Escolha o modelo **Projeto do AWS Lambda (.NET Core - C\$1)**.

1. No campo **Nome do projeto**, insira **AWSLambdaDocker**, especifique o **Local** do arquivo e clique em **Criar**.

1. Na página **Selecionar esquema, escolha o blueprint** **.NET 8 (imagem de contêiner)** e, em seguida, escolha **Concluir** para criar o projeto do Visual Studio. Você já pode revisar a estrutura do projeto e o código.

## Revisar os arquivos de projeto
<a name="review-the-project-files"></a>

As seções a seguir examinam os três arquivos de projeto criados pelo esquema **.NET 8 (imagem de contêiner)**:

1. `Dockerfile`

1. `aws-lambda-tools-defaults.json`

1. `Function.cs`

### 1. Dockerfile
<a name="dockerfile"></a>

O `Dockerfile` executa três ações principais:
+ `FROM`: estabelece a imagem básica a ser utilizada para essa imagem. Essa imagem base fornece o runtime do .NET, runtime do Lambda e um script de shell que oferece um ponto de entrada para o processo do .NET para Lambda.
+ `WORKDIR`: estabelece o diretório de trabalho interno da imagem como`/var/task`.
+ `COPY`: os arquivos gerados no processo de compilação local serão copiados para o diretório de trabalho da imagem.

A seguir estão as ações do `Dockerfile` opcionais que você pode especificar:
+ `ENTRYPOINT`: a imagem básica já inclui um `ENTRYPOINT`, que é o processo de inicialização executado quando a imagem é iniciada. Se você desejar especificar o seu, essa ação substituirá esse ponto de entrada básico.
+ `CMD`: instrui AWS qual código personalizado você deseja executar. Ele espera um nome totalmente qualificado para seu método personalizado. Essa linha precisa ser incluída diretamente no Dockerfile ou pode ser especificada durante o processo de publicação. 

  ```
  # Example of alternative way to specify the Lambda target method rather than during the publish process.
  CMD [ "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler"]
  ```

Veja a seguir um exemplo de um Dockerfile criado pelo esquema .NET 8 (imagem de contêiner).

```
FROM public.ecr.aws/lambda/dotnet:8

WORKDIR /var/task

# This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. 
# The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built 
# with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
# will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
# set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
#
# Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image.
# For more information on this approach checkout the project's README.md file.
COPY "bin/Release/lambda-publish"  .
```

### 2. aws-lambda-tools-defaults.json
<a name="aws-lambda-tools-defaults"></a>

O arquivo `aws-lambda-tools-defaults.json` é usado para especificar valores padrão para o assistente de implantação do kit de ferramentas para Visual Studio e a CLI do .NET Core. A lista a seguir descreve os campos que você pode definir no arquivo `aws-lambda-tools-defaults.json`.
+ `profile`: define seu AWS perfil.
+ `region`: define a AWS região em que seus recursos são armazenados.
+ `configuration`: define a configuração usada para publicar a função.
+ `package-type`: define o tipo de pacote de implantação como uma imagem de contêiner ou arquivamento de arquivos .zip.
+ `function-memory-size`: define a alocação de memória para a função em MB.
+ `function-timeout`: o tempo limite é o período máximo, em segundos, durante o qual uma função do Lambda pode ser executada. Você pode ajustá-lo em incrementos de 1 segundo até um máximo de 15 minutos.
+ `docker-host-build-output-dir`: define o diretório de saída do processo de compilação que se correlaciona com as instruções no `Dockerfile`.
+ `image-command`: é um nome totalmente qualificado para seu método, o código que você deseja que a função do Lambda execute. A sintaxe é: `{Assembly}::{Namespace}.{ClassName}::{MethodName}`. Para obter mais informações, consulte [Handler signatures](https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html#csharp-handler-signatures). Aqui, a configuração `image-command` preenche automaticamente esse valor no assistente de publicação do Visual Studio em um momento posterior. 

Veja a seguir um exemplo de um aws-lambda-tools-defaults .json criado pelo blueprint .NET 8 (Container Image).

```
{
  "Information": [
    "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.",
    "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.",
    "dotnet lambda help",
    "All the command line options for the Lambda command can be specified in this file."
  ],
  "profile": "default",
  "region": "us-west-2",
  "configuration": "Release",
  "package-type": "image",
  "function-memory-size": 512,
  "function-timeout": 30,
  "image-command": "AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler",
  "docker-host-build-output-dir": "./bin/Release/lambda-publish"
}
```

### 3. Function.cs
<a name="w2aac15c45c16c17c21"></a>

O arquivo `Function.cs` define as funções C\$1 a serem expostas como funções do Lambda. Esse `FunctionHandler` é a funcionalidade do Lambda que é executada quando a função do Lambda é executada. Neste projeto, `FunctionHandler` chama `ToUpper()` no texto de entrada. 

## Publicar no Lambda
<a name="publish-to-lam"></a>

As imagens do Docker que são geradas pelo processo de compilação são carregadas no Amazon Elastic Container Registry (Amazon ECR). O Amazon ECR é um registro de contêiner do Docker totalmente gerenciado que facilita o armazenamento, o gerenciamento e a implantação de imagens de contêiner do Docker. O Amazon ECR hospeda a imagem, à qual o Lambda então se refere para fornecer a funcionalidade programada do Lambda quando invocada. 

**Como publicar uma função no Lambda**

1. No **Explorador de soluções**, abra o menu de contexto do projeto (clique com o botão direito do mouse) e escolha **Publicar no AWS Lambda** para abrir a janela **Fazer upload de função do Lambda**.

1. Na página **Fazer upload de função do Lambda**, faça o seguinte:  
![\[Tela de upload para publicação da função Lambda baseada em imagem em AWS\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-docker-03192024.png)

   1.  Em **Tipo de pacote**, **Image** foi selecionado automaticamente como seu **Tipo de pacote** porque o assistente de publicação detectou um `Dockerfile` em seu projeto. 

   1. Em **Nome da função**, insira um nome de exibição para sua instância do Lambda. Esse nome é o nome de referência exibido no AWS Explorer no Visual Studio e no Console de gerenciamento da AWS.

   1.  Em **Descrição**, insira o texto a ser exibido com sua instância no Console de gerenciamento da AWS.

   1. Em **Comando de imagem**, insira um caminho totalmente qualificado para o método que você deseja que a função do Lambda execute: **AWSLambdaDocker::AWSLambdaDocker.Function::FunctionHandler**. 
**nota**  
Qualquer nome de método inserido aqui substituirá qualquer instrução CMD no Dockerfile. A inserção do **comando de imagem** é opcional somente se o `Dockerfile` incluir uma `CMD` para instruir como iniciar a função do Lambda.

   1. Em **Repositório de imagens**, insira o nome de um Amazon Elastic Container Registry novo ou existente. A imagem do Docker que o processo de compilação cria é carregada nesse registro. A definição do Lambda que está sendo publicada fará referência a essa imagem do Amazon ECR.

   1.  Em **Tag da imagem**, insira uma tag do Docker para associá-la à sua imagem no repositório. 

   1. Escolha **Próximo**.

1. Na página **Detalhes avançados da função**, em **Nome da função**, escolha uma função associada à sua conta. A função é usada para fornecer credenciais para todas as chamadas à Amazon Web Services feitas pelo código na função. Se você não tiver uma função, escolha **Nova função com base na política AWS gerenciada** e, em seguida, escolha **AWSLambdaBasicExecutionRole**. 
**nota**  
Sua conta precisa ter permissão para executar a ListPolicies ação do IAM, ou a lista de **nomes da função** ficará vazia.

1. Selecione **Fazer upload** para iniciar os processos de upload e publicação.
**nota**  
A página **Carregando a função** é exibida enquanto a função está sendo carregada. Em seguida, o processo de publicação cria a imagem com base nos parâmetros de configuração, cria o repositório do Amazon ECR, se necessário, carrega a imagem no repositório e cria o Lambda faz referência a esse repositório com essa imagem.   
Depois que a função é carregada, a página **Função** é aberta e exibe a configuração da nova função do Lambda. 

1. Para invocar manualmente a função do Lambda, na guia **Função de teste**, insira `hello image based lambda` no campo de entrada de texto livre da solicitação e escolha **Invocar**. Seu texto, convertido em maiúsculas, aparecerá em **Resposta**.   
![\[A guia Função de teste da página de visualização da função publicada tem um botão para invocar manualmente o método do Lambda.\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-invoke-docker-03192024.png)

1. Para visualizar o repositório, no **AWS Explorer**, em **Amazon Elastic Container Service**, escolha **Repositórios**.

   Você pode reabrir a visualização **Função:** a qualquer momento clicando duas vezes na instância implantada, localizada no **AWS Explorer** abaixo do nó **AWS Lambda**.
**nota**  
Se a janela do AWS Explorer não estiver aberta, você pode encaixá-la via **Exibir** -> **AWS Explorer**

1. Observe as opções adicionais de configuração específicas da imagem na guia **Configuração**. Essa guia possibilita substituir o `ENTRYPOINT`, `CMD` e `WORKDIR` que podem ter sido especificados no Dockerfile. **Descrição** é a descrição que você inseriu (se for o caso) durante o upload/publicação.

## Limpeza
<a name="cleanup-lam"></a>

Se você não quiser continuar desenvolvendo com este exemplo, lembre-se de excluir a função e a imagem do ECR que foram implantadas para que você não receba cobranças por recursos não utilizados em sua conta. 
+ As funções podem ser excluídas clicando com o botão direito na instância implantada, localizada no **AWS Explorer** abaixo do nó **AWS Lambda**. 
+ Os repositórios podem ser excluídos no **AWS Explorer** em **Amazon Elastic Container Service** -> **Repositórios**.

## Próximas etapas
<a name="next-steps-lam"></a>

Para obter informações sobre como criar e testar imagens do Lambda, consulte [Trabalhar com imagens de contêiner do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html).

Para obter informações sobre implantação, permissões e substituição de configurações de imagens de contêiner, consulte [Configurar funções](https://docs.aws.amazon.com/lambda/latest/dg/configuration-images.html).

# Tutorial: Crie e teste um aplicativo sem servidor com AWS Lambda
<a name="lambda-build-test-severless-app"></a>

Você pode criar um aplicativo Lambda sem servidor usando um modelo. AWS Toolkit for Visual Studio Os modelos de projeto Lambda incluem um para um **aplicativo AWS sem servidor**, que é a AWS Toolkit for Visual Studio implementação do modelo de aplicativo [AWS sem servidor](https://github.com/awslabs/serverless-application-model) (SAM).AWS Usando esse tipo de projeto, você pode desenvolver uma coleção de AWS Lambda funções e implantá-las com todos os AWS recursos necessários como um aplicativo inteiro, usando AWS CloudFormation para orquestrar a implantação.

Para obter pré-requisitos e informações sobre como configurar o AWS Toolkit for Visual Studio, consulte Usando os [modelos AWS Lambda no Toolkit for Visual Studio AWS](lambda-index.md).

**Topics**
+ [Criar um novo projeto de aplicativo AWS sem servidor](#create-a-new-aws-serverless-application-project)
+ [Revisar os arquivos da aplicação de tecnologia sem servidor](#examine-the-files-in-the-serverless-application)
+ [Implantar o aplicativo sem servidor](#deploy-the-serverless-application)
+ [Testar o aplicativo sem servidores](#test-the-serverless-application)

## Criar um novo projeto de aplicativo AWS sem servidor
<a name="create-a-new-aws-serverless-application-project"></a>

AWS Projetos de aplicativos sem servidor criam funções Lambda com um modelo sem servidor. CloudFormation CloudFormation os modelos permitem que você defina recursos adicionais, como bancos de dados, adicione funções do IAM e implante várias funções ao mesmo tempo. Isso difere dos projetos AWS Lambda, que se concentram no desenvolvimento e na implantação de uma única função Lambda.

O procedimento a seguir descreve como criar um projeto de aplicação sem servidor da AWS .

1. No Visual Studio, expanda o menu **Arquivo**, expanda **Novo** e selecione **Projeto**.

1. 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 lambda** no campo **Pesquisar**.

1. Selecione o modelo **AWS Serverless Application with Tests (.NET Core - C\$1)**.
**nota**  
É possível que o modelo **Aplicação de tecnologia sem servidor da AWS com testes (.NET Core - C\$1)** não seja preenchido no topo dos resultados.

1. Clique em **Avançar** para abrir a caixa de diálogo **Configurar novo projeto**.

1. Na caixa de diálogo **Configurar novo projeto**, insira **ServerlessPowertools** em **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**.

1. 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 de tecnologia sem servidor
<a name="examine-the-files-in-the-serverless-application"></a>

As seções a seguir fornecem uma visão detalhada de três arquivos de aplicação sem servidor criados para o projeto:

1. serverless.template

1. Functions.cs

1. aws-lambda-tools-defaults.json

### 1. serverless.template
<a name="blogcs"></a>

Um `serverless.template` arquivo é um AWS CloudFormation modelo para declarar suas funções sem servidor e outros recursos. 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*`. É possível 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\$1SERVICE\$1NAME= ServerlessGreeting
+ POWERTOOLS\$1LOG\$1LEVEL=Info
+ POWERTOOLS\$1LOGGER\$1CASE= PascalCase
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1RESPONSE=true
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1ERROR=true
+ POWERTOOLS\$1METRICS\$1NAMESPACE= ServerlessGreeting

Para obter definições e detalhes adicionais sobre as variáveis de ambiente, consulte o site [Powertools for AWS Lambda references](https://awslabs.github.io/aws-lambda-powertools-dotnet/references/).

### 2. Functions.cs
<a name="functionscs"></a>

`Functions.cs` é um arquivo de classe que contém um método C\$1 mapeado para uma única função declarada no arquivo de modelo. A função do Lambda responde aos métodos `HTTP Get` da 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
<a name="functionscs"></a>

`aws-lambda-tools-defaults.json`fornece os valores padrão para o assistente de AWS implantação dentro do Visual Studio e os AWS Lambda comandos 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
<a name="deploy-the-serverless-application"></a>

Para implantar a aplicação sem servidor, execute as seguintes etapas:

1. No **Solution Explorer**, abra o menu de contexto do seu projeto (clique com o botão direito do mouse) e escolha **Publish to AWS Lambda para** abrir a caixa de diálogo **Publish AWS Serverless** Application.

1. Na caixa de diálogo **Publicar aplicativo AWS sem servidor**, insira um nome para o contêiner da CloudFormation pilha no campo Nome da **pilha**.

1. 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 CloudFormation pilha e o Amazon S3 Bucket devem existir na mesma região AWS . As configurações restantes do seu projeto são definidas no arquivo `serverless.template`.  
![\[Imagem da caixa de diálogo Publish AWS Serverless Application.\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-serverless-03192024.png)

1. 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`.  
![\[Imagem da janela de visualização da pilha de implantação no Visual Studio.\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-stackview-03192024.png)

## Testar o aplicativo sem servidores
<a name="test-the-serverless-application"></a>

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 seu URL AWS sem servidor exibe a seguinte frase em seu navegador da web:. `Hello Powertools for AWS Lambda (.NET)`

# Tutorial: Creating an Amazon Rekognition Lambda Application
<a name="lambda-rekognition-example"></a>

Este tutorial mostra como criar uma aplicação do Lambda que usa o Amazon Rekognition para marcar objetos do Amazon S3 com rótulos detectados.

Para obter pré-requisitos e informações sobre como configurar o AWS Toolkit for Visual Studio, consulte Usando os [modelos AWS Lambda no Toolkit for Visual Studio AWS](lambda-index.md).

## Criar um projeto do Image Rekognition do Lambda do Visual Studio .NET Core
<a name="create-a-visual-studio-net-core-lam-image-rekognition-project"></a>

O procedimento a seguir descreve como criar uma aplicação do Lambda do Amazon Rekognition por meio do AWS Toolkit for Visual Studio.

**nota**  
Após a criação, sua aplicação terá uma solução com dois projetos: o projeto de origem, que contém o código da função do Lambda a ser implantado no Lambda, e um projeto de teste que usa o xUnit para testar a função localmente.  
Às vezes, o Visual Studio não consegue encontrar todas as NuGet referências para seus projetos. Isso ocorre porque os blueprints exigem dependências que devem ser recuperadas. NuGet Quando novos projetos são criados, o Visual Studio extrai apenas referências locais e não referências remotas de NuGet. Para corrigir NuGet erros: clique com o botão direito do mouse nas referências e escolha **Restaurar pacotes**.

1. No Visual Studio, expanda o menu **Arquivo**, expanda **Novo** e selecione **Projeto**.

1. 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 lambda** no campo **Pesquisar**.

1. Selecione o modelo **AWS Lambda com testes (.NET Core - C\$1)**.

1. Clique em **Avançar** para abrir a caixa de diálogo **Configurar novo projeto**.

1. Na caixa de diálogo **Configurar seu novo projeto**, insira ImageRekognition "" como **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**.

1. Na caixa de diálogo **Selecionar esquema**, selecione o esquema **Detectar rótulos de imagens** e clique em **Concluir** para criar o projeto do Visual Studio.
**nota**  
Esse esquema fornece o código para escutar eventos do Amazon S3 e usa o Amazon Rekognition para detectar rótulos e adicioná-los ao objeto do S3 como tags.

## Revisar os arquivos de projeto
<a name="examine-the-files"></a>

As seções a seguir examinam esses arquivos de projeto:

1. `Function.cs`

1. `aws-lambda-tools-defaults.json`

### 1. Function.cs
<a name="functioncs"></a>

Dentro do arquivo `Function.cs`, o primeiro segmento do código é o atributo de conjunto, localizado na parte superior do arquivo. Por padrão, o Lambda só aceita parâmetros de entrada e tipos de retorno do tipo `System.IO.Stream`. Você deve registrar um serializador para usar classes tipadas para parâmetros de entrada e tipos de retorno. O atributo de conjunto registra o serializador JSON do Lambda, que usa `Newtonsoft.Json` para converter fluxos em classes tipadas. Você pode definir o serializador no nível de assembly ou método.

Veja a seguir um exemplo do atributo de conjunto:

```
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
```

A classe tem dois construtores. O primeiro é um construtor padrão usado quando o Lambda invoca a função. Esse construtor cria os clientes dos serviços Amazon S3 e Amazon Rekognition. O construtor também recupera AWS as credenciais desses clientes da função do IAM que você atribui à função ao implantá-la. A AWS região dos clientes é definida como a região em que sua função Lambda está sendo executada. Nesse esquema, você só deseja adicionar tags ao objeto do Amazon S3 caso o serviço Amazon Rekognition tenha um nível mínimo de confiança sobre o rótulo. Esse construtor verifica a variável de ambiente `MinConfidence` para determinar o nível de confiança aceitável. Você pode definir essa variável de ambiente ao implantar a função do Lambda.

Veja a seguir um exemplo do primeiro construtor de classe em `Function.cs`:

```
public Function()
{
    this.S3Client = new AmazonS3Client();
    this.RekognitionClient = new AmazonRekognitionClient();

    var environmentMinConfidence = System.Environment.GetEnvironmentVariable(MIN_CONFIDENCE_ENVIRONMENT_VARIABLE_NAME);
    if(!string.IsNullOrWhiteSpace(environmentMinConfidence))
    {
        float value;
        if(float.TryParse(environmentMinConfidence, out value))
        {
            this.MinConfidence = value;
            Console.WriteLine($"Setting minimum confidence to {this.MinConfidence}");
        }
        else
        {
            Console.WriteLine($"Failed to parse value {environmentMinConfidence} for minimum confidence. Reverting back to default of {this.MinConfidence}");
        }
    }
    else
    {
        Console.WriteLine($"Using default minimum confidence of {this.MinConfidence}");
    }
}
```

O exemplo a seguir demonstra como é possível utilizar o segundo construtor para testes. O projeto de teste configura os próprios clientes do S3 e do Rekognition e os passa:

```
public Function(IAmazonS3 s3Client, IAmazonRekognition rekognitionClient, float minConfidence)
{
    this.S3Client = s3Client;
    this.RekognitionClient = rekognitionClient;
    this.MinConfidence = minConfidence;
}
```

Veja a seguir um exemplo do método `FunctionHandler` dentro do arquivo `Function.cs`.

```
public async Task FunctionHandler(S3Event input, ILambdaContext context)
{
    foreach(var record in input.Records)
    {
        if(!SupportedImageTypes.Contains(Path.GetExtension(record.S3.Object.Key)))
        {
            Console.WriteLine($"Object {record.S3.Bucket.Name}:{record.S3.Object.Key} is not a supported image type");
            continue;
        }

        Console.WriteLine($"Looking for labels in image {record.S3.Bucket.Name}:{record.S3.Object.Key}");
        var detectResponses = await this.RekognitionClient.DetectLabelsAsync(new DetectLabelsRequest
        {
            MinConfidence = MinConfidence,
            Image = new Image
            {
                S3Object = new Amazon.Rekognition.Model.S3Object
                {
                    Bucket = record.S3.Bucket.Name,
                    Name = record.S3.Object.Key
                }
            }
        });

        var tags = new List();
        foreach(var label in detectResponses.Labels)
        {
            if(tags.Count < 10)
            {
                Console.WriteLine($"\tFound Label {label.Name} with confidence {label.Confidence}");
                tags.Add(new Tag { Key = label.Name, Value = label.Confidence.ToString() });
            }
            else
            {
                Console.WriteLine($"\tSkipped label {label.Name} with confidence {label.Confidence} because maximum number of tags reached");
            }
        }

        await this.S3Client.PutObjectTaggingAsync(new PutObjectTaggingRequest
        {
            BucketName = record.S3.Bucket.Name,
            Key = record.S3.Object.Key,
            Tagging = new Tagging
            {
                TagSet = tags
            }
        });
    }
    return;
}
```

 `FunctionHandler` é o método que o Lambda chamará depois de construir a instância. O parâmetro de entrada é do tipo `S3Event`, e não um `Stream`. Você pode fazer isso por causa do serializador JSON do Lambda registrado. O `S3Event` contém todas as informações sobre o evento acionado no Amazon S3. A função percorre todos os objetos do S3 que fizeram parte do evento e pede ao Rekognition para detectar rótulos. Depois que os rótulos forem detectados, eles serão adicionados como tags ao objeto do S3.

**nota**  
O código contém chamadas para `Console.WriteLine()`. Quando a função está em execução no Lambda, todas as chamadas são `Console.WriteLine()` redirecionadas para o Amazon Logs. CloudWatch 

### 2. aws-lambda-tools-defaults.json
<a name="toolsdefaults"></a>

O arquivo `aws-lambda-tools-defaults.json` contém valores padrão definidos pelo esquema para preencher previamente alguns dos campos no assistente de implantação. Também é útil para definir opções de linha de comandos para integração com a CLI do .NET Core.

Para acessar a integração da CLI do .NET Core, acesse o diretório do projeto da função e digite **dotnet lambda help**.

**nota**  
O manipulador da função indica qual método o Lambda deve chamar em resposta à função invocada. O formato desse campo é:`<assembly-name>::<full-type-name>::<method-name>`. O namespace deve ser incluído com o nome do tipo.

## Implantar a função
<a name="deploy-the-function"></a>

O procedimento a seguir descreve como implantar a função do Lambda.

1. **No **Solution Explorer**, clique com o botão direito do mouse no projeto Lambda e **escolha Publish to AWS Lambda para** abrir a janela Upload to. AWS Lambda**
**nota**  
Os valores predefinidos são recuperados do arquivo `aws-lambda-tools-defaults.json`.

1. Na janela **Fazer upload no AWS Lambda**, insira um nome no campo **Nome da função** e clique no botão **Próximo** para avançar até a janela **Detalhes avançados da função**.
**nota**  
Este exemplo usa o **Nome da função** **ImageRekognition**.  
![\[AWS Lambda function upload interface with package type, runtime, and configuration options.\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-imgrek-03192024.png)

1. Na janela **Detalhes avançados da função**, selecione um perfil do IAM que conceda permissão ao seu código para acessar seus recursos do Amazon S3 e do Amazon Rekognition.
**nota**  
Se você estiver seguindo este exemplo, selecione o perfil `AWSLambda_FullAccess`.

1. Defina a variável de ambiente `MinConfidence` como 60 e selecione **Fazer upload** para iniciar o processo de implantação. O processo de publicação é concluído quando a visualização da **Função** é exibida no **AWS Explorer**.  
![\[AWS Lambda function configuration interface showing permissions, execution, and environment settings.\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-imgrek-advanced-03192024.png)

1. Após a implantação bem-sucedida, configure o Amazon S3 a fim de enviar os eventos para a nova função. Para isso, acesse a guia **Origens de eventos**.

1. Na guia **Origens de eventos**, clique no botão **Adicionar** e selecione o bucket do Amazon S3 para conectar à sua função do Lambda.
**nota**  
O bucket deve estar na mesma AWS região da sua função Lambda.

## Testar a função do
<a name="test-the-function"></a>

Agora que a função está implantada e um bucket do S3 está configurado como uma fonte de eventos para ele, abra o navegador de buckets do S3 no **AWS Explorer** para o bucket selecionado por você. Em seguida, faça upload de algumas imagens.

Quando o upload estiver concluído, você poderá confirmar se a função foi executada observando os logs na visualização da função. Ou clique com o botão direito do mouse no navegador de buckets e escolha **Properties (Propriedades)**. Na guia **Tags**, você pode visualizar as tags que foram aplicadas ao objeto.

![\[Properties window showing metadata tags for an image file in a cloud storage bucket.\]](http://docs.aws.amazon.com/pt_br/toolkit-for-visual-studio/latest/user-guide/images/lambda-object-properties.png)


# Tutorial: Usando o Amazon Logging Frameworks AWS Lambda para criar registros de aplicativos
<a name="cw-log-frameworks"></a>

Você pode usar o Amazon CloudWatch Logs para monitorar, armazenar e acessar os registros do seu aplicativo. Para inserir dados de registro no CloudWatch Logs, use um AWS SDK ou instale o agente do CloudWatch Logs para monitorar determinadas pastas de registro. CloudWatch O Logs é integrado a várias estruturas populares de registro do.NET, simplificando os fluxos de trabalho.

Para começar a trabalhar com estruturas de registro de CloudWatch registros e do.NET, adicione o NuGet pacote apropriado e a fonte de saída de CloudWatch registros ao seu aplicativo e, em seguida, use sua biblioteca de registros normalmente. Isso permite que seu aplicativo registre mensagens com sua estrutura do.NET, enviando-as para o CloudWatch Logs e exibindo as mensagens de registro do seu aplicativo no console do CloudWatch Logs. Você também pode configurar métricas e alarmes no console de CloudWatch registros, com base nas mensagens de registro do seu aplicativo.

Os frameworks de registro em log do .NET compatíveis incluem:
+ **NLog**: Para ver, consulte o pacote [nuget.org NLog ](https://www.nuget.org/packages/AWS.Logger.NLog).
+ **Log4net**: para ver, consulte o [pacote Log4net do nuget.org](https://www.nuget.org/packages/AWS.Logger.NLog).
+ **Framework de registro em log ASP.NET Core**: para ver, consulte o [pacote do framework de registro em log ASP.NET Core do nuget.org](https://www.nuget.org/packages/AWS.Logger.AspNetCore/).

Veja a seguir um exemplo de um `NLog.config` arquivo que habilita o CloudWatch Logs e o console como saída para mensagens de log adicionando o `AWS.Logger.NLog` NuGet pacote e o AWS destino em`NLog.config`.

```
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwExceptions="true">
  <targets>
    <target name="aws" type="AWSTarget" logGroup="NLog.ConfigExample" region="us-east-1"/>
    <target name="logfile" xsi:type="Console" layout="${callsite} ${message}" />
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile,aws" />
  </rules>
</nlog>
```



Os plug-ins de registro são todos criados com base no AWS SDK para .NET e autenticam suas AWS credenciais em um processo semelhante ao SDK. O exemplo a seguir detalha as permissões exigidas pelas credenciais do plug-in de registro para acessar o CloudWatch Logs:

**nota**  
Os plug-ins de registro AWS do.NET são um projeto de código aberto. Para obter mais informações, exemplos e instruções, consulte os tópicos de [exemplos](https://github.com/aws/aws-logging-dotnet/tree/master/samples) e [instruções](https://github.com/aws/aws-logging-dotnet/blob/master/README.md) no [ GitHubrepositório.NET do AWS Logging](https://github.com/aws/aws-logging-dotnet).

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups"
      ],
      "Resource": [
        "arn:aws:logs:*:*:*"
      ]
    }
  ]
}
```

------