공학, 음악 부스러기
Published on

AWS Budgets 로 과금 예산 관리 자동화하기

Authors
  • avatar
    Name
    치우

안녕하세요,

이번 글에서는 AWS Budgets 를 통해 실시간으로 클라우드 서비스의 과금 예산을 추적하고 관리하는 방법을 훑어보겠습니다.

AWS CLI 설치 관련:

공식문서 또는

aws cli 설치 가이드

예산 설정하기

다음은 현재 글을 작성하는 날짜 기준으로 2024 년 11 월 부터 12월까지의 사용량을 추적하며 budgets 를 통해 예산 설정을 생성하는 예시입니다.

aws budgets create-budget --account-id <ACCOUNT_ID> \
--budget '{
    "BudgetName": "MonthlyCostBudget",
    "BudgetLimit": {
        "Amount": "100.00",
        "Unit": "USD"
    },
    "TimeUnit": "MONTHLY",
    "BudgetType": "COST",
    "CostFilters": {},
    "CostTypes": {
        "IncludeTax": true,
        "IncludeSubscription": true,
        "UseBlended": false
    },
    "TimePeriod": {
        "Start": "2023-11-01T00:00:00Z",
        "End": "2024-12-31T23:59:59Z"
    },
    "NotificationsWithSubscribers": []
}'

BudgetName 예산 이름. BudgetLimit 예산 한도(여기서는 $100). TimeUnit 예산 주기(월별, 분기별 등). BudgetType COST, USAGE 또는 SAVINGS_PLANS.

account id. 조회하기

루트 사용자로 인증되어 있는 경우 현재 인증 정보를 조회하여 account id 를 알 수 있습니다.

여기서는 특정. iam 계정의 accountid 를 iam 유저 이름을 통해 조회하는 방법을 알아봅니다.

aws iam get-user --user-name <IAM-사용자-이름> --query User.Arn --output text

위 명령어는 특정 iam 유저 이름을 통해 해당 계정의 ahn 을 조회합니다. 위 명령으로 얻은 ahn 에서 account id 의 문자열을 추출합니다.

다음은 'example-user' 인 경우의 예시 스크립트입니다,

user_arn=$(aws iam get-user --user-name example-user --query User.Arn --output text)
account_id=$(echo $user_arn | cut -d':' -f5)
echo "Account ID: $account_id"

위의 iam 유저 이름 example-user 를
올바른 사용자 이름으로 수정해서 사용하시면 해당 사용자의 account id 를 추출할 수 있습니다.

알림 설정하기

다음은 생성한 예산 설정을 가지고 기준을 충족하는 경우 이메일로 알람을 전송하는 예시입니다.

앞서 생성한 예산 월 100 미주 달러의 80% (80 달러) 를 초과하는 경우 이메일을 통해 알람을 전송합니다..

aws budgets update-notification --account-id <ACCOUNT_ID> \
--budget-name "MonthlyCostBudget" \
--notification '{
    "NotificationType": "ACTUAL",
    "ComparisonOperator": "GREATER_THAN",
    "Threshold": 80,
    "ThresholdType": "PERCENTAGE",
    "NotificationState": "ALARM"
}' \
--subscribers '[
    {
        "SubscriptionType": "EMAIL",
        "Address": "your-email@example.com"
    }
]'

NotificationType ACTUAL(실제 비용) 또는 FORECASTED(예상 비용). Threshold 알림 임계값(여기서는 80%). SubscriptionType EMAIL 또는 SNS.

예산 조회하기

현재 예산 설정, 알림 설정을 확인합니다.

aws budgets describe-budgets --account-id <ACCOUNT_ID>

예산 삭제하기

aws budgets delete-budget --account-id <ACCOUNT_ID> \
--budget-name "MonthlyCostBudget"

강력한 장점, 예측 비용

사실 aws 의 서비스를 사용하면서 비용을 추적하고 확인하는 방법은 budgets 만 있는 것은 아닙니다.

coast explorer 를 통해 콘솔에서 시각화된 데이터를 직접 확인하거나 aws ce 명령어를 통해 coast explorer를 크론잡 또는 다른 스케줄링 도구와 연계해서 비용을 정기적으로 확인할 수도 있고,

직접적인 비용이 아닌 각 서비스의 사용량을 조회해서 이미 고지된 aws 의 비용 기준을 통해 계산하고 cloud watch 를 통해 알림을 전송하도록 설정할 수도 있습니다.

budgets 보다 설정하는 과정이 복잡하지만, 애초에 커멘드라인에서 개발할 필요를 느끼시는 분들이라면 그렇게 많은 차이가 있지는 않습니다. 만약 다른 두 방법을 통해 스크립트를 작성해 놓은 것이 있으시다면 budgets 를 사용하지 않아도 비슷한 기능을 설정할 수 있씁니다.

하지만 다른 도구들에서는 하지 못하는 강력한 기능을 budgets 를 통해 사용할 수 있는데요.

바로, 실제로 사용한 사용량이 아닌 앞으로 발생할 비용을 지금까지의 사용량을 통해 예측하고 그를 기반으로 알람을 보내거나

현재 예상 과금 비용을 조회해서 aws 리셀링 또는 인스턴스를 클라이언트마다 할당하는 응용 비즈니스를 하는 경우 고객들에게 현재 예상 비용을 곧바로 보여줄 수도 있지요.

위에서 알람을 설정할 때의 NotificationType 를 actual 이 아닌 forecasted 로 전송합니다. 예상 비용 기준으로 설정할 수 있고,

aws budgets describe-budget --account-id <ACCOUNT_ID> --budget-name <BUDGET_NAME> \
| grep -A 1 '"ForecastedSpend"' | grep '"Amount"' | awk -F'"' '{print $4}'

그리고 위 명령어를 통해 특정 권한의 사용자의 예상 과금 비용을 지정한 예산의 기준을 통해 조회할 수 있습니다.

###주의

grep 과 awk 를 통한 json 필터링은 json 응답의 구조가 바뀌는 경우 수정해야 할 수 있습니다.

여기서는 개괄적인 이해정도로만 보시고, 가급적 jq 나 다른 json 프로세서 도구를 사용해서 동일한 필터링을 대체하시는 것을 추천합니다.

이번 글에서는 aws budgets 를 통해 소유중인 계정들의 비용을 추적하고 실시간 + 자동으로 예산을 관리하는 방법들을 알아보았습니다.

도움이 되셨다면 아래 인스타그램 (취미, 개인 계정) 팔로우 한 번 해주시고,

앞으로 개발과 간단한 임베디드 설계 + 음악 공연을 적절히 섞은 흥미로운 프로젝트들을 계획중에 있으니까 추후 포스팅 정보를 받아 보시면 재밌을거에요 ㅎㅎ

그럼