Skip to content

CostNorm/guess_unused_resource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

4 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

guess_unused_resource

AWS ๋น„์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ตœ๊ทผ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ธ‰๊ฐํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” Lambda ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ž ์žฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์•„ ๋น„์šฉ ์ตœ์ ํ™”์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹

  1. ๋น„์šฉ ๋ฐ์ดํ„ฐ ๋กœ๋“œ: ์ง€์ •๋œ S3 ๋ฒ„ํ‚ท์—์„œ ์ผ๋ณ„ ๋น„์šฉ ๋ฐ์ดํ„ฐ CSV ํŒŒ์ผ์„ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์€ YYMMDD{FILE_SUFFIX} ํ˜•์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. (์˜ˆ: 231026_sorted_costs.csv)
  2. ๊ธฐ๊ฐ„ ์ •์˜:
    • ์ตœ๊ทผ ๊ธฐ๊ฐ„: ํ•จ์ˆ˜ ์‹คํ–‰์ผ ๊ธฐ์ค€ ์ „๋‚ ๋ถ€ํ„ฐ RECENT_PERIOD_DAYS ์ด์ „๊นŒ์ง€์˜ ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค.
    • ๋น„๊ต ๊ธฐ๊ฐ„: ์ตœ๊ทผ ๊ธฐ๊ฐ„ ์‹œ์ž‘์ผ ์ „๋‚ ๋ถ€ํ„ฐ COMPARISON_PERIOD_DAYS ์ด์ „๊นŒ์ง€์˜ ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค.
  3. ๋น„์šฉ ์ง‘๊ณ„: ๊ฐ ๊ธฐ๊ฐ„์— ๋Œ€ํ•ด "Service::Operation" ์กฐํ•ฉ๋ณ„ ์ด ๋น„์šฉ์„ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฏธ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค ์ถ”์ •: ๋น„๊ต ๊ธฐ๊ฐ„์—๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ–ˆ์ง€๋งŒ(> 0), ์ตœ๊ทผ ๊ธฐ๊ฐ„์—๋Š” ๋น„์šฉ์ด ๋น„๊ต ๊ธฐ๊ฐ„ ๋น„์šฉ * (COST_THRESHOLD_PERCENTAGE / 100.0) ๋ฏธ๋งŒ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ "์ž ์žฌ์  ๋ฏธ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค"๋กœ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • (ํ™˜๊ฒฝ ๋ณ€์ˆ˜)

Lambda ํ•จ์ˆ˜ ๋˜๋Š” ๋กœ์ปฌ ์‹คํ–‰ ์‹œ ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์ด๋ฆ„ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
S3_BUCKET_NAME ๋น„์šฉ ๋ฐ์ดํ„ฐ CSV ํŒŒ์ผ์ด ์ €์žฅ๋œ S3 ๋ฒ„ํ‚ท ์ด๋ฆ„. ๋ฐ˜๋“œ์‹œ ์‹ค์ œ ๋ฒ„ํ‚ท ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. your-cost-data-bucket-name
RECENT_PERIOD_DAYS ์ตœ๊ทผ ๋น„์šฉ์„ ํ™•์ธํ•  ๊ธฐ๊ฐ„ (์ผ). 7
COMPARISON_PERIOD_DAYS ๋น„๊ตํ•  ๊ณผ๊ฑฐ ๋น„์šฉ ๊ธฐ๊ฐ„ (์ผ). 30
COST_THRESHOLD_PERCENTAGE ๋น„๊ต ๊ธฐ๊ฐ„ ๋น„์šฉ ๋Œ€๋น„ ์ตœ๊ทผ ๊ธฐ๊ฐ„ ๋น„์šฉ์˜ ํ—ˆ์šฉ ๋น„์œจ (%). ์ด ๋น„์œจ ๋ฏธ๋งŒ์ด๋ฉด ๋ฏธ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค๋กœ ๊ฐ„์ฃผ. 1.0
FILE_SUFFIX S3์—์„œ ์ฝ์–ด์˜ฌ ๋น„์šฉ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์ ‘๋ฏธ์‚ฌ. _sorted_costs.csv

์‹คํ–‰ ๋ฐฉ๋ฒ•

AWS Lambda

  1. lambda_function.py ํŒŒ์ผ์„ Lambda ํ•จ์ˆ˜๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
  2. Lambda ํ•จ์ˆ˜ ์„ค์ •์—์„œ ์œ„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. Lambda ํ•จ์ˆ˜ ์‹คํ–‰ ์—ญํ• (Role)์— ๋Œ€์ƒ S3 ๋ฒ„ํ‚ท์— ๋Œ€ํ•œ s3:GetObject ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  4. ํ•„์š”์— ๋”ฐ๋ผ CloudWatch Events (EventBridge) ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ํ…Œ์ŠคํŠธ

  1. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ S3_BUCKET_NAME์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
    # ์˜ˆ์‹œ (PowerShell)
    $env:S3_BUCKET_NAME = "your-actual-bucket-name"
    $env:RECENT_PERIOD_DAYS = "7"
    # ... ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋“ค๋„ ํ•„์š”์— ๋”ฐ๋ผ ์„ค์ •
  3. ๋กœ์ปฌ ํ™˜๊ฒฝ์— AWS ์ž๊ฒฉ ์ฆ๋ช…(Access Key, Secret Key, Session Token ๋˜๋Š” IAM Role)์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ~/.aws/credentials ํŒŒ์ผ ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  4. Python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    python lambda_function.py

์ž…๋ ฅ ๋ฐ์ดํ„ฐ ํ˜•์‹ (S3 CSV)

  • S3 ๋ฒ„ํ‚ท ๋ฃจํŠธ์— YYMMDD{FILE_SUFFIX} ํ˜•์‹์˜ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: 231026_sorted_costs.csv)
  • ๊ฐ CSV ํŒŒ์ผ์€ UTF-8 ์ธ์ฝ”๋”ฉ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ํ–‰์€ ํ—ค๋”์ด๋ฉฐ, ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  Service, Operation, Cost ์—ด์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์—ด์ด ์žˆ์–ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.
  • Cost ์—ด์˜ ๊ฐ’์€ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ CSV ๋‚ด์šฉ:

Service,Operation,Cost,UsageQuantity,ResourceId,etc
Amazon Elastic Compute Cloud,RunInstances,1.23,1,i-0123456789abcdef0,some_info
AWS Key Management Service,Decrypt,0.05,10,/alias/my-key,other_info
Amazon Simple Storage Service,PutObject,0.10,5,my-data-bucket,another_info

์ถœ๋ ฅ ํ˜•์‹ (Lambda ๋ฐ˜ํ™˜๊ฐ’)

Lambda ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์˜ JSON ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
  "statusCode": 200,
  "body": {
    "potentially_unused_resources": [
      {
        "resource": "Service::Operation",
        "comparison_period_cost": 15.75,
        "recent_period_cost": 0.10
      },
      // ... ๋‹ค๋ฅธ ์ž ์žฌ์  ๋ฏธ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค๋“ค
    ],
    "comparison_period": "YYYY-MM-DD to YYYY-MM-DD",
    "recent_period": "YYYY-MM-DD to YYYY-MM-DD"
  }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages