From 74d9d8b248ef8f467db50e6d0ee1a60a52e1d566 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 20 May 2022 22:07:55 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=9C=88=E6=AC=A1I/F=E5=8F=97=E9=A0=98=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ambda-sap-fin-monthly-data-notice-daily.py | 152 ++++++++++++++++++ ...ambda-sap-sup-monthly-data-notice-daily.py | 152 ++++++++++++++++++ 2 files changed, 304 insertions(+) create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py new file mode 100644 index 00000000..64949289 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py @@ -0,0 +1,152 @@ +import os +import datetime +import boto3 +import io +import re +import sys + +# 環境変数 +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] +MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] +MAIL_BODY_REPLACE_SYMBOL = os.environ["MAIL_BODY_REPLACE_SYMBOL"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] + +# 定数 +ROW_COMMENT_SYMBOL = '#' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') +mail_msg = '' + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + info_log('I-01-01', '処理開始 SAP_finデータ月次I/F受領通知処理') + today = datetime.date.today().strftime('%Y/%m/%d') + info_log('I-01-02', f'処理稼働日:{today}') + + # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する + info_log('I-02-01', 'SAPデータ復号処理開始') + + s3_event = event["Records"][0]["s3"] + event_bucket_name = s3_event["bucket"]["name"] + event_file_path = s3_event["object"]["key"] + event_file_name = os.path.basename(event_file_path) + event_data_source_name = os.path.dirname(event_file_path).split('/')[0] + info_log('I-02-02', f'バケット名:{event_bucket_name}') + info_log('I-02-03', f'ファイルパス:{event_file_path}') + info_log('I-02-04', f'データソース名:{event_data_source_name}') + + # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む + try: + info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) + receive_monthly_file_name_response = receive_monthly_file_name_obj.get() + info_log('I-03-02', '日次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + error_log('E-03-01', '日次I/Fファイルネーム設定ファイルの読み込みに失敗しました') + error_process('E-03-01', e) + + # ④ 月次I/Fファイル受領通知処理を行う + info_log('I-04-01', '月次I/Fファイル受領通知処理開始') + + info_log('I-04-02', f'受領したファイル名:{event_file_name}') + info_log('I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + file_exsit = False + for row in io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): + match_result = re.fullmatch(row[0], event_file_name) + if match_result is not None: + file_exsit = True + break + if file_exsit == True: + info_log('I-04-04', '月次I/Fを受領しました') + mail_msg = f'  {row[1]} {event_file_name}\n' + else: + info_log('I-04-05', '受領したファイルは月次I/Fではありませんでした') + + # ⑤ メール通知本文に出力内容が存在するか確認する + info_log('I-05-01', 'メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + info_log('I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') + + try: + info_log('I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) + mail_title = mail_title_obj['Body'].read().decode('utf-8') + info_log('I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + error_log('E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') + error_process('E-05-01', e) + + try: + info_log('I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) + mail_body_response = mail_body_obj['Body'].read().decode('utf-8') + mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) + info_log('I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + error_log('E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') + error_process('E-05-02', e) + + info_log('I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + params = { + 'TopicArn': MBJ_SAP_NOTICE_TOPIC, + 'Subject': mail_title, + 'Message': mail_body + } + sns_client.publish(**params) + info_log('I-05-08', 'メール送信指示をしました') + else: + # 2.存在しない場合 + info_log('I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + info_log('I-06-01', '処理終了 SAP_finデータ月次I/F受領通知処理') + except Exception as e: + error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def info_log(log_id, msg): + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info {log_id} {msg}') + except Exception as e: + error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def error_log(log_id, msg): + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error {log_id} {msg}') + except Exception as e: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def error_process(error_log_id, exception): + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') + sys.exit() + except Exception as e: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + sys.exit() diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py new file mode 100644 index 00000000..0f1612bc --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py @@ -0,0 +1,152 @@ +import os +import datetime +import boto3 +import io +import re +import sys + +# 環境変数 +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ["NOTICE_MAIL_TITLE_TEMPLATE_PATH"] +NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ["NOTICE_MAIL_BODY_TEMPLATE_PATH"] +MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] +MAIL_BODY_REPLACE_SYMBOL = os.environ["MAIL_BODY_REPLACE_SYMBOL"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] + +# 定数 +ROW_COMMENT_SYMBOL = '#' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') +mail_msg = '' + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + info_log('I-01-01', '処理開始 SAP_supデータ月次I/F受領通知処理') + today = datetime.date.today().strftime('%Y/%m/%d') + info_log('I-01-02', f'処理稼働日:{today}') + + # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する + info_log('I-02-01', 'SAPデータ復号処理開始') + + s3_event = event["Records"][0]["s3"] + event_bucket_name = s3_event["bucket"]["name"] + event_file_path = s3_event["object"]["key"] + event_file_name = os.path.basename(event_file_path) + event_data_source_name = os.path.dirname(event_file_path).split('/')[0] + info_log('I-02-02', f'バケット名:{event_bucket_name}') + info_log('I-02-03', f'ファイルパス:{event_file_path}') + info_log('I-02-04', f'データソース名:{event_data_source_name}') + + # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む + try: + info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) + receive_monthly_file_name_response = receive_monthly_file_name_obj.get() + info_log('I-03-02', '日次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + error_log('E-03-01', '日次I/Fファイルネーム設定ファイルの読み込みに失敗しました') + error_process('E-03-01', e) + + # ④ 月次I/Fファイル受領通知処理を行う + info_log('I-04-01', '月次I/Fファイル受領通知処理開始') + + info_log('I-04-02', f'受領したファイル名:{event_file_name}') + info_log('I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + file_exsit = False + for row in io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): + match_result = re.fullmatch(row[0], event_file_name) + if match_result is not None: + file_exsit = True + break + if file_exsit == True: + info_log('I-04-04', '月次I/Fを受領しました') + mail_msg = f'  {row[1]} {event_file_name}\n' + else: + info_log('I-04-05', '受領したファイルは月次I/Fではありませんでした') + + # ⑤ メール通知本文に出力内容が存在するか確認する + info_log('I-05-01', 'メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + info_log('I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') + + try: + info_log('I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) + mail_title = mail_title_obj['Body'].read().decode('utf-8') + info_log('I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + error_log('E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') + error_process('E-05-01', e) + + try: + info_log('I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) + mail_body_response = mail_body_obj['Body'].read().decode('utf-8') + mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) + info_log('I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + error_log('E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') + error_process('E-05-02', e) + + info_log('I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + params = { + 'TopicArn': MBJ_SAP_NOTICE_TOPIC, + 'Subject': mail_title, + 'Message': mail_body + } + sns_client.publish(**params) + info_log('I-05-08', 'メール送信指示をしました') + else: + # 2.存在しない場合 + info_log('I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + info_log('I-06-01', '処理終了 SAP_supデータ月次I/F受領通知処理') + except Exception as e: + error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def info_log(log_id, msg): + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info {log_id} {msg}') + except Exception as e: + error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def error_log(log_id, msg): + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error {log_id} {msg}') + except Exception as e: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def error_process(error_log_id, exception): + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') + sys.exit() + except Exception as e: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + sys.exit() From 47e53205acde4f3a209bf89c4362d5255ff0a656 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:57:54 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E6=9C=88?= =?UTF-8?q?=E6=AC=A1I/F=E5=8F=97=E9=A0=98=E9=80=9A=E7=9F=A5=E5=87=A6?= =?UTF-8?q?=E7=90=86=20=E4=B8=8B=E7=94=B0=E3=81=95=E3=82=93=E6=8C=87?= =?UTF-8?q?=E6=91=98=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ambda-sap-fin-monthly-data-notice-daily.py | 101 +++++++++--------- ...ambda-sap-sup-monthly-data-notice-daily.py | 101 +++++++++--------- 2 files changed, 96 insertions(+), 106 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py index 64949289..13453ae1 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py @@ -4,6 +4,7 @@ import boto3 import io import re import sys +import csv # 環境変数 CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] @@ -16,127 +17,121 @@ NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] # 定数 -ROW_COMMENT_SYMBOL = '#' +LOG_INFO = 'Info' +LOG_ERROR = 'Error' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 # 変数 s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') -mail_msg = '' def lambda_handler(event, context): try: # ① 処理開始ログを出力する - info_log('I-01-01', '処理開始 SAP_finデータ月次I/F受領通知処理') + print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_finデータ月次I/F受領通知処理') today = datetime.date.today().strftime('%Y/%m/%d') - info_log('I-01-02', f'処理稼働日:{today}') + print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') + mail_msg = '' # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - info_log('I-02-01', 'SAPデータ復号処理開始') - + print_log(LOG_INFO, 'I-02-01', 'イベント情報出力処理') s3_event = event["Records"][0]["s3"] event_bucket_name = s3_event["bucket"]["name"] event_file_path = s3_event["object"]["key"] event_file_name = os.path.basename(event_file_path) event_data_source_name = os.path.dirname(event_file_path).split('/')[0] - info_log('I-02-02', f'バケット名:{event_bucket_name}') - info_log('I-02-03', f'ファイルパス:{event_file_path}') - info_log('I-02-04', f'データソース名:{event_data_source_name}') + print_log(LOG_INFO, 'I-02-02', f'バケット名:{event_bucket_name}') + print_log(LOG_INFO, 'I-02-03', f'ファイルパス:{event_file_path}') + print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む try: - info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + print_log(LOG_INFO, 'I-03-01', f'月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = receive_monthly_file_name_obj.get() - info_log('I-03-02', '日次I/Fファイルネーム設定ファイルを読み込みました') + print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - error_log('E-03-01', '日次I/Fファイルネーム設定ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-03-01', '月次I/Fファイルネーム設定ファイルの読み込みに失敗しました') error_process('E-03-01', e) # ④ 月次I/Fファイル受領通知処理を行う - info_log('I-04-01', '月次I/Fファイル受領通知処理開始') - - info_log('I-04-02', f'受領したファイル名:{event_file_name}') - info_log('I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - file_exsit = False - for row in io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): - match_result = re.fullmatch(row[0], event_file_name) + print_log(LOG_INFO, 'I-04-01', '月次I/Fファイル受領通知処理開始') + print_log(LOG_INFO, 'I-04-02', f'受領したファイル名:{event_file_name}') + print_log(LOG_INFO, 'I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + file_exists = False + receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') + for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): + match_result = re.fullmatch(row[INDEX_REGEX], event_file_name) if match_result is not None: - file_exsit = True + file_exists = True break - if file_exsit == True: - info_log('I-04-04', '月次I/Fを受領しました') - mail_msg = f'  {row[1]} {event_file_name}\n' + if file_exists == True: + print_log(LOG_INFO, 'I-04-04', f'月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') + mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]} {event_file_name}\n' else: - info_log('I-04-05', '受領したファイルは月次I/Fではありませんでした') + print_log(LOG_INFO, 'I-04-05', '受領したファイルは月次I/Fではありませんでした') - # ⑤ メール通知本文に出力内容が存在するか確認する - info_log('I-05-01', 'メール送信処理開始') + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - info_log('I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') + print_log(LOG_INFO, 'I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') try: - info_log('I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) mail_title = mail_title_obj['Body'].read().decode('utf-8') - info_log('I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - error_log('E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') error_process('E-05-01', e) try: - info_log('I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + print_log(LOG_INFO, 'I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) mail_body_response = mail_body_obj['Body'].read().decode('utf-8') mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) - info_log('I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') + print_log(LOG_INFO, 'I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - error_log('E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') error_process('E-05-02', e) - info_log('I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, 'Subject': mail_title, 'Message': mail_body } sns_client.publish(**params) - info_log('I-05-08', 'メール送信指示をしました') + print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') else: # 2.存在しない場合 - info_log('I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + print_log(LOG_INFO, 'I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - info_log('I-06-01', '処理終了 SAP_finデータ月次I/F受領通知処理') + print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_finデータ月次I/F受領通知処理') except Exception as e: - error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') error_process('E-99', e) -def info_log(log_id, msg): +def print_log(log_level, log_id, msg): try: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info {log_id} {msg}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') except Exception as e: - error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) - - -def error_log(log_id, msg): - try: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error {log_id} {msg}') - except Exception as e: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') error_process('E-99', e) def error_process(error_log_id, exception): try: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -145,8 +140,8 @@ def error_process(error_log_id, exception): } sns_client.publish(**params) - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') sys.exit() except Exception as e: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') sys.exit() diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py index 0f1612bc..b64d2039 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py @@ -4,6 +4,7 @@ import boto3 import io import re import sys +import csv # 環境変数 CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] @@ -16,127 +17,121 @@ NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] # 定数 -ROW_COMMENT_SYMBOL = '#' +LOG_INFO = 'Info' +LOG_ERROR = 'Error' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 # 変数 s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') -mail_msg = '' def lambda_handler(event, context): try: # ① 処理開始ログを出力する - info_log('I-01-01', '処理開始 SAP_supデータ月次I/F受領通知処理') + print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_supデータ月次I/F受領通知処理') today = datetime.date.today().strftime('%Y/%m/%d') - info_log('I-01-02', f'処理稼働日:{today}') + print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') + mail_msg = '' # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - info_log('I-02-01', 'SAPデータ復号処理開始') - + print_log(LOG_INFO, 'I-02-01', 'イベント情報出力処理') s3_event = event["Records"][0]["s3"] event_bucket_name = s3_event["bucket"]["name"] event_file_path = s3_event["object"]["key"] event_file_name = os.path.basename(event_file_path) event_data_source_name = os.path.dirname(event_file_path).split('/')[0] - info_log('I-02-02', f'バケット名:{event_bucket_name}') - info_log('I-02-03', f'ファイルパス:{event_file_path}') - info_log('I-02-04', f'データソース名:{event_data_source_name}') + print_log(LOG_INFO, 'I-02-02', f'バケット名:{event_bucket_name}') + print_log(LOG_INFO, 'I-02-03', f'ファイルパス:{event_file_path}') + print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む try: - info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + print_log(LOG_INFO, 'I-03-01', f'月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = receive_monthly_file_name_obj.get() - info_log('I-03-02', '日次I/Fファイルネーム設定ファイルを読み込みました') + print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - error_log('E-03-01', '日次I/Fファイルネーム設定ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-03-01', '月次I/Fファイルネーム設定ファイルの読み込みに失敗しました') error_process('E-03-01', e) # ④ 月次I/Fファイル受領通知処理を行う - info_log('I-04-01', '月次I/Fファイル受領通知処理開始') - - info_log('I-04-02', f'受領したファイル名:{event_file_name}') - info_log('I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - file_exsit = False - for row in io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): - match_result = re.fullmatch(row[0], event_file_name) + print_log(LOG_INFO, 'I-04-01', '月次I/Fファイル受領通知処理開始') + print_log(LOG_INFO, 'I-04-02', f'受領したファイル名:{event_file_name}') + print_log(LOG_INFO, 'I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + file_exists = False + receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') + for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): + match_result = re.fullmatch(row[INDEX_REGEX], event_file_name) if match_result is not None: - file_exsit = True + file_exists = True break - if file_exsit == True: - info_log('I-04-04', '月次I/Fを受領しました') - mail_msg = f'  {row[1]} {event_file_name}\n' + if file_exists == True: + print_log(LOG_INFO, 'I-04-04', f'月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') + mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]} {event_file_name}\n' else: - info_log('I-04-05', '受領したファイルは月次I/Fではありませんでした') + print_log(LOG_INFO, 'I-04-05', '受領したファイルは月次I/Fではありませんでした') - # ⑤ メール通知本文に出力内容が存在するか確認する - info_log('I-05-01', 'メール送信処理開始') + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - info_log('I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') + print_log(LOG_INFO, 'I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') try: - info_log('I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) mail_title = mail_title_obj['Body'].read().decode('utf-8') - info_log('I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - error_log('E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') error_process('E-05-01', e) try: - info_log('I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + print_log(LOG_INFO, 'I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) mail_body_response = mail_body_obj['Body'].read().decode('utf-8') mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) - info_log('I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') + print_log(LOG_INFO, 'I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - error_log('E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') error_process('E-05-02', e) - info_log('I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, 'Subject': mail_title, 'Message': mail_body } sns_client.publish(**params) - info_log('I-05-08', 'メール送信指示をしました') + print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') else: # 2.存在しない場合 - info_log('I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + print_log(LOG_INFO, 'I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - info_log('I-06-01', '処理終了 SAP_supデータ月次I/F受領通知処理') + print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ月次I/F受領通知処理') except Exception as e: - error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') error_process('E-99', e) -def info_log(log_id, msg): +def print_log(log_level, log_id, msg): try: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Info {log_id} {msg}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') except Exception as e: - error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) - - -def error_log(log_id, msg): - try: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error {log_id} {msg}') - except Exception as e: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') error_process('E-99', e) def error_process(error_log_id, exception): try: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -145,8 +140,8 @@ def error_process(error_log_id, exception): } sns_client.publish(**params) - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') sys.exit() except Exception as e: - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') sys.exit() From 71be5be024f87c58f1cb62d6ffd9c67f3ddb4440 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Tue, 24 May 2022 22:42:29 +0900 Subject: [PATCH 3/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E6=9C=88?= =?UTF-8?q?=E6=AC=A1I/F=E5=8F=97=E9=A0=98=E9=80=9A=E7=9F=A5=E5=87=A6?= =?UTF-8?q?=E7=90=86=20=E5=8B=95=E4=BD=9C=E7=A2=BA=E8=AA=8D=E6=99=82?= =?UTF-8?q?=E3=81=AB=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ambda-sap-fin-monthly-data-notice-daily.py | 24 +++++++++---------- ...ambda-sap-sup-monthly-data-notice-daily.py | 24 +++++++++---------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py index 13453ae1..398a56ad 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py @@ -32,8 +32,8 @@ def lambda_handler(event, context): try: # ① 処理開始ログを出力する print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_finデータ月次I/F受領通知処理') - today = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{execute_date}') mail_msg = '' # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する @@ -42,10 +42,8 @@ def lambda_handler(event, context): event_bucket_name = s3_event["bucket"]["name"] event_file_path = s3_event["object"]["key"] event_file_name = os.path.basename(event_file_path) - event_data_source_name = os.path.dirname(event_file_path).split('/')[0] print_log(LOG_INFO, 'I-02-02', f'バケット名:{event_bucket_name}') print_log(LOG_INFO, 'I-02-03', f'ファイルパス:{event_file_path}') - print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む try: @@ -54,8 +52,8 @@ def lambda_handler(event, context): receive_monthly_file_name_response = receive_monthly_file_name_obj.get() print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-03-01', '月次I/Fファイルネーム設定ファイルの読み込みに失敗しました') - error_process('E-03-01', e) + print_log(LOG_ERROR, 'E-03-01', f'月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-03-01', e) # ④ 月次I/Fファイル受領通知処理を行う print_log(LOG_INFO, 'I-04-01', '月次I/Fファイル受領通知処理開始') @@ -87,8 +85,8 @@ def lambda_handler(event, context): mail_title = mail_title_obj['Body'].read().decode('utf-8') print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') - error_process('E-05-01', e) + print_log(LOG_ERROR, 'E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-05-01', e) try: print_log(LOG_INFO, 'I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') @@ -97,8 +95,8 @@ def lambda_handler(event, context): mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) print_log(LOG_INFO, 'I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') - error_process('E-05-02', e) + print_log(LOG_ERROR, 'E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-05-02', e) print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { @@ -116,7 +114,7 @@ def lambda_handler(event, context): print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_finデータ月次I/F受領通知処理') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) + error_exit('E-99', e) def print_log(log_level, log_id, msg): @@ -124,10 +122,10 @@ def print_log(log_level, log_id, msg): print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') except Exception as e: print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) + error_exit('E-99', e) -def error_process(error_log_id, exception): +def error_exit(error_log_id, exception): try: print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py index b64d2039..a9832fe4 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py @@ -32,8 +32,8 @@ def lambda_handler(event, context): try: # ① 処理開始ログを出力する print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_supデータ月次I/F受領通知処理') - today = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{execute_date}') mail_msg = '' # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する @@ -42,10 +42,8 @@ def lambda_handler(event, context): event_bucket_name = s3_event["bucket"]["name"] event_file_path = s3_event["object"]["key"] event_file_name = os.path.basename(event_file_path) - event_data_source_name = os.path.dirname(event_file_path).split('/')[0] print_log(LOG_INFO, 'I-02-02', f'バケット名:{event_bucket_name}') print_log(LOG_INFO, 'I-02-03', f'ファイルパス:{event_file_path}') - print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む try: @@ -54,8 +52,8 @@ def lambda_handler(event, context): receive_monthly_file_name_response = receive_monthly_file_name_obj.get() print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-03-01', '月次I/Fファイルネーム設定ファイルの読み込みに失敗しました') - error_process('E-03-01', e) + print_log(LOG_ERROR, 'E-03-01', f'月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-03-01', e) # ④ 月次I/Fファイル受領通知処理を行う print_log(LOG_INFO, 'I-04-01', '月次I/Fファイル受領通知処理開始') @@ -87,8 +85,8 @@ def lambda_handler(event, context): mail_title = mail_title_obj['Body'].read().decode('utf-8') print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') - error_process('E-05-01', e) + print_log(LOG_ERROR, 'E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-05-01', e) try: print_log(LOG_INFO, 'I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') @@ -97,8 +95,8 @@ def lambda_handler(event, context): mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) print_log(LOG_INFO, 'I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-02', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') - error_process('E-05-02', e) + print_log(LOG_ERROR, 'E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-05-02', e) print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { @@ -116,7 +114,7 @@ def lambda_handler(event, context): print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ月次I/F受領通知処理') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) + error_exit('E-99', e) def print_log(log_level, log_id, msg): @@ -124,10 +122,10 @@ def print_log(log_level, log_id, msg): print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') except Exception as e: print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - error_process('E-99', e) + error_exit('E-99', e) -def error_process(error_log_id, exception): +def error_exit(error_log_id, exception): try: print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') From 68b53f243a3bec1d3f7b961978d801be9f7eb191 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 00:39:03 +0900 Subject: [PATCH 4/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E6=9C=88?= =?UTF-8?q?=E6=AC=A1I/F=E5=8F=97=E9=A0=98=E9=80=9A=E7=9F=A5=E5=87=A6?= =?UTF-8?q?=E7=90=86=20=E3=82=B3=E3=83=BC=E3=83=89=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E9=83=A8=E5=88=86=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ambda-sap-fin-monthly-data-notice-daily.py | 127 ++++++++++-------- ...ambda-sap-sup-monthly-data-notice-daily.py | 127 ++++++++++-------- 2 files changed, 148 insertions(+), 106 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py index 398a56ad..67cab9a8 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py @@ -3,8 +3,9 @@ import datetime import boto3 import io import re -import sys import csv +import logging +from abc import * # 環境変数 CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] @@ -15,50 +16,66 @@ MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] MAIL_BODY_REPLACE_SYMBOL = os.environ["MAIL_BODY_REPLACE_SYMBOL"] NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] # 定数 -LOG_INFO = 'Info' -LOG_ERROR = 'Error' INDEX_REGEX = 0 INDEX_DATA_NAME = 1 +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' + # 変数 s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') +# logger設定 +logger = logging.getLogger() +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +for handler in logger.handlers: + handler.setFormatter(formatter) + +level = logging.getLevelName(LOG_LEVEL) +if not isinstance(level, int): + level = logging.INFO +logger.setLevel(level) + def lambda_handler(event, context): try: # ① 処理開始ログを出力する - print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_finデータ月次I/F受領通知処理') + logger.info('I-01-01 処理開始 SAP_finデータ月次I/F受領通知処理') execute_date = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{execute_date}') + logger.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - print_log(LOG_INFO, 'I-02-01', 'イベント情報出力処理') + logger.info('I-02-01 イベント情報出力処理') s3_event = event["Records"][0]["s3"] event_bucket_name = s3_event["bucket"]["name"] event_file_path = s3_event["object"]["key"] event_file_name = os.path.basename(event_file_path) - print_log(LOG_INFO, 'I-02-02', f'バケット名:{event_bucket_name}') - print_log(LOG_INFO, 'I-02-03', f'ファイルパス:{event_file_path}') + logger.info(f'I-02-02 バケット名:{event_bucket_name}') + logger.info(f'I-02-03 ファイルパス:{event_file_path}') # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む try: - print_log(LOG_INFO, 'I-03-01', f'月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = receive_monthly_file_name_obj.get() - print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') + logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-03-01', f'月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-03-01', e) + logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) # ④ 月次I/Fファイル受領通知処理を行う - print_log(LOG_INFO, 'I-04-01', '月次I/Fファイル受領通知処理開始') - print_log(LOG_INFO, 'I-04-02', f'受領したファイル名:{event_file_name}') - print_log(LOG_INFO, 'I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + logger.info('I-04-01 月次I/Fファイル受領通知処理開始') + logger.info(f'I-04-02 受領したファイル名:{event_file_name}') + logger.info('I-04-03 受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') file_exists = False receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): @@ -67,69 +84,60 @@ def lambda_handler(event, context): file_exists = True break if file_exists == True: - print_log(LOG_INFO, 'I-04-04', f'月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') - mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]} {event_file_name}\n' + logger.info(f'I-04-04 月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]} {event_file_name}\n' else: - print_log(LOG_INFO, 'I-04-05', '受領したファイルは月次I/Fではありませんでした') + logger.info('I-04-05 受領したファイルは月次I/Fではありませんでした') # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') - + logger.info('I-05-01 メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - print_log(LOG_INFO, 'I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') - + logger.info('I-05-02 月次I/Fファイルを受領したため、メール送信処理を開始します') try: - print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) mail_title = mail_title_obj['Body'].read().decode('utf-8') - print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-01', e) + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) try: - print_log(LOG_INFO, 'I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) mail_body_response = mail_body_obj['Body'].read().decode('utf-8') mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) - print_log(LOG_INFO, 'I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-02', e) + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) - print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, 'Subject': mail_title, 'Message': mail_body } sns_client.publish(**params) - print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') + logger.info('I-05-08 メール送信指示をしました') else: # 2.存在しない場合 - print_log(LOG_INFO, 'I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + logger.info('I-05-09 受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_finデータ月次I/F受領通知処理') + logger.info('I-06-01 処理終了 SAP_finデータ月次I/F受領通知処理') + except CustomException as e: + error_notice(e.id, e.arg) except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_exit('E-99', e) + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + error_notice('E-99', e) + return -def print_log(log_level, log_id, msg): +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') - except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - error_exit('E-99', e) - - -def error_exit(error_log_id, exception): - try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') - - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -137,9 +145,22 @@ def error_exit(error_log_id, exception): 'Message': error_msg } sns_client.publish(**params) - - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') - sys.exit() + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - sys.exit() + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + return + + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass + + +class NoneBusinessDayException(CustomException): + pass diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py index a9832fe4..f70893cc 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py @@ -3,8 +3,9 @@ import datetime import boto3 import io import re -import sys import csv +import logging +from abc import * # 環境変数 CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] @@ -15,50 +16,66 @@ MBJ_SAP_NOTICE_TOPIC = os.environ["MBJ_SAP_NOTICE_TOPIC"] MAIL_BODY_REPLACE_SYMBOL = os.environ["MAIL_BODY_REPLACE_SYMBOL"] NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] # 定数 -LOG_INFO = 'Info' -LOG_ERROR = 'Error' INDEX_REGEX = 0 INDEX_DATA_NAME = 1 +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' + # 変数 s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') +# logger設定 +logger = logging.getLogger() +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +for handler in logger.handlers: + handler.setFormatter(formatter) + +level = logging.getLevelName(LOG_LEVEL) +if not isinstance(level, int): + level = logging.INFO +logger.setLevel(level) + def lambda_handler(event, context): try: # ① 処理開始ログを出力する - print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_supデータ月次I/F受領通知処理') + logger.info('I-01-01 処理開始 SAP_supデータ月次I/F受領通知処理') execute_date = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{execute_date}') + logger.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - print_log(LOG_INFO, 'I-02-01', 'イベント情報出力処理') + logger.info('I-02-01 イベント情報出力処理') s3_event = event["Records"][0]["s3"] event_bucket_name = s3_event["bucket"]["name"] event_file_path = s3_event["object"]["key"] event_file_name = os.path.basename(event_file_path) - print_log(LOG_INFO, 'I-02-02', f'バケット名:{event_bucket_name}') - print_log(LOG_INFO, 'I-02-03', f'ファイルパス:{event_file_path}') + logger.info(f'I-02-02 バケット名:{event_bucket_name}') + logger.info(f'I-02-03 ファイルパス:{event_file_path}') # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む try: - print_log(LOG_INFO, 'I-03-01', f'月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') + logger.info(f'I-03-01 月次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_MONTHLY_FILE_NAME_LIST_PATH}') receive_monthly_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_MONTHLY_FILE_NAME_LIST_PATH) receive_monthly_file_name_response = receive_monthly_file_name_obj.get() - print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') + logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-03-01', f'月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-03-01', e) + logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) # ④ 月次I/Fファイル受領通知処理を行う - print_log(LOG_INFO, 'I-04-01', '月次I/Fファイル受領通知処理開始') - print_log(LOG_INFO, 'I-04-02', f'受領したファイル名:{event_file_name}') - print_log(LOG_INFO, 'I-04-03', '受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + logger.info('I-04-01 月次I/Fファイル受領通知処理開始') + logger.info(f'I-04-02 受領したファイル名:{event_file_name}') + logger.info('I-04-03 受領したファイル名と月次I/Fファイルネーム設定ファイルの突き合わせを開始します') file_exists = False receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): @@ -67,69 +84,60 @@ def lambda_handler(event, context): file_exists = True break if file_exists == True: - print_log(LOG_INFO, 'I-04-04', f'月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') - mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]} {event_file_name}\n' + logger.info(f'I-04-04 月次I/Fを受領しました ファイル名:{row[INDEX_DATA_NAME]} {event_file_name}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]} {event_file_name}\n' else: - print_log(LOG_INFO, 'I-04-05', '受領したファイルは月次I/Fではありませんでした') + logger.info('I-04-05 受領したファイルは月次I/Fではありませんでした') # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') - + logger.info('I-05-01 メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - print_log(LOG_INFO, 'I-05-02', '月次I/Fファイルを受領したため、メール送信処理を開始します') - + logger.info('I-05-02 月次I/Fファイルを受領したため、メール送信処理を開始します') try: - print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + logger.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') mail_title_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_TITLE_TEMPLATE_PATH) mail_title = mail_title_obj['Body'].read().decode('utf-8') - print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-01', e) + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) try: - print_log(LOG_INFO, 'I-05-05', f'通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') + logger.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_BODY_TEMPLATE_PATH}') mail_body_obj = s3_client.get_object(Bucket=CONFIG_BUCKET_NAME, Key=NOTICE_MAIL_BODY_TEMPLATE_PATH) mail_body_response = mail_body_obj['Body'].read().decode('utf-8') mail_body = mail_body_response.replace(MAIL_BODY_REPLACE_SYMBOL, mail_msg) - print_log(LOG_INFO, 'I-05-06', '通知メール(本文)テンプレートファイルを読み込みました') + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-02', e) + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) - print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, 'Subject': mail_title, 'Message': mail_body } sns_client.publish(**params) - print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') + logger.info('I-05-08 メール送信指示をしました') else: # 2.存在しない場合 - print_log(LOG_INFO, 'I-05-09', '受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') + logger.info('I-05-09 受領したファイルは月次I/Fファイルではないため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ月次I/F受領通知処理') + logger.info('I-06-01 処理終了 SAP_supデータ月次I/F受領通知処理') + except CustomException as e: + error_notice(e.id, e.arg) except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_exit('E-99', e) + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + error_notice('E-99', e) + return -def print_log(log_level, log_id, msg): +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') - except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - error_exit('E-99', e) - - -def error_exit(error_log_id, exception): - try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') - - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -137,9 +145,22 @@ def error_exit(error_log_id, exception): 'Message': error_msg } sns_client.publish(**params) - - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') - sys.exit() + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - sys.exit() + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + return + + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass + + +class NoneBusinessDayException(CustomException): + pass From f3643407a28c5c12783afd59b0111413087a0abc Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 16:45:59 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E6=9C=88?= =?UTF-8?q?=E6=AC=A1I/F=E5=8F=97=E9=A0=98=E9=80=9A=E7=9F=A5=E5=87=A6?= =?UTF-8?q?=E7=90=86=20=E4=B8=8D=E8=A6=81=E3=82=AF=E3=83=A9=E3=82=B9?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...wh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py | 4 ---- ...wh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py | 4 ---- 2 files changed, 8 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py index 67cab9a8..bb394f3b 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py @@ -160,7 +160,3 @@ class CustomException(Exception, metaclass=ABCMeta): class FileReadException(CustomException): pass - - -class NoneBusinessDayException(CustomException): - pass diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py index f70893cc..e86b3e64 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py @@ -160,7 +160,3 @@ class CustomException(Exception, metaclass=ABCMeta): class FileReadException(CustomException): pass - - -class NoneBusinessDayException(CustomException): - pass From c380f1dfe340a3143ea5891d81ca0a0cbe3e65d3 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 21:11:43 +0900 Subject: [PATCH 6/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E6=9C=88?= =?UTF-8?q?=E6=AC=A1I/F=E5=8F=97=E9=A0=98=E9=80=9A=E7=9F=A5=E5=87=A6?= =?UTF-8?q?=E7=90=86=20=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=BE=E3=83=BC?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=80=80=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=83=AB=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC=E3=83=89=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=80=80=E3=83=88=E3=83=AC=E3=83=BC=E3=82=B9=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=81=AE=E5=87=BA=E5=8A=9B=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...staging-lambda-sap-fin-monthly-data-notice-daily.py | 10 +++++++++- ...staging-lambda-sap-sup-monthly-data-notice-daily.py | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py index bb394f3b..236091dd 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py @@ -6,6 +6,8 @@ import re import csv import logging from abc import * +from zoneinfo import ZoneInfo +import traceback # 環境変数 CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] @@ -32,10 +34,13 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() +def custome_time(*arg): + return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() formatter = logging.Formatter( '[%(levelname)s]\t%(asctime)s\t%(message)s\n', '%Y-%m-%d %H:%M:%S' ) +formatter.converter = custome_time for handler in logger.handlers: handler.setFormatter(formatter) @@ -116,7 +121,7 @@ def lambda_handler(event, context): logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title, + 'Subject': mail_title.rstrip('\n'), 'Message': mail_body } sns_client.publish(**params) @@ -128,9 +133,11 @@ def lambda_handler(event, context): # ⑥ 処理終了ログを出力する logger.info('I-06-01 処理終了 SAP_finデータ月次I/F受領通知処理') except CustomException as e: + traceback.print_exc() error_notice(e.id, e.arg) except Exception as e: logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() error_notice('E-99', e) return @@ -148,6 +155,7 @@ def error_notice(error_log_id, exception) -> None: logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() return diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py index e86b3e64..f4d1d1e7 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py @@ -6,6 +6,8 @@ import re import csv import logging from abc import * +from zoneinfo import ZoneInfo +import traceback # 環境変数 CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] @@ -32,10 +34,13 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() +def custome_time(*arg): + return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple() formatter = logging.Formatter( '[%(levelname)s]\t%(asctime)s\t%(message)s\n', '%Y-%m-%d %H:%M:%S' ) +formatter.converter = custome_time for handler in logger.handlers: handler.setFormatter(formatter) @@ -116,7 +121,7 @@ def lambda_handler(event, context): logger.info(f'I-05-07 メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') params = { 'TopicArn': MBJ_SAP_NOTICE_TOPIC, - 'Subject': mail_title, + 'Subject': mail_title.rstrip('\n'), 'Message': mail_body } sns_client.publish(**params) @@ -128,9 +133,11 @@ def lambda_handler(event, context): # ⑥ 処理終了ログを出力する logger.info('I-06-01 処理終了 SAP_supデータ月次I/F受領通知処理') except CustomException as e: + traceback.print_exc() error_notice(e.id, e.arg) except Exception as e: logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() error_notice('E-99', e) return @@ -148,6 +155,7 @@ def error_notice(error_log_id, exception) -> None: logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() return