Projeto básico do AWS Lambda de criação de imagem do Docker
Use o kit de ferramentas para Visual Studio para implantar a função do AWS Lambda 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, 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 no Guia do desenvolvedor do AWS Lambda.
Para obter informações adicionais sobre o uso do AWS Toolkit for Visual Studio com o Lambda, consulte o tópico Usar os modelos do AWS Lambda no AWS Toolkit for Visual Studio deste Guia do usuário.
Criar um projeto do Lambda do Visual Studio .NET Core
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.
Como criar um projeto do Lambda do Visual Studio .NET Core
-
No Visual Studio, expanda o menu Arquivo, expanda Novo e selecione Projeto.
-
Na caixa de diálogo Novo projeto, defina as caixas suspensas Idioma, Plataforma e Tipo de projeto como “Todos” e digite
aws lambdano campo Pesquisar. Escolha o modelo Projeto do AWS Lambda (.NET Core - C#). -
No campo Nome do projeto, insira
AWSLambdaDocker, especifique o Local do arquivo e clique em Criar. -
Na página Selecionar esquema, escolha o esquema .NET 8 (imagem de contêiner) e selecione 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
As seções a seguir examinam os três arquivos de projeto criados pelo esquema .NET 8 (imagem de contêiner):
-
Dockerfile -
aws-lambda-tools-defaults.json -
Function.cs
1. Dockerfile
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 umENTRYPOINT, 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 a AWS sobre 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
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 o perfil da AWS. -
region: define a região da AWS em que os 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 noDockerfile. -
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. Aqui, a configuraçãoimage-commandpreenche 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 esquema .NET 8 (imagem de contêiner).
{ "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
O arquivo Function.cs define as funções C# 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
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
-
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.
-
Na página Fazer upload de função do Lambda, faça o seguinte:
-
Em Tipo de pacote,
Imagefoi selecionado automaticamente como seu Tipo de pacote porque o assistente de publicação detectou umDockerfileem seu projeto. -
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.
-
Em Descrição, insira o texto a ser exibido com sua instância no Console de gerenciamento da AWS.
-
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
Dockerfileincluir umaCMDpara instruir como iniciar a função do Lambda. -
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.
-
Em Tag da imagem, insira uma tag do Docker para associá-la à sua imagem no repositório.
-
Escolha Avançar.
-
-
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 um perfil, escolha Novo perfil baseado em política gerenciada pela AWS e selecione AWSLambdaBasicExecutionRole.
nota
A conta deve ter permissão para executar a ação ListPolicies do IAM. Do contrário, a lista Nome da função estará vazia.
-
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.
-
Para invocar manualmente a função do Lambda, na guia Função de teste, insira
hello image based lambdano campo de entrada de texto livre da solicitação e escolha Invocar. Seu texto, convertido em maiúsculas, aparecerá em Resposta.
-
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 Visualizar -> AWS Explorer
-
Observe as opções adicionais de configuração específicas da imagem na guia Configuração. Essa guia possibilita substituir o
ENTRYPOINT,CMDeWORKDIRque podem ter sido especificados no Dockerfile. Descrição é a descrição que você inseriu (se for o caso) durante o upload/publicação.
Limpeza
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
Para obter informações sobre como criar e testar imagens do Lambda, consulte Trabalhar com imagens de contêiner do Lambda.
Para obter informações sobre implantação, permissões e substituição de configurações de imagens de contêiner, consulte Configurar funções.