開発

CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因と対策

2020-10-28

CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因と対策

Googleのクラウド環境上で仮想サーバーの設定をせずにサーバーレスでプログラムを実行できるCloudFuntions。

CloudFuntionsではいくつかのプログラム言語を利用できるが、その中のひとつ「Node.js」を使っていると、デプロイ時にあるエラーに遭遇することがある。

Function cannot be initialized

初期化エラーのようだがエラーメッセージを見ても対策がわからない。

そこで今回は、CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因と対策について解説する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。最近GCP環境を習得中。

記事を読むメリット

  • CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因と対策がわかる

  • CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因

    CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因として考えられるのは2つある。

    エラー原因の候補

  • ランタイムのバージョン不整合
  • エントリポイントの設定ミス

  • 「Function cannot be initialized」の対策

    原因がわかれば対策もハッキリする。

    エラーの対策

  • ランタイムのバージョンを変更する
  • エントリポイントを修正する

  • 筆者のケース

    私も同じエラーに遭遇したことがあるので、その時にどう対応したかを書こうと思う。



    まず私の開発したものではないNode.jsのソースコードがあり、それをCloudFunctions上で実行する必要があった。

    私はNode.jsの知識はそれほど無かったので、とりあえずGCP上でCloudFunctionsの作成を行い、件のソースコードをコピペ。

    デプロイしたところ「Function cannot be initialized」が発生。

    activityログには以下のメッセージが残された。

    Function cannot be initialized
    

    cloud-functionsのログには以下のメッセージが残された。

    Function failed on loading user code.
    Error message: Error: please examine your function logs to see the error cause:
    https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs
    


    エラーメッセージに「ログを見ろ」としか書いてないじゃん・・・
    うん。
    正直全然わからなかったよ。


    そこで元のコードがどんな設定のもとで実行されていたかヒアリングし、元々は Node.js 8 で実行されていたことを確認。

    2020年10月現在、CloudFunctionsのデフォルト設定では Node.js 10 がランタイムとして設定されているので、 Node.js 8 を設定。して再度デプロイ。

    するとエラー内容が以下のように変わった。

    Function failed on loading user code.
    Error message:
    Node.js module defined by file index.js is expected to export function named (エントリポイント設定)
    

    ここでエントリポイントの設定を間違えたことに気づき、エントリポイントとして元コードの exports.xxx の xxx 部分を指定。

    そして無事デプロイに成功。


    じゃあNode.jsのバージョンとエントリポイントの両方が間違ってたってこと?
    そう思ったけど実はそうじゃなくて


    しかしその後の実行時に Unexpected token エラーが発生。

    こちらも調べるとバージョン不整合が原因のようなので、Node.jsのランタイムを Node.js 10 に戻すと、今度は「Function cannot be initialized」が発生せずにデプロイ成功。

    コードの実行も成功した。


    なんか色々やったけど結局「エントリポイント設定が悪かった」ってことなのね
    このケースではそうだったみたい。
    ただエントリポイントを修正する前にランタイムのバージョン変更でエラーメッセージが変わったので、バージョンが影響するケースもあると思うよ。



    CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因と対策 まとめ

    CloudFunctionsのNode.jsで「Function cannot be initialized」が発生する原因として考えられるのは以下の2点。

    エラー原因の候補

  • ランタイムのバージョン不整合
  • エントリポイントの設定ミス

  • 対応方法も以下の通り。

    エラーの対策

  • ランタイムのバージョンを変更する
  • エントリポイントを修正する

  • エントリポイントを設定する際は exports.xxx の xxx 部分を指定すると良い。





    他にもGCPのVMインスタンスやBigQueryに関する記事もあるので、もし気になったら見てみてほしい。

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます。

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    If you felt this article is useful, please share.

    にほんブログ村 IT技術ブログへ

    -開発
    -, ,

    © 2026 ITipsシステムソリューションズ