티스토리 뷰
개요
지난 포스팅에서는 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) 이런 소품같은 작은 구현도 재미는 있지만 뭔가 제대로 된 걸 해보고 싶음. @@
'golang' 카테고리의 다른 글
Go 깨알: if err := json.Unmarshal(bytes, &book2); err != nil { (0) | 2020.01.17 |
---|---|
Go Slice Tricks (0) | 2019.12.27 |
Slack Slash Command - timezone current time 1/2 (0) | 2019.09.17 |
xid: golang GUID 생성 package 둘러보기 (0) | 2019.08.16 |
Go runtime AND goroutine (0) | 2019.07.23 |
- Total
- Today
- Yesterday
- 독서후기
- websocket
- go
- clean agile
- github
- Shortcut
- 인텔리제이
- Gin
- ChatGPT
- agile
- golang
- 노션
- intellij
- 체호프
- 제이펍
- strange
- solid
- notion
- Bug
- 영화
- API
- 독서
- 잡학툰
- 2023
- 클린 애자일
- OpenAI
- folklore
- 오블완
- 티스토리챌린지
- bun
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |