이야기박스

GCP; Cloud Functions 본문

Computer & Data/Cloud Platform

GCP; Cloud Functions

박스님 2019. 5. 4. 14:54
반응형

출처 : Google cloud

업무에 급하게 사용할 일이 생겨서 기술조사를 시작하게 되었습니다. AWS Lambda와 비슷한 솔루션이라고 하네요.

이 솔루션을 선택하게 된 이유는 Serverless이면서 Auto Scale out이 지원되며,  또한 제 프로그램의 Business Logic이 복잡하지 않았기 때문에 선택하게 되었습니다.

2019-05-03 기준, 아직 정식오픈은 되지 않았고 베타 서비스가 진행중입니다. 해당 포스트는 이 날짜 기준의 문서 데이터로 작성되었음을 미리 알려드립니다.

참조 : Google Cloud Function Doc

# 개요

## 특징

  • 클라우드에서 코드를 실행하는 가장 간편한 방법
  • 자동 확장, 우수한 가용성, 내결함성
  • 프로비저닝, 관리, 패치 또는 업데이트가 필요한 서버 없음
  • 코드를 실행하는 만큼만 지불
  • 클라우드 서비스 연결 및 확장

## 동작 방식

동작 방식은 아래와 같습니다. 특정 Event(GCP Infra 내 이벤트, HTTP 이벤트)로부터 실행되어 동작하게 됩니다.

 

# Cloud Functions 작성

먼저 Cloud Functions 스크립트 작성에 대해 알아보겠습니다. Cloud Functions은 javascript 기반, Node.js v6.14.0 런타임에서 실행됩니다. 그렇기 때문에 함수의 소스 코드를 Node.js 모듈로 내보내야 합니다.

## 허용 가능한 구성

  • 하나 이상의 함수를 내보내는 index.js 파일
  • 하나 이상의 함수를 내보내는 app.js 파일 및 "main": "app.js"가 포함된 package.json 파일
  • foo.js 파일에서 하나 이상의 함수를 가져온 다음 하나 이상의 함수를 내보내는 index.js 파일

require() 호출로 모듈을 로드할 수 있는 한, 위 예시 외에도 다양한 구성이 가능합니다.

## 유형

Functions 작성에는 이벤트에 따라 포그라운드, 백그라운드 두 가지 유형으로 나누어집니다. 각각의 세부 내용은 아래 참조들을 확인하시면 됩니다.

  • 포그라운드 : HTTP 이벤트
/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
exports.helloHttp = (req, res) => {
  res.send(`Hello ${req.body.name || 'World'}!`);
};

http 함수 참조

  • 백그라운드 : Google Cloud Pub/Sub이나 Google Cloud Storage처럼 클라우드 인프라 이벤트
/**
 * Background Cloud Function.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.helloBackground = (event, callback) => {
  callback(null, `Hello ${event.data.name || 'World'}!`);
};

백그라운드 함수 참조

# Cloud Functions 호출

## 유형

이 중, 저는 HTTP 트리거를 사용할 예정이기 때문에 해당 내용만 자세하게 다루도록 하겠습니다. 다른 요소들의 세부 내용은 위 링크를 참조하시면 좋을 것 같습니다 :)

1. 트리거 함수 배포

gcloud beta functions deploy helloHttp --trigger-http

위의 gcloud 명령어를 통하여 HTTP 요청에 의해 트리거되는 함수를 배포합니다.

2. 확인

배포된 http url 정보는 아래 명령어를 통해 확인이 가능합니다.

gcloud describe

배포된 함수의 호출을 테스트하기 위하여는 아래 두 가지 방법을 이용하면 됩니다.

curl -X POST https://<YOUR_REGION>-<YOUR_PROJECT_ID>.cloudfunctions.net/helloHttp -H "Content-Type:application/json" --data '{"name":"Keyboard Cat"}'

위처럼 curl을 통하여 http 통신을 통하여 확인할 수 있습니다.

gcloud beta functions call helloHttp --data '{"name":"Keyboard Cat"}'

또한 이처럼 gcloud 'call' 명령어를 통해서도 확인이 가능합니다.

# 마치며

익숙하지 않은 Node.js 기반이라 처음에 개발 코스트가 높을 거라 생각되네요. 그래도 새로나오는 gcp의 베타 서비스를 실전에서 사용해볼 수 있다는 점에 설레기도 합니다. 이참에 Node.js, Functional API를 집중적으로 공부해 볼 수 있는 기회라 생각하려고 합니다 ㅎㅎ

이 업무의 중요도가 높기 때문에 쿠버네티스 포스팅은 조금 천천히 진행해야 할 것 같습니다! 

반응형