AWS Bedrock, Lambda 및 API Gateway를 활용한 서버리스 AI 에이전트 배포
Source: Dev.to
위 링크에 있는 전체 글을 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. 코드 블록, URL 및 마크다운 형식은 그대로 유지하면서 번역해 드릴 수 있습니다. 감사합니다.
개요
이 가이드는 Amazon Bedrock을 사용한 생성 AI 기반 질문‑응답 서비스를 구축하는 과정을 안내합니다. 이 아키텍처는 HTTP를 통해 프롬프트를 받아 모델이 생성한 응답을 반환하며, 완전 서버리스 스택을 통해 비용을 최소화합니다.
데이터 흐름
- External clients가 API Gateway에 HTTP 요청을 보냅니다.
- API Gateway는 요청을 Lambda 함수로 라우팅합니다.
- Lambda 함수는 Amazon Bedrock의 Nova Micro 모델을 호출합니다.
- 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.003 | 2,200 입력 / 23,200 출력 토큰 |
| Lambda | 무료 | 무료 티어 내 (1 M 요청, 400 K GB‑seconds) |
| API Gateway | 무료 (1년 차) | ~ $0.0004/월 (무료 티어 이후) |
| ECR | ~ $0.01 | 500 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에 푸시될 때 트리거됨)는 다음을 처리합니다:
- 코드 빌드 및 테스트.
- Docker 이미지 생성.
- 이미지를 ECR에 푸시.
- 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 애플리케이션을 손쉽게 지원합니다.