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
Para saber mais sobre como lidar com a exclusividade com o SnapStart, consulte Início mais rápido com o AWS Lambda SnapStart