AWS Bedrock, Lambda 및 API Gateway를 활용한 서버리스 AI 에이전트 배포

발행: (2025년 12월 28일 오전 10:15 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

위 링크에 있는 전체 글을 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. 코드 블록, URL 및 마크다운 형식은 그대로 유지하면서 번역해 드릴 수 있습니다. 감사합니다.

개요

이 가이드는 Amazon Bedrock을 사용한 생성 AI 기반 질문‑응답 서비스를 구축하는 과정을 안내합니다. 이 아키텍처는 HTTP를 통해 프롬프트를 받아 모델이 생성한 응답을 반환하며, 완전 서버리스 스택을 통해 비용을 최소화합니다.

데이터 흐름

  1. External clients가 API Gateway에 HTTP 요청을 보냅니다.
  2. API Gateway는 요청을 Lambda 함수로 라우팅합니다.
  3. Lambda 함수는 Amazon Bedrock의 Nova Micro 모델을 호출합니다.
  4. Lambda 컨테이너 이미지가 ECR(Elastic Container Registry)에 저장됩니다.

요구 사항

항목요구 사항
프롬프트 처리프롬프트를 받아 Nova Micro 완성을 반환합니다
HTTP 엔드포인트응답을 트리거하기 위한 엔드포인트 공개
예상 볼륨월 약 100건 요청 (비용 추정용)
자동화GitHub Actions를 통한 완전 자동 배포
가용성월 99.9 % 이상 가동 시간
보안IAM 범위 Bedrock 접근, OpenID Connect 인증, HTTPS 전용
가시성CloudWatch 대시보드와 구조화된 로깅

인증, 입력 정화 및 권한 부여는 핵심 GenAI 구현에 집중하기 위해 제외되었습니다.

비용 추정

요청당 22 입력 토큰232 출력 토큰을 추정한 경우:

서비스월 비용비고
Bedrock (Nova Micro)~ $0.0032,200 입력 / 23,200 출력 토큰
Lambda무료무료 티어 내 (1 M 요청, 400 K GB‑seconds)
API Gateway무료 (1년 차)~ $0.0004/월 (무료 티어 이후)
ECR~ $0.01500 MB 무료 티어 이후 300 MB 이미지

월별 요청 수와 비용

요청 수대략적인 비용
1 000~ $0.04
10 000~ $0.39
100 000~ $3.76

프로젝트 설정

mkdir -p handler terraform
cd handler
pnpm init -y
pnpm --package=typescript dlx tsc --init
mkdir -p src __tests__
touch src/{app,env,index}.ts

pnpm add -D @types/node tsx typescript
pnpm add ai @ai-sdk/amazon-bedrock zod dotenv

애플리케이션 아키텍처

flowchart TB
    A["Lambda Handler
*Parses events, returns responses*"] --> B["Application Logic
*Manages prompts & orchestration*"]
    B --> C["Bedrock Integration
*Model invocation via AI SDK*"]

Lambda 핸들러 (src/index.ts)

export const handler = async (event: any, context: any) => {
    try {
        const body = event.body ? JSON.parse(event.body) : {};
        const prompt = body.prompt ?? "Welcome from Warike technologies";
        const response = await main(prompt);
        return {
            statusCode: 200,
            body: JSON.stringify({ success: true, data: response }),
        };
    } catch (error) {
        return {
            statusCode: 500,
            body: JSON.stringify({
                success: false,
                error: error instanceof Error ? error.message : 'Unexpected error'
            }),
        };
    }
};

Bedrock 유틸리티 (src/utils/bedrock.ts)

import { createAmazonBedrock, generateText } from 'ai';
import { config } from '../config';

export async function generateResponse(prompt: string) {
    const { regionId, modelId } = config({});
    const bedrock = createAmazonBedrock({ region: regionId });

    const { text, usage } = await generateText({
        model: bedrock(modelId),
        system: "You are a helpful assistant.",
        prompt: [{ role: "user", content: prompt }],
    });

    console.log(`model: ${modelId}, response: ${text}, usage: ${JSON.stringify(usage)}`);
    return text;
}

환경 변수

AWS_REGION=us-west-2
AWS_BEDROCK_MODEL='amazon.nova-micro-v1:0'
AWS_BEARER_TOKEN_BEDROCK='aws_bearer_token_bedrock'

보안 참고: 짧은 수명의 API 키만 사용하세요.

Docker Build

빌드 단계

# Build Stage
FROM node:22-alpine AS builder
WORKDIR /usr/src/app
RUN corepack enable
COPY package.json pnpm-lock.yaml* ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build

런타임 단계

# Runtime Stage
FROM public.ecr.aws/lambda/nodejs:22
WORKDIR ${LAMBDA_TASK_ROOT}
COPY --from=builder /usr/src/app/dist/src ./ 
COPY --from=builder /usr/src/app/node_modules ./node_modules
CMD [ "index.handler" ]

인프라 구성 요소

  • API Gateway – Lambda 통합, CORS 헤더, JSON 액세스 로그를 포함한 HTTP 프로토콜.
  • Bedrock Permissions – IAM을 통한 Nova Micro 추론 프로필 접근 권한.
  • Lambda Function – 900초 타임아웃, CloudWatch 로깅 활성화.

📝 ECR 시딩 리소스는 로컬에서 Docker가 실행되고 있어야 합니다.

flowchart LR
    A[Push to Main] --> B[Build & Test]
    B --> C[Build Docker Image]
    C --> D[Push to ECR]
    D --> E[Deploy Lambda]

GitHub Actions를 이용한 CI/CD

워크플로우(main에 푸시될 때 트리거됨)는 다음을 처리합니다:

  1. 코드 빌드 및 테스트.
  2. Docker 이미지 생성.
  3. 이미지를 ECR에 푸시.
  4. Terraform을 통해 Lambda 함수를 배포.

엔드포인트 테스트

curl -sS "https://123456.execute-api.us-west-2.amazonaws.com/dev/" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Heeey hoe gaat het?"}' | jq

예상 응답

{
  "success": true,
  "data": "Hoi! Het gaat prima, bedankt voor het vragen..."
}

관찰 가능성

CloudWatch 대시보드는 오류 및 성능 메트릭에 대한 가시성을 제공합니다.

정리

terraform destroy

결론

  • API Gateway, Lambda, 그리고 Bedrock의 Nova Micro를 활용한 서버리스 GenAI는 기능적이며 비용 효율적인 솔루션을 제공합니다.
  • 규모가 크게 확대돼도 가격은 무시할 정도로 낮게 유지됩니다.
  • Terraform가 인프라를 관리하고, GitHub Actions가 배포를 자동화합니다.
  • 이 기반은 보다 정교한 생성 AI 애플리케이션을 손쉽게 지원합니다.
Back to Blog

관련 글

더 보기 »