QueryPie Community Edition is live ๐ŸŽ‰ Get it now for free Download today!

๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ
๋ธ”๋กœ๊ทธ

EC2 ์ž๋™ํ™”๋ฅผ ํ†ตํ•œ ๋น„์šฉ ์ ˆ๊ฐ: AWS Lambda์™€ EventBridge ํ™œ์šฉ๋ฒ•

Robb Lee

Robb Lee

Technical Project Manager

๋กญ์€ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ, ๊ฑฐ๋ฒ„๋„Œ์Šค, ๊ทธ๋ฆฌ๊ณ  ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜์„ ์ „๋ฌธ์œผ๋กœ ํ•˜๋Š” ์ˆ™๋ จ๋œ TPM(Technical Project Manager)์ž…๋‹ˆ๋‹ค. QueryPie์—์„œ ๊ทธ๋Š” ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ๊ณผ ์šด์˜์„ ์ง€์›ํ•˜๋ฉฐ, ์กฐ์ง๋“ค์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ „ํ•˜๋ฉฐ ๊ณ ์„ฑ๋Šฅ์˜ ๊ธฐ์ˆ ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋กญ์€ ๋˜ํ•œ ๊ณ ๊ฐ๋“ค์ด QueryPie๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ™œํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์กฐ์ง์˜ ๋ฐ์ดํ„ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค์™€ ๋ณด์•ˆ ์ „๋žต์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐ ํฌ๊ฒŒ ๊ธฐ์—ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

EC2 ์ž๋™ํ™”๋ฅผ ํ†ตํ•œ ๋น„์šฉ ์ ˆ๊ฐ: AWS Lambda์™€ EventBridge ํ™œ์šฉ๋ฒ•
Cost Optimization through EC2 Automation

ํ˜น์‹œ ๊ฐœ๋ฐœ์šฉ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋ฃจ ์ข…์ผ ์ผœ๋‘๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

ํ•„์š”ํ•  ๋•Œ๋งŒ ์ผœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋น„์šฉ์„ ์ ˆ์•ฝํ•˜๊ณ  ๊ด€๋ฆฌ๋„ ํŽธํ•ด์งˆ ํ…๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ํŒ€์ด ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค.

์ฃผ๋ง์—๋„, ์•ผ๊ทผ์ด ์—†๋Š” ๋ฐค์—๋„ EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๊ณ  ์žˆ์—ˆ์ฃ . ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‹œ๊ฐ„ ๋™์•ˆ์—๋„ ๊ณผ๊ธˆ์ด ๊ณ„์† ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ถˆํ•„์š”ํ•œ ์šด์˜ ๋น„์šฉ์ด ์Œ“์˜€๊ณ , ์ž์› ๊ด€๋ฆฌ์˜ ๋น„ํšจ์œจ์„ฑ๋„ ์ปค์กŒ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด AWS Lambda์™€ Amazon EventBridge๋ฅผ ํ™œ์šฉํ•ด ์ž๋™ํ™”๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, EC2 ๋น„์šฉ์„ 45% ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ด€๋ฆฌ ๋ถ€๋‹ด๋„ ํฌ๊ฒŒ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์„๊นŒ์š”? ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ ๋ฐฉ๋ฒ•์„ ํ•จ๊ป˜ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž๋™ํ™”๋ฅผ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ ์ด์œ 

ํ•œ ๋‹ฌ ๋™์•ˆ AWS ๋น„์šฉ์„ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ, ๊ฐœ๋ฐœ์šฉ EC2 ์ธ์Šคํ„ด์Šค์—์„œ ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์ด ์ƒ๋‹นํžˆ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋ฃจ ํ‰๊ท  14์‹œ๊ฐ„ ์ด์ƒ ์œ ํœด ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์—ˆ์Œ
  • ์ฃผ๋ง์—๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜์–ด ๋ถˆํ•„์š”ํ•œ ๊ณผ๊ธˆ ๋ฐœ์ƒ
  • ๊ฐœ๋ฐœ์ž๋“ค์ด ์ˆ˜๋™์œผ๋กœ EC2๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๊ณผ์ •์ด ๋ฒˆ๊ฑฐ๋กญ๊ณ  ๋น„ํšจ์œจ์ 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™ํ™”๋œ EC2 ์Šค์ผ€์ค„๋ง ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ํ™”๊ฐ€ ๊ตฌํ˜„๋œ๋‹ค๋ฉด, ํ•„์š”ํ•  ๋•Œ๋งŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ์ž๋™์œผ๋กœ ์ข…๋ฃŒํ•ด ๋น„์šฉ ์ ˆ๊ฐ๊ณผ ์šด์˜ ํšจ์œจ์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

EC2 ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜

EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด AWS์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ํ™” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•  ๋•Œ๋งŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ์ž๋™์œผ๋กœ ์ข…๋ฃŒํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์—ญํ• 

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ์—ญํ• 
Amazon EventBridge**EC2 ์ธ์Šคํ„ด์Šค์˜ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹น
AWS LambdaEventBridge์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๋กœ์ง ์‹คํ–‰
IAMLambda๊ฐ€ EC2๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ๊ด€๋ฆฌ

์ž๋™ํ™” ํ๋ฆ„

  1. ์ถœ๊ทผ ์‹œ๊ฐ„(์˜ค์ „ 10์‹œ) โ†’ EventBridge๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์–ด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์‹œ์ž‘
  2. ์—…๋ฌด ์ข…๋ฃŒ ์‹œ๊ฐ„(์˜คํ›„ 7์‹œ) โ†’ EventBridge๊ฐ€ ๋‹ค์‹œ ํŠธ๋ฆฌ๊ฑฐ๋˜์–ด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ข…๋ฃŒ
  3. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ โ†’ ํŠน์ • ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ผ๊ทผ ๋˜๋Š” ์ฃผ๋ง์—๋„ EC2๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,
    • EC2 ์ธ์Šคํ„ด์Šค์— โ€˜Overrideโ€™ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋™ ์ข…๋ฃŒ ๋ฐฉ์ง€
    • Lambda๊ฐ€ ํƒœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ณ , Override ์„ค์ •์ด ์žˆ์œผ๋ฉด ์ข…๋ฃŒํ•˜์ง€ ์•Š์Œ

์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ˆ˜์ž‘์—… ์—†์ด EC2๋ฅผ ์ž๋™ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๋ฉด์„œ๋„ ์œ ์—ฐํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

EC2 ์ž๋™ํ™” ๊ตฌํ˜„ ํ”„๋กœ์„ธ์Šค

EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด, ๋จผ์ € ์ž๋™ํ™” ๋Œ€์ƒ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. EC2 ํƒœ๊ทธ ์„ค์ •

์ž๋™ํ™”ํ•  EC2 ์ธ์Šคํ„ด์Šค์— ํŠน์ • ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ์ž๋™ํ™” ๋Œ€์ƒ๊ณผ ๋น„๋Œ€์ƒ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ AWS CLI ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํŠน์ • EC2 ์ธ์Šคํ„ด์Šค์— Scheduled=True ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

aws ec2 create-tags --resources i-0abcd1234efgh5678 --tags Key=Scheduled,Value=True

์ด ํƒœ๊ทธ๊ฐ€ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค๋งŒ ์ž๋™ํ™” ์Šค์ผ€์ค„์— ๋”ฐ๋ผ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํƒœ๊ทธ๊ฐ€ ์—†๋Š” ์ธ์Šคํ„ด์Šค๋Š” ์ž๋™ํ™” ๊ทœ์น™์—์„œ ์ œ์™ธ๋˜์–ด ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํŠน์ • ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™ ์ข…๋ฃŒ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๋ ค๋ฉด Override=True ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Lambda๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ข…๋ฃŒ๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. IAM ์ •์ฑ… ์„ค์ •

AWS Lambda๊ฐ€ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์–ดํ•˜๋ ค๋ฉด, ์ ์ ˆํ•œ IAM ์ •์ฑ…์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Lambda๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…(์ธ์Šคํ„ด์Šค ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*"
        }
    ]
}

์•„๋ž˜ IAM ์ •์ฑ…์€ ํŠน์ • ํƒœ๊ทธ(Scheduled=True)๊ฐ€ ์„ค์ •๋œ EC2 ์ธ์Šคํ„ด์Šค๋งŒ ์‹œ์ž‘(Start) ๋ฐ ์ข…๋ฃŒ(Stop) ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.


IAM ์—ญํ• (Role) ์ƒ์„ฑ ๋ฐ Lambda ์—ฐ๊ฒฐ

  1. IAM ์ฝ˜์†”(AWS IAM)์—์„œ ์ƒˆ๋กœ์šด ์—ญํ• (Role) ์ƒ์„ฑ
  2. Lambda์—์„œ ์‚ฌ์šฉํ•  ์„œ๋น„์Šค ์—ญํ•  ์„ ํƒ (AWS ์„œ๋น„์Šค โ†’ Lambda ์„ ํƒ)
  3. ์œ„ IAM ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๋‹น ์—ญํ• ์— ์—ฐ๊ฒฐ
  4. ์ƒ์„ฑํ•œ IAM ์—ญํ• ์„ Lambda ํ•จ์ˆ˜์— ํ• ๋‹น

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด Lambda๊ฐ€ ๋ถˆํ•„์š”ํ•œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์–ดํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณด์•ˆ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ž๋™ํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Lambda ํ•จ์ˆ˜ ๊ตฌํ˜„

Lambda์—์„œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” Scheduled=True ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋งŒ ๋Œ€์ƒ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Lambda ์ฝ”๋“œ (EC2 ์‹œ์ž‘ & ์ข…๋ฃŒ ์ง€์›) ์•„๋ž˜ ์ฝ”๋“œ๋Š” EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•˜๋Š” Lambda ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด์ „ ์ฝ”๋“œ์—์„œ start_instances๋งŒ ์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ, ์ถ”๊ฐ€์ ์œผ๋กœ stop_instances ๊ธฐ๋Šฅ๋„ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.

import boto3
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def get_instances():
    ec2 = boto3.resource('ec2')
    return [
        instance.id for instance in ec2.instances.all() 
        if any(tag.get('Key') == 'Scheduled' and tag.get('Value') == 'True' 
            for tag in instance.tags or [])
    ]
def lambda_handler(event, context):
    try:
        ec2_client = boto3.client('ec2', region_name='ap-northeast-2')
        instances = get_instances()
        if not instances:
            logger.info("No scheduled instances found")
            return
        ec2_client.start_instances(InstanceIds=instances)
        logger.info(f"Successfully started instances: {instances}")
    except Exception as e:
        logger.error(f"Failed to start instances: {str(e)}")
        raise

Lambda ํ•จ์ˆ˜์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. get_instances()
    • EC2 ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜์—ฌ Scheduled=True ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜
  2. lambda_handler(event, context)
    • event['action'] ๊ฐ’์— ๋”ฐ๋ผ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ
    • "start"์ด๋ฉด start_instances() ์‹คํ–‰
    • "stop"์ด๋ฉด stop_instances() ์‹คํ–‰
    • ์ž˜๋ชป๋œ action ๊ฐ’์ด ์ „๋‹ฌ๋˜๋ฉด ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ

EventBridge์™€ Lambda ์—ฐ๋™ ๋ฐฉ๋ฒ•

  • EC2 ์‹œ์ž‘ ์ด๋ฒคํŠธ (์•„์นจ 10์‹œ ํŠธ๋ฆฌ๊ฑฐ)
    • EventBridge์—์„œ { "action": "start" } ์ด๋ฒคํŠธ๋ฅผ Lambda๋กœ ์ „๋‹ฌ
  • EC2 ์ข…๋ฃŒ ์ด๋ฒคํŠธ (์ €๋… 7์‹œ ํŠธ๋ฆฌ๊ฑฐ)
    • EventBridge์—์„œ { "action": "stop" } ์ด๋ฒคํŠธ๋ฅผ Lambda๋กœ ์ „๋‹ฌ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—…๋ฌด ์‹œ๊ฐ„์— ๋งž์ถฐ EC2๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ณ , ์ข…๋ฃŒ ์‹œ๊ฐ„์—๋Š” ์ž๋™์œผ๋กœ ๊บผ์ง€๋Š” ์™„์ „ํ•œ ์ž๋™ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๐Ÿš€

4. EventBridge ์Šค์ผ€์ค„ ์„ค์ •

Amazon EventBridge๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EC2 ์‹œ์ž‘/์ข…๋ฃŒ ์‹œ๊ฐ„์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ธ์Šคํ„ด์Šค๋ฅผ ์ผœ๊ณ  ๋„๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์ค„์ด๊ณ , ์šด์˜ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


EventBridge ๊ทœ์น™ ์ƒ์„ฑ (EC2 ์‹œ์ž‘/์ข…๋ฃŒ ์Šค์ผ€์ค„๋ง) ์•„๋ž˜ AWS CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EventBridge์—์„œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

# Start EC2 at 10:00 AM (UTC: 1:00 AM)
aws events put-rule \
    --name ec2-start-schedule \
    --schedule-expression "cron(0 1 ? * MON-FRI *)"
# Stop EC2 at 7:00 PM (UTC: 10:00 AM)
aws events put-rule \
    --name ec2-stop-schedule \
    --schedule-expression "cron(0 10 ? * MON-FRI *)"

์ด์ œ EC2๊ฐ€ ์—…๋ฌด ์‹œ๊ฐ„์— ๋งž์ถฐ ์ž๋™์œผ๋กœ ์ผœ์ง€๊ณ , ํ‡ด๊ทผ ํ›„์—๋Š” ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์ด ์ ˆ๊ฐ๋ฉ๋‹ˆ๋‹ค! ๐Ÿš€

์šด์˜ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž๋™ํ™”๋ฅผ ์ ์šฉํ•œ ํ›„ ๋ช‡๋ช‡ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
๊ณตํœด์ผ์—๋Š” EC2๋ฅผ ์ผœ์ง€ ์•Š๋„๋ก ์„ค์ •ํ•˜๊ณ  ์‹ถ์ŒDynamoDB์— ๊ณตํœด์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  Lambda์—์„œ ์ฒดํฌ
๊ธด๊ธ‰ํ•˜๊ฒŒ EC2๋ฅผ ์ผœ์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์ŒOverride ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™ ์ข…๋ฃŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์‹œ์ž‘ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์ŒStep Functions์„ ํ™œ์šฉํ•ด ์ธ์Šคํ„ด์Šค ์˜์กด์„ฑ ๊ด€๋ฆฌ

์ด๋ ‡๊ฒŒ ์šด์˜ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋„ ๋ฌธ์ œ์—†์ด ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ํ™” ํ›„ ํšจ๊ณผ

EC2 ์Šค์ผ€์ค„๋ง ์ž๋™ํ™”๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ˆˆ์— ๋„๋Š” ๊ฐœ์„  ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Cost Optimization through EC2 Automation

โœ… AWS ๋น„์šฉ 45% ์ ˆ๊ฐ

  • ์œ ํœด ์ƒํƒœ์˜€๋˜ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™ ์ข…๋ฃŒํ•จ์œผ๋กœ์จ ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

โœ… ์—…๋ฌด ์‹œ๊ฐ„ ์™ธ EC2 ์ž๋™ ์ข…๋ฃŒ

  • ์•ผ๊ทผ์ด๋‚˜ ์ฃผ๋ง์—๋„ ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ผœ์ ธ ์žˆ๋Š” ์ผ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.
  • ํ•„์š”ํ•  ๋•Œ๋งŒ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ•˜์—ฌ ํšจ์œจ์ ์ธ ์ž์› ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

โœ… ์šด์˜ ๋ถ€๋‹ด ๊ฐ์†Œ

  • ๊ฐœ๋ฐœ์ž๋“ค์ด ๋” ์ด์ƒ EC2๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • IAM ์ •์ฑ…๊ณผ ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ ๋•๋ถ„์— ๋ณด์•ˆ์„ฑ๊ณผ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ๋„ ํ•จ๊ป˜ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡๋ณด๋‹ค, ์ž๋™ํ™”๋ฅผ ์ ์šฉํ•œ ํ›„์—๋Š” ๋ฐค์—๋„ ๊ฑฑ์ • ์—†์ด ๋งˆ์Œ ํŽธํ•˜๊ฒŒ ํ‡ด๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š

์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•  ํ™•์žฅ ๊ธฐ๋Šฅ

ํ˜„์žฌ EC2 ์Šค์ผ€์ค„๋ง ์ž๋™ํ™” ์‹œ์Šคํ…œ์„ ๋”์šฑ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋กœ ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… Slack ์•Œ๋ฆผ ์—ฐ๋™

  • EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋  ๋•Œ, ํŒ€ ์ฑ„๋„์— ์•Œ๋ฆผ์„ ์ „์†ก
  • ๊ฐœ๋ฐœ์ž๋“ค์ด ํ˜„์žฌ ์ธ์Šคํ„ด์Šค ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ์šด์˜ ํˆฌ๋ช…์„ฑ ํ–ฅ์ƒ

โœ… CloudWatch์™€ ์—ฐ๊ณ„ํ•œ ์ž๋™ ์Šค์ผ€์ผ๋ง

  • EC2 ์ธ์Šคํ„ด์Šค์˜ CPU ์‚ฌ์šฉ๋Ÿ‰, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋“ฑ์˜ ์ง€ํ‘œ๋ฅผ ๋ถ„์„
  • ์‚ฌ์šฉ๋Ÿ‰์ด ์ ์„ ๋•Œ๋Š” ์ž๋™ ์ข…๋ฃŒ, ๋งŽ์„ ๋•Œ๋Š” ์ถ”๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ž๋™ ์Šค์ผ€์ผ๋ง ์ ์šฉ

โœ… ๋น„์šฉ ๋ฆฌํฌํŠธ ์ž๋™ํ™”

  • ํ•œ ๋‹ฌ์— ํ•œ ๋ฒˆ, EC2 ๋น„์šฉ ๋ฆฌํฌํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ด๋ฉ”์ผ๋กœ ์ „์†ก
  • ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ์ถ”์ ํ•˜๊ณ , ์ถ”๊ฐ€์ ์ธ ์ตœ์ ํ™” ๊ธฐํšŒ๋ฅผ ์‹๋ณ„

์ด๋Ÿฌํ•œ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜๋ฉด ๋”์šฑ ์Šค๋งˆํŠธํ•œ ์ธํ”„๋ผ ์šด์˜์ด ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ํŒ€ ์ „์ฒด์˜ ์šด์˜ ํšจ์œจ์„ฑ๊ณผ ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ๐Ÿš€

๋งˆ๋ฌด๋ฆฌ

AWS Lambda์™€ EventBridge๋ฅผ ํ™œ์šฉํ•œ EC2 ์ž๋™ํ™” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ์ด๋ฅผ ํ†ตํ•ด ๋น„์šฉ ์ ˆ๊ฐ๊ณผ ์šด์˜ ๋ถ€๋‹ด ๊ฐ์†Œ๋ผ๋Š” ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„๋„ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด, ์ง€๊ธˆ ๋ฐ”๋กœ ์ด ์ž๋™ํ™”๋ฅผ ์ง์ ‘ ์ ์šฉํ•ด ๋ณด์‹œ๊ธธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ž์› ๊ด€๋ฆฌ์™€ ๋น„์šฉ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด, ๋” ๋‚˜์€ ์šด์˜ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด๊ฐ€์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜Š

EC2 ์ž๋™ํ™”๋ฅผ ํ†ตํ•œ ๋น„์šฉ ์ ˆ๊ฐ: AWS Lambda์™€ EventBridge ํ™œ์šฉ๋ฒ• | QueryPie