Help us understand the problem. What is going on with this article?

【2019年9月版】Cloud FunctionsでGoをデプロイをする際のエラーメッセージが「go: finding ・・・」だった時の対処方法

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

The Go Runtime     Cloud Functions Documentation     Google Cloud.png

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
...

環境によっては GOPATHGOROOT の変更が必要かと思います。
goenv がない場合は、頑張ってください。。。

依存モジュール情報のアップデート

続いて functionsのプロジェクトから go.modgo.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のランタイム、しれっとバージョンアップして文句はないですが、ビルド失敗したときのエラーメッセージが非常に分かりにくいですね。(というか、実際にはエラーメッセージは解決が糸口にもなってない。。。)

手詰まりになったら基本に立ち返って公式サイトを見る、というのも一つの手です。

いろいろ言いたいことはありますが以上です。。。
(・・・こういうのって未必の故意っていうんじゃないのぉ?)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away