CB/OD 가용량 모니터링 시스템 구축¶
AWS GPU 인스턴스(P5, P5en, P6-B300, Trn2 등)의 Capacity Block(CB) 가용량을 자동으로 모니터링하고, 가용 슬롯이 발생했을 때 즉시 알림을 받을 수 있는 서버리스 시스템 구축 가이드입니다.
1. 공식 AWS API¶
Capacity Blocks 조회 API¶
DescribeCapacityBlockOfferings — CB 가용 슬롯을 조회하는 공식 API 입니다.
| 항목 | 내용 |
|---|---|
| 용도 | 특정 인스턴스 타입/리전/기간에서 예약 가능한 CB 오퍼링 조회 |
| 비용 | 무료 (API 호출 비용 없음) |
| 제약 | 한 번에 하나의 InstanceCount/Duration 조합만 조회 가능 |
| 문서 | API Reference |
주요 파라미터:
| 파라미터 | 필수 | 설명 |
|---|---|---|
InstanceType |
✅ | 인스턴스 타입 (예: p5en.48xlarge) |
CapacityDurationHours |
✅ | 예약 기간 — 1일 단위(24~336h) 또는 7일 단위(168~4368h) |
InstanceCount |
❌ | 동시 예약 수량 (기본 1, 최대 64) |
StartDateRange |
❌ | 시작일 필터 (이 날짜 이후 오퍼링만 반환) |
응답 예시:
{
"CapacityBlockOfferings": [
{
"CapacityBlockOfferingId": "cbr-offering-0abc123...",
"InstanceType": "p5en.48xlarge",
"AvailabilityZone": "ap-northeast-2a",
"InstanceCount": 1,
"StartDate": "2026-07-02T11:30:00+00:00",
"EndDate": "2026-07-03T11:30:00+00:00",
"CapacityBlockDurationHours": 24,
"UpfrontFee": "998.69"
}
]
}
CLI 예시:
aws ec2 describe-capacity-block-offerings \
--instance-type p5en.48xlarge \
--instance-count 1 \
--capacity-duration-hours 168 \
--region ap-northeast-2
정확한 가용 수량은 직접 알 수 없음
API는 "이 조건으로 예약 가능한 오퍼링이 있는가?"만 답합니다. 정확한 가용 수량을 알려면 Binary Search 방식으로 InstanceCount를 올려가며 probe해야 합니다.
On-Demand 가용성 추정 API¶
GetSpotPlacementScores — On-Demand 인스턴스의 가용성을 간접적으로 추정 할 수 있는 공식 API입니다.
| 항목 | 내용 |
|---|---|
| 용도 | 특정 인스턴스/리전의 Spot 확보 가능성 점수 (1~10) |
| 비용 | 무료 |
| OD와의 관계 | Spot과 OD는 물리 풀을 공유하므로, Spot 점수가 높으면 OD도 잡힐 가능성이 높음 (상관관계, 보장 아님) |
| 문서 | API Reference |
주요 파라미터:
| 파라미터 | 설명 |
|---|---|
InstanceTypes |
인스턴스 타입 리스트 (최소 3개 필요) |
TargetCapacity |
확보하려는 수량 |
RegionNames |
조회할 리전 리스트 (최대 10개) |
CLI 예시:
aws ec2 get-spot-placement-scores \
--instance-types p5en.48xlarge p5.48xlarge p4d.24xlarge \
--target-capacity 1 \
--region-names ap-northeast-2 us-east-1 us-west-2
응답 해석:
| 점수 | 의미 |
|---|---|
| 9~10 | 거의 확실히 확보 가능 |
| 6~8 | 높은 확률 |
| 3~5 | 불확실 |
| 1~2 | 거의 불가능 |
GPU 인스턴스에서의 한계
GPU 인스턴스(p5, p5en 등)는 풀이 작아서 항상 1~2점 → 변별력 낮음. OD 가용 수량을 직접 확인하는 공식 API는 존재하지 않습니다.
2. 모니터링 시스템 아키텍처¶
아키텍처 다이어그램¶
핵심 로직: Binary Search Probe¶
"가용 인스턴스가 정확히 몇 대인가?"를 알아내기 위해 InstanceCount를 이진 탐색합니다.
def binary_search_max(ec2_client, instance_type, duration_hours):
lo, hi, best = 1, 64, 0
now = datetime.now(timezone.utc)
while lo <= hi:
mid = (lo + hi) // 2
resp = ec2_client.describe_capacity_block_offerings(
InstanceType=instance_type,
InstanceCount=mid,
CapacityDurationHours=duration_hours,
StartDateRange=now,
)
if resp.get('CapacityBlockOfferings', []):
best = mid
lo = mid + 1
else:
hi = mid - 1
return best
- 탐색 범위: 1~64 (CB API 최대)
- API 호출: 최대 6회로 정확한 값 도출
- 병렬 처리: 여러 리전/기간을 ThreadPoolExecutor로 동시 probe
알림 전략¶
| 모드 | 주기 | 조건 | 내용 |
|---|---|---|---|
| Urgent | 4시간마다 | 시작일 7일 이내 슬롯 있을 때만 | 간단 요약 (인스턴스 수 + 시작일) |
| Daily Summary | 매일 09:00 | 항상 | 전체 기간별 가용 수량 상세 |
Daily Summary 알림 예시:

3. 비용¶
| 구성 요소 | 월 비용 |
|---|---|
| Lambda (~180회/월, 각 ~3분) | ~$0 |
| EventBridge Rules (2개) | $0 |
| SNS Publish | $0 |
| AWS Chatbot | $0 |
| 합계 | ~$0/월 |
실질 비용 제로
모든 구성 요소가 Free Tier 범위 내입니다. Lambda 메모리 128MB, 실행 시간 3분 이내면 월 100만 회 무료 호출에 충분히 포함됩니다.
4. 환경변수 TARGETS 설정¶
Lambda 환경변수로 모니터링 대상을 관리합니다. 재배포 없이 타겟 추가/삭제가 가능합니다.
[
{
"instance_type": "p5en.48xlarge",
"region": "ap-northeast-2",
"durations": [24, 168, 336]
},
{
"instance_type": "trn2.48xlarge",
"region": "us-east-1",
"durations": [168, 336, 672]
}
]
| 필드 | 설명 |
|---|---|
instance_type |
모니터링할 인스턴스 타입 |
region |
대상 리전 |
durations |
조회할 예약 기간(시간) 리스트 |
5. 부가: CB 자동 연장 관리¶
CB 만료 전 자동 연장이 필요한 경우 AWS Solutions Library 활용:
| 항목 | 내용 |
|---|---|
| GitHub | guidance-for-automated-management-of-aws-capacity-blocks |
| 기능 | CB 만료 감지 → 자동 연장 → 승인 워크플로우 → API 관리 |
| 비용 | ~$7.40/월 |
| 배포 | AWS CDK |
모니터링 + 연장 조합
- 모니터링(본 시스템) = "새 CB 가용량 발견 시 알림"
- 연장 관리 = "기존 CB 만료 전 자동 연장"
- 두 시스템 병행 → CB 라이프사이클 전체 자동화
6. 제약사항¶
| 항목 | 내용 |
|---|---|
| OD 가용량 | 직접 API 없음. SPS(점수)만 간접 추정 |
| Per-customer limit | 인스턴스/리전별 고객당 동시 예약 수량 제한 존재 |
| API Rate Limit | Binary search는 기간당 6회라 문제 없음 |
| 지원 기간 | 리전/인스턴스별 지원 기간 다름 (미지원 시 InvalidParameterValue) |
관련 가이드¶
| 가이드 | 내용 |
|---|---|
| Capacity Blocks 실전 가이드 | CB 예약/결제/콘솔 사용법 단계별 안내 |
| GPU/Trainium 구매 옵션 비교 | OD, RI, SP, CB, Spot 옵션 비교 |
참고 링크¶
| 자료 | URL |
|---|---|
| DescribeCapacityBlockOfferings | API Reference |
| GetSpotPlacementScores | API Reference |
| PurchaseCapacityBlock | API Reference |
| Capacity Blocks 사용자 가이드 | User Guide |
| Spot Placement Score 가이드 | User Guide |
| AWS Solutions: CB 자동 관리 | GitHub |
| Spot Placement Score Tracker | GitHub |
Author: Suji Lee · Accelerated Compute GTM SSA, AWS Korea