AWS Lambda 는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다.
이 가이드에서는 Dockerfile 을 사용하여 Bun HTTP 서버를 AWS Lambda 에 배포합니다.
NOTE
계속하기 전에 다음이 준비되어 있는지 확인하세요:새 Dockerfile 만들기
프로젝트가 있는 디렉터리에 있는지 확인한 후 프로젝트 루트에 새 Dockerfile 을 만듭니다. 이 파일에는 컨테이너를 초기화하고 로컬 프로젝트 파일을 복사하고 종속성을 설치하고 애플리케이션을 시작하는 지침이 포함되어 있습니다.
# Lambda 런타임을 처리하기 위해 공식 AWS Lambda 어댑터 이미지 사용
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 AS aws-lambda-adapter
# 애플리케이션 실행을 위한 공식 Bun 이미지 사용
FROM oven/bun:debian AS bun_latest
# 컨테이너에 Lambda 어댑터 복사
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
# 포트를 8080 으로 설정합니다. 이는 AWS Lambda 어댑터에 필요합니다.
ENV PORT=8080
# 작업 디렉터리를 `/var/task` 로 설정합니다. 이는 Lambda 의 기본 작업 디렉터리입니다.
WORKDIR "/var/task"
# package.json 과 bun.lock 을 컨테이너에 복사
COPY package.json bun.lock ./
# 종속성 설치
RUN bun install --production --frozen-lockfile
# 나머지 애플리케이션을 컨테이너에 복사
COPY . /var/task
# 애플리케이션 실행
CMD ["bun", "index.ts"]NOTE
시작 명령이 애플리케이션의 진입점에 해당하는지 확인하세요. `package.json` 에 시작 스크립트가 있는 경우 `CMD ["bun", "run", "start"]` 를 사용할 수도 있습니다.이 이미지는 종속성을 설치하고 컨테이너 내에서 Bun 으로 앱을 실행합니다. 앱에 종속성이 없는 경우 RUN bun install --production --frozen-lockfile 라인을 생략할 수 있습니다.
프로젝트 루트에 새 .dockerignore 파일을 만듭니다. 이 파일에는 node_modules 와 같이 컨테이너 이미지에서 제외 해야 하는 파일과 디렉터리가 포함되어 있습니다. 이렇게 하면 빌드가 더 빠르고 작아집니다:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# 제외하려는 기타 파일 또는 디렉터리Docker 이미지 빌드하기
Dockerfile 이 있는 디렉터리에 있는지 확인한 후 Docker 이미지를 빌드합니다. 이 경우 이미지를 bun-lambda-demo 라고 하고 latest 로 태그를 지정합니다.
# cd /path/to/your/app
docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .ECR 리포지토리 생성하기
이미지를 AWS Lambda 에 푸시하려면 먼저 이미지를 푸시할 ECR 리포지토리 를 생성해야 합니다.
다음 명령을 실행하면:
us-east-1리전에bun-lambda-demo라는 ECR 리포지토리를 생성합니다- 리포지토리 URI 를 가져와서 환경 변수로 내보냅니다. 이는 선택 사항이지만 다음 단계를 더 쉽게 만듭니다.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demoNOTE
IAM Identity Center(SSO) 를 사용하거나 AWS CLI 를 프로필과 함께 구성한 경우 AWS CLI 명령에 `--profile` 플래그를 추가해야 합니다.예를 들어 프로필 이름이 my-sso-app 인 경우 --profile my-sso-app 를 사용합니다. 사용 가능한 프로필을 확인하려면 aws configure list-profiles 로 AWS CLI 구성을 확인하세요.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --profile my-sso-app --query 'repository.repositoryUri' --output text)
echo $ECR_URIECR 리포지토리로 인증하기
ECR 리포지토리에 로그인합니다:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URILogin SucceededNOTE
프로필을 사용하는 경우 `--profile` 플래그를 사용합니다:aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URIDocker 이미지를 ECR 리포지토리에 태그하고 푸시하기
Dockerfile 이 있는 디렉터리에 있는지 확인한 후 ECR 리포지토리 URI 로 Docker 이미지에 태그를 지정합니다.
docker tag bun-lambda-demo:latest ${ECR_URI}:latest그런 다음 이미지를 ECR 리포지토리에 푸시합니다.
docker push ${ECR_URI}:latestAWS Lambda 함수 생성하기
AWS Console > Lambda > Create Function 으로 이동하여 Container image 를 선택합니다.

my-bun-function 과 같이 함수에 이름을 지정합니다.
컨테이너 이미지 선택하기
그런 다음 Container image URI 섹션으로 이동하여 Browse images 를 클릭합니다. 방금 ECR 리포지토리에 푸시한 이미지를 선택합니다.

그런 다음 latest 이미지를 선택하고 Select image 를 클릭합니다.

함수 구성하기
함수에 대한 공개 URL 을 얻으려면 Additional configurations > Networking > Function URL 로 이동해야 합니다.
이것을 Enable 로 설정하고 Auth Type 을 NONE 으로 설정합니다.

함수 생성하기
페이지 하단의 Create function 을 클릭하면 함수가 생성됩니다.

함수 URL 가져오기
함수가 생성되면 함수 페이지로 리디렉션되며 Function URL 섹션에서 함수 URL 을 확인할 수 있습니다.

함수 테스트하기
🥳 앱이 이제 실행되었습니다! 함수를 테스트하려면 Test 탭으로 이동하거나 함수 URL 을 직접 호출할 수 있습니다.
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/Hello from Bun on Lambda!