すべてのプロダクト
Search
ドキュメントセンター

Function Compute:エラー処理

最終更新日:Dec 20, 2024

このトピックでは、カスタムランタイムの一般的なエラーと、エラーのトラブルシューティング方法について説明します。

関数インスタンスの起動に失敗しました

例:

The function cannot be started. Failed to start function instance. Error: the file /code/bootstrap is not exist

トラブルシューティング

起動コマンドで発生した例外または起動コマンドがないため、関数インスタンスの起動に失敗することがあります。

  • デフォルトでは、startup commandパラメーターが設定されていない場合、Function Computeは /code/bootstrapを起動コマンドとして使用します。 ファイルがコードパッケージに含まれていない場合は、/code/bootstrapスクリプトを追加するか、Startup Commandパラメーターを変更できます。

  • Startup Commandパラメーターが設定されている場合は、ファイルが存在しないことを示すエラーメッセージを参照して、指定されたファイルが存在するかどうかを確認します (例: 「error: the file xxx is not exist」) 。

スタートアップコマンドの設定方法の詳細については、「原則」をご参照ください。

関数インスタンスのヘルスチェックに失敗しました

例:

Function instance health check failed on port 9001 in 120 seconds.\nLogs:

トラブルシューティング

関数インスタンスがヘルスチェックに合格しなかった場合、考えられる原因は、コードで指定されたリスニングIPアドレスまたはポートが正しくないことです。 関数インスタンスの起動後、function Computeは、関数用に設定されたポートに基づいてレイヤー4接続チェックを実行します。 タイムアウト期間内にチェックが失敗した場合、「Function instance health check failed」エラーが報告されます。

この問題を回避するには、リスニングIPアドレスとポートが次の要件を満たしていることを確認します。

  • リスニングIPアドレス

    コードで設定されているリスニングIPアドレスは0.0.0.0または * である必要があり、127.0.0.0またはlocalhostに設定することはできません。

  • リスニングポート

    リスニングポートは、関数用に設定されているリスニングポートと同じである必要があります。 カスタムランタイムのデフォルトのリスニングポートは9000です。

    • デフォルトのポートを使用する場合は、HTTPサーバーがコードでリッスンするポートも9000であることを確認してください。

    • 関数のリスニングポートパラメーターを設定している場合は、コード内でHTTPサーバーがリスニングするポートがリスニングポートの値と一致していることを確認します。

リスニングポートの設定方法の詳細については、「HTTPサーバー設定の要件」をご参照ください。

関数インスタンスが予期せず終了

例:

Function instance exited unexpectedly(code 2, message:no such file or directory) with start command '/code/bootstrap '.
Logs:
  • 関数インスタンスが予期せず終了: 関数インスタンスが予期せず終了しました。

  • code 2, message:no such file or directory: インスタンス起動プロセスのLinux終了コードとコードの説明。

  • with start command '/code/bootstrap': インスタンスの起動コマンド。

説明

終了コードと終了コードの説明は参考のためだけに提供されています。 場合によっては、コードは従来の意味を一切持たない。

トラブルシューティング

  • startupコマンドの実行権限がありません

    The function cannot be started. Function instance exited unexpectedly(code 13, message:permission denied) with start command '/code/bootstrap '.

    ほとんどの場合、インスタンスの起動コマンドに実行可能権限が設定されていない場合、コード13、message:permission deniedが報告されます。 コードをパッケージ化する前に、chmod 755 bootstrapchmod 777 bootstrap、またはchmod + x bootstrapコマンドを実行して、ファイルに実行可能権限を付与できます。

  • ファイルが存在しません

    Function instance exited unexpectedly(code 2, message:no such file or directory) with start command 'python3 not_exist_file.py '.
    Logs:xxx

    ほとんどの場合、スタートアップパラメーターにファイルが存在しない場合、コード2、message:no such file or directoryが報告されます。 場合によっては、コード2, message:no such file or directoryが報告されないことがあります。 このような場合、エラーログに基づいてエラーをトラブルシューティングする必要があります。

    起動コマンドで指定したファイルが存在しない場合に, 異なるプログラミング言語で返されるエラーメッセージについて説明します。

    • Python

      インスタンスの起動コマンドがpython3 not_exist_file.pyの場合、code 2, message:no such file or directoryが報告されます。

      スタートアップコマンドをシェルスクリプトに追加し、スタートアップコマンドを /code/bootstrapに変更すると、/code/not_exist_file.pyファイルが存在しないことを示すエラーメッセージが報告されます。

      シェルスクリプトの例

      #!/bin/bash
      python3 not_exist_file.py

      エラーメッセージ

      Function instance exited unexpectedly(code 2, message:no such file or directory) with start command '/code/bootstrap '.
      Logs:python3: can't open file '/code/not_exist_file.py': [Errno 2] No such file or directory
    • Node.js

      インスタンスの起動コマンドをnpm実行開始のスクリプト起動コマンドパッケージ. json/not_exist_file.js:

      Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'npm run start '.
      Logs:> nodejs-express@0.0.0 start /code
      > node ./not_exist_file.js
      
      internal/modules/cjs/loader.js:905
        throw err;
        ^
      
      Error: Cannot find module '/code/not_exist_file.js'
          at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
          at Function.Module._load (internal/modules/cjs/loader.js:746:27)
          at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)
          at internal/main/run_main_module.js:17:47 {
        code: 'MODULE_NOT_FOUND',
        requireStack: []
      }
      npm ERR!  code ELIFECYCLE
      npm ERR!  errno 1
       ERR!  nodejs-express@0.0.0 start: `node ./not_exist_file.js`
       npm ERR!
       ERR!  Failed at the nodejs-express@0.0.0 start script.
      npm ERR!  This is probably not a problem with npm. There is likely additional logging output above.
      
      npm ERR!  A complete log of this run can be found in:
      npm ERR!     /root/.npm/_logs/2022-10-31T08_02_29_434Z-debug.log

      エラーメッセージ「error: Cannot find module '/code/not_exist_file.js' 」は、エラーが /code/not_exist_file.jsファイルがないことが原因であることを示します。 終了コードはコード1、メッセージ: 操作は許可されていません

      インスタンスの起動コマンドが/not_exist_file.js.

    • Java

      インスタンスの起動コマンドをjava -Dserver.port=9000 -jar target/not_exist_file.jarに設定した場合、次のエラーメッセージが表示されます。

      Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'java -Dserver.port=9000 -jar target/not_exist_file.jar '.
      Logs:Error: Unable to access jarfile target/not_exist_file.jar

      Unable access jarfile target/not_exist_file.jar」というエラーメッセージは、target/not_exist_file.jarファイルがないことが原因でエラーが発生したことを示します。 終了コードはコード1、メッセージ: 操作は許可されていません

    • PHP

      インスタンスの起動コマンドをphp not_exist_file.phpに設定すると、次のエラーメッセージが表示されます。

      Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'php not_exist_file.php '.
      Logs:Could not open input file: not_exist_file.php

      入力ファイルを開けませんでした: not_exist_file.php」というエラーメッセージは、not_exist_file.phpファイルがないことがエラーの原因であることを示します。 終了コードはコード1、メッセージ: 操作は許可されていません

    • . NETコア

      インスタンスの起動コマンドをdotnet。/target/NotExistFile.dll:

      Function instance exited unexpectedly(code 145) with start command 'dotnet ./target/NotExistFile.dll '.
      Logs:Could not execute because the application was not found or a compatible .NET SDK is not installed.
      Possible reasons for this include:
        * You intended to execute a .NET program:
            The application './target/NotExistFile.dll' does not exist.
        * You intended to execute a .NET SDK command:
            It was not possible to find any installed .NET SDKs.
            Install a .NET SDK from:
              https://aka.ms/dotnet-download

      エラーログは、詳細なトラブルシューティング方法を提供し、. /target/NotExistFile.dllファイルが存在しない、または. NET SDKがインストールされていません。 終了コードはコード145です。

    • ルビー

      インスタンスの起動コマンドをruby not_exist_file.rbに設定した場合、次のエラーメッセージが表示されます。

      Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'ruby not_exist_file.rb '.
      Logs:Traceback (most recent call last):
      ruby: No such file or directory -- not_exist_file.rb (LoadError)

      エラーメッセージ「No such file or directory -- not_exist_file.rb」は、not_exist_file.rbファイルがないことによってエラーが発生したことを示します。 終了コードはコード1、メッセージ: 操作は許可されていません

  • 無効なファイル形式

    Function instance exited unexpectedly(code 8, message:exec format error) with start command '/code/bootstrap '.
    Logs:

    カスタムランタイムは、x86-64ベースのLinuxで実行されます。 起動ファイルがシステム環境と互換性があることを確認してください。 スタートアップコマンドがシェルスクリプトの場合、ファイルがLinux構文に従い、#! スクリプトの先頭にある行 (シバン) 。 起動コマンドがバイナリ実行可能ファイルの場合は、Linuxオペレーティングシステムと互換性のある実行可能形式およびリンク可能形式 (ELF) ファイルであることを確認してください。 次のセクションでは、ファイル形式のエラーについて説明します。

    • スタートアップコマンドのシェルスクリプトのShebangエラー

      ほとんどの場合、シェルスクリプトに有効なシバンがない場合、8 exec形式エラーが終了コードとして報告されます。 エラーを回避するには、シェルスクリプトの最初の行に有効なシバンを追加する必要があります。

      bashを使用してスクリプトを実行する場合は、ファイルの最初の行に #!/usr/bin/env bashまたは #!/bin/bashを追加します。 #!/usr/bin/env bashを使用することを推奨します。 デフォルトでは、カスタムランタイムの /bin/sh/bin/bashです。 したがって、#!/usr/bin/env shまたは #!/bin/shコマンドを実行できます。

    • Windows構文の起動コマンドのシェルスクリプト

      次のテストスクリプトを実行します。

      #!/usr/bin/env bash
      node /code/index.js

      次のエラーメッセージが返されます。

      Function instance exited unexpectedly(code 127, message:key has expired) with start command '/code/bootstrap '.
      Logs:/usr/bin/env: 'bash\r': No such file or directory

      エラーメッセージ "bash\r" は、bashコマンドの後にキャリッジリターン文字 (\r) が続くことを示します。 これはWindowsファイル構文の特徴であり、\r\nを使用して改行を示しますが、Unixファイルは \nを使用します。 したがって、ファイルはWindowsシステム上で作成され、Windows構文に従っている可能性があります。

      Windows OSでスクリプトを作成する場合は、UNIX OSと互換性のある形式に変換する必要があります。 Linux OSでdos2unixコマンドを実行するか、Function ComputeのWebIDEを使用してスクリプトを変換できます。 詳細については、「Function Computeが提供するWebIDEを使用してファイル形式を変換する方法? 」をご参照ください。

    • 起動コマンドとして使用するバイナリ実行ファイル

      起動コマンドが実行ファイルの場合は, Linux OSと互換性のあるELFファイルであることを確認してください。 たとえば、デフォルト設定GOOS=darwin GOARCH=arm64を使用してM1チップを搭載したMacでGolangコードをコンパイルすると、コードのパッケージ化、アップロード、テスト後に次のエラーメッセージが表示されます。

      Function instance exited unexpectedly(code 8, message:exec format error) with start command './main '.
      Logs:

      インスタンスの終了コードが8 exec formatエラーで、ファイル形式が無効であることを示しています。 コンパイル中にGOOS=linux GOARCH=amd64を追加する必要があります。 詳細については、「コードパッケージのコンパイルとデプロイ」をご参照ください。

      展開して、実行可能ファイルの形式を確認する方法を確認します

      • 次のサンプルコードは、GOOS=darwin GOARCH=arm64を使用してコンパイルされた実行可能ファイルの形式を確認する方法の例を示しています。

        $ file main
        main: Mach-O 64-bit arm64 executable, flags:<|DYLDLINK|PIE>

        この例では、ファイル形式はMach-Oで、CPUアーキテクチャはarm64です。これは、カスタムランタイムの基盤となる環境と互換性がありません。

      • 次のサンプルコードは、GOOS=linux GOARCH=amd64を使用してコンパイルされた実行ファイルの形式を確認する方法の例を示しています。

        $ file main
        main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=xxx, not stripped

        この例では、ファイル形式はELFで、CPUアーキテクチャはx86-64で、カスタムランタイムの基盤となる環境と互換性があります。

      説明
      • 通常、Linux OSの実行可能ファイルはELF形式である。

      • Mac OSの実行ファイルはMach-O形式です。

      • Windows OSの実行可能ファイルは、ポータブル実行可能 (PE) 形式である。

  • 一般的な終了コード

    次のセクションでは、他の一般的な終了コードについて説明します。

    • 終了コード137

      プログラムはSIGKILLを受け取り、例外的に終了します。 ほとんどの場合、この問題はOOMKilled(Out of Memory) によって発生します。 この場合、関数のメモリ設定をアップグレードできます。

追加情報

このトピックに記載されていないエラーが発生した場合は、「カスタムランタイムFAQ」をご参照ください。