Cloud Functions の Go インスタンスでデプロイエラーが発生しましたよ、というお話。
Golangで実装した functions をデプロイしようとして、以下のようなエラーが発生しました。
$ gcloud beta functions deploy xxxxxxxxx \
--project xxxxxxxxxx \
--entry-point xxxxxxxxx \
--runtime go111 \
--trigger-http \
--memory 128MB
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: go: finding ....
...
当然、以下の記事を参考にビルドのチェックいたしましたが。。。
上記のエラーが止まらないのです。
新規のfunctionsはデプロイを中止し、ソースコードをいったんリバートしまして、既にデプロイ済みのfunctionsを再度、デプロイしてみたところ・・・
またもや上記のエラーが発生したのです。
これは困ってしまいました。ちょっと前に上げたfunctionsが、今は上がらなくなっているのです。
しかし、今上がっているfunctionsは問題なく動いています。。。
これは何だろう・・・?と公式ドキュメントを開いてみましたら・・・
Cloud Functions | The Go Runtime
Go 1.11.6 ...?
Go 1.11.6 ...?
いやいや、この前上げたときは1.11.5だったでしょうが!!!
(いくら吠えても仕方ないので今回はちゃんとスクショ貼っておきました。)
・・・というわけで、 1.11.5 から 1.11.6 へのマイグレーションの手順です。
Go 1.11.5 から 1.11.6 への切り替え
まずは、goの環境を1.11.5から1.11.6に乗せ換えます。こういう時には、goenv 助かりますね。
以下のコマンドでサクッと対応完了です。
$ goenv install 1.11.6
...
$ goenv global 1.11.6
...
環境によっては GOPATH
や GOROOT
の変更が必要かと思います。
goenv がない場合は、頑張ってください。。。
依存モジュール情報のアップデート
続いて functionsのプロジェクトから go.mod
と go.sum
を削除し、goモジュールの再作成をします。
$ rm go.mod go.sum
$ go mod init
ビルド確認
以下のコマンドでビルドです。
$ go build
go のビルドは非常に簡単で助かります。早いし。
デプロイの再実行
ビルドをすると go.mod
が更新され、go.sum
が再生成されます。(go.sum、めっちゃ変わってるやん・・・)
これでデプロイを行ってみましょう!
$ gcloud beta functions deploy xxxxxxxxx \
--project xxxxxxxxxx \
--entry-point xxxxxxxxx \
--runtime go111 \
--trigger-http \
--memory 128MB
Deploying function (may take a while - up to 2 minutes)...
...
ここでエンドポイントの情報などが表示されれば成功です!
最後に
Goのランタイム、しれっとバージョンアップして文句はないですが、ビルド失敗したときのエラーメッセージが非常に分かりにくいですね。(というか、実際にはエラーメッセージは解決が糸口にもなってない。。。)
手詰まりになったら基本に立ち返って公式サイトを見る、というのも一つの手です。
いろいろ言いたいことはありますが以上です。。。
(・・・こういうのって未必の故意っていうんじゃないのぉ?)