이야기박스
GCP; Cloud Functions 본문
업무에 급하게 사용할 일이 생겨서 기술조사를 시작하게 되었습니다. 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'}!`);
};
- 백그라운드 : 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를 집중적으로 공부해 볼 수 있는 기회라 생각하려고 합니다 ㅎㅎ
이 업무의 중요도가 높기 때문에 쿠버네티스 포스팅은 조금 천천히 진행해야 할 것 같습니다!
'Computer & Data > Cloud Platform' 카테고리의 다른 글
GCP; Cloud Pub/Sub (0) | 2019.05.23 |
---|---|
GCP; Network Forwarding Rules (0) | 2019.05.20 |
GCP Deployment, monitoring and alerting, and incident response (0) | 2019.04.05 |
GCP Capacity Planning and Cost Optimization (0) | 2019.04.05 |
GCP Design for security (0) | 2019.04.05 |