O blog da AWS
O runtime do Python 3.11 agora disponível no AWS Lambda
O AWS Lambda agora oferece suporte ao Python 3.11 como ambiente de execução gerenciado e imagem base de contêiner. O Python 3.11 contém aprimoramentos de desempenho significativos em relação ao Python 3.10. Recursos como tempo de inicialização reduzido, estruturas de pilha simplificadas e interpretador adaptativo especializado em CPython ajudam muitas cargas de trabalho usando o Python 3.11 a serem executadas de forma mais rápida e barata, graças ao modelo de cobrança por milissegundo do Lambda. Com essa versão, os desenvolvedores de Python agora podem aproveitar os novos recursos e melhorias introduzidos no Python 3.11 ao criar aplicativos Serverless no Lambda.
Você pode usar o Python 3.11 com o Lambda Powertools for Python, um kit de ferramentas para desenvolvedores para implementar as melhores práticas Serverless e aumentar a velocidade do desenvolvedor. O Lambda Powertools inclui bibliotecas verificadas para oferecer suporte a padrões comuns, como observabilidade, integração de armazenamento de parâmetros, idempotência, processamento em lote, sinalizadores de recursos e muito mais. Saiba mais sobre o PowerTools for AWS Lambda for Python na documentação.
Você também pode usar o Python 3.11 com o Lambda @Edge, permitindo que você personalize o conteúdo de baixa latência entregue pelo Amazon CloudFront.
Python é uma linguagem popular para criar aplicativos Serverless. A versão 3.11 do Python inclui melhorias de desempenho e novos recursos de linguagem. Para clientes que implantam suas funções do Lambda usando imagem de contêiner, a imagem base do Python 3.11 também inclui alterações para facilitar o gerenciamento de pacotes instalados.
Este blog analisa essas mudanças, seguidas por uma visão geral de como você pode começar a usar o Python 3.11 no Lambda.
Melhorias de desempenho
As otimizações do CPython introduzidas pelo Python 3.11 trazem melhorias significativas de desempenho, tornando-o em média 25% mais rápido do que o Python 3.10, com base nos testes de benchmark da comunidade Python usando o Python Performance Benchmark Suite.
Esta versão se concentra em duas áreas principais:
- Inicialização mais rápida: os módulos principais e essenciais para o Python agora estão “congelados”, com objetos de código alocados estaticamente, resultando em uma inicialização do interpretador de 10 a 15% mais rápida em relação ao Python 3.10.
- Execução mais rápida de funções: as melhorias incluem a criação simplificada de quadros, chamadas de função Python in-lined para reduzir o uso da pilha C e a implementação de um intérprete adaptativo especializado, que especializa o interpretador em “código ativo” (código executado várias vezes) e na redução da sobrecarga durante a execução.
Essas otimizações podem melhorar o desempenho em 10 a 60%, dependendo da carga de trabalho. No contexto da execução de uma função Lambda, isso resulta em melhorias de desempenho para invocações de “inicialização a frio” e “inicialização a quente”
Além de melhorias mais rápidas no desempenho do CPython, o Python 3.11 também fornece melhorias de desempenho em outras áreas. Por exemplo:
- A formatação de strings com códigos printf-style% agora é tão rápida quanto as expressões f-string.
- A divisão de números inteiros é cerca de 20% mais rápida em x86-64 em determinados cenários.
- Operações como sum () e redimensionamento de listas tiveram melhorias notáveis na velocidade.
- Os dicionários economizam memória ao não armazenar valores de hash quando as chaves são objetos Unicode.
- Melhorias no
asyncio
. ODatagramProtocol
introduz transferências de arquivos grandes significativamente mais rápidas via UDP. - Funções matemáticas, funções estatísticas e
unicodedata.normalize ()
também se beneficiam de melhorias substanciais na velocidade.
Características da linguagem
Graças à sua simplicidade, legibilidade e amplo suporte da comunidade, o Python é uma linguagem popular para criar aplicativos Serverless. A versão 3.11 do Python inclui vários novos recursos de linguagem, incluindo:
- Genéricos variáveis (PEP 646): o Python 3.11 introduz o TypeVarTuple, permitindo a parametrização com um número arbitrário de tipos.
- Marcar itens individuais do
TypedDict
como necessários ou não obrigatórios (PEP 655): A introdução de Required eNotRequired
noTypedDict
permite a marcação explícita dos requisitos de itens individuais, eliminando a necessidade de herança. - Tipo próprio (PEP 673): A anotação
Self
simplifica a anotação de métodos que retornam uma instância de sua classe, de forma semelhante ao TypeVar no PEP 484 - Tipo de string literal arbitrário (PEP 675): a anotação
literalString
permite que um parâmetro de função aceite qualquer tipo destring
literal, incluindo strings criadas a partir de literais. - Transformações de classe de dados (PEP 681): O decorador
@dataclass_transform ()
permite que os objetos utilizem transformações de runtime para funcionalidades semelhantes às de classes de dados.
Para ver a lista completa das alterações do Python 3.11, consulte as notas de lançamento do Python 3.11.
Alteração na localização dos módulos pré-instalados e no caminho de pesquisa
Anteriormente, as imagens de contêiner base do Lambda para Python incluíam o diretório /var/runtime
antes do diretório /var/lang/lib/python3.x
no caminho de pesquisa. Isso significa que os pacotes em /var/runtime
são carregados em vez dos pacotes instalados via pip em /var/lang/lib/python3.x.
Como o SDK da AWS para Python (boto3/botocore
) foi pré-instalado em /var/runtime
, isso dificultou que os clientes de imagens de contêiner básicas atualizassem a versão do SDK.
Com o runtime do Python 3.11, o SDK da AWS e suas dependências agora estão pré-instalados no diretório /var/lang/lib/python3.11
, e o caminho de pesquisa foi modificado para que esse diretório tenha precedência sobre /var/runtime
. Essa mudança significa que os clientes que criam e implantam funções do Lambda usando a imagem de contêiner base do Python 3.11 agora podem substituir o SDK simplesmente executando pip install em uma versão mais recente. Essa alteração também permite que o pip verifique e rastreie se o SDK pré-instalado e suas dependências são compatíveis com qualquer pacote instalado pelo cliente.
Este é o sys.path
padrão antes do Python 3.11 (onde X.Y
é a versão major.minor
do Python):
/var/task/
: Função do usuário/opt/python/lib/pythonX.Y/site-packages/
: Camada de usuário/opt/python/
: Camada de usuário/var/runtime/
: módulos pré-instalados/var/lang/lib/pythonX.Y/site-packages/
: local padrão de instalação do pip
Aqui está o sys.path padrão a partir do Python 3.11:
/var/task/
: Função do usuário/opt/python/lib/pythonX.Y/site-packages/
: Camada de usuário/opt/python/
: Camada de usuário/var/lang/lib/pythonX.Y/site-packages/
: módulos pré-instalados e local padrão de instalação do pip/var/runtime/
: Sem módulos pré-instalados
Usando o Python 3.11 no Lambda
Console de gerenciamento da AWS
Para usar o runtime do Python 3.11 para desenvolver suas funções do Lambda, especifique um valor de parâmetro de runtime Python 3.11 ao criar ou atualizar uma função. A versão 3.11 do Python agora está disponível no menu suspenso Runtime na página Criar função.
Para atualizar uma função Lambda existente para o Python 3.11, navegue até a função no console do Lambda e escolha Editar no painel de configurações do Runtime. A nova versão do Python está disponível no menu suspenso Runtime:
AWS Lambda — Imagem de contêiner
Altere a versão da imagem base do Python modificando a instrução FROM no Dockerfile:
Para saber mais, consulte a guia de uso sobre como criar funções como imagens de contêiner.
Modelo de aplicativo Serverless da AWS (AWS SAM)
No AWS SAM, defina o atributo Runtime como python3.11 para usar essa versão.
O AWS SAM oferece suporte à geração desse modelo com o Python 3.11 pronto para uso para novos aplicativos Serverless usando o comando sam init.
Consulte a documentação do AWS SAM aqui.
Kit de desenvolvimento de nuvem da AWS (AWS CDK)
No AWS CDK, defina o atributo de runtime como Runtime.PYTHON_3_11
para usar essa versão. Em Python:
Em TypeScript:
Conclusão
Você pode criar e implantar funções usando o Python 3.11 usando o Console de Gerenciamento da AWS, o AWS CLI, o AWS SDK, o AWS SAM, o AWS CDK ou a Infraestrutura como Código (IaC) de sua escolha. Você também pode usar a imagem base do contêiner Python 3.11 se preferir criar e implantar suas funções usando imagens de contêiner.
Estamos empolgados em trazer o suporte de runtime do Python 3.11 para o Lambda e capacitar os desenvolvedores a criar aplicativos Serverless mais eficientes, poderosos e escaláveis. Experimente o runtime do Python 3.11 no Lambda hoje e experimente os benefícios dessa versão atualizada da linguagem e aproveite o desempenho aprimorado e os novos recursos da linguagem.
Para obter mais recursos de aprendizado Serverless, visite Serverless Land
Este artigo foi traduzido do Blog da AWS em Inglês.