본문 바로가기

STUDY/AWS

AWS - Lambda (서버리스 서비스)

- 서버리스 컴퓨팅이란?

단어 그대로 '물리적인 서버가 존재하지 않는' 것은 아니며,

서버를 추상 계층으로 제공하여 개발자가 운영과 관련된 문제를 걱정하지 않고, 코드 개발에만 집중할 수 있게 해주는

'사용자 입장에서 서버를 관리할 필요가 없는'의미의 서버리스이다.

가상머신이 하드웨어를 제공해주고, 컨테이너가 운영체제를 제공해준다면, 서버리스는 실시간으로 함수만을 실행시켜주는 환경을 제공해주는 것이다.

 

즉 서버리스 컴퓨팅이란 개발자가 작성한 기능을 실행할 때 필요한 만큼만 자원을 사용할 수 있게 제공해주는 기능이며 AWS lambda가 서버리스 컴퓨팅에 속한다.

 

이에 따라 AWS 컴퓨팅을 구분하면 다음과 같다.

구분 가상머신 컨테이너 서버리스
AWS 서비스 EC2 ECS Lambda
단위 가상머신 애플리케이션 함수
추상화 단계 하드웨어 운영체제 런타임

- AWS Lambda의 특징

1. 완전관리형 서비스

위에 적혀있는 대로 하드웨어, 네트워크는 물론 운영체제까지 모든 개발에 필요한 환경을 개발자가 신경쓸 필요없이 알아서 관리해주는 서비스이다.

 

2. 유연한 확장성

lambda는 다른 AWS를 호출하여, 자신만의 서비스를 만들 수 있다.

 

3. 고가용성

AWS Lambda는 99.9999% 가용성을 보장한다.

 

4. 유휴 용량 없음

Lambda는 요청이 올 때만 프로비저닝(사용자의 요구에 맞게 시스템 자원이 할당)되어 작동하기 때문에 응답이 없을 때 비용이 청구되지 않는다.

 

5. 마이크로 서비스 호환성

서버리스 컴퓨팅 함수로 특정 역할이나 활동을 수행하기 위해 작고 독립적인 코드 단위로 개발할 수 있다.

즉 마이크로서비스의 전달 수단으로 사용할 수 있으며 클라우드 환경에서 효율적으로 확장하기 어려운 모놀리식 애플리케이션의 단점을 극복할 수 있다는 점을 의미한다.

 

- 실습 (AWS SNS 서비스)

-- AWS SNS란?

지정된 사용자 그룹에 무자, 푸시 메시지, 이메일 등을 보낼 수 있는 서비스. 원하는 사용자에게 메시지를 전송할 수 있지만 단점으로는 사용할 수 있는 리전이 한정적이다(버지니아, 도쿄 등)

 

AWS SNS를 사용하기 위해서는 IAM을 통한 정책 설정이 필요하다.

대시보드를 통해 IAM으로 이동해 정책 메뉴의 정책 생성을 클릭한다.

시각적 편집기의 서비스 선택 - SNS, 문자를 보내기위해 작업 - 쓰기, 리소스 - 모든 리소스, 요청 조건은 기본으로 설정한 후 정책 검토를 클릭한다.

정책 설정 화면

정책 이름은 Policy_for_publishing_SNS 로 입력한 후 정책을 생성한다.

SNS 서비스를 발행한다는 의미의 Policy_for_publishing_SNS

정책이 생성되었다면 정책과 연결해줄 역할을 생성하기 위해 역할 메뉴의 역할 만들기를 클릭한다.

역할 만들기의 AWS 서비스 - Lambda를 선택한 후 다음:권한 을 클릭하면 권한 정책 연결 페이지가 나온다.

검색창에 Policy_for_publishing_SNS를 입력하면 방금 전 만든 정책이 표시된다.

체크박스에 체크한 후 다음 버튼을 클릭

정책의 이름은 role-for-sns-sending 으로 한 후 정책을 생성하고 람다 함수로 돌아간다.

Lambda 페이지에서 함수 생성 버튼을 클릭한다.

 

이름과 런타임(Nodejs를 선택)을 설정한 후 권한에서 기본 실행 역할 변경 부분의 기존 역할 사용 부분을 클릭한 후 조금 전 만들어둔 역할

role-for-sns-sending을 선택한 뒤 함수 생성을 클릭한다.

Nodejs의 버전은 크게 상관없을듯 하다

함수가 만들어졌다면 테스트 메뉴의 테스트 이벤트 구성을 들어가 다음과 같이 입력한다.

number는 본인의 핸드폰 번호를 입력한다.

변경사항을 저장한 후 코드 메뉴에 들어가 index.js에 다음과 같이 코드를 입력한다.

const AWS = require('aws-sdk');

exports.handler = (event,context, callback) => {
    const params = {
        Message: event.text,
        PhoneNumber: event.number
    };
    
    const publishTextPromise = new AWS.SNS({apiVersion: '2010-03-31', region: 'ap-northeast-1'}).publish(params).promise();
    publishTextPromise.then(
        function(data){
            callback(null,"MessageID is " + data.MessageID);
        }).catch(
            function(err){
                callback(err);
            });
};

상단의 저장 버튼을 통해 코드를 저장한 후 Test 버튼을 누르면 입력해둔 번호로 메시지가 오는 것을 확인할 수 있다.