問題の説明
トリガーは関数の実行をトリガーできません。
考えられる原因
考えられる原因は次のとおりです。
トリガーイベントが正常に生成されません。
関数の実行をトリガーするためのルールは満たされません。
トリガーに設定されたロールが正しくありません。
解決策
解決策1: トリガーイベントが生成されたかどうかを確認する
OSSトリガー
たとえば、オブジェクトがobject Storage Service (OSS) にアップロードされた後に関数をトリガーするように指定した場合、次の手順を実行して問題をトラブルシューティングします。
オブジェクトが対応するバケットにアップロードされているかどうかを確認します。
オブジェクトが正しくアップロードされている場合は、Function Computeで対応する実行ログを確認します。
実行ログが見つかった場合、関数がトリガーされます。 この場合、機能が失敗した可能性があります。 ログに基づいてコードをデバッグする必要があります。
実行ログが見つからない場合、関数はトリガーされません。 この場合、トリガールールが満たされているかどうかを確認します。 詳細については、「解決策2: トリガールールが満たされているかどうかを確認する」をご参照ください。
ファイルがアップロードされていない場合は、ファイルをアップロードします。
シンプルなLog Serviceトリガー
Simple Log Serviceのトリガーで関数の実行に失敗した場合、次の手順を実行して問題のトラブルシューティングを行うことができます。
トリガーに関連付けられたLogstoreで増分データの変更が発生したかどうかを確認します。 シャードデータが変更されると、関連付けられた関数がトリガーされます。
関数の実行ログで例外を確認します。
解決策2: トリガールールが満たされているかどうかを確認する
以下の項目は、いくつかの一般的なトリガールールの例です。
時間トリガー
トリガー方法と時間システムを確認してください。 トリガーで使用されている時間システムを確認する必要があります。 トリガーメソッドをカスタムのCRON式に設定した場合、デフォルトでは協定世界時 (UTC) 時間が使用されます。 詳細については、「手順1: タイムトリガーの作成」をご参照ください。
CRON式を0 0 4 * * に設定した場合、関数は毎日04:00 (UTC + 0) または12:00 (UTC + 8) にトリガーされます。
CRON式をCRON_TZ=Asia/Shanghai 0 0 4 1 * * に設定した場合、関数は毎月1日の04:00 (UTC + 8) にトリガーされます。
OSSトリガー
関数と関連付けられたOSSバケットは、同じリージョンに存在する必要があります。
アップロードされるオブジェクトのプレフィックスまたはサフィックスは、トリガー用に設定したオブジェクトのプレフィックスまたはサフィックスと同じである必要があります。
たとえば、オブジェクトのプレフィックスをabに設定し、a/b.zip、ab.zip、abc.zipをOSSにアップロードすると、ab.zipとabc.zipのみが関数の実行をトリガーできます。
OSSイベントは、設定されたトリガーイベントとまったく同じである必要があります。 それ以外の場合、関数の実行はトリガーできません。 次の項目は、OSSイベントがトリガーイベントと一致しない場合を示しています。
ossbrowserとマルチパートアップロードを使用してオブジェクトをアップロードします。 アップロード後、イベントは
oss:ObjectCreated:CompleteMultipartUpload
になります。 設定したトリガーイベントがoss:ObjectCreated:PutObject
またはoss:ObjectCreated:PostObject
の場合、関数の実行はトリガーできません。コンソールを使用してオブジェクトをアップロードするイベントは
oss:ObjectCreated:PostObject
ですが、設定したトリガーイベントはoss:ObjectCreated:PutObject
です。oss:ObjectCreated:PutObject
操作を呼び出してファイルをアップロードするイベントはoss:ObjectCreated:PutObject
ですが、設定したトリガーイベントはoss:ObjectCreated:PostObject
です。 どちらの場合も、関数の実行はトリガーできません。
OSSでバージョン管理が有効になっているバケットからオブジェクトを削除する場合は、バージョンIDを指定する必要があります。
ossbrowserを使用してオブジェクトを削除するときにバージョンIDを指定しない場合、
oss:ObjectRemoved:DeleteObject
またはoss:ObjectRemoved:DeleteObjects
イベントはトリガーされません。 オブジェクトの現在のバージョンが以前のバージョンになり、削除マーカーが追加されます。 詳細については、「FAQ」をご参照ください。EventBridgeベースのOSSトリガーは、作成後30秒で有効になります。
Tablestoreトリガー
Tablestoreインスタンスのデータテーブルのストリーム機能を有効にする必要があります。 詳細については、「Function Computeの使用」トピックの「手順1: データテーブルのストリーム機能の有効化」セクションを参照してください。
解決策3: トリガーの役割が正しいかどうかを確認する
トリガー用に設定したロールが削除されているかどうか、またはロールに必要な権限があるかどうかを確認します。 トリガーの標準ロールを設定することを推奨します。
OSSトリガーの場合、
AliyunOSSEventNotificationRole
ロールを設定します。 詳細については、「ネイティブOSSトリガーの設定」をご参照ください。Tablestoreトリガーの場合、
AliyunTableStoreStreamNotificationRole
ロールを設定します。 詳細については、「手順2: Tablestoreトリガーの作成」をご参照ください。
関連ドキュメント
アップロードしたオブジェクトが関数を複数回トリガーする場合は、関数のトリガーイベントを再設定する必要があります。 詳細については、「オブジェクトがOSSにアップロードされたときに関数が複数回トリガーされた場合はどうすればよいですか? 」をご参照ください。