このトピックでは、カスタムランタイムの一般的なエラーと、エラーのトラブルシューティング方法について説明します。
関数インスタンスの起動に失敗しました
例:
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 bootstrap、chmod 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が報告されないことがあります。 このような場合、エラーログに基づいてエラーをトラブルシューティングする必要があります。起動コマンドで指定したファイルが存在しない場合に, 異なるプログラミング言語で返されるエラーメッセージについて説明します。
無効なファイル形式
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を追加する必要があります。 詳細については、「コードパッケージのコンパイルとデプロイ」をご参照ください。
一般的な終了コード
次のセクションでは、他の一般的な終了コードについて説明します。
終了コード137
プログラムはSIGKILLを受け取り、例外的に終了します。 ほとんどの場合、この問題は
OOMKilled(Out of Memory)によって発生します。 この場合、関数のメモリ設定をアップグレードできます。
追加情報
このトピックに記載されていないエラーが発生した場合は、「カスタムランタイムFAQ」をご参照ください。