AWS 람다 함수로 배포하려는 node.js functon이 있습니다. Redis Elasticache를 사용할 때 redis.createClient로 연 연결을 닫아야합니다. 그렇지 않으면 람다 함수가 시간 초과됩니다. 나는 단순히 클라이언트의 quit() 메소드를 호출함으로써이를 수행한다. 람다 콜백을 발행하기 전에 이렇게하면 람다 함수가 예상대로 종료됩니다. 그렇지 않으면 람다 함수가 설정 한 시간 초과 간격으로 시간 초과가 발생합니다. 테스트 설정에서 캐시에서 작동하고 30 밀리 초 내에 종료되는 람다 함수가 있습니다. redis client quit() 메서드를 호출하지 않으면 동일한 람다 함수가 1 분 시간 초과 전에 종료되지 않습니다. 확실하지는 않지만 함수가 실행 중인지 (콜백 후에도) redis 연결이 여전히 활성화되어 있기 때문에 Lambda 함수가이 방식으로 작동한다고 가정합니다.람다 함수에서 DAX 클라이언트 닫기
quit() 메서드를 호출하기가 쉽기 때문에 걱정하지 않아도됩니다. 내가 가지고있는 문제는 DynamoDB DAX 클라이언트와 비슷한 것을하려고 할 때입니다. 람다 함수에 내 VPC 끝점을 통해 DynamoDB에 직접 액세스 할 수 있으며 모든 것이 올바르게 작동합니다. DAX 클라이언트를 사용하면 테이블 수정이 실제로 수행됩니다 (항목을 삽입하고 거기에 있음을 볼 수 있음). 그러나 람다 함수는 항상 시간 초과됩니다. 난 그냥 ddbClient를 사용하는 경우
const AmazonDaxClient = require('amazon-dax-client');
const AWS = require('aws-sdk');
const config = require('./config');
AWS.config.update(config.aws);
var ddbClient = new AWS.DynamoDB.DocumentClient(config.dynamodb);
var dax = new AmazonDaxClient(config.dax);
var daxClient = new AWS.DynamoDB.DocumentClient({service: dax });
은, 모든 작품 : 여기에
은 몇 가지 예제 코드입니다. daxClient를 사용하면 모든 것이 또한 작동하지만 (삽입, 삭제, 업데이트 등), 람다 함수가 시간 초과됩니다. 완료된 DAX 클러스터에 daxClient에 대해 비슷한 quit() 메소드가 있습니까? 그러면 모든 연결을 완전히 닫을 수 있습니까? 나는이 문제가 daxClient가 정상적인 ddbClient와 똑같이 동작하고 ddbClient에 quit() 메소드가 없기를 바란다고 생각한다.
'context.callbackWaitsForEmptyEventLoop = false'를 설정해보십시오. DAX와 redis 모두에 대한 시간 초과를 처리해야하며, 외부에서 구성된 전역 변수와의 연결을 설정할 수 있어야합니다. 핸들러를 만들고, 함수를 호출 할 때마다 초기화 할 필요가 없기 때문에 작업을 조금 더 빠르게 할 수 있습니다. (나는 DAX 클라이언트에 익숙하지 않지만, 아무도이 옵션을 사용하지 않고 소켓을 열어 둔다면 Lambda는 기다린다.) –
Michael, 두 가지 모두에서 트릭을했다. 감사! 동의 할 수 있도록 답을 작성 하시겠습니까? –