참고 자료
비용 산정과 종료 확인
가격은 조회 시점·리전·계정 요금제·할인 조건에 따라 달라집니다. 이 표는 비용을 계산하는 방법이며 보장 요금이나 지출 상한이 아닙니다. 과거 운영 배포의 월 추정값을 참가자 비용으로 복사하지 않습니다.
기본 00–04장은 로컬 실행과 Bedrock 직접 호출입니다. 05–13장은 별도의 Fargate·ALB·CloudFront·AgentCore·저장소를 만듭니다. Isaac Sim·EKS GPU 비용은 별도 트랙의 계산을 더해야 합니다.
1. 산정 전에 기록할 입력
| 입력 | 본인 값 |
|---|---|
| 가격 조회 시각·통화·세금·무료 구간 적용 여부 | 조회 후 기록 |
| 실행 리전 / CloudFront 전송 지역 | 서울 및 실제 viewer 지역 |
| 실습 시작·정리 예정 시각 | UTC 또는 명시한 시간대 |
| Fargate vCPU·메모리·실행 태스크 수·겹친 배포 시간 | 기본 1 vCPU·2 GiB·태스크 1개에서 출발 |
| ALB 시간·평균 LCU·공개 IPv4 사용량 | 실제 생성 자원과 사용량 |
| 모델 호출 수·입출력/캐시/추론 토큰 | 선택한 모델의 과금 규칙에 맞게 측정 |
| AgentCore active CPU·메모리·세션 유지 시간 | 실제 사용 지표 |
| 자산/재생 기록 크기·버전·보존 기간 | 저장소 조회와 요청량 |
| 로그·NAT·endpoint·CloudFront 전송량 | 실제 경로와 사용량 |
| 별도 GPU 트랙 자원 | EKS·GPU 노드·디스크·체크포인트 등 별도 합산 |
수업이 끝난 뒤에도 ALB·Fargate를 켜 두면 실제 종료할 때까지의 사용량을 계산해야 합니다.
2. 현재 Fargate 가격 조회 예
아래는 AWS Price List Query API의 조회입니다. 준비된 참가자 app의 계정 바인딩으로 실행하며, 조회 권한이 없으면 진행자가 공식 요금표로 같은 값을 확인합니다. API endpoint의 us-east-1과 실제 상품 리전 서울은 서로 다른 의미입니다.
set -euo pipefail
cd "$ROBOT_LAB"
test -f infra/workshop-binding.json
python3 - <<'PY'
from datetime import datetime, timezone
import json, sys
from pathlib import Path
sys.path.insert(0, "infra")
from deployment import Cloud, read_config
cloud = Cloud(read_config(Path("infra/config.json")))
rows = []
pages = cloud.client("pricing", "us-east-1").get_paginator("get_products").paginate(
ServiceCode="AmazonECS",
Filters=[{"Type": "TERM_MATCH", "Field": "location", "Value": "Asia Pacific (Seoul)"}])
for page in pages:
for text in page["PriceList"]:
product = json.loads(text)
attrs = product["product"]["attributes"]
usage = attrs.get("usagetype", "")
if "Fargate" not in usage or "ARM" not in usage:
continue
for term in product["terms"].get("OnDemand", {}).values():
for price in term["priceDimensions"].values():
rows.append({
"sku": product["product"]["sku"], "usageType": usage,
"effectiveDate": term.get("effectiveDate"),
"unit": price["unit"], "description": price["description"],
"USD": price["pricePerUnit"].get("USD"),
})
assert rows, "No ARM Fargate prices found; review current catalog attributes"
report = {"queriedAt": datetime.now(timezone.utc).isoformat(),
"productRegion": "ap-northeast-2", "rates": rows}
Path(".local/evidence").mkdir(parents=True, exist_ok=True)
Path(".local/evidence/fargate-prices.json").write_text(json.dumps(report, indent=2) + "\n")
print(json.dumps(report, indent=2))
PY
출력의 usageType, unit, description을 읽어 Linux ARM vCPU-hour와 GB-hour를 고릅니다. 다른 요금 항목을 이름이 비슷하다는 이유로 더하지 않습니다. 조회 결과가 없거나 단위가 예상과 다르면 가격을 0으로 처리하지 않습니다.
3. 계산식
모든 P는 조회일과 단위를 확인한 현재 단가입니다. 아래 항목은 필요한 사용량을 빠뜨리지 않기 위한 틀이며 세금·할인·무료 구간은 실제 조건에 맞춰 별도로 적용합니다.
| 항목 | 계산에 사용할 식 |
|---|---|
| Fargate | 태스크시간 × (vCPU × P_cpu + GB × P_memory) + 청구 대상 추가 임시 저장소 |
| ALB | ALB시간 × P_alb + LCU시간 × P_lcu |
| Public IPv4 | 실제 주소시간 × P_ipv4 |
| WAF | 선택한 요금제의 ACL·규칙 기간 비용 + 요청/추가 기능 |
| Secrets Manager | Secret 수와 유지 기간 비용 + API 호출 |
| AgentCore Runtime | 실제 active vCPU-second·메모리 GB-second를 현재 가격 단위로 환산 |
| Bedrock | 모델 규칙에 따른 입력·캐시·출력·추론 토큰/요청 비용 |
| S3·ECR | GB-month 저장량·과거 버전 + 요청·해당 전송 |
| DynamoDB | 읽기/쓰기 단위 + 저장·PITR/백업 |
| CloudWatch | 로그 수집·저장·쿼리 + 사용한 지표/알람 |
| CloudFront | 선택한 요금제의 viewer 요청·전송·무효화 등 |
| NAT·endpoint | 실제 통과 데이터 처리 + 새로 추가했다면 시간 비용 |
| GuardDuty 등 계정 기능 | 해당 서비스가 실제 적용된 경우 그 사용량/계층 |
Public ALB가 만든 공개 IPv4도 계산합니다. 기본 두 AZ 배치에서 출발하더라도 주소 수를 영구 고정값으로 보지 않고 실제 사용량을 확인합니다. Private Fargate의 Public IP 비활성 설정과 ALB 공개 주소 과금은 별개입니다.
기존 NAT/VPC를 재사용하는 참가자 한 명의 추가 비용을 계산할 때 이미 존재하던 NAT 시간 비용을 중복 더하지 않습니다. 전체 환경 비용을 계산한다면 공유 네트워크의 시간 비용도 배분합니다. 기존 경로를 통과하는 추가 데이터 처리 비용은 두 경우 모두 확인합니다.
4. Fargate 소계 직접 계산
현재 조회한 두 단가와 총 태스크시간을 입력합니다. 총 태스크시간은 평균 태스크 수 × 실행 시간이며 배포 중 겹친 태스크도 포함합니다.
python3 -c '
from decimal import Decimal
def amount(label):
value = Decimal(input(label))
if not value.is_finite() or value < 0:
raise ValueError("Use a finite nonnegative value")
return value
cpu = amount("현재 ARM vCPU-hour 단가(USD): ")
memory = amount("현재 ARM GB-hour 단가(USD): ")
hours = amount("이번 실습의 총 태스크시간: ")
result = hours * (Decimal("1") * cpu + Decimal("2") * memory)
print("1 vCPU / 2 GiB Fargate 소계(USD):", result)
print("ALB·IPv4·WAF·모델·Runtime·저장·전송·로그·세금 등은 별도입니다.")
'
이 소계를 전체 비용이라고 부르지 않습니다. 전체 합계에 필요한 모델 가격이나 사용량이 없으면 해당 항목을 “미산정”으로 남깁니다.
5. AgentCore와 모델 사용량
Runtime의 CPU는 실제 active CPU 사용을 기준으로, 메모리는 세션 동안의 사용을 현재 청구 규칙에 따라 계산합니다. 모델 응답을 기다리는 벽시계 시간 전체를 active CPU 시간으로 곱하지 않습니다. 반대로 대기 중 메모리 비용도 항상 0이라고 가정하지 않습니다.
프로젝트의 Runtime은 idle timeout 60초, 최대 수명 900초 설정을 사용합니다. 실제 생성된 템플릿/Runtime 설정을 확인하고 세션 재사용·백그라운드 작업을 포함해 계산합니다. Bedrock 토큰 비용은 Runtime 비용과 별도입니다.
global.openai.gpt-5.6-sol의 요금을 다른 모델의 단가로 대신하지 않습니다. 입력·캐시·출력·추론 토큰이 현재 요금표에서 어떻게 정의되는지 확인해 중복 합산하지 않습니다. 가격을 확인하지 못했다면 예상 모델 비용을 만들어 넣지 않습니다.
6. 실습 명령별 이용량
| 명령/동작 | 발생하는 작업 |
|---|---|
lab.py 준비·조회 |
AWS 배포/모델 호출 없음 |
| Docker build | 로컬 계산·이미지/패키지 다운로드, 네트워크 경로별 비용 가능 |
| ECR publish·정적 assets | 이미지/자산 저장·전송·요청 |
verify-aws.py |
AWS/HTTPS 조회, 모델 호출 없음 |
| 06장 Runtime 실호출 | 모델 계획 1회와 Runtime 사용 |
verify-demo.py |
모델 계획 2회 + 새 물리 실행 1회 + 저장 조회 |
npm run test:browser |
실제 계획과 물리 실행을 포함한 브라우저 검사 |
BROWSER_SKIP_LIVE=1 |
일부 물리 실행 생략. 플래너 호출까지 없는 검사는 아님 |
| 수동 시연 | 새 계획/실행을 요청한 만큼 사용 |
테스트를 반복할 때는 필요한 횟수를 정합니다. API·WAF 제한은 폭주를 줄이지만 정해진 달러 금액에서 과금을 차단하는 기능은 아닙니다. 비용 경보·예산 정책이 필요하면 진행자가 현재 계정 기준으로 별도 준비합니다.
7. 정리 후 확인
13장에서 삭제 전 inventory를 보관하고 다음을 확인합니다.
- App·Edge·AgentCore·Foundation 스택의 삭제 완료.
- Fargate 태스크·ALB·Runtime과 관련 실행 자원의 잔여 상태.
- Retain된 S3 버전·ECR·DynamoDB·Secret·로그의 유지 또는 별도 삭제 결정.
- 수동 서비스 CNAME 정리와 공유 인증서 검증 레코드 구분.
- 별도 Isaac Sim·EKS GPU 작업·노드·디스크·클러스터의 정리 상태.
- 비용 화면 반영 지연 후 남은 과금 항목과 다음 확인 시각.
로컬 폴더 삭제, 스택 ABSENT, 일시적으로 0인 비용 화면 중 하나만으로 이후 과금이 없다고 단정하지 않습니다.
공식 가격 확인
- AWS Price List 사용과 endpoint (새 탭)
- Fargate 가격 (새 탭)
- Elastic Load Balancing 가격 (새 탭)
- Amazon VPC·Public IPv4 가격 (새 탭)
- AgentCore 가격 (새 탭)
- Bedrock 가격 (새 탭)
- AWS Pricing Calculator (새 탭)
공식 요금표의 조회일·리전·SKU/단위와 산정 가정을 함께 보관합니다. 계산기 결과도 실제 청구액이나 한도를 보장하지 않습니다.