Cloud Functionsで出くわしたエラー対処法まとめ

Pubsub topic can only be set for events with type google.cloud.pubsub.topic.v1.messagePublished.

エラーの現象

Cloud Functionsを利用中に以下のエラーに出くわしました。

Pubsub topic can only be set for events with type google.cloud.pubsub.topic.v1.messagePublished.

直訳すると「Pubsub topicはgoogle.cloud.pubsub.topic.v1.messagePublished.のイベントのみに利用されます」でしょうか。
正直よくわかりません。

原因

今回解決方法はわかったのですが、原因は不明です。

解決方法

今回この現象は既存の関数をコピーしたときに発生しました。
色々と試したところ、Eventarcトリガーを一旦削除して同じ内容で再登録したらエラーが解消されました。

変わった点はEventarcトリガーの名前だけのため、もしかしたらトリガー名はGCP上でユニークである必要があるのかもしれません。
ただそれだと関数をコピーしていると必ず出てしまうエラーとも言えますし、何か勘違いしているような気はします…

今回はとりあえず対処療法的に解決させましたが、原因がわかる方いらっしゃいましたらコメントなどで教えていただけると幸いです。

Could not create or update Cloud Run service people-counter-notify, Container Healthcheck failed.

エラーの現象

関数のデプロイをしようとしたところ、以下のエラーにでくわしました。

Could not create or update Cloud Run service people-counter-notify, Container Healthcheck failed. 
Revision 'people-counter-notify-00004-vow' is not ready and cannot serve traffic. 
The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. 
Logs for this revision might contain more information.

原因

エラーメッセージ内にあるLogs URL:を見てみると、Cloud Functionsで設定しているメモリ上限を超えていることが原因になっているようです。

Memory limit of 256M exceeded with 267M used. 
Consider increasing the memory limit, see https://cloud.google.com/run/docs/configuring/memory-limits

解決方法

Cloud Functionsで関数の編集に戻り、割り当てられるメモリをデフォルトの256MiBから増やしました。

上記設定を行ってデプロイすることで、無事エラーが解消されました!

割当のメモリを増やすと、100msあたりのコンピューティング時間に応じてかかる料金があがるようです。
もともと無料枠しかつかっていなく、劇的に変わるわけでもないようだったのであまり考えないことにします。
詳細は以下リンクのコンピューティング時間の項に記載されています。

ERROR: Could not find a version that satisfies the requirement pywin32==304 (from versions: none)

エラーの現象

Cloud Functionsを利用中に以下のエラーに出くわしました。

ERROR: Could not find a version that satisfies the requirement pywin32==304 (from versions: none)

原因

今回Windows10で作成したPythonプログラムをCloud Functionsに移行しておりました。
エラーとなったPythonパッケージpywin32は名前から推測される通り、Windows環境でしか使えないパッケージになります。
Windows APIにアクセスするためのパッケージとのことです。

一方でCloud Functionsの実行環境を調べてみると、私が利用していたPython3.10の実行環境はUbuntu 22.04になるようです。

pywin32はWindowsでしか利用できないため、UbuntuとなるCloud Functionsではエラーとなっていたということです。

解決方法

色々試行錯誤した状態でrequirements.txtを作成していたため、一旦pywin32をアンインストールしてみました。

pip uninstall pywin32

現在のスクリプトではpywin32を利用していなかったようで、問題なく動くようになりました!

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

エラーの現象

関数の実行時に以下のようなエラーが出ました。

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

原因

OpenCVに関連するパッケージのエラーのようです。
Windows環境で開発していたソースコードをUbuntu環境のCloud Functionsに移行したため、Cloud Functionsでの実行時にエラーが出たようです。

解決しなかった解決方法

Windows環境で開発している現状ではどうしようもないので、以下を参考にしてUbuntu環境を用意します。

Windows10にUbuntuをインストールしてVSCodeと連携させる手順Windows10にUbuntuをインストールしてVSCodeと連携させる手順

Ubuntu環境が準備できたら問題となっていたパッケージを入れてみます。

pip install opencv-python
pip install opencv-contrib-python
apt install -y libgl1-mesa-dev

Ubuntu環境で改めてrequirements.txtを作成し、Cloud Functionsを更新します。
ただしこれでは解決できませんでした…
Ubuntuでaptしても、requirements.txtには反映されないと思われるため当たり前かもしれません。

一旦本件はCloud FunctionsではなくCloud Runに移行することを前提に、Dockerの勉強から始めることにしました。

WindowsにDocker環境とUbuntu環境を準備するWindowsにDocker環境とUbuntu環境を準備する

ちなみに上記の課題自体はDocker上のUbuntu22.04でも発生し、以下サイトを参考にOpenCVのネイティブパッケージをインストールすることで解決されました。

apt install libopencv-dev

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA