AWS SAM CLI를 사용하여 AWS Lambda 간에 Typescript 코드 공유

소개



최근 Amazon은 AWS SAM CLI with the support of Typescript의 베타 버전을 출시했습니다.
간단한 사용 사례가 있는 경우 샘플이 잘 작동합니다.
이제 리포지토리에 여러 AWS Lambda가 있고 코드를 공유해야 한다고 상상해 보십시오.
이 게시물의 목표는 SAM CLI를 계속 사용하여 Typescript 코드를 빌드하고 배포하는 것입니다.

기본 구성



기본적으로 CodeUri 속성은 함수 폴더만 참조한다는 것을 알 수 있습니다.

HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs16.x


코드는 다음과 같습니다.

import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
import { helloWorld } from '../shared/hello';

export const lambdaHandler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
    return {
        statusCode: 200,
        body: JSON.stringify({
            message: helloWorld,
        }),
    };
};


현재 디렉터리의 일부가 아닌 가져오기로 빌드하려고 하면 다음 오류가 발생합니다.

Build Failed
Error: NodejsNpmEsbuildBuilder:EsbuildBundle - Esbuild Failed: ✘ [ERROR] Could not resolve "../shared/hello"

app.ts:2:27:
2 │ import { helloWorld } from '../shared/hello';



맞춤 구성



CodeUri 속성을 공유하려는 모든 소스 파일이 포함된 폴더로 변경해야 합니다.

  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: app.lambdaHandler


이 구성 덕분에 이제 여러 AWS Lambda 간에 코드를 공유할 수 있습니다.

기본적으로 AWS SAM CLI는 번들링, 트리 쉐이킹 및 축소를 사용하므로 AWS Lambda에서 호출되지 않은 코드는 배포되지 않습니다.

이 샘플에서 직접 코드를 볼 수 있습니다. https://github.com/faridz974/sam-typescript

결론



Typescript를 지원하는 AWS SAM CLI는 아직 베타 버전입니다. 고급 기능을 원하면 사용하지 않는 것이 좋습니다.
최근에 버전 1.49.0ExternalLoader 속성이 추가되었습니다.
피드백 및/또는 요청을 공유하려는 경우this issue 가 생성되었습니다.

좋은 웹페이지 즐겨찾기