

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 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).