Lambda SnapStart를 사용한 고유성 처리 - AWS Lambda

Lambda SnapStart를 사용한 고유성 처리

SnapStart 함수에서 호출이 스케일 업되면 Lambda는 초기화된 단일 스냅샷을 사용하여 여러 실행 환경을 재개합니다. 초기화 코드가 스냅샷에 포함된 고유한 콘텐츠를 생성하는 경우, 해당 콘텐츠가 여러 실행 환경에서 재사용될 때 콘텐츠가 고유하지 않게 될 수 있습니다. SnapStart를 사용할 때 고유성을 유지하려면 초기화 후에 고유한 컨텐츠를 생성해야 합니다. 여기에는 유사 무작위성을 생성하는 데 사용되는 고유 ID, 고유 보안 암호 및 엔트로피가 포함됩니다.

코드에서 고유성을 유지하려면 다음 모범 사례를 따르는 것이 좋습니다. 또한 Lambda는 고유성을 가정한 코드를 검사하는 데 도움이 되는 오픈 소스 SnapStart 검사 도구를 제공합니다. 초기화 단계에서 고유한 데이터를 생성하는 경우 런타임 후크를 사용하여 고유성을 복원할 수 있습니다. 런타임 후크를 사용하면 Lambda가 스냅샷을 생성하기 직전이나 Lambda가 스냅샷에서 함수를 재개한 직후에 특정 코드를 실행할 수 있습니다.

초기화 중에 고유성에 의존하는 상태를 저장하지 마세요.

함수의 초기화 단계에서는 로깅을 위한 고유 ID를 생성하는 경우와 같이 고유하도록 의도된 데이터를 캐싱하지 마세요. 대신 함수 핸들러 내에서 고유한 데이터를 생성하거나 런타임 후크를 사용하는 것이 좋습니다.

예 - 함수 핸들러에서 고유 ID 생성

다음 예제는 함수 핸들러에서 UUID를 생성하는 방법을 보여줍니다.

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!"; } }

암호학적으로 안전한 가상 난수 생성기(CSPRNG) 사용

애플리케이션이 무작위성에 의존하는 경우 암호학적으로 안전한 난수 생성기(CSPRNG)를 사용하는 것이 좋습니다. Java용 Lambda 관리형 런타임에는 SnapStart를 사용하여 무작위성을 자동으로 유지하는 두 가지 내장 CSPRNG(OpenSSL 1.0.2 및 java.security.SecureRandom)가 포함되어 있습니다. 항상 /dev/random 또는 /dev/urandom에서 난수를 가져오는 소프트웨어는 SnapStart를 사용하여 무작위성도 유지합니다.

AWS 암호화 라이브러리는 다음 표에 지정된 최소 버전부터, SnapStart를 사용하여 자동으로 무작위성을 유지합니다. Lambda 함수와 함께 이러한 라이브러리를 사용하는 경우, 다음 최소 버전 이상을 사용해야 합니다.

라이브러리 지원되는 최소 버전(x86) 지원되는 최소 버전(ARM)
AWS libcrypto (AWS-LC)

1.16.0

1.30.0

AWS libcrypto FIPS

2.0.13

2.0.13

다음의 라이브러리를 통해 전이적 종속성으로 Lambda 함수와 함께 앞의 암호화 라이브러리를 패키징하는 경우, 다음 최소 버전 이상을 사용해야 합니다.

라이브러리 지원되는 최소 버전(x86) 지원되는 최소 버전(ARM)
AWS SDK for Java 2.x

2.23.20

2.26.12

AWS Common Runtime for Java

0.29.8

0.29.25

Amazon Corretto Crypto Provider

2.4.1

2.4.1
Amazon Corretto Crypto Provider FIPS

2.4.1

2.4.1
예 – java.security.SecureRandom

다음 예제에서는 java.security.SecureRandom을 사용하여 스냅샷에서 함수를 복원한 경우에도 고유한 번호 시퀀스를 생성합니다.

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!"; } }

SnapStart 검사 도구

Lambda는 고유성을 가정한 코드를 검사하는 데 도움이 되는 검사 도구를 제공합니다. SnapStart 검사 도구는 일련의 규칙에 대해 정적 분석을 실행하는 오픈 소스 SpotBugs 플러그인입니다. 이 검사 도구는 고유성과 관련한 가정에 위배될 수 있는 잠재적인 코드 구현을 식별하는 데 도움이 됩니다. 설치 지침과 검사 도구가 수행하는 검사 목록은 GitHub에서 aws-lambda-snapstart-java-rules 리포지토리를 참조하세요.

SnapStart를 사용하여 고유성을 처리하는 방법에 대해 자세한 내용은 AWS 컴퓨팅 블로그에서 AWS Lambda SnapStart를 사용하여 더 빠르게 시작하기를 참조하세요.