이 방법은 하나의 예시입니다.

import hashlib
import hmac
import base64
import requests
import time
import json
import os

def	make_signature(uri, access_key, timestamp):
	secret_key = os.environ['NBP_SECRET_KEY']
	secret_key = bytes(secret_key, 'UTF-8')
	method = "POST"
	message = method + " " + uri + "\n" + timestamp + "\n" + access_key
	message = bytes(message, 'UTF-8')
	signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
	return signingKey

def lambda_handler(event, context):
    # TODO implement
    timestamp = int(time.time() * 1000) 
    timestamp = str(timestamp)
    
    url = "https://sens.apigw.ntruss.com"
    requestUrl = "/sms/v2/services/"
    requestUrl2 = "/messages"
    serviceId = os.environ['NBP_SERVICE_ID']
    access_key = os.environ['NBP_ACCESS_KEY']
    
    uri = requestUrl + serviceId + requestUrl2
    apiUrl = url + uri
    
    messages = { "to" : os.environ['RECV_PHONE_NUMBER'] }
    body = {
        "type" : "SMS",
        "contentType" : "COMM",
        "from" : os.environ['SEND_PHONE_NUMBER'],
        "subject" : "제목은 SMS에서는 안가요.",
        "content" : "내용이 전달됩니다. 하하하.",
        "messages" : [messages]
    }
    body2 = json.dumps(body)
    headers = {
        'Content-Type': 'application/json; charset=utf-8',
        'X-ncp-apigw-timestamp': timestamp,
        'x-ncp-iam-access-key': access_key,
        'x-ncp-apigw-signature-v2': make_signature(uri, access_key, timestamp)
        }

    res = requests.post(apiUrl, headers=headers, data=body2)
    return {
        'statusCode': res.status_code,
        'body': res.json()
    }


반복 호출 방지, 안전한 환경 변수 보관(AWS Secrets Manager) 등을 고려하면 좋습니다.

Amazon Pinpoint의 커스텀 채널로 국가별로 SNS 채널을 확장할때 활용할 수 있습니다.