이전 lab을 통해 IBM Cloud Functions를 어떻게 사용하는지 알아보았다.
WEB GUI 도 써보았고, CLI 로도 해보았다. 하지만 실제로 개발에 들어가면 gui 나 cli만으로는  불편하다.
이를 좀 더 효과적으로 만들어주는 severless framwork 를 활용해 보자.

**기본적인 환경 셋팅은 되어 있어야 한다. 필요한 사람은 이전 랩을 보고 환경 구성을 하자.
GO [IBM Cloud Functions CLI 사용해보기] **소스 코드는 이전 lab에서 사용한 것을 그대로 쓰겠다. 필요한 사람은 이전 랩을 참고하여 코드를 만들자.
GO [API gateway를 활용한 CRUD 구현하기]

본 과정에서는 api gateway를 이용한 CRUD 구현실습을 serverless framework를 통해서 구현 해보겠다.

Step Summary
· serverless framework 설치
· serverless CRUD rest api 구현 및 deploy
· Test

[1st: Serverless Framework 설치]

1. bx login
ibm cloud(bluemix)에 로그인 한다.
$bx login -a api.ng.bluemix.net -o “yjh@kr.ibm.com” -s “korea”

bluemix single sign on 을 사용하고자 한다면 아래 command
$bx login -a api.ng.bluemix.net -o “yjh@kr.ibm.com” -s “korea” –sso

2. verify
아래 커맨드 수행결과가 잘 나온다면 성공.
$bx wsk action invoke /whisk.system/utils/echo -p message hello –result
{“message”: “hello” }

3. serverless package를 설치한다.
$npm install -g serverless serverless-openwhisk

4. verify
아래 커맨드가 수행 되면 잘 설치 된 것이다.
$serverless

5. nodejs project 생성
이제 nodejs application을 만들어 보자.
$serverless create –template openwhisk-nodejs

아래 이미지와 같은 파일이 자동으로 생성 될 것이다.

[2nd: serverless.yml 구성]
1. action 소스 코드 생성
이전에 사용 했던 파일을 copy 해 온다.
create-cat.js / read-cat.js / update-cat.js / delete-cat.js

2. serverless.yml 파일을 editor에서 연다.
모든 설정을 이 파일에 명시해야 한다.
service 부분에 서비스명을 기입한다. (자신이 원하는 이름을 기입 하면 된다)
service: serverless-rest-lab

functions 부분을 아래 코드와 같게 수정한다.
handler 부분에 CRUD funtion을 명시하고 events부분에 endpoint를 method와 함께 지정했다.

functions:
  createCat:
    handler: create-cat.main
    parameters:
      CLOUDANT_DATABASE: "cats"
      CLOUDANT_INSTANCE: "Cloudant-Serverless"
      CLOUDANT_PASSWORD: "00e718ad40b4f0b074a01d7xxxxxd4be2d7e020077cced63"
      CLOUDANT_USERNAME: "e4ecfa2c-xxxxxxx7b5-32561351b6d1-bluemix"

    events: 
      - http: POST /api/serverless-cat
    
  readCat:
    handler: read-cat.main
    parameters:
      CLOUDANT_DATABASE: "cats"
      CLOUDANT_INSTANCE: "Cloudant-Serverless"
      CLOUDANT_PASSWORD: "00e718axxxxxxxxxda4c0663180d4be2d7e020077cced63"
      CLOUDANT_USERNAME: "e4ecfa2xxxxxxxxx7b5-32561351b6d1-bluemix"

    events: 
      - http: GET /api/serverless-cat

  updateCat:
    handler: update-cat.main
    parameters:
      CLOUDANT_DATABASE: "cats"
      CLOUDANT_INSTANCE: "Cloudant-Serverles
      CLOUDANT_PASSWORD: "00e718ad40b64f0b074a0xxxxxxe2d7e020077cced63"
      CLOUDANT_USERNAME: "e4ecxxxxxxxxb60-a7b5-32561351b6d1-bluemix"

    events: 
      - http: PUT /api/serverless-cat

  deleteCat:
    handler: delete-cat.main
    parameters:
      CLOUDANT_DATABASE: "cats"
      CLOUDANT_INSTANCE: "Cloudant-Serverless"
      CLOUDANT_PASSWORD: "00e718ad40b6dc94f0b074a01xxxxxxx4be2d7e020077cced63"
      CLOUDANT_USERNAME: "e4ecfa2c-282d-xxxxxx32561351b6d1-bluemix"

    events: 
      - http: DELETE /api/serverless-cat

 

3. dependency package install
dependency package를 설치 한다.
$npm install

4. deploy
$serverless deploy
결과가 아래와 같이 나타난다.

만약에 소스에 문제가
있어서 수정 했다면
deploy를 다시 해야 된다. (실제 개발 시 매번 deploy를 다시 하는게 불편 한데 이부분은 serverless-offline 이란 package로 해결 할 수 있다. 그외 여러가지 툴들을 같이 사용하면 좀 더 편하게 개발이 가능하다. 차차 소개 하기로 하겠다.)

5. 정보 보기
현재 구성된 사항을 확인 할 수 있다. 한눈에 모든 구성을 볼 수 있어 좋다.
방금 생성한 api endpoint가 확인 된다.
$serverless info

[3rx: api test]
만들어진 rest api 가 제대로 동작 하는지 확인 하자.
테스트 하는 방법은 여러가지가 있다. 본인이 선호하는 툴을 사용하면 된다. 대표적으로 아래 3가지를 많이 쓴다.
1) curl – cli 툴
2) httpie – cli 툴
3) postman – labtop용 gui tool

지금까지 우리는 curl 을 사용해왔으니 curl로 테스트 해보겠다.
(파란 부분은 자신의 api endpoint를 사용)

1) doc 생성
$curl -X POST -H ‘Content-Type: application/json’ -d ‘{“docid”:”test10″}’ https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/7bbe0aa3d0ab81a7ad43ddc9c03db9e0533d077842fb3645c22ec43323dxxxxx/serverless-rest-lab/api/serverless-cat

2) 생성된 doc 확인
$curl -X GET https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/7bbe0aa3d0ab81a7ad43ddc9c03db9e0533d077842fb3645c22ec43323dxxxxx/serverless-rest-lab/api/serverless-cat?docid=test10

3) doc 수정
$curl -X PUT -H ‘Content-Type: application/json’ -d ‘{“docid”:”test10″,”name”:”damon1010″}’ https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/7bbe0aa3d0ab81a7ad43ddc9c03db9e0533d077842fb3645c22ec43323dxxxxx/serverless-rest-lab/api/serverless-cat

4) doc 삭제
$curl -X DELETE -H ‘Content-Type: application/json’ -d ‘{“docid”:”test10″}’ https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/7bbe0aa3d0ab81a7ad43ddc9c03db9e0533d077842fb3645c22ec43323dxxxxx/serverless-rest-lab/api/serverless-cat

이상으로 serverless framework를 사용해 보았다. 이를 통해 좀 더 편하게 functions code를 deploy 할 수 있었다.
serverless framework에 대한 정보는 아래 참고 url에서 찾을 수 있다.
더 다양하게 사용 가능하니 url을 방문해 보자.

참고:

https://console.bluemix.net/docs/openwhisk/openwhisk_goserverless.html#openwhisk_goserverless
https://github.com/serverless/examples

토론 참가

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