2017-11-12 8 views
0

현재 AWS에 배포 된 람다가 있습니다. API 게이트 웨이 뒤에있는 CRUD 로직의 간단한 조각입니다.AWS 람다의 연결 풀

현재 내가 직면하고있는 문제는 트래픽이 최고조에 달하면 데이터베이스의 연결이 끊어지지 않는다는 것입니다.

나는 이것이 많은 lambdas를 함께 호출하여 각각의 연결을 열어서 발생한다는 것을 알고 있지만 여기에 일종의 연결 풀링을 할 수있는 방법이 있습니까? 나는 (내가 조금 지능적으로 컨테이너에 연결 풀의 일종을 코딩 할 경우) 할 수

아래 스레드 상태 :

How we can use JDBC connection pooling with AWS Lambda?

하지만 아무것도 보장하지 않습니다.

내 람다에서 이것에 대해 뭔가 할 수 있습니까? 아니면 에 외부 연결 풀러를 사용해야합니까 (저는 Postgres를 사용하므로 pg_bouncer이어야합니다)?

답변

0

처리기 함수 외부에서 연결을 초기화하여 단일 데이터베이스 연결을 다시 사용하도록 컨테이너를 가져올 수 있습니다. 람다 함수의 인스턴스는 여러 격리 된 컨테이너의 여러 서버에서 실행되므로 람다 외부의 서버에서 실행중인 외부 풀을 사용하지 않고도 연결 풀을 공유 할 수 없습니다.

0

예 직접 연결 풀을 관리해야합니다. 이전에 c3p0 라이브러리를 사용하여 작동 시켰습니다.

private static final QueryRunner queryRunner; 

다음으로 핸들러 메서드 본문 외부 어딘가에 쿼리 주자를 초기화 :

ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
    dataSource.setJdbcUrl(jdbcUrl); 
    dataSource.setUser(System.getenv("USERNAME")); 
    dataSource.setPassword(System.getenv("PASSWORD")); 
    queryRunner = new QueryRunner(dataSource); 

당신이 당신의 람다 함수에 쿼리 할

은, 전화 :

List<Map<String, Object>> result = queryRunner.query("SELECT * FROM schema.users WHERE column = vall", new MapListHandler()); 
다음 예제 코드 조각입니다

희망이 도움이됩니다.

또한 함수를 재배포 할 때 활성 jdbc 연결은 나중에 재개 될 수 없다는 점에 유의하십시오. 이것은 jdbc 연결을 사용하는 함수의 수와 데이터베이스가 지원할 수있는 수에 따라 문제가되지 않을 수도 있습니다.

0

네, 그럴 수 없습니다. pgBouncer를 사용해야합니다.