データ変換エンジンの起動に失敗する場合、通常は SLS DSL ルールに、エンジンのセキュリティチェックを通過しないエラーが含まれています。このトピックでは、最も一般的な起動エラーとその修正方法について説明します。
データ変換エンジンは、各変換タスクの開始時に SLS DSL ルールのセキュリティチェックを実行します。チェックに失敗すると、エンジンは起動しません。
エラーログ
エンジンが起動時にエラーを検出すると、次の形式のメッセージが返されます。
{
"errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
エラーログは、データ変換診断レポートの例外の詳細セクション、または internal-etl-log Logstore で確認できます。
起動エラーが発生すると、タスクは成功するまで、または手動で停止されるまで継続的にリトライされます。
処理ルールを修正すると、次回のリトライ時にタスクが成功し、正常な動作を再開します。ログの損失や重複は発生しません。
一般的なエラーのトラブルシューティング
-
基本的な構文エラー
このエラーは、処理ルールが SLS DSL の文法に違反している場合に発生します。例えば、括弧の不一致や、コンマ (
,) の代わりにコロン (:) を使用した場合などです。-
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax" } { "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing" } -
トラブルシューティング
エラーログの
traceback情報を使用して、構文エラーの正確な場所を特定します。 たとえば、e_set("test", v("status"))の代わりにe_set("test": v("status"))が使用されると、次のエラーが発生します。__source__: 172.20.3.124 __tag__:__job_name__: etl-preview-1563260078-834525 __tag__:__schedule_type__: DryRun __topic__: event_id : transform_data:init:fail logging : {"processName": "MainProcess", "threadName": "MainThread", "thread": "140462572971840", "funcName": "transform_data", "process": "1", "module": "logclient_operator", "levelname": "ERROR"} message : ETL config doesn't pass security check, detail: invalid syntax (<unknown>, line 5) Traceback (most recent call last): File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 100, in security_check_config RestrictConfigParser().parse(code) File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 88, in parse self.visit(ast.parse(code)) File "/usr/local/lib/python3.7/ast.py", line 35, in parse return compile(source, filename, mode, PyCF_ONLY_AST) File "<unknown>", line 5 TRANSFORM_ANY_1563260645 = e_set("test": v("status")) SyntaxError: invalid syntax reason : ETL config doesn't pass security check, detail: invalid syntax (<unknown>, line 5)
-
-
演算子の不適切な使用
SLS DSL では、数値計算や比較を含むすべての操作で、
op_*で始まる組み込み関数などを使用する必要があります。標準的な演算子を直接使用することは許可されていません。-
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> " } -
トラブルシューティング
SLS DSL 処理ルールを確認し、演算子を直接使用している箇所を、同等の SLS DSL 組み込み関数に置き換えてください。
-
例
e_set("b", v("a") - 10) # 誤った例 e_set("b", op_sub(v("a"), 10)) # 正しい例 e_set("b", v("a") >= v("c")) # 誤った例 e_set("b", op_ge(v("a"), v("c"))) # 正しい例
-
-
パラメータータイプの誤りまたは存在しない関数の呼び出し
このエラーは、引数のデータ型が、関数で期待されるパラメータータイプと一致しない場合や、存在しない関数を呼び出した場合に発生します。
-
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name" } -
トラブルシューティング
関数が存在し、その名前のスペルが正しいことを確認してください。名前が正しい場合は、引数のデータ型が正しいことを確認してください。
-
エラーログの
traceback情報を使用して、エラーの原因となった関数を特定します。たとえば、エラーがdt_totimestamp関数から発生した場合、まずその関数が存在することを確認します。次に、dt_totimestampが呼び出されているルールを確認し、正しいパラメーターの型を渡していることを確認します。File "/usr/local/lib/python3.7/ast.py", line 262, in visit return visitor(node) File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 50, in visit_Call raise InvalidETLConfig("invalid call id detected: {}".format(node.func.id)) aliyunlogetl_common.core.restrict_config_parser.InvalidETLConfig: invalid call id detected: dt_totimestamp reason : ETL config doesn't pass security check, detail: invalid call id detected: dt_totimestamp
-
例
dt_totimestamp関数は datetime オブジェクトを想定しています。この場合、v("time1")は文字列を返すため、型不一致エラーが発生します。これを修正するには、
dt_parseを使用して文字列を datetime オブジェクトに変換してからdt_totimestampに渡します。または、文字列を引数として直接受け入れるdt_parsetimestampを使用します。# 誤った例 e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(v("time1"))) # 正しい例 e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(dt_parse(v("time1")))) # 正しい例 e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_parsetimestamp(v("time1")))
-
-
式関数のグローバルオペレーションとしての呼び出し
SLS DSL には、グローバルオペレーション関数と式関数の 2 種類の関数があります。処理ルールの独立したステップとして呼び出せるのは、グローバルオペレーション関数のみです。式関数をグローバルオペレーションとして直接呼び出すとエラーが発生します。
-
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>" } -
トラブルシューティング
処理ルールを確認し、式関数が独立したグローバルオペレーションとして呼び出されていないことを確認してください。
e_setなどのグローバルオペレーション関数でラップしてください。 -
例
# 誤った例 op_add(v("a"), v("b")) str_lower(v("name")) # 正しい例 e_set("add", op_add(v("a"), v("b"))) e_set("lower", str_lower(v("name")))
-
-
不正な変数割り当て
SLS DSL は変数割り当てをサポートしていません。関数間で値をステートレスに渡してください。
-
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name" } -
トラブルシューティング
SLS DSL 処理ルールに変数割り当てが含まれていないか確認してください。
エラーログ内の
traceback情報を使用して、エラーが発生した行を特定します。
-
例
# 誤った例 sum_value = op_add(v("a"), v("b")) e_set("sum", sum_value) # 正しい例 e_set("sum", op_add(v("a"), v("b")))
-