[AWS] AWS 사용요금을 매일 문자로 받아보기
AWS 소모임에 참가하여 두가지 실습을 진행했는데, 그 중 MonthlyUsageSNS 서비스를 만들어 Budget을 문자로 받아볼 수 있는 서비스가 마음에 들어 디벨롭해봤다.
1. MonthlyUsageSNS Lambda Function
import json
import boto3
from datetime import datetime
from dateutil.relativedelta import *
def lambda_handler(event, context):
client = boto3.client('ce')
today = datetime.today()
this_month_first_day = datetime(today.year, today.month, 1)
str_today = str(today.strftime('%Y-%m-%d'))
str_first_day = this_month_first_day.strftime('%Y-%m-%d')
#Cost Expolorer
result = client.get_cost_and_usage(
Granularity= 'MONTHLY',
TimePeriod={
'Start': str_first_day,
'End': str_today
},
Metrics=[ 'UnblendedCost',]
)
#Send Message with Amazon SNS
sns = boto3.client('sns', region_name='ap-northeast-1')
cost = float(result['ResultsByTime'][0]['Total']['UnblendedCost']['Amount'])
cost_round = round(cost, 2)
str_cost = str(cost_round)
message_content = "금일 %s 일 기준 이번 달 사용 금액은 %s 달러입니다."%(str_today, str_cost)
#Change phone number
sns.publish(PhoneNumber="+821012345678", Message=message_content )
return {
'statusCode': 200,
'body': json.dumps('Message was sent successfully!')
}
- boto3 를 사용하여 AWS 서비스에 접근
- boto3는 python용 AWS SDK이다.
- boto를 통해 cost explorer에 접근해 budget 정보를 긁어오고, sns로 문자 발송을 명령한다.
- AWS SDK가 생소하게 느껴질 수 있지만, 우리가 보통 aws cli 를 사용하는데 이게 AWS SDK를 사용하기 때문에.. 클라우드쪽 좀 만져봤다면 다들 이미 해본거라고 볼 수 있다.
- 결과적으로 message_content = "금일 %s 일 기준 이번 달 사용 금액은 %s 달러입니다."%(str_today, str_cost) 라는 메세지를 보내고,
- sns.publish()를 통해 문자를 보낸다. (이 때 번호를 본인 번호로 설정해야 한다)
물론 정상 작동하려면 추가적인 설정이 필요하다.
1. Lambda 함수의 IAM 역할에서 두가지 권한을 부여:
- "sns:Publish" : sns publish 기능에 대한 권한
- "ce:GetCostAndUsage" : cost explorer 에서 cost and usage를 get하는 권한
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sns:Publish",
"ce:GetCostAndUsage"
],
"Resource": "*"
}
]
}
2. SNS 도쿄 리전에서 문자메세지 샌드박스 대상 전화번호에 내 번호 등록
도쿄 리전인 이유 : 서울에선 아직 해당 기능을 지원하진 않는다 ( 뚫는 방법이 있다곤 하는데 돈이 든다고 한다 )
전화번호 추가시 주의사항:
010-1234-5678 의 번호를 등록하는 경우, +821012345678 으로 등록해야 하는데,
다음과 같이 파싱이 이상하게 되니까 저런다고 +82 010 1234 5678 으로 입력하지 마라
설정을 마치고 람다함수 Test를 실행하자. (형식 상관 없이 아무거나 보내서 trigger 시키면 된다.)
다음과 같이 문자가 오는걸 볼 수 있다.
근데 내가 직접 함수 호출시켜서 확인할거면 이걸 쓸 이유가 없으니, 스케줄러를 넣어서 주기적으로 실행될 수 있게 해보자.
나는 EventBridge의 Scheduler를 사용했다.
요런식으로 크론 설정하고 나서 호출하는걸 우리가 만든 람다함수로 등록해주면 된다.
Next 10 trigger dates를 확인하면 내가 잘 설정했는지 확인할 수 있다.
UTC 시간으로 나오니까 잘 생각하고 설정하면 되겠다.
이런식으로 알림이 온다.
근데 이거 자체로 돈이 쪼끔 나오니까 유의하길 바란다. (얼마 안나옴)
지금 저 사진에 보면 돈이 꽤 나오는걸 확인할 수 있는데, 저거는 다른 문제니까 무시하길 바란다.
(실제로 저거 덕분에 돈 많이 나오기 전에 문제 해결했다.)