AWS Lambda를 이용한 SMS 요금 문자 전송 기능

초코칩·2023년 12월 19일
1

AWS Cloud

목록 보기
6/7
post-thumbnail

목표

  • AWS Lambda, Cost Explorer를 활용하여 SMS 전송 기능 구현하기
  • AWS API Gateway를 통해 End point 생성하기

Cost Explorer

위 세션에서는 Cost Explorer 서비스를 사용하게 되는데, 해당 서비스를 이용해 원활히 실습을 진행하기 위해서는 24시간 전에 미리 서비스를 활성화시켜야 합니다.

Cost Explorer를 활성하면 위 그림처럼 서비스별 사용량에 대한 비용을 확인할 수 있습니다.

More About: https://docs.aws.amazon.com/ko_kr/cost-management/latest/userguide/ce-enable.html

AWS Lambda

함수 생성

코드 소스에 아래 코드를 입력합니다. 전화번호에는 요금을 안내 받을 전화번호를 입력합니다.

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!')
    }

권한 추가

함수를 생성했으니, 필요한 권한을 추가합니다.

Lambda 함수 - 구성 탭 - 권한에 들어가 연결된 역할을 클릭합니다.

인라인 정책을 생성합니다.

Lambda에서 연결된 서비스는 Cost Explorer와 AWS SNS 두 가지입니다.

Cost Explorer의 GetCostAndUsage를 추가합니다.

AWS SNS의 Publish 권한을 추가합니다.

성공적으로 추가된 것을 볼 수 있습니다.

테스트를 진행해 보면 여전히 오류가 발생합니다.

이는 AWS SNS에서 해당 전화번호가 샌드박스에 등록되지 않았기 때문입니다. 스팸, 다량 전송 등의 이유로 샌드박스에 등록된 전화번호만 SMS를 보낼 수 있습니다.

AWS SNS

AWS SNS에 접속합니다.

샌드박스에 대상 전화번호를 등록하기 위해 인증 절차를 거칩니다.


성공적으로 등록한 것을 볼 수 있습니다.

+82 10-1234-5678 형식으로 작성합니다.

Lambda 함수로 돌아와 테스트하면 성공한 것을 볼 수 있습니다.

API Gateway 연결

Lambda를 외부에서 실행시키기 위한 엔드 포인트를 생성합니다.

생성한 Lambda 함수에서 트리거를 추가합니다.

새로운 HTTP API를 생성합니다.


성공적으로 생성된 것을 볼 수 있습니다.

해당 탭을 누르면 생성된 API 엔드 포인트를 확인할 수 있습니다.

결과

웹에 API 엔드 포인트를 입력하면 SMS 문자 메시지가 성공적으로 전송되었다는 메세지를 볼 수 있습니다.

실제로 다음과 같이 문자 메시지가 오게 됩니다.

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글