예전에 GCP ( Google Cloud Platform )에서는 Cloud Repository 에 push를 하면 Cloud Pub/Sub으로 이벤트를 트리거 해주는 비공식 기능이 있었던 적이 있었다.
작년 이맘때쯤 그 기능이 없어져서 Google에 문의를 한적이 있었다.
당시의 답변은 해당 기능은 비공식 기능이고 삭제 되었다는 답변을 받고 좌절을 한적이 있다.
하지만, 다른 방법으로 그 기능은 부활을 했다.
우선 간략히 스텝을 설명하자면.
- Cloud Repository 에 Git Push 를한다.
- Container Registry에 빌드 트리거가 동작을 한다.
- 해당 트리거에서 Cloud Pub/Sub으로 메세지를 보낸다.
- Cloud Pub/Sub을 이용하여 Cloud Function이나 혹은 뭔가 다른 동작을 처리한다.
대충 이런 스텝이다. 예를들면 단순히 소스를 푸쉬하는것만으로 원래는 이미지를 빌드하고 배포하는 형식이 앱엔진에서만 가능했다면, 이러한 방법을 이용하면 빌드된 이미지를 꼭 앱엔진이 아니라, Compute Engine 으로도 배포가 가능하다. 그 외에도 슬랙이나 다양한 연동이 가능하다.
활용은 각자 하도록 하고, 우선 방법은... 매우 심플하다. 앞서 포스팅을 참고하여 설명하도록 한다.
( 이전 포스팅 : https://steemit.com/kr/@calmlake79/google-app-engine-git )
우선 Cloud Pub/Sub에 대해알아보자.
Cloud Pub/Sub은 스트림을 이용하여 서버간의 간단한 메시지 전달을 위한 도구정도로 이해하면 된다.
자세한 설명은 링크( https://cloud.google.com/pubsub/ ) 에 있으며, 개인적으로 표현하기에는 일종의 서버간의 채팅을 위한 간단한 통신 시스템정도로 설명을 하곤 한다.
예를들어서 한 서버가 새로 인스턴스가 올라올때 "나 부팅했어!" 라고 다른 서버에게 알려줄때 Cloud Pub/Sub을 이용하면 편리하다.
예전에는 Cloud Storage에 이미지가 새로 올라오거나 삭제될때,수정될때 알리는 방법도 쓰기도 했었다.
기본적으로 Cloud Pub/Sub은 Cloud Function과 매우 긴밀하게 연결되어 있다. 그래서 더욱더 활용도가 높다.
우선 아주 간단하게 사용하는 방법을 보자.
구글의 gcloud 커맨드라인을 활용하여 보자.
우선 pub/sub은 하나의 주제( topic )을 만들고 그 주제 아래 구독( subscription ) 을 등록하여 이벤트를 받게 된다.
우선은 하나의 주제를 만드는 방법은 다음과 같다.
gcloud pubsub topics create newTopic
위의 명령어는 newTopic 라는 새로운 주제를 만들게 된다.
그 다음에는 메세지를 받기 위해서는 다음과 같은 구독을 생성해야 한다.
gcloud pubsub subscriptions create --topic newTopic mySubscription
위의 명령어는 newTopic 이라는 주제 아래에 mySubscription 이라는 새로운 구독을 등록하게 된다.
그러면 앞으로 newTopic 으로 들어오는 모든 메세지는 mySubscription 에서 받을 수있게 된다.
그럼 테스트를 간단히 해보자.
gcloud pubsub topics publish newTopic --message "hi"
이와 같이 하면 newTopic 으로 hi 라는 메시지가 전달되게 된다.
그럼 받는걸 테스트는 어떻게 할까?
gcloud pubsub subscriptions pull --auto-ack mySubscription
위와 같이 하면 해당 메시지를 확인이 가능하다.
자 이걸 이용하고, 이전 포스트를 참조해서 다음과 같은 작업을 한다.
app.yaml 을 삭제한다.
여기서는 전혀 필요가 없으므로,cloudbuild.yaml 을 수정한다.
딱 두가지..간단하다.
물론 뒷단의 pub/sub을 하거나 등등을 해야 하지만... 그건 또 다음 기회에..
cloudbuild.yaml 을 다음과 같이 수정한다.
위의 코드에서 예상이 가능했겠지만,
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args:
- pubsub
- topics
- publish
- newTopic
- --message=hi
이와 같이 수정을 한뒤 git push 를 하면 된다.