블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 
 

Google Cloud Function


조대협 (http://bcho.tistory.com)

기본 개념

구글 클라우드 펑션은 서버리스 아키텍쳐를 구현하기 위한 구글 클라우드 서비스이다. 아마존 웹서비스의 람다와 같은 기능이라고 보면 된다.




이벤트가 발생하면, 이벤트에 따라서, 코드를 수행해주는 형태인데, 이벤트의 종류는 다음과 같다.

  • Pub/Sub 메세지 큐에서 들어오는 메세지

  • Firebase 모바일 SDK에 의해서 발생되는 이벤트

  • Google Cloud Storage 서비스에 의해서 파일이 생성,수정,삭데 되었을때

  • 마지막으로 HTTP로 들어오는 요청 (REST API)


개발환경

프로그래밍 언어는 node.js 6.9.1 버전을 기반으로 되어 있으며, node.js의 package.json을 이용하여 왠만한 의존성 모듈은 설치가 가능하다. (node.js express 등)  개발을 위해서는 로컬에 에뮬레이터를 설치하여 개발이 가능하다. https://cloud.google.com/functions/docs/emulator

Hello World

그러면 간단하게, 구글 클라우드 펑션을 사용해보자

클라우드 펑션은 크게 두가지 타입의 펑션이 있는데

  • HTTP 펑션
    HTTP 펑션은 HTTP 로 입력을 받는 형태로 function 펑션이름(req,res)
    req는 HTTP Request, res는 HTTP Response 이다.

  • 백그라운드 펑션
    백르라운드 펑션은 GCS,Pub/Sub 등의 이벤트로 트리거링 되는 펑션으로 function 펑션이름(event,callback)형태로 정의된다. event 객체 안에, GCS나 Pub/Sub 에서 발생된 이벤트 정보가 전송된다.


간단하게 웹에서 Hello World를 출력하는 펑션을 개발해보자.

예제 코드

Index.js 에 다음과 같은 코드를 작성한다


exports.helloworld = function helloworld (req, res) {

       switch(req.method){

         case 'GET':

          res.send('Hello world');

       }

};

위의 코드는 helloworld 라는 이름의 펑션으로 HTTP GET 요청이 들어왔을때, ‘Hello world’ 문자열을 출력하도록 하는 펑션이다.

배포 하기

배포는 크게 Web UI와 CLI (Command Line Interface) 두 가지로 할 수 있다.

배포에 앞서서, 먼저 GCS (Google Cloud Storage) 버킷을 생성해야 한다. 클라우드 펑션은 배포 코드를 클라우드 스토리지 버킷에 저장해놓고 (스테이징 용도) 배포하기 때문이다.


클라우드 스토리지 버킷은 Web UI에서도 생성할 수 있지만 간단하게 CLI 명령을 이용해서 다음과 “terrycho-cloudfunction”이라는 이름의 버킷을 생성한다


%gsutil mb gs://terrycho-cloudfunction

Command Line Interface (CLI)로 배포하기

CLI로 배포하기 위해서는 CLI 명령인 gcloud 명령을 업그레이드 해야 한다. 다음 명령을 수행하면 쉽게 업그레이드할 수 있다.

% gcloud components update beta

% gcloud components install


다음 배포 명령을 실행해보자

% gcloud beta functions deploy helloworld --stage-bucket gs://terrycho-cloudfunction --trigger-http



Web Console로 배포하기

또는 Web Console을 이용할 수 도 있다.

다음은 helloworld 펑션을 us-central1 리전에 128M 메모리 사이즈로 배포하는 화면이다

코드는 ZIP 파일로 직접 업로드 하거나 구글 클라우드 스토리지에 ZIP으로 업로드 하거나 또는 아래 그림과 같이 inline editor에 간단한 코드는 직접 넣을 수 있다.


그리고 마지막으로 export할 모듈명을 정의한다.




실행하기

클라우드 펑션을 배포 하였으면 이제 실행해보자

HTTP 펑션이기 때문에 HTTP URL을 알아야 하는데,  HTTP URL규칙은 다음과 같다.


https://[리전이름]-[프로젝트이름].cloudfunctions.net/[펑션이름]                             


앞에서 만든 펑션은 us-central1에 배포하였고, 프로젝트명은 terrycho-sandbox이고 펑션 이름은 helloworld 이기 때문에 URL과 실행 결과는 다음과 같다


모니터링

모니터링은 CLI와 웹콘솔 양쪽으로 모두 가능하지만 웹 콘솔에서 로그를 확인해보겠다. 펑션 화면에서 펑션을 선택한 후에 우측 메뉴에서 아래 그림과 같이 “See logs”를 누룬다.


로그를 확인해보면 다음과 같다.



펑션이 시작된 것을 확인할 수 있다. 7d로 시작하는 펑션과 de로 시작하는 펑션 인스턴스 두개가 생성된 것을 볼 수 있고 7d로 시작된 펑션의 실행 시간이 702 ms가 걸린것을 확인할 수 있다.

가격 정책

가격 정책 계산 방법은


(가격) = (호출 횟수) + (컴퓨팅 자원 사용량 ) + (네트워크 비용)


으로 구성된다.

  • 호출 횟수는 클라우드 펑션이 호출되는 횟수로 한달에 2백만건까지 무료이며 2백만건 이후로는 백만건당 0.4$ 가 부과 된다.

  • 컴퓨팅 자원은 사용한 메모리와 CPU 파워를 기반으로 100ms 단위 과금이다.


    예를 들어 1.4GHz CPU 1024MB 메모리를 250 ms 사용했다면, 컴퓨팅 자원 사용 비용은 0.000001650 * 3 (250ms는 올림하여 300ms로 계산한다.)

  • 네트워크 비용은 들어오는 비용은 무료이며 인터넷으로 나가는 비용에 대해서만 월 5$를 부과한다.

무료 티어

무료 티어는 매달 2백만콜에 대해서 400,000GB 초, 200,000GHZ 초의 용량 + 5GB 아웃바운드 트래픽에 대해서 무료로 제공한다

결론

사실 클라우드 펑션과 같은 서버리스 서비스는 새로운 기술은 아니다.

그러나 구글 클라우드 플랫폼과 연계되어서, 간단한 HTTP 서비스 개발은 물론, GCS에 저장된 파일에 대한 ETL 처리등 다양한 분야에 사용이 가능하며

특히나 타 클라우드 대비 특징은, 모바일 SDK 파이어베이스의 백앤드로 연동이 가능하기 때문에 모바일 개발자 입장에서 복잡한 API 인증등을 개발할 필요 없이  간단하게 서버 백앤드를 개발할 수 있다는 장점을 가지고 있기 때문에 개발 생산성 향상에 많은 도움이 되리라고 본다.


저작자 표시 비영리
신고

 IBM 블루믹스의 openwhisk 에 대한 소개


조대협 (http://bcho.tistory.com)


오늘 IBM의 블루믹스 세미나에 다녀왔습니다.

세미나 내용중에서 흥미로운 기술들이 있어서 간단하게 소개합니다.

IBM 블루믹스 클라우드의 새로운 기능으로 Openwhisk 라는 서비스입니다http://www.ibm.com/cloud-computing/bluemix/openwhisk/

https://developer.ibm.com/openwhisk/ 아마존의 람다 기능과 유사한 기능인데 개념을 보면 다음과 같다.

 

이벤트가 발생하면, 이벤트 내용을 받아서 비지니스 로직이 들어 있는 액션을 수행한다.

아래 그림을 보면 REST API로 호출하거나 또는 데이타 베이스에 어떤 내용이 변경이 되거나 또는 Kafka와 같은 메세지 큐에 새로운 메세지가 들어오면 정해진 규칙 (이를 Openwhisk에서 Rule이라고 한다.)에 따라서 비지니스 로직을 호출한다. 이 비지니스 로직 덩어리를 Action이라고 하는데, Action을 여러개로 묶어서 아래 그림과 같이 체이닝이 가능하다.



 

이벤트 방식으로 비지니스 로직을 Invoke해주는 방식인데, 뒷단에 ActionAuto scaling이 가능해서 시스템의 용량등에 상관 없이 사용이 가능하다.

또한 이 ActionSwift, node.js, Java 와 같이 다양한 언어로 구현이 가능하다.

개발자는 아래 인프라를 신경쓸 필요가 없이 비지니스 로직만 구현하면 된다는 것이다.

 

과금 정책은 실제 Action이 실행되는 시간만 과금이 된다. 해당 로직을 수행하는데 30ms만 걸렸다면 30ms에 대한 금액만 과금된다. 유사한 기능을 EC2와 같은 VM위에 올리면, CPU를 많이 사용하는 로직일 경우 계속 CPU가 큰 CM을 켜놔야 하기 때문에 비용이 많이 나오지만 이 구조를 사용하면 비용이 딱 사용한 부분만 나온다.

 

다른 흥미로운 점은 IBM이 이 기능을 개발하면서 이 Openwhisk를 오픈소스화 했다는 것이다.

소스는 https://github.com/openwhisk/openwhisk 에 있는데, 이 말은 블루믹스를 사용하지 않더라도 AWS나 구글 글라우드에 Openwhisk를 옮길 수 있다는 것이다. 즉 클라우드 락인에 대한 문제를 해결하고 시작했다는 것이다.

 

AWS 람다와 유사한데, 근래 들어서 이런 형태의 기능들이 클라우드에 많이 나오는 것 같다.

톰캣이나 파이썬 장고와 같은 웹서버나 미들웨어를 알필요도 없고 복잡한 설정이나 스케일링에 대한 고려를 할필요도 없고 클라우드 자체를 플랫폼으로 그위에 비지니스 로직만 올리는 형태로 점점 클라우드가 발전해 가는 모습이 보인다.  나중에는 미들웨어 없이 클라우드 자체에 코드만 올리는 형태가 되지 않을까? 이미 AWS에서는 람다, 다니나모, S3, API 게이트웨이등을 조합하면 별도의 미들웨어 없이 왠만한 API들은 구현이 가능하다.

 

저작자 표시 비영리
신고