AWS ๋น์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ต๊ทผ ์ฌ์ฉ๋์ด ๊ธ๊ฐํ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ Lambda ํจ์์ ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ๋น์ฉ ์ต์ ํ์ ํ์ฉํ ์ ์์ต๋๋ค.
- ๋น์ฉ ๋ฐ์ดํฐ ๋ก๋: ์ง์ ๋ S3 ๋ฒํท์์ ์ผ๋ณ ๋น์ฉ ๋ฐ์ดํฐ CSV ํ์ผ์ ์ฝ์ด์ต๋๋ค. ํ์ผ ์ด๋ฆ์ 
YYMMDD{FILE_SUFFIX}ํ์์ ๋ฐ๋ฆ ๋๋ค. (์:231026_sorted_costs.csv) - ๊ธฐ๊ฐ ์ ์:
- ์ต๊ทผ ๊ธฐ๊ฐ: ํจ์ ์คํ์ผ ๊ธฐ์ค ์ ๋ ๋ถํฐ 
RECENT_PERIOD_DAYS์ด์ ๊น์ง์ ๊ธฐ๊ฐ์ ๋๋ค. - ๋น๊ต ๊ธฐ๊ฐ: ์ต๊ทผ ๊ธฐ๊ฐ ์์์ผ ์ ๋ ๋ถํฐ 
COMPARISON_PERIOD_DAYS์ด์ ๊น์ง์ ๊ธฐ๊ฐ์ ๋๋ค. 
 - ์ต๊ทผ ๊ธฐ๊ฐ: ํจ์ ์คํ์ผ ๊ธฐ์ค ์ ๋ ๋ถํฐ 
 - ๋น์ฉ ์ง๊ณ: ๊ฐ ๊ธฐ๊ฐ์ ๋ํด "Service::Operation" ์กฐํฉ๋ณ ์ด ๋น์ฉ์ ์ง๊ณํฉ๋๋ค.
 - ๋ฏธ์ฌ์ฉ ๋ฆฌ์์ค ์ถ์ : ๋น๊ต ๊ธฐ๊ฐ์๋ ๋น์ฉ์ด ๋ฐ์ํ์ง๋ง(> 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 | 
lambda_function.pyํ์ผ์ Lambda ํจ์๋ก ๋ฐฐํฌํฉ๋๋ค.- Lambda ํจ์ ์ค์ ์์ ์ ํ๊ฒฝ ๋ณ์๋ค์ ๊ตฌ์ฑํฉ๋๋ค.
 - Lambda ํจ์ ์คํ ์ญํ (Role)์ ๋์ S3 ๋ฒํท์ ๋ํ 
s3:GetObject๊ถํ์ ๋ถ์ฌํฉ๋๋ค. - ํ์์ ๋ฐ๋ผ CloudWatch Events (EventBridge) ๋ฑ์ ์ฌ์ฉํ์ฌ ์ฃผ๊ธฐ์ ์ผ๋ก ํจ์๋ฅผ ์คํํ๋๋ก ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ ํฉ๋๋ค.
 
- ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
 - ํ์ํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. ํนํ 
S3_BUCKET_NAME์ ํ์์ ๋๋ค.# ์์ (PowerShell) $env:S3_BUCKET_NAME = "your-actual-bucket-name" $env:RECENT_PERIOD_DAYS = "7" # ... ๋ค๋ฅธ ๋ณ์๋ค๋ ํ์์ ๋ฐ๋ผ ์ค์ 
 - ๋ก์ปฌ ํ๊ฒฝ์ AWS ์๊ฒฉ ์ฆ๋ช
(Access Key, Secret Key, Session Token ๋๋ IAM Role)์ด ๊ตฌ์ฑ๋์ด ์์ด์ผ ํฉ๋๋ค. (์: 
~/.aws/credentialsํ์ผ ๋๋ ํ๊ฒฝ ๋ณ์AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - Python ์คํฌ๋ฆฝํธ๋ฅผ ์ง์  ์คํํฉ๋๋ค.
python lambda_function.py
 
- 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 ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ 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"
  }
}