

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Lambda 함수에서 Gremlin WebSocket 연결 관리
<a name="lambda-functions-websocket-connections"></a>

Gremlin 언어 변형을 사용하여 Neptune을 쿼리하는 경우 드라이버는 WebSocket 연결을 사용하여 데이터베이스에 연결합니다. WebSockets는 수명이 긴 클라이언트-서버 연결 시나리오를 지원하도록 설계되었습니다. AWS Lambda반면는 비교적 수명이 짧고 상태 비저장 실행을 지원하도록 설계되었습니다. 이러한 설계 원칙의 불일치로 인해 Lambda를 사용하여 Neptune을 쿼리할 때 예상치 못한 문제가 일부 발생할 수 있습니다.

 AWS Lambda 함수는 함수를 다른 함수와 격리하는 [실행 컨텍스트](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html)에서 실행됩니다. 실행 컨텍스트는 함수를 처음 간접 호출할 때 생성되며 동일한 함수를 이후에 간접 호출할 때 재사용될 수 있습니다.

그러나 함수의 여러 동시 간접 호출을 처리하는 데 실행 컨텍스트를 하나만 사용하지는 않습니다. 여러 클라이언트가 함수를 동시에 간접적으로 호출하는 경우 Lambda는 함수의 각 인스턴스에 대해 [추가 실행 컨텍스트를 실행](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)합니다. 이러한 모든 새 실행 컨텍스트는 이후 함수 간접 호출에 차례로 재사용될 수 있습니다.

특정 시점에 Lambda는 실행 컨텍스트를 재활용합니다. 특히 일정 시간 동안 비활성 상태인 경우.는 Lambda 확장을 통해 `Init` `Invoke` 및 `Shutdown` 단계를 포함한 실행 컨텍스트 수명 주기를 AWS Lambda 노출합니다. [https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html](https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html) 이러한 확장을 사용하면 실행 컨텍스트가 재활용될 때 데이터베이스 연결과 같은 외부 리소스를 정리하는 코드를 작성할 수 있습니다.

일반적인 모범 사례는 [Lambda 핸들러 함수 외부에서 데이터베이스 연결을 열어](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) 각 핸들러 호출에서 재사용할 수 있도록 하는 것입니다. 어느 시점에서 데이터베이스 연결이 끊어지면 핸들러 내부에서 다시 연결할 수 있습니다. 하지만 이 방법을 사용하면 연결 유출이 발생할 위험이 있습니다. 실행 컨텍스트가 제거된 후에도 한참 유휴 연결이 열린 상태로 유지되면 Lambda 간접 호출 시나리오가 간헐적이거나 폭주하는 경우 점차 연결이 누출되어 데이터베이스 리소스가 소진될 수 있습니다.

Neptune 연결 제한 및 연결 제한 시간이 최신 엔진 릴리스에 따라 변경되었습니다. 이전에는 모든 인스턴스가 최대 60,000개의 WebSocket 연결을 지원했습니다. 이제 Neptune 인스턴스당 최대 동시 WebSocket 연결 수는 [인스턴스 유형에 따라 달라집니다](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html).

또한 엔진 릴리스 1.0.3.0부터 Neptune은 연결의 유휴 제한 시간을 1시간에서 약 20분으로 단축했습니다. 클라이언트가 연결을 닫지 않으면 20\~25분의 유휴 제한 시간이 지나면 연결이 자동으로 닫힙니다. AWS Lambda 는 실행 컨텍스트 수명을 문서화하지 않지만 실험 결과 새 Neptune 연결 제한 시간이 비활성 Lambda 실행 컨텍스트 제한 시간과 잘 일치하는 것으로 나타났습니다. 비활성 실행 컨텍스트가 재활용될 때쯤이면 Neptune에 의해 연결이 이미 종료되었거나 곧 종료될 가능성이 높습니다.