このトピックでは、カスタムランタイムで発生する一般的なエラーとそのトラブルシューティング方法について説明します。
関数インスタンスの起動失敗
エラー
The function cannot be started. Failed to start function instance. Error: the file /code/bootstrap is not exist考えられる原因とトラブルシューティング方法
関数インスタンスの起動に失敗する場合、起動コマンドに例外が発生したか、起動コマンドが存在しないことが原因として考えられます。
デフォルトでは、起動コマンドが指定されていない場合、Function Compute は
/code/bootstrapを使用します。コードパッケージに /code/bootstrap ファイルが含まれていない場合は、/code/bootstrapスクリプトをコードパッケージに追加するか、起動コマンドを変更してください。起動コマンドが指定されている場合は、/code/bootstrap ファイルが存在するかどうかを確認してください。
起動コマンドの設定方法については、「関数の作成」をご参照ください。
関数インスタンスのヘルスチェックの失敗
エラー
Function instance health check failed on port 9001 in 120 seconds.\nLogs:考えられる原因とトラブルシューティング方法
関数インスタンスがヘルスチェックに失敗する場合、コードでリスナーに指定された IP アドレスまたはポートが正しくないことが原因として考えられます。関数インスタンスが起動した後、Function Compute プラットフォームは IP ポートの接続性をチェックします。タイムアウト期間内に接続性チェックの結果が返されない場合、Function instance health check failed エラーが返されます。
リスナーに指定する IP アドレスとポートは、次の要件を満たす必要があります。
IP アドレス
リスナーの IP アドレスを
0.0.0.0または*に指定します。コード内で IP アドレスを127.0.0.0またはlocalhostに設定しないことを推奨します。ポート
リスナーに指定するポートは、Function Compute インスタンスで設定されたリスナーポートと同じである必要があります。カスタムランタイムのデフォルトのリスナーポートは
9000です。デフォルトのリスナーポートを使用する場合は、コード内で HTTP サーバーがリッスンするポートが
9000であることを確認してください。Function Compute インスタンスでリスナーポートを指定した場合は、コード内で HTTP サーバーがリッスンするポートが、指定したリスナーポートと同じであることを確認してください。
リスナーポートについては、「関数の作成」をご参照ください。
関数インスタンスプロセスの予期せぬ終了
エラー
Function instance exited unexpectedly(code 2, message:no such file or directory) with start command '/code/bootstrap '.
Logs:Function instance exited unexpectedlyは、関数インスタンスの起動プロセスが予期せず終了したことを示します。code 2, message:no such file or directoryは、起動プロセスの Linux 終了コードとその意味を示します。with start command '/code/bootstrap 'は、関数インスタンスの起動コマンドを示します。
プロセスの Linux 終了コードとその意味は参考情報です。エラーログでプロセスが終了した原因を特定してください。
考えられる原因とトラブルシューティング方法
起動コマンドが実行可能でない
The function cannot be started. Function instance exited unexpectedly(code 13, message:permission denied) with start command '/code/bootstrap '.インスタンスの起動コマンドが実行可能でない場合、エラーメッセージの終了コードは
code 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起動コマンドで指定したファイルが存在しない場合、エラーメッセージの終了コードは
code 2, message:no such file or directoryとなります。場合によっては、エラーメッセージの終了コードがcode 2, message:no such file or directoryでなかったり、終了コードがエラーメッセージに含まれていなかったりすることがあります。この場合は、エラーログに基づいてエラーをトラブルシューティングする必要があります。次のセクションでは、起動コマンドで指定したファイルが存在しない場合に、さまざまなプログラミング言語で返されるエラーメッセージについて説明します。
ファイル形式が無効
Function instance exited unexpectedly(code 8, message:exec format error) with start command '/code/bootstrap '. Logs:カスタムランタイムは 64 ビット x86 Linux システムで実行されます。起動ファイルがシステムでサポートされていることを確認してください。起動コマンドがシェルスクリプトの場合、ファイルが Linux でサポートされている形式であり、シェルシバン
#!が含まれていることを確認してください。起動コマンドがバイナリ実行可能ファイルの場合、ファイルが Linux オペレーティングシステムと互換性のある実行可能およびリンク可能フォーマット (ELF) ファイルであることを確認してください。次のセクションでは、ファイル形式のエラーについて説明します。起動コマンドのシェルシバンでエラーが発生する
シェルスクリプトにシバンが含まれていないか、シバンの内容が正しくない場合、インスタンスの終了コードは
8 exec format errorとなります。この場合、シェルスクリプトの最初の行に正しいシバンを追加する必要があります。スクリプトを bash ファイルとして実行する場合は、シェルスクリプトの最初の行に
#!/usr/bin/env bashコマンドまたは#!/bin/bashコマンドを追加します。#!/usr/bin/env bashコマンドを追加することを推奨します。カスタムランタイム環境では、/bin/shは/bin/bashと同等です。シェルスクリプトの最初の行に#!/usr/bin/env shコマンドまたは#!/bin/shコマンドを追加することもできます。起動コマンドのシェルスクリプトが Windows OS 向けである
次のテストスクリプトを実行します。
#!/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があることを示します。UNIX OS では、行末は\nで表されます。Windows OS では、行末は\r\nで表されます。提供されたスクリプトは Windows OS 向けの形式です。Windows OS でスクリプトを作成した場合、UNIX OS と互換性のある形式に変換する必要があります。Linux OS で
dos2unixコマンドを実行するか、Function Compute の WebIDE 機能を使用してスクリプトを変換できます。詳細については、「Function Compute の Web IDE 機能を使用してファイル形式を変換する方法」をご参照ください。起動コマンドが Linux OS と互換性のないバイナリ実行可能ファイルである
起動コマンドが実行可能ファイルの場合、そのファイルが Linux OS と互換性のある ELF ファイルであることを確認してください。たとえば、M1 チップを搭載した Mac コンピューターで、デフォルト構成の
GOOS=darwin GOARCH=arm64を使用して Golang コードをコンパイルし、パッケージ化されたコードをテストすると、次のエラーメッセージが返されます。Function instance exited unexpectedly(code 8, message:exec format error) with start command './main '. Logs:インスタンスの終了コードは
8 exec format errorであり、ファイル形式が無効であることを示します。コードをコンパイルする際に、GOOS=linux GOARCH=amd64構成を追加する必要があります。詳細については、「コードパッケージのコンパイルとデプロイ」をご参照ください。
一般的な終了コード
次のセクションでは、その他の一般的な終了コードについて説明します。
終了コード 137
ほとんどの場合、この終了コードはメモリ不足を示す
OOMKilled(Out of Memory)エラーが原因で返されます。この場合、関数のメモリ構成をスペックアップできます。
補足情報
このトピックに記載されていないエラーが発生した場合は、「カスタムランタイムのよくある質問」をご参照ください。