티스토리 뷰

개요

 

지난 포스팅에서는 https://jusths.tistory.com/151

 

1) Local PC 에서 돌아가는 HTTP Server 구현하여

2) (serveo.net 서비스를 이용해) Port forwarding 하여

2) Slack App 에서 오는 HTTP Reqeust 받아 처리하고 회신하게 구현했었다.

 

이번에는 Google Cloud Functions

/tz, /tzn, /tns 명령이 HTTP Reqeust 보내는 개의 endpoint 처리하게 해보자.

- 하나의 Cloud function 으로 endpoint 처리하지 못하고, 개의 Cloud functions 만들어야 했다.

 

참고 링크

 

GitHub 구현코드 링크: https://github.com/nicewook/slack-timezone-current-time

 

* 기존에 구현했던 Slack Slash Command - 영한 번역

: 대부분의 내용은 아래 링크와 중복되는 부분이 있어서, 가능한 개념 위주로 정리하려

https://jusths.tistory.com/136

https://jusths.tistory.com/137

https://jusths.tistory.com/138

 

구현 개념

 

구현한 코드를 보자 https://github.com/nicewook/slack-timezone-current-time

 

main.go HTTP Server 생성하고, /tz, /tzn, /tzs 개의 endpoint 대해서 각각 다른 함수를 실행하게 해준다.

api/timezon-calc.go 실제로 Slack App /tz, /tzn, /tzs 보내온 요청을 처리하는 함수가 구현되어 있다.

- TimeZoneCurrentTime()

- TimeZoneCurrentTimeNewYork()

- TimeZoneCurrentTimeSeoul()

 

이제 Local PC 구현을 Google Cloud Functions 올린다는 것은 무엇을 말하는 것일까?

main.go 에서 구동되던 HTTP Server 역할을 Cloud functions 대신해준다는 것이다.

 

다만, 현시점에서는 Cloud Function 하나를 생성하면 하나의 endpoint 대해서만 동작한다.

따라서 우리는 개의 Cloud Function 만들 것이다. (for /tz, /tzn, /tzs)

 

준비 사항

 

Cloud SDK 공식링크: https://cloud.google.com/sdk/docs/quickstarts?hl=ko

참고링크: https://jusths.tistory.com/138

 

자세한 것은 링크를 참고하고 필요한 사항들을 리스트 해본다.

 

1) Google Cloud Platform (GCP) 에서 Project 하나를 생성, 또는 준비한다.

2) 해당 Project 대한 Billing Enable 되어 있어야 한다. (왠만한 사용량에도 비용은 극히 미미하지만 유료임!)

3) Cloud Functions API Enable 해준다.

 

그리고 Local PC 환경도 설정해줘야 한다.

1) Cloud SDK 설치

2) gcloud init 통한 계정 연동 - 나의 GCP 연동할 있게 한다.

3) project 설정 - 나의 (여러) project Cloud Functions 구동시킬 project 설정한다.

 

 

Cloud Functions Deploy 하기

 

참고링크: https://jusths.tistory.com/138

 

순서는 다음과 같다. 자세한 내용과 그림은 참고링크로 대체한다.

 

1) LocalPC code 위치로 간다.

- 여기서는 timezon-calc.go 파일이 있는 api 폴더이다

- , 실제로 HTTP Request 핸들링 하는 함수들을 구현한 파일이 있는 폴더로 이동한다.

2) Cloud Functions deply 한다.

- Cloud SDK 설치하고 설정하면 사용할 있는 gcloud 라는 cli tool 이용한다.

3) 환경변수를 설정한다.

- GCP Console () 환경으로 Cloud Functions 접근하여 환경변수를 설정한다.

- 단계 Cli 환경에서 바로 해줘도 된다.

4) Slack App 변경

- 생성된 Cloud Functions request URL Slack App Slash Command 설정에 반영해준다.

 

Local PC 에서 deploy 해보자

 

참고링크: https://cloud.google.com/functions/docs/deploying/filesystem?hl=ko

 

api 폴더로 가서 cmd 창에서 아래와 같이 명령을 보내면 된다.

 

1) deploy tz endpoint tz 라는 것이다.

2) --entry-point 실제로 endpoint 들어오는 HTTP request 처리할 함수 이름을 적어준다

3) --set-env-vars PROJECT_ID=my_project 이렇게 하면 환경변수를 설정할 있다.

- 여기서는 PROJECT_ID 만을 설정했지만 SLACK_SIGNING_SECRET 역시 여기서 설정이 가능하다.

- 예를 들어 SLACK_SIGNING_SECRET=ac2d3e12a4a449483a93827beedab101 라고 하면

- --set-env-vars PROJECT_ID=my_project,SLACK_SIGNING_SECRET=ac2d3e12a4a449483a93827beedab101 라고 해주면 된다.

- 콤마로 구분하고, 스페이스가 없어야 함에 주의

- 나중에 GCP Console 에서 설정도 가능함

* GCP Project ID my_project 라고 가정해본다.

 

TimeZoneCurrentTime()

gcloud functions deploy tz --entry-point TimeZoneCurrentTime --runtime go111 --trigger-http --set-env-vars PROJECT_ID=my_project

TimeZoneCurrentTimeNewYork()

gcloud functions deploy tzn --entry-point TimeZoneCurrentTimeNewYork --runtime go111 --trigger-http --set-env-vars PROJECT_ID=my_project

TimeZoneCurrentTimeSeoul()

gcloud functions deploy tzs --entry-point TimeZoneCurrentTimeSeoul --runtime go111 --trigger-http --set-env-vars PROJECT_ID=my_project

 

Slack App 설정

 

명령의 결과로 httpsTrigger url 생성되는데

이것을 Slack App Slash Command 설정에 반영하면 된다.

 

마치며 생각

 

1) endpoint 별로 하나씩의 Cloud Function 만드는 중복이 아쉽게 느껴졌지만

- 파라미터를 통해 routing 해주는 방법이 있고

- 애초에 Serverless 컨셉이 endpoint 단위인가 싶기도 했음

 

2) 자동 배포까지도 파보고 싶긴한데 이번에는 여기까지만

 

3) 이런 소품같은 작은 구현도 재미는 있지만 뭔가 제대로 해보고 싶음. @@


반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함