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á.
Implantar funções do Lambda com imagens de contêiner
Criado por Ram Kandaswamy (AWS)
Ambiente: produção | Tecnologias: Contêineres e microsserviços;; CloudNative DevelopmentAndTesting; Sem servidor | Workload: todas as outras workloads |
Serviços da AWS: Amazon EC2 Container Registry; AWS Lambda |
Resumo
O AWS Lambda oferece suporte a imagens de contêineres como modelo de implantação. Esse padrão mostra como implantar funções do Lambda por meio de imagens de contêiner.
O Lambda é um serviço de computação com tecnologia sem servidor e orientado a eventos que você pode usar para executar código para praticamente qualquer tipo de aplicativo ou serviço de backend sem provisionar ou gerenciar servidores. Com o suporte a imagens de contêiner para funções do Lambda, você obtém os benefícios de até 10 GB de armazenamento para o artefato do seu aplicativo e a capacidade de usar ferramentas familiares de desenvolvimento de imagens de contêiner.
O exemplo desse padrão usa Python como linguagem de programação subjacente, mas você pode usar outras linguagens, como Java, Node.js ou Go. O padrão usa a AWS CodeCommit como fonte, mas você também pode usar GitHub o Bitbucket ou o Amazon Simple Storage Service (Amazon S3).
Pré-requisitos e limitações
Pré-requisitos
Amazon Elastic Container Registry (Amazon ECR) ativado
Código do aplicativo
Imagens do Docker com o cliente de interface de runtime e a versão mais recente do Python
Limitações
O tamanho máximo de imagem suportado é 10 GB.
O runtime máximo para uma implantação de contêiner baseado em Lambda é de 15 minutos.
Arquitetura
Pilha de tecnologias de destino
Linguagem de programação Python
AWS CodeBuild
AWS CodeCommit
Docker image (Imagem do Docker)
Amazon ECR
AWS Identity and Access Management (IAM)
AWS Lambda
CloudWatch Registros da Amazon
Arquitetura de destino
Você cria um repositório e confirma o código do aplicativo usando CodeCommit.
O CodeBuild projeto é iniciado quando uma alteração é feita em CodeCommit, que é usada como provedor de origem.
O CodeBuild projeto cria a imagem do Docker e a publica no Amazon ECR.
Você cria a função do Lambda usando a imagem no Amazon ECR.
Automação e escala
Esse padrão pode ser automatizado usando a AWS CloudFormation, o AWS Cloud Development Kit (AWS CDK) ou operações de API de um SDK. O Lambda pode ser escalado automaticamente com base no número de solicitações, e você pode ajustá-lo usando os parâmetros de simultaneidade. Para obter mais informações, consulte a documentação do Lambda.
Ferramentas
Serviços da AWS
O AWS CloudFormation Designer fornece um editor JSON e YAML integrado que ajuda você a visualizar e editar CloudFormation modelos.
CodeBuildA AWS é um serviço de criação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes unitários e produzir artefatos prontos para implantação.
CodeCommitA AWS é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
CodeStarA AWS é um serviço baseado em nuvem para criar, gerenciar e trabalhar com projetos de desenvolvimento de software na AWS. Para esse padrão, você pode usar a AWS CodeStar ou outro ambiente de desenvolvimento.
O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
Outras ferramentas
O Docker
é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.
Práticas recomendadas
Torne sua função o mais eficiente e reduzida possível para evitar o carregamento de arquivos desnecessários.
Esforce-se para ter camadas estáticas no topo da sua lista de arquivos do Docker e coloque as camadas que mudam com mais frequência na parte inferior. Isso melhora o armazenamento em cache, o que aumenta o desempenho.
O proprietário da imagem é responsável por atualizar e corrigir a imagem. Adicione essa cadência de atualização aos seus processos operacionais. Para obter mais informações, consulte a documentação do AWS Lambda.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie um CodeCommit repositório. | Crie um CodeCommit repositório que conterá o Dockerfile, o arquivo e o | Desenvolvedor |
Crie um CodeBuild projeto. | No CodeBuild console, crie um novo projeto que use o CodeCommit repositório e o Confirme se o modo privilegiado está ativado. Isso é necessário para criar imagens do Docker. Caso contrário, a imagem não será criada com êxito. Forneça valores para o nome e a descrição do projeto. Para o provedor de origem, escolha CodeCommit. Para obter mais informações, consulte a documentação da AWS. | Desenvolvedor |
Edite o Dockerfile. | O Dockerfile deve estar localizado no diretório de nível superior em que você está desenvolvendo o aplicativo. O código Python deve estar na pasta Ao criar imagens, use as imagens oficiais suportadas pelo Lambda Para obter detalhes, consulte a seção Informações adicionais. | Desenvolvedor |
Crie um repositório no Amazon ECR. | Crie um repositório de contêineres no Amazon ECR. No exemplo de comando a seguir, o nome do repositório criado é
| Administrador da AWS, desenvolvedor |
Envie a imagem para o Amazon ECR. | Você pode usar CodeBuild para realizar o processo de criação de imagens. CodeBuild precisa de permissão para interagir com o Amazon ECR e trabalhar com o S3. Como parte do processo, a imagem do Docker é criada e enviada para o registro do Amazon ECR. Para obter detalhes sobre o modelo e o código, consulte a seção Informações adicionais. | Desenvolvedor |
Verifique se a imagem está no repositório. | Para verificar se a imagem está no repositório, selecione Repositórios no console do Amazon ECR. A imagem deve ser listada, com tags e com os resultados de um relatório de verificação de vulnerabilidade, caso esse atributo tenha sido ativado nas configurações do Amazon ECR. Para obter mais informações, consulte a documentação da AWS. | Desenvolvedor |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Criar a função do Lambda. | No console do Lambda, selecione Criar função e, em seguida, selecione Imagem do contêiner. Insira o nome da função e o URI da imagem que está no repositório do Amazon ECR e selecione Criar função. Para obter mais informações, consulte a documentação do AWS Lambda. | Desenvolvedor de aplicativos |
Testar a função do Lambda. | Para invocar e testar a função, escolha Testar. Para obter mais informações, consulte a documentação do AWS Lambda. | Desenvolvedor de aplicativos |
Solução de problemas
Problema | Solução |
---|---|
A construção não está sendo bem-sucedida. |
|
Recursos relacionados
Mais informações
Edite o Dockerfile
O código a seguir mostra os comandos que você edita no Dockerfile.
FROM public.ecr.aws/lambda/python:3.11 # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} COPY requirements.txt ${LAMBDA_TASK_ROOT} # install dependencies RUN pip3 install --user -r requirements.txt # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "app.lambda_handler" ]
O valor do comando FROM
corresponde à imagem base do Python 3.11 que está usando a função do Lambda no repositório público de imagens do Amazon ECR.
O comando COPY app.py ${LAMBDA_TASK_ROOT}
copia o código para o diretório raiz da tarefa, que a função do Lambda usará. Esse comando usa a variável de ambiente para que não precisemos nos preocupar com o caminho real. A função a ser executada é passada como argumento para o comando CMD [ "app.lambda_handler" ]
.
O comando COPY requirements.txt
captura as dependências necessárias para o código.
O comando RUN pip install --user -r requirements.txt
instala as dependências no diretório local do usuário.
Para construir sua imagem, execute o seguinte comando.
docker build -t <image name> .
Adicione a imagem no Amazon ECR
No código a seguir, substitua aws_account_id
pelo número da conta e substitua us-east-1
se você estiver usando uma região diferente. O buildspec
arquivo usa o número da CodeBuild compilação para identificar de forma exclusiva as versões da imagem como um valor de tag. Você pode alterar isso de acordo com as suas necessidades.
O código personalizado do buildspec
phases: install: runtime-versions: python: 3.11 pre_build: commands: - python3 --version - pip3 install --upgrade pip - pip3 install --upgrade awscli - sudo docker info build: commands: - echo Build started on `date` - echo Building the Docker image... - ls - cd app - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER . - docker container ls post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER