TypeScript로 Lambda 함수 구축
TypeScript로 Lambda 함수 구축 (Building Lambda functions with TypeScript)
Node.js 런타임을 사용해 AWS Lambda에서 TypeScript 코드를 실행할 수 있어요. Node.js는 TypeScript 코드를 네이티브로 실행하지 않으므로, 먼저 TypeScript 코드를 JavaScript로 트랜스파일(transpile)해야 해요. 그런 다음 JavaScript 파일을 사용해 함수 코드를 Lambda에 배포해요. 코드는 여러분이 관리하는 AWS Identity and Access Management(IAM) 역할의 자격 증명을 사용하는 AWS SDK for JavaScript를 포함한 환경에서 실행돼요. Node.js 런타임에 포함된 SDK 버전에 대한 자세한 내용은 런타임 포함 SDK 버전을 참고하세요.
본문
TypeScript 함수 추적에 대한 정보는 AWS Lambda에서 TypeScript 코드 추적을 참고하세요.
Lambda는 다음 Node.js 런타임을 지원해요.
| 이름 | 식별자 | 운영 체제 | 지원 종료 날짜 | 함수 생성 차단 | 함수 업데이트 차단 |
|---|---|---|---|---|---|
| Node.js 26 | nodejs26.x |
Amazon Linux 2023 | 예정 없음 | 예정 없음 | 예정 없음 |
| Node.js 24 | nodejs24.x |
Amazon Linux 2023 | 2028년 4월 30일 | 2028년 6월 1일 | 2028년 7월 1일 |
| Node.js 22 | nodejs22.x |
Amazon Linux 2023 | 2027년 4월 30일 | 2027년 6월 1일 | 2027년 7월 1일 |
TypeScript 개발 환경 설정 (Setting up a TypeScript development environment)
로컬 통합 개발 환경(IDE) 또는 텍스트 편집기를 사용해 TypeScript 함수 코드를 작성해요. Lambda 콘솔에서는 TypeScript 코드를 만들 수 없어요.
TypeScript 코드를 JavaScript로 트랜스파일하려면 esbuild 또는 Microsoft의 TypeScript 컴파일러(tsc)를 사용할 수 있어요. AWS Serverless Application Model(AWS SAM)과 AWS Cloud Development Kit(AWS CDK)는 둘 다 esbuild를 사용해요.
esbuild를 사용할 때 다음을 고려하세요.
- TypeScript 관련 주의 사항이 여러 개 있어요.
- TypeScript 트랜스파일 설정이 사용하려는 Node.js 런타임과 일치하도록 구성해야 해요. 자세한 내용은 esbuild 문서의 Target을 참고하세요. Lambda가 지원하는 특정 Node.js 버전을 대상으로 하는 tsconfig.json 파일의 예시는 TypeScript GitHub 저장소를 참고하세요.
- esbuild는 타입 검사를 수행하지 않아요. 타입을 검사하려면
tsc컴파일러를 사용해요.tsc -noEmit을 실행하거나 아래 예시처럼 tsconfig.json 파일에"noEmit"매개 변수를 추가해요. 이렇게 하면tsc가 JavaScript 파일을 생성하지 않도록 구성돼요. 타입을 검사한 후 esbuild를 사용해 TypeScript 파일을 JavaScript로 변환해요.
예제 tsconfig.json
{
"compilerOptions": {
"target": "es2020",
"strict": true,
"preserveConstEnums": true,
"noEmit": true,
"sourceMap": false,
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true
},
"exclude": ["node_modules", "**/*.test.ts"]
}
Lambda용 타입 정의 (Type definitions for Lambda)
@types/aws-lambda 패키지는 Lambda 함수용 타입 정의를 제공해요. 함수가 다음 중 하나를 사용할 때 이 패키지를 설치해요.
- 일반 AWS 이벤트 소스(예):
APIGatewayProxyEvent: Amazon API Gateway 프록시 통합용SNSEvent: Amazon Simple Notification Service 알림용SQSEvent: Amazon Simple Queue Service 메시지용S3Event: S3 트리거 이벤트용DynamoDBStreamEvent: Amazon DynamoDB Streams용
- Lambda Context 객체
- callback 핸들러 패턴
함수에 Lambda 타입 정의를 추가하려면 @types/aws-lambda 를 개발 종속성으로 설치해요.
npm install -D @types/aws-lambda
그런 다음 aws-lambda 에서 타입을 import 해요.
import { Context, S3Event, APIGatewayProxyEvent } from 'aws-lambda';
export const handler = async (event: S3Event, context: Context) => {
// Function code
};
import ... from 'aws-lambda' 문은 타입 정의를 import 해요. 관련 없는 타사 도구인 aws-lambda npm 패키지는 import 하지 않아요. 자세한 내용은 DefinitelyTyped GitHub 저장소의 aws-lambda를 참고하세요.
참고
자체 커스텀 타입 정의를 사용할 때는 @types/aws-lambda가 필요하지 않아요. 이벤트 객체용 자체 타입을 정의하는 예제 함수는 예제 TypeScript Lambda 함수 코드를 참고하세요.