非同期アーキテクチャでシステム構築を行う場合、メッセージブローカを導入するケースが多いと思います。最近では、クラウドのマネージドサービスとしてもメッセージブローカが提供されています。その一つにGCPのCloud Pub/Subがあります。今回は、Cloudデプロイ前にローカル開発をしやすくする方法として、Pub/SubエミュレータをPodとして動かす方法について紹介します。
目次
Pub/Subエミュレータとは
GCPのドキュメントでも紹介されていますが、gcloudコマンドを使って、pubsub-emulatorをすることでローカルでの利用ができるようになります。Pod化しなくてよいケースは、こちらの方法を利用することで、そのまま利用が可能となります。こちらは、以前の記事を参照ください。
Pod化するためにコンテナを作る(探す)
kubernetsのPod化するためには、コンテナとして動作させる必要があります。1から作ってもよいのですが、今回は、Docker Hubで公開されている下記イメージを利用します。
https://hub.docker.com/r/singularities/pubsub-emulator
マニュフェスト例
マニュフェスト例を下記に示します。
※ 下記例は、Helmで管理しているファイルの一部です。
{{- $containerPort := 8432 -}}
apiVersion: v1
kind: Service
metadata:
name: pubsub-emulator
spec:
type: LoadBalancer
selector:
app: pubsub-emulator
ports:
- protocol: TCP
port: 8085
targetPort: {{ $containerPort }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: pubsub-emulator
spec:
selector:
matchLabels:
app: pubsub-emulator
template:
metadata:
labels:
app: pubsub-emulator
spec:
containers:
- name: pubsub-emulator
image: singularities/pubsub-emulator
imagePullPolicy: Always
ports:
- containerPort: {{ $containerPort }}
env:
- name: PUBSUB_PROJECT_ID
value: local
- name: PUBSUB_LISTEN_ADDRESS
value: 0.0.0.0:8432
※1.環境変数(PUBSUB_PROJECT_ID, PUBSUB_LISTEN_ADDRESS)については、GCPのドキュメントで公開されているものと同じになります。
※2.こちらのPodは、永続化ディスクをマウントしていないので、Podを停止するとメッセージは、削除されます。メッセージを永続化したい場合には、/opt/data
にボリュームをマウントする必要があります。詳しくは、ドキュメントを参考にしてください。
注意事項
gcloudコマンドでは、pubsubエミュレータの挙動を制御することはできません。そのため、アプリケーション側でトピック、サブスクライバーがある前提でソースコードを書いている場合には、予め作成しておく必要があります。初期化するジョブのマニュフェスト例を下記に示します。
apiVersion: batch/v1
kind: Job
metadata:
name: pubsub-emulator-init
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- image: {{ .Values.init.container.image }}:{{ .Values.container.tag }}
name: pubsub-emulator-init
env:
- name: PUBSUB_EMULATOR_HOST
value: 'pubsub-emulator:8085'
- name: PUBSUB_PROJECT_ID
value: 'local'
- name: PROJECT_ID
value: 'local'
- name: TOPIC_ID
value: "test-msg-topic"
- name: SUBSCRIPTION_ID
value: "test-msg-subscription"
今回は、GCPでよく利用されるメッセージブローカサービスの一つであるPub/SubをPod化する方法について紹介しました。PubSubをシンプルにPod化しておくことで、ローカルでの開発がやりやすくなります。クラウド上でいきなり開発を開始するよりも、手軽にコストをかけずに利用できるので、興味があるかたは、導入してみてください。