본문 바로가기

AWS

Lambda 함수 기반 문자 알림 서비스

AWS SNS를 이용하여 지정된 사용자에게 문자, 이메일 등을 보내는 서비스를 해보자

 

람다 함수가 SNS서비스에 접근하기 위해 필요한 역할과 정책을 생성해야한다

우선 좌측에 [정책 메뉴]를 클릭하고 [정책 생성]을 클릭한다

 

 

[서비스 선택]을 클릭하고 입력창에 "SNS"라고 입력한다

입력창 아래에 "SNS" 글자가 나오면 클릭한다

 

 

사용자에게 문자를 보내는 것은 쓰기에 해당하므로 액세스 레벨 [쓰기]를 선택한다

리소스를 클릭한 후 [모든 리소스]를 선택한다

[정책 검토]를 클릭하고 다음으로 넘어간다

 

 

정책이름을 "policy_for_publishing_sns"라고 입력하고 설정한 권한(SNS-쓰기)이 제대로 되어있는지 확인한다

 

 

정책을 생성하였으면 정책과 연결할 역할을 만들어야 한다

[역할 만들기]를 클릭한 후 사용 사례 선택에서 [Lambda]를 선택한다

 

 

앞서 만든 "policy_for_publishing_sns"정책을 연결한다

 

 

역할 이름에는 "role_for_sns_sending"이라고 입력하고 [역할 만들기]를 클릭한다

 

 

역할이 잘 만들어졌는지 확인한다

 

 

Lambda 함수 생성 페이지에 와서 함수 이름에는 "lambda_for_sns"라고 입력하고 [▼기본 실행 역할 변경]을 클릭한다

 

 

[기존 역할]에 "role_for_sns_sending"을 선택한다

 

 

함수가 생성되었으면 [테스트 이벤트 구성]을 클릭한다

문자메세지를 받을 사람의 번호와 내용을 임시로 작성한다

 

 

테스트 이벤트 구성을 저장했으면 아래의 소스코드를 복사한다

//AWS를 실행시키기위한 라이브러리를 가져옵니다.
const AWS = require('aws-sdk');

//이전과 다른부분이 있다면 context와 callback을 파라미터로 받습니다.
//context에서는 현재 실행중인 람다의 메타정보를 받고
//callback은 람다가 끝나는 시점 호출합니다.
exports.handler = (event, context, callback) => {

	  //위에 입력했던 json값이 event 즉 input으로 들어옵니다.
	  //params에 Message와 PhonNumber 변수를 선언합니다.
    const params = {
        Message: event.text,
        PhoneNumber: event.number
    };

    // SNS SDK를 가져옵니다.
    // SNS서비스에서 메세지를 보내는것은 한정된 리전에서만 사용할 수 있기때문에
    // region을 도쿄리전으로 설정해주어야합니다. 이를 위해 인자값으로
    // region에 도쿄리전의 식별자인 'ap-northeast-1'을 입력합니다.
    const publishTextPromise = new AWS.SNS({ apiVersion: '2010-03-31',region: 'ap-northeast-1'}).publish(params).promise();

    // SDK를 실행합니다.
    publishTextPromise.then(
        function(data) {
            //메세지가 있다면 첫번째에 null, 두번째에 메세지를 리턴합니다.
            callback(null,"MessageID is " + data.MessageId);
        }).catch(
        function(err) {
			  //에러가 있다면 err를 리턴합니다.
            callback(err);
    });
};

 

 

복사한 소스코드를 함수코드(index.js 파일)에 붙여넣기 하고 [Deploy]를 클릭한다

(소스코드가 변경되면 반드시 Deploy를 클릭해야한다)

 

 

[테스트]를 클릭하고 잠시후에 "실행결과: 성공(로그)"이라는 창이 표시되면 정상적으로 메세지가 전달되었을 것이다