FaaS 기본 동작 원리를 이해하기 위하여 IBM Cloud functions web GUI를 통해 web service를 만들어 보자.

Step Summary

  • Functions GUI를 통해 action, trigger, sequence, rule 생성 및 Database read/write 를 실습한다.
  • http endpoint 생성
  • Guestbook Frontend service와 연결

 

[1st: Action, Trigger, Sequence, Rule 생성]

이번 실습으로 Functions에서 cloudant db data를 어떻게 쓰고 읽는지 알 수 있다.
1.     create Functions and action
functions는 계정당 하나 사용 할 수 있다.
 
Action을 생성한다.
왼쪽 Action -> create Action
 
action name:prepare-entry-for-save
 
2.     code 수정
왼쪽의 Code menu를 통해 Code edit를 할 수 있다.
해당 action function을 코딩 한 후 save를 누른다.
 

참고소스.
/** * Prepare the guestbook entry to be persisted */
function main(params)
{
  if (!params.name || !params.comment)
  {
    return Promise.reject({ error: 'no name or comment'}); 
  } 
  return { 
          doc: { createdAt: new Date(), name: params.name, email: params.email, comment:
params.comment } 
  }; 
}
 
3.     enclosing sequence
Sequence 를 만든다.
name:save-geustbook-entry-sequence
 
create& save클릭
리스트의 save-questbook-entry-sequence클릭

 
4.    add
save-guestbook-entry-sequence action을 하나 더 추가 하는 과정
 
use public ->cloudant선택
 
actions:create-document
binding-name:binding-for-guestbook
new instance 선택하면 db 생성하는 새로운 창이 나타난다.
 
5.     db create
(이미 db가 있다면 선택해서 사용해도 된다.) 
 
service credential생성 or 확인
(service credential을 통해 db binding을 하게 된다.)
 
new credential
view credential
이 크레덴덴셜 정보를 sequence binding정보에 기록 하여 db action에 바인딩 한다.
주의:database:guestbook
=>이 정보는 cloudant tool에서 db생성시 동일하게 입력 해줘야 한다.
 
2개의 action을 확인 할 수 있다.
 
6.     database생성
바인딩 시에 사용한 db이름과 동일한 database를 생성한다.
Dashboard에서 사용할 cloudant service 를 선택 -> cloudant launch 클릭
 
create database
guestbook이란 이름으로 생성
(위 스텝에서 생성한 것은 cloudant service이고 이 step에서는 해당 서비스 내에 database를 만드는 것이다. 한 서비스 안에 여러개의 db를 만들 수 있는 것이다.)
 
7.    sequence save
db insert를 준비하는 function과 실제로 db insert action을 수행하는 것을 조합해서 하나의 sequence를
만들었다.
 
8.     test
change input클릭 후 아래 json data를 넣는다.
 
참고 소스:
{

“name”: “John Smith”,

“email”: “john@smith.com”,

“comment”: “this is my comment”

}

 

invoke버튼 클릭

 

cloudant data저장됨 확인

 

 

 

 

 

9.     db data 읽기

create action

 

name:set-read-input

 

참고소스:

  function main(params) {

    return { params:include_docs: true } };

  }

 

save

10.     sequence 생성

enclosing sequence클릭

 

add to sequence

 

create

action name:read-guestbook-entires-sequence

 

 

 

방금 생성한 sequence 클릭

 

11.sequence action 추가(db)

add

Use public ->cloudant

Actions:list-documents

My bindings: binding-for-guestbookdb

 

추가된 action 확인

 

12. 3번째 action 추가: document를 특정 format으로 맞추는 것.

action name:format-entries

click create&Add

세번째 action 추가된것 확인

 

action code를 수정하기 위해 방금 생성한 세번째 action을 클릭 한다.

 

소스 수정 ->save

참고 소스:

const md5 = require(‘spark-md5’);

function main(params)
{

  return {

    entries:params.rows.map((row) => { return {

      name:row.doc.name,

      email:row.doc.email,

      comment:row.doc.comment,

      createdAt:row.doc.createdAt,

      icon: (row.doc.email ? `https://secure.gravatar.com/avatar/${md5.hash(row.doc.email.trim().toLowerCase())}?s=64` :
 null)}})

  };

 

read-guestbook-entries-sequence로 돌아간다.

sequence save한다.

 

test를 위해 invoke를 해보자

 

내가 저장했던 John Smith가 잘 나오는것을 확인 할 수 있다.

 

[2nd: HTTP endpoint 생성]

HTTP endpoint를 생성함으로써, cli 뿐만 아니라 http request를 통해 function을 수행 할 수 있다.

1.cloud functions dashboard에서 read-guestbook-entries-sequence로 이동하자.

endpoint 클릭

Enable as Web action 체크 -> save

같은 과정을 save-guestbook-entry-sequence도 하자

 

2.API 로 이동하자.

create managed api 클릭

APIs ->Create Managed API

api name:guestbook

base path:/guestbook

create operation

path:/entries

verb:get

action:get-guestbook-entire-sequence

path:/entries

verb:put

action:save-guestbook-entry-sequence

save & expose 클릭

[3rd: Guestbook Frontend 서비스에 functions 연결]

생성한 endpoint를 이용하여 client program에 functions를 연결한다.

완성된 하나의 application을 확인 할 수 있다.

1.client interface frontend source 를 받는다. (local pc)

git clone https://github.com/IBM-Cloud/serverless-guestbook.git

2.docs/guestbook.js 를 열어서 apiUrl를 교체 한다.

apiUrl apiexploer 메뉴에서 확인 된다. (guestbook 부분까지만 )

https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/7bbe0aa3d0ab81a7ad000000000000000000000002fb36400000ec43323d59363/guestbook

 

참고: Serverless web application and API

 

[Next  IBM Cloud Functions CLI 사용해보기]

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.