Tratamento da exclusividade com o Lambda SnapStart - AWS Lambda

Tratamento da exclusividade com o Lambda SnapStart

Quando as invocações aumentam a escala verticalmente em uma função do SnapStart, o Lambda usa um único snapshot inicializado para retomar diversos ambientes de execução. Se o código de inicialização gerar conteúdo exclusivo que é incluído no snapshot, o conteúdo poderá não ser exclusivo quando for reutilizado em ambientes de execução. Para manter a exclusividade ao usar o SnapStart, você deve gerar conteúdo exclusivo após a inicialização. Isso inclui IDs exclusivos, segredos exclusivos e entropia que são usados para gerar a pseudoaleatoriedade.

Recomendamos as práticas recomendadas a seguir para ajudar você a manter a exclusividade em seu código. O Lambda também fornece uma ferramenta de verificação do SnapStart de código aberto para ajudar a verificar o código que assume exclusividade. Se você gerar dados exclusivos durante a fase de inicialização, poderá usar um gancho de runtime para restaurar a exclusividade. Com ganchos de runtime, é possível executar um código específico imediatamente antes que o Lambda obtenha um snapshot ou imediatamente após o Lambda retornar uma função de um snapshot.

Evite salvar um estado que depende da exclusividade durante a inicialização

Durante a fase de inicialização da função, evite armazenar em cache dados que devem ser exclusivos, como a geração de um ID exclusivo para registro em log. Em vez disso, recomendamos gerar dados exclusivos dentro do manipulador de função ou usar um gancho de runtime.

exemplo : geração de um ID exclusivo no manipulador de função

O exemplo a seguir demonstra como gerar um UUID no manipulador de função.

import java.util.UUID; public class Handler implements RequestHandler<String, String> { private static UUID uniqueSandboxId = null; @Override public String handleRequest(String event, Context context) { if (uniqueSandboxId == null) uniqueSandboxId = UUID.randomUUID(); System.out.println("Unique Sandbox Id: " + uniqueSandboxId); return "Hello, World!"; } }

Use geradores de números pseudoaleatórios criptograficamente seguros (CSPRNGs)

Se a aplicação depender da aleatoriedade, recomendamos usar geradores de números pseudoaleatórios criptograficamente seguros (CSPRNGs). O runtime gerenciado do Lambda para Java inclui dois CSPRNGs integrados (OpenSSL 1.0.2 e java.security.SecureRandom) que mantêm automaticamente a aleatoriedade com o SnapStart. O software que sempre obtém números aleatórios /dev/random ou /dev/urandom também mantém a aleatoriedade com o SnapStart.

As bibliotecas de criptografia da AWS mantêm a aleatoriedade automaticamente com o SnapStart, a partir das versões mínimas especificadas na tabela a seguir. Se você usar essas bibliotecas com as funções do Lambda, certifique-se de usar as seguintes versões mínimas ou versões posteriores:

Ferramentas Versão mínima compatível (x86) Versão mínima compatível (ARM)
AWS libcrypto (AWS-LC)

1.16.0

1.30.0

AWS libcrypto FIPS

2.0.13

2.0.13

Se você empacotar as bibliotecas criptográficas anteriores com suas funções Lambda como dependências transitivas usando as bibliotecas a seguir, certifique-se de usar as seguintes versões mínimas ou versões posteriores:

Ferramentas Versão mínima compatível (x86) Versão mínima compatível (ARM)
AWS SDK for Java 2.x

2.23.20

2.26.12

Runtime comum da AWS para Java

0.29.8

0.29.25

Fornecedor de criptografia do Amazon Corretto

2.4.1

2.4.1
Fornecedor de criptografia FIPS do Amazon Corretto

2.4.1

2.4.1
exemplo : java.security.SecureRandom

O exemplo a seguir usa java.security.SecureRandom, que gera sequências numéricas exclusivas mesmo quando a função é restaurada de um snapshot.

import java.security.SecureRandom; public class Handler implements RequestHandler<String, String> { private static SecureRandom rng = new SecureRandom(); @Override public String handleRequest(String event, Context context) { for (int i = 0; i < 10; i++) { System.out.println(rng.next()); } return "Hello, World!"; } }

Ferramenta de verificação do SnapStart

O Lambda fornece uma ferramenta de verificação para ajudar você a verificar o código que assume exclusividade. A ferramenta de verificação do SnapStart corresponde a um plug-in SpotBugs de código aberto que executa uma análise estática de acordo com um conjunto de regras. A ferramenta de verificação ajuda a identificar possíveis implementações de código que podem quebrar suposições em relação à exclusividade. Para obter instruções de instalação e uma lista de verificações que a ferramenta de verificação executa, consulte o repositório aws-lambda-snapstart-java-rules no GitHub.

Para saber mais sobre como lidar com a exclusividade com o SnapStart, consulte Início mais rápido com o AWS Lambda SnapStart no AWS Compute Blog.