【Google Cloud】aertje/cloud-tasks-emulatorをhttps環境で使う
こんにちは、フリーランスエンジニアの太田雅昭です。
Cloud Tasksのエミュレータ
現在公式FirebaseエミュレータにCloud Tasksは入っていません。そこでaertje/cloud-tasks-emulatorを使います。
https://github.com/aertje/cloud-tasks-emulator
問題点
ここで問題があります。ローカルでhttp開発している分には大丈夫かと思うのですが、httpsだと使えません。ローカルでは通常自己証明証を使ってhttpsを使用しますが、この自己証明書が問題のようです。
Post https://local.xxx.net:3000/yyy: x509: certificate signed by unknown authority
issueも建てられていますが、解決の目処は立っていないようです。
https://github.com/aertje/cloud-tasks-emulator/issues/106
このissueでは、Dockerのビルドからカスタムする方法が紹介されていますが、これだけのために余計なファイルは増やしたくありません。困りました。
リバースプロキシを使う
そこでリバースプロキシを使うことにしました。エミュレータ=>http=>httpsの流れなら、自己署名証明書を使っていても問題ありません。
# compose.yml
...
caddy-proxy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "8080:8080"
command: caddy reverse-proxy --from :8080 --to https://host.docker.internal:3000 --insecure
extra_hosts:
- "host.docker.internal:host-gateway"
テストします。
curl http://localhost:8080/yyy
これでhttp=>httpsの導線を作れました。ただしこのアドレスはホスト側なので、docker内でのURLにする必要があります。
client.createTask({
parent,
task: {
httpRequest: {
url: "http://caddy-proxy:8080/yyy",
...
これでtaskが成功しました。
