■ はじめに
https://dk521123.hatenablog.com/entry/2020/01/16/205331
が長くなり、別ケースの例外メッセージもあったので分冊。 今回は、boto3 AWS Glue API の trigger全般 のトラブルを纏める
目次
【1】create_trigger() コール時に例外が発生する 【2】create_trigger() コール時に例外「State cannnot be null or empty」が発生する 【3】get_trigger() 実行時 に例外「ThrottlingException」が発生する
【1】create_trigger() コール時に例外が発生する
create_trigger() を使用した際に、以下の「エラー内容」が表示された
エラー内容
Case1
botocore.exceptions.ClientError: An error occurred (InternalError) when calling the CreatTrigger operation (reached max retries: 4): ... 略 ... TypeError: __init__() missing 1 required positional arguments: 'operation_name'
Case2
An error occurred (EntityNotFoundException) when calling the CreateTrigger operation: Entity not found
原因
create_trigger() の WorkflowName (関連付けるワークフロー名)の指定の仕方が間違っていた (めちゃくちゃはまった。。。)
サンプル抜粋
response = client.create_trigger( Name='sample_trigger', WorkflowName='sample_workflow', # ★ここのワークフロー名が存在しない名前を指定していた★ ....
解決策
WorkflowName を正しい指定にした
【2】create_trigger() コール時に例外「State cannnot be null or empty」が発生する
Crawlerイベント設定において、 create_trigger() コール時に以下の「エラー内容」が発生した。 例外には「State cannnot be null or empty」と記載されているが、 設定には、「State: 'SUCCEEDED'」が記載されている。
エラーが発生したYAMLファイル
Name: 'sample-trigger-for-crawler' Description: 'This is a sample trigger for a crawler' WorkflowName: 'sample-workflow' Type: 'CONDITIONAL' Predicate: Logical: 'ANY' Conditions: - LogicalOperator: 'EQUALS' CrawlerName: 'sample-crawler' State: 'SUCCEEDED' Actions: - JobName: 'sample-job' Arguments: --success_param: '0' StartOnCreattion: True Tags: Name: 'sample-trigger-for-crawler'
エラー内容
An error occurred (InvalidInputException) when calling the CreateTrigger operation: State cannnot be null or empty, choose from one of the following crawler state: [SUCCEEDED, FAILED, CANCELLED]
原因
State: 'SUCCEEDED' ではなく CrawlState: 'SUCCEEDED' だった
対応策
パラメータを修正
エラーが発生したYAMLファイル
Name: 'sample-trigger-for-crawler' Description: 'This is a sample trigger for a crawler' WorkflowName: 'sample-workflow' Type: 'CONDITIONAL' Predicate: Logical: 'ANY' Conditions: - LogicalOperator: 'EQUALS' CrawlerName: 'sample-crawler' CrawlState: 'SUCCEEDED' Actions: - JobName: 'sample-job' Arguments: --success_param: '0' StartOnCreattion: True Tags: Name: 'sample-trigger-for-crawler'
【3】get_trigger() 実行時 に例外「ThrottlingException」が発生する
エラー内容
An error occurred (ThrottlingException) when calling the GetTrigger operation (reached max retries: 4): Rate exceeded
原因
ThrottlingException は、APIコールレートの上限を超過した場合に発生する。 (なので、『(reached max retries: 4): Rate exceeded』って書いてある)
対応策
リトライする。(以下のサンプルを参照)
サンプル
import boto3 try: from botocore.exceptions import BotoCoreError, ClientError except ImportError: pass MAX_RETRY_COUNT = 20 WAIT_TIME_FOR_RETRY = 15 def has_trigger(glue_client, trigger_name, retry_count=1): has_workflow = False try: response = glue_client.get_trigger( Name=trigger_name) has_workflow = True except(BotoCoreError, ClientError) as ex: error_code = ex.response['Error']['Code'] if error_code == 'EntityNotFoundException': has_workflow = False elif error_code == 'ThrottlingException': if retry_count < MAX_RETRY_COUNT: print("Throttling Exception Occured. Attempt No.: " + str(tries)) time.sleep(WAIT_TIME_FOR_RETRY) return has_trigger(glue_client, trigger_name, retry_count + 1) else: print("Attempted {} Times But No Success.".format(MAX_RETRY_COUNT)) raise ex else: raise ex if __name__ == '__main__': glue_client = boto3.client('glue') target_trigger_name = 'YOUR_TRIGGER_NAME' print('Exists the trigger [{}] : [{}]'.format( target_trigger_name, has_trigger(glue_client, target_trigger_name)))
参考文献
https://stackoverflow.com/questions/30104286/throttlingexception-aws-api
関連記事
boto3 AWS Glue API のトラブル ~ scheduled trigger編 ~
https://dk521123.hatenablog.com/entry/2020/01/16/205331
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ Boto3 / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/14/000000
AWS Glue ~ Boto3 / 基本編 ~
https://dk521123.hatenablog.com/entry/2021/04/17/001930
AWS Glue ~ Boto3 / クローラ編 ~
https://dk521123.hatenablog.com/entry/2021/04/16/135558
boto3 AWS Glue API のトラブル ~ scheduled trigger編 ~
https://dk521123.hatenablog.com/entry/2020/01/16/205331
boto3 AWS Glue API のトラブル ~ job/crawler編 ~
https://dk521123.hatenablog.com/entry/2020/02/05/223307
AWS Glue のトラブル ~ job編 - [1] ~
https://dk521123.hatenablog.com/entry/2019/10/25/232155
AWS Glue のトラブル ~ job編 - [2] ~
https://dk521123.hatenablog.com/entry/2020/10/12/152659
AWS Glue のトラブル ~ job編 - [3] ~
https://dk521123.hatenablog.com/entry/2021/02/16/145848
AWS Glue のトラブル ~ crawler編 ~
https://dk521123.hatenablog.com/entry/2020/05/07/144132