AWS Lambda
개발자 가이드

AWS Lambda 함수 핸들러(Node.js)

핸들러는 이벤트를 처리하는 Lambda 함수의 메서드입니다. 함수를 호출할 때 런타임이 핸들러 메서드를 실행합니다. 핸들러가 존재하거나 응답을 반환할 때, 또 다른 이벤트를 처리하기 위해 사용할 수 있게 됩니다.

다음 예제 함수는 이벤트 객체의 내용을 로깅하고 로그의 위치를 반환합니다.

예 index.js 파일

exports.handler = async function(event, context) { console.log("EVENT: \n" + JSON.stringify(event, null, 2)) return context.logStreamName }

함수를 구성할 때, 핸들러 설정의 값은 파일의 이름과 내보낸 핸들러 모듈의 이름이며 점으로 구분됩니다. 콘솔의 기본값은 예를 들어, 이 가이드에서는 index.handler입니다. 이는 index.js에 의해 내보내진 handler 모듈을 나타냅니다.

런타임은 3개의 인수를 핸들러 메서드에 전달합니다. 첫 번째 인수는 호출자로부터의 정보가 포함된 event 객체입니다. 이 정보는 Invoke를 호출할 때 호출자가 JSON 형식 문자열로 전달하고, 런타임은 이 졍보를 객체로 변환합니다. AWS 서비스가 함수를 호출할 때, 이벤트 구조는 서비스별로 상이합니다.

두 번째 인수는 컨텍스트 객체이며, 여기에는 호출, 함수 및 실행 환경에 대한 정보가 포함되어 있습니다. 이전 예제에서는, 함수가 컨텍스트 객체로부터 로그 스트림의 이름을 가져와서 호출자에게 반환합니다.

세 번째 인수 callback는 응답을 보내기 위해 비동기 이외의 함수에서 호출할 수 있는 함수입니다. 콜백 함수는 두 개의 인수, Error 및 응답을 사용합니다. 응답 객체는 JSON.stringify와 호환되어야 합니다.

비동기 함수의 경우, callback를 사용하는 대신 응답, 오류 또는 promise를 런타임에 반환합니다.

비동기 함수

비동기 함수의 경우, returnthrow를 사용하여 응답 또는 오류를 각각 전송할 수 있습니다. 함수는 이러한 메서드를 사용하여 응답 또는 오류를 반환하려면 async 키워드를 사용해야 합니다.

해당 코드가 비동기식 작업을 수행하는 경우, 실행을 완료할 수 있도록 promise를 반환하십시오. promise를 해결하거나 거부하면 Lambda이 응답 또는 오류를 호출자에 전송합니다.

예 비동기 함수와 promise가 포함된 index.js 파일 – HTTP 요청

const https = require('https') let url = "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html" exports.handler = async function(event) { const promise = new Promise(function(resolve, reject) { https.get(url, (res) => { resolve(res.statusCode) }).on('error', (e) => { reject(Error(e)) }) }) return promise }

promise를 반환하는 라이브러리의 경우, 해당 promise를 런타임에 직접 반환할 수 있습니다.

예 비동기 함수와 promise가 포함된 index.js 파일 – AWS SDK

const AWS = require('aws-sdk') const s3 = new AWS.S3() exports.handler = async function(event) { return s3.listBuckets().promise() }

비동기 이외의 함수

다음 예제 함수는 URL을 확인하고 상태 코드를 호출자에게 반환합니다.

예 콜백이 포함된 index.js 파일 – HTTP 요청

const https = require('https') let url = "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html" exports.handler = function(event, context, callback) { https.get(url, (res) => { callback(null, res.statusCode) }).on('error', (e) => { callback(Error(e)) }) }

비동기 이외 함수의 경우, 이벤트 루프가 비어 있거나 함수 제한 시간을 초과할 때까지 함수 실행이 계속됩니다. 응답은 모든 이벤트 루프 작업이 완료될 때까지 호출자에게 전송되지 않습니다. 함수 제한 시간을 초과하면, 대신 오류가 반환됩니다. context.callbackWaitsForEmptyEventLoop를 false로 설정하여 즉시 응답을 전송하도록 런타임을 구성할 수 있습니다.

다음 예제에서는, Amazon S3로부터의 응답이 사용 가능해지는 즉시 호출자에게 반환됩니다. 이벤트 루프에서 실행 중인 제한 시간은 동결되고 다음에 함수가 호출될 때 계속 실행됩니다.

예 index.js 파일 – callbackWaitsForEmptyEventLoop

const AWS = require('aws-sdk') const s3 = new AWS.S3() exports.handler = function(event, context, callback) { context.callbackWaitsForEmptyEventLoop = false s3.listBuckets(null, callback) setTimeout(function () { console.log('Timeout complete.') }, 5000) }