AWS์ Lambda ํจ์ ์ CloudWatch ๋ฅผ ์ด์ฉํ์ฌ EC2 ์ธ์คํด์ค๋ฅผ ์ํ๋ ์๊ฐ์ ์ผ์ง๊ณ ๊บผ์ง๊ฒ ํ์ฌ ๋น์ฉ์ ์ ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ๋ค.
์ด๋ ์ง๋ ๋ฒ์ ๋ค๋ฃจ์๋ ํฌ์คํ ๊ณผ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ค๋ฃจ์ด๋ณด๊ฒ ๋ค.
์ง๋ ๋ฐฉ์์ ์ฅ์ ์ ์ค์ ์ด ๋งค์ฐ ํธํ๋ค๋ ๊ฒ์ด๊ณ , ๋จ์ ์ ์ถ๊ฐ๋น์ฉ์ด ์๊ฒ๋๋ง ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค.
์ ๋ฐฉ์์ ๋ฐ๋ฅด๋ฉด AWS Key Management Service์ ๋ฐ๋ฅธ KMS ํค ๊ฐ์ ๋ํ ์ถ๊ฐ ๋น์ฉ์ด ๋๊ฐ๋ค. ์ด๋ฐ ๊ฒ๋ ๋์ ๋ฐ์ผ๋ ์๋ง์กด์ด ์ธ๊ณ ์ต๋์ ๊ธฐ์ ์ผ๋ก ์ฑ์ฅํ ํฐ. ๊ณ ๊ฐ ์ ์ฅ์์๋ ๋ฒ๊ฒ์ง๋ง, ๊ธฐ์ ์ ์ฅ์ด๋ ํฌ์์ ์ ์ฅ์์๋ ๋ฉ์ง ์ผ์ผ ๊ฒ์ด๋ค.
์ด๋ฒ์ ์๊ฐํ ๋ฐฉ์์ ๋ค์ ๋ ๋ฒ๊ฑฐ๋กญ์ง๋ง ์คํ๋ ค ์ง๊ด์ ์ด๊ธฐ๋ ํ๊ณ , 1๋ฌ๋ฌ๋ฅผ ์๋ ์ ์๋ค๋ ํฐ ์ฅ์ (?)์ด ์๋ค.
์์๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ๋ค.
(1) IAM ์ ์ฑ ์์ฑ
(2) IAM ์ญํ ์์ฑ
(3) Lambda ํจ์ ์์ฑ
1. EC2 ์ข
๋ฃ ํจ์ ์์ฑ
2. EC2 ์์ ํจ์ ์์ฑ
(4) CloudWatch ๊ท์น ์์ฑ
1. EC2 ์ข
๋ฃ ํจ์ ๊ตฌ๋ ์์ ์ค์
2. EC2 ์์ ํจ์ ๊ตฌ๋ ์์ ์ค์
์ด ์์๋๋ก ์ด์ ์ค๋ช ์ ํ๋๋ก ํ๊ฒ ๋ค. AWS ๊ฐ์ ์ ๋์ด์๊ณ , ๋ก๊ทธ์ธ ๋์ด์๋ ์ํ๋ถํฐ ์ค์ตํ๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ๊ฒ ๋ค.
(1) IAM ์ ์ฑ ์์ฑ
1. ์๋น์ค์ IAM์ผ๋ก ์ง์ ํ์.
2. ์ข์ธก ๋ฉ๋ด์ ์ ์ฑ ์ ๋๋ฌ์ฃผ์.
3. ์ ์ฑ ์์ฑ ๋ฒํผ์๋ฅผ ๋๋ฌ ์ ์ฑ ์ ์์ฑํด์ฃผ์.
4. ์ ์ฑ ์์ฑ์์ JSONํญ์ ๋๋ฌ์ ์ง์ ํ์.
5. ์๋์ ์ฝ๋๋ฅผ JSON์ ์ ๋ ฅํด์ฃผ์.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
์ด๋ฐ ๋ชจ์ต์ผ ๊ฒ์ด๋ค.
6. ์ ์ฑ ๊ฒํ ๋ฒํผ์ ๋๋ฌ์ฃผ์.
7. ์ ์ฑ ๊ฒํ ์์ ์ด๋ฆ์ EC2Scheduler, ์ค๋ช ์๋ EC2Scheduler๋ผ๊ณ ์ ๋ ฅํ์.
8. ์ ์ฑ ์์ฑ ๋ฒํผ์ ๋๋ฌ์ฃผ์.
์ ์ฑ ์์ฑ์ด ์๋ฃ๋์๋ค! ๋ค์์ผ๋ก ๋์ด๊ฐ์.
(2) IAM ์ญํ ์์ฑ
์ด๋ฒ์๋ IAM ์ญํ ์์ฑ์ ํ ์ฐจ๋ก์ด๋ค.
1. ์ข์ธก ๋ฉ๋ด์ ์ญํ ๋ฉ๋ด๋ก ์ง์ ํ์.
2. ์ญํ ๋ง๋ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํ์.
3. Lambda๋ฅผ ์ ํํ๊ณ ๋ค์:๊ถํ ๋ฒํผ์ ํด๋ฆญํ์.
4. ์ ์ฑ ํํฐ์ EC2Scheduler๋ผ๊ณ (ํน์ ์๋ถ๋ถ ์ผ๋ถ๋ง ์ ์ด๋) ์ ์ผ๋ฉด, ์์ ๋ง๋ IAM ์ ์ฑ ์ธ EC2Scheduler๊ฐ ํ์๋๋ค. ์ด๋ฅผ ์ ํํ๊ณ , ๋ค์:ํ๊ทธ ๋ฒํผ์ ํด๋ฆญํ์.
5. ์๋ฌด๊ฒ๋ ์ ๋ ฅํ์ง ๋ง๊ณ ๋ค์:๊ฒํ ๋ฒํผ์ ํด๋ฆญํ์.
6. ์ญํ ์ด๋ฆ์ EC2Lambda๋ผ๊ณ ์ ๋ ฅํ๊ณ ์ญํ ์ค๋ช ์ ๊ทธ๋๋ก ๋์. ์ญํ ๋ง๋ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํ์.
์ด์ IAM ์ญํ ๋ ์ ์์ฑ๋์๋ค. ์ด์ Lambda ์๋น์ค๋ก ๋์ด๊ฐ๋ณด์.
(3) Lambda ํจ์ ์์ฑ
์ด๋ฒ์๋ EC2๋ฅผ ์ผ๊ณ , ๋๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ๋ค.
1. AWS์ Lambda ์๋น์ค๋ก ์ง์ ํ์. (์ต๊ทผ ๋ฐฉ๋ฌธ์ ์์ผ๋ฉด ์๋น์ค ๋ฆฌ์คํธ์์ ์ฐพ์ ๋ค์ด๊ฐ๋ฉด ๋๋ค.)
2. ์ฐ์ธก์ ๋ณด์ด๋ ํจ์ ์์ฑ ๋ฒํผ์ ๋๋ฅด์.
3. ํจ์์ด๋ฆ์ StopEC2instances์ผ๋ก ์ ๋ ฅํ๋ค.
4. ๋ฐํ์์ Python 3.7๋ก ์ ํํ๋ค.
5. ๊ธฐ๋ณธ ์คํ ์ญํ ๋ณ๊ฒฝ ๋ฉ๋ด๋ฅผ ํ์ฅํ์ฌ ์คํ ์ญํ ์ ๊ธฐ์กด ์ญํ ์ฌ์ฉ์ ๊ณ ๋ฅด๊ณ , ์์ ๋ง๋ EC2Lambda๋ฅผ ์ ํํ๋ค.
6. ํจ์ ์์ฑ ๋ฒํผ์ ๋๋ฅธ๋ค.
7. ์๋์ ํจ์ ์ฝ๋ ํ๋ฉด์ด ๋ณด์ผ ๊ฒ์ด๋ค. lambda_function.py๋ฅผ ํด๋ฆญํ๊ณ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ ๋ ฅํด์ฃผ์.
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
์ ์ฝ๋์์ region์ ๋ณธ์ธ์ region์ ๋ง๊ฒ, instances๋ ์ํ๋ ์ธ์คํด์ค์ ID๋ฅผ ์ ๋ ฅํด์ฃผ์. ์ฌ๋ฌ๊ฐ๋ ๊ฐ๋ฅํ๋ค.
EC2 ๋ฉ๋ด์ ์ธ์คํด์ค ๋ฉ๋ด๋ก ๋ค์ด๊ฐ๋ฉด ์ธ์คํด์ค ID๋ฅผ ์กฐํํ ์ ์๋ค.
Region์ ์ต์๋จ ๋ฉ๋ด์ ์ฐ์ธก์ id์์ ์ง์ญ ์ด๋ฆ์ ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ region ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค. ํ์์ ๊ฒฝ์ฐ์๋ ap-northeast-2 ์๋ค.
8. ์ฝ๋ ์ ๋ ฅ์ด ์๋ฃ๋์์ผ๋ฉด ๋ฐฐํฌ(Deploy)๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ฐฐํฌ๋ฅผ ํด์ฃผ๋๋ก ํ์.
9. ์๋๋ก ๋ด๋ฆฌ๋ฉด ๋ณด์ด๋ ๊ธฐ๋ณธ ์ค์ ์นธ์ ํธ์ง ๋ฒํผ์ ๋๋ฌ์, ๊ฐ๋ ์๊ฐ ๊ฐ๊ฒฉ์ธ ์ ํ ์๊ฐ์ ํธ์งํด๋ณด์.
10. ์ ํ ์๊ฐ์ 10์ด๋ก ๋ณ๊ฒฝํด๋ณด์. ์ ์ฅ ๋ฒํผ์ ๋๋ฌ์ ์ ์ฅ์ ํด์ค๋ค.
11. 1~10์ ๋์ผํ๊ฒ ์ํํ์ฌ ์ด๋ฒ์๋ EC2๋ฅผ ์์ํ๋ ํจ์๋ฅผ ์์ฑํ์.
ํจ์ ์ด๋ฆ์ StartEC2Instances ๋ก ๋ง๋ค๊ณ , ํจ์ ๋ด์ฉ์ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค. ์ญ์ region๊ณผ instances๋ ๋ณ๊ฒฝํ๋๋ก ํ์.
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
์ธ์คํด์ค๊ฐ ์ผ์ ธ์๋ ๊ฒฝ์ฐ ๋ฐ๋ก StopEC2Instances๋ฅผ, ๊บผ์ ธ์๋ ๊ฒฝ์ฐ StartEC2Instances๋ฅผ ํ ์คํธ ํด๋ณผ ์ ์๋ค. ๊ฐ ๊ฒฝ์ฐ์ ๋ง์ถ์ด ํ ์คํธ๋ฅผ ์งํํด๋ณด์.
12. Lambda > ํจ์ ๋ฉ๋ด์์ ์ํ๋ ํจ์๋ฅผ ์ ํํ๊ณ ์์ ์ ํ ์คํธ๋ฅผ ๋๋ฌ๋ณด์.
13. ํ ์คํธ๋ฅผ ํ๋๋ฐ ๋ณ ๋ค๋ฅธ ๊ตฌ์ฑ์ด ํ์์์ผ๋ฏ๋ก, ์ด๋ฒคํธ ์ด๋ฆ๋ง test๋ก ์ ๋ ฅํด์ฃผ๊ณ , ๋ฐ๋ก ์์ฑ ๋ฒํผ์ ๋๋ฌ์ฃผ์.
14. ๋์ด์จ ํ๋ฉด ์๋จ์ ๋ฐฉ๊ธ ๋ง๋ test๊ฐ ์ ํ๋์ด์๋ ๊ฒ์ ํ์ธํ๊ณ ํ ์คํธ ๋ฒํผ์ ํด๋ฆญํ์.
ํ์์ ๊ฒฝ์ฐ์๋ ์ผ์ ธ์๋ ์ธ์คํด์ค์ StopEC2Instances๋ฅผ ์คํ์์ผฐ๋๋ฐ ์ ๊บผ์ง ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์, ํ ์คํธ๊น์ง ์๋ฃ๊ฐ ๋์๋ค๋ฉด, ํจ์๋ ์์ฃผ ์ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
์ด์ CloudWatch๋ก ๋์ด๊ฐ์, ํน์ ์๊ฐ์ ํด๋น ํจ์๋ฅผ ๊ตฌ๋์์ผ์ฃผ๋ ํ์ด๋จธ๋ฅผ ๋ง๋ค์ด์ฃผ๋๋ก ํ์.
(4) CloudWatch ๊ท์น ์์ฑ
1. AWS CloudWatch ์๋น์ค๋ก ์ง์ ํ๋ค.
2. ์ข์ธก ๋ฉ๋ด์ ์ด๋ฒคํธ-๊ท์น์ ๋๋ฌ์ ๋ค์ด๊ฐ์.
3. ๊ท์น ํ๋ฉด์์ ๊ท์น ์์ฑ ๋ฒํผ์ ๋๋ฌ๋ณด์.
4. 1๋จ๊ณ:๊ท์น ์์ฑ ํ๋ฉด์์ ์ฐ์ธก ๋์์ ๋์ ์ถ๊ฐ ๋ฒํผ์ ๋๋ฌ ๋ณด์.
5. Lambda ํจ์๋ฅผ ์ ํํ ์ ์๋ ๋ฉ๋ด๊ฐ ๋ณด์ด๋๋ฐ, ์์ ๋ง๋ Lambda๋ฅผ ์ ํํ๋ค. ์ด๋ฒ์ StartEC2Instances๋ถํฐ ์ ํํด๋ณด์.
6. ์ด๋ฒ์๋ ์ข์ธก ์ด๋ฒคํธ ์์ค ํ๋ฉด์์ ์ผ์ ์ ์ ํํ๊ณ , Cron ํํ์์ ์ ํํ์ฌ ํจ์๋ฅผ ์ ๋ ฅํด์ค๋ค. Cron ํํ์์๋ 30 22 ? * SUN-THU * ์ด๋ผ๊ณ ์ ๋ ฅํด๋ณด์. ๋ค์ ์ค๋ช ์ ๋ฃ๊ณ ๋ ๋ค์ ๋ณธ์ธ์ด ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํด์ฃผ์.
์์ 30 22๋ GMT์๊ฐ์ผ๋ก 22:30๋ถ์ ์์ํ๋ผ๋ ๋ป์ด๊ณ , ?๋ ์ ์ค ๋ช๋ฒ์งธ ๋ ์ธ์ง ๊ฐ์ ๊ฒ์ ๋ฌด์ํ๋ ๊ฒ์ด๊ณ , SUN-THU๋ ์ผ์์ผ์์ ๋ชฉ์์ผ ์ฌ์ด์๋ง ์ํํ๋ผ๋ ๋ป์ด๊ณ ๋ง์ง๋ง์ *๋ ๋ชจ๋ ํด์ ๋์ํ๋ผ๋ ๋ป์ด๋ค.
์ฃผ์์ฌํญ: ์๊ฐ์ GMT๋ก ์ ๋ ฅ๋๋ค.
GMT ์๊ฐ์ Greenwich Mean Time (GMT), ๊ทธ๋ฆฌ๋์น ํ๊ท ์๋ผ๋ ๊ฒ์ผ๋ก, ์ฐ๋ฆฌ๋๋ผ์ ์๊ฐ๋ณด๋ค 9์๊ฐ ์ ์ด๋ค. ์ฆ ์์ ์์ ์ฒซ๋ ์ธ ์ผ์์ผ GMT 22:30๋ถ์ ์ฐ๋ฆฌ๋๋ผ ์๊ฐ์ผ๋ก๋ ์์์ผ ์ค์ 7:30์ด ๋๋ ๊ฒ์ด๋ค.
์์ ์์๋ฅผ ์ ์ดํดํ์๋ค๋ฉด, ๋ณธ์ธ์ด ์ํ๋ ์๊ฐ๋๋ก ์ ์ค์ ํ ์ ์์ ๊ฒ์ด๋ค. ํฌ๋ก ํํ์์ ๋ํ ์ ํ์ ์ค๋ช ์ ์ฐธ๊ณ ํ๊ธฐ๋ฅผ ๋ฐ๋๋ค.
7. ์๋์ ๊ฐ์ด ๊ตฌ์ฑ์ด ์๋ฃ๋์๋ค๋ฉด ์ธ๋ถ ์ ๋ณด ๊ตฌ์ฑ์ ๋๋ฌ์ ๋ค์ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ์.
8. ์ด๋ฆ๊ณผ ์ค๋ช ์ ๊ฐ๊ฐ StartEC2Scheduler๋ผ๊ณ ์ ๋ ฅํ๊ณ ๊ท์น ์์ฑ ๋ฒํผ์ ๋๋ฌ์ฃผ์.
9. ์๋์ ์ฑ๊ณต ํ๋ฉด์ด ๋ณด์๋ค๋ฉด, ๊ท์น ์์ฑ์ด ์ฑ๊ณตํ ๊ฒ์ด๋, ์ด๋ฒ์๋ ๋ฐ๋ก ๋ค์์ ๊ท์น์ ์์ฑํด๋ณด์.
10. ์ด๋ฒ์๋ Cron ํํ์์ 00 7 ? * MON-FRI *์ ๊ฐ์ ์์ผ๋ก ์ ๋ ฅํด๋ณด์. ์-๊ธ ๊ฐ๊ฐ GMT ์ค์ 7:00์ ๋์ํ๋ค๋ ๊ฒ์ด๋ค. ํ๊ตญ์๊ฐ์ผ๋ก๋ 16:00์ผ๋ก ์คํ 4:00์ ํด๋นํ๋ค. ์ด๋ฒ์๋ ๋ณธ์ธ์ด ์ํ๋ ์๊ฐ์ผ๋ก ๋ง์ถฐ๋ณด์.
11. 2๋จ๊ณ ๊ท์น ์ธ๋ถ ์ ๋ณด ๊ตฌ์ฑ์์ ์ด๋ฒ์๋ ์ด๋ฆ/์ค๋ช ์ ๊ฐ๊ฐ StopEC2Scheduler๋ฅผ ์ ๋ ฅํด์ฃผ์.
12. ์ด์ ๊ท์น ์์ฑ์ ๋๋ฌ์ ๋๊ฐ์ ๊ท์น์ด ์๊ฒผ๋ค๋ฉด, ์์ฑ๋์๋ค. ์ด์ ๋ ํด๋น ์๊ฐ์ Lambdaํจ์๊ฐ ๊ตฌ๋๋๋ ๊ฒ๋ง ๊ธฐ๋ค๋ฆฌ๋ฉด ๋๋ค.
์ฌ๊ธฐ๊น์ง ํ๋ฉด ๋ชจ๋ ๋์ด๋ค!
"์๋ฃํ ๊ฒ์ ์ถํํ๋ค!"
์ด๋ ์๋์ ๋งค๋ด์ผ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ๋ค๋ง ์๋์ AWS ๋งค๋ด์ผ๋ณด๋ค ๋ณธ ๋ธ๋ก๊ทธ์ ๊ธ์ด ํจ์ฌ ๋ ์น์ ํ ๊ฒ์ด๋ผ ์์ ํ๋ค. ์๋. ๋๋ ์ด๊ฒ์ผ๋ก ํค๋งธ๊ธฐ์ ํ๋ํ๋ ๋ฐ๋ผํด๋ณด๋ฉฐ ๋ง๋ค์์ผ๋๊น.
aws.amazon.com/ko/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/
๋๊ธ