From 74d9d8b248ef8f467db50e6d0ee1a60a52e1d566 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 20 May 2022 22:07:55 +0900 Subject: [PATCH 01/47] =?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 51be44df381687ea54061918046e68de91e041f7 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 20 May 2022 22:16:48 +0900 Subject: [PATCH 02/47] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ging-lambda-sap-fin-receive-check-daily.py | 190 ++++++++++++++++++ ...ging-lambda-sap-sup-receive-check-daily.py | 190 ++++++++++++++++++ 2 files changed, 380 insertions(+) create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py new file mode 100644 index 00000000..1f25ca32 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -0,0 +1,190 @@ +import os +import datetime +import boto3 +import io +import re +import sys + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_DAILY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_DAILY_FILE_NAME_LIST_PATH"] +NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_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データ受領チェック処理(日次)') + today = datetime.date.today().strftime('%Y/%m/%d') + info_log('I-01-02', f'処理稼働日:{today}') + + # ② 営業日チェック処理を行う + info_log('I-02-01', '営業日チェック処理開始') + + # 1.設定ファイル[非営業日設定ファイル]を読み込む + try: + info_log('I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) + non_business_day_response = non_business_day_obj.get() + info_log('I-02-03', '非営業日設定ファイルを読み込みました') + except Exception as e: + error_log('E-02-01', '非営業日設定ファイルの読み込みに失敗しました') + error_process('E-02-01', e) + + # 2.処理稼働日が「1」で読み込んだ「非営業日設定ファイル」に存在するか確認する + try: + today = datetime.date.today() + info_log('I-02-04', f'本日が非営業日かチェックします チェック日:{today}') + non_date_list = [] + for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): + if row[0] == ROW_COMMENT_SYMBOL: + continue + date = row.strip('/') + non_date = datetime.date(date[0], date[1], date[2]) + non_date_list.append(non_date) + if today in non_date_list: + info_log('I-02-05', '本日は非営業日のため、チェック処理をスキップします') + sys.exit() + else: + info_log('I-02-06', '本日は営業日のため、チェック処理を実施します') + except Exception as e: + error_log('E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') + error_process('E-02-02', e) + + # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む + try: + info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) + receive_daily_file_name_response = receive_daily_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) + + # ④ 日次チェック処理を行う + info_log('I-04-01', '日次チェック処理開始') + + # 1.オブジェクトリストを取得する + info_log('I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') + object_prefix = f'{today.strftime("%Y")}/{today.strftime("%m")}/{today.strftime("%d")}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + + # 2.日次I/Fファイルチェック処理 + info_log('I-04-03', '日次I/Fファイルチェック処理開始') + info_log('I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = 0 + match_count = 0 + for i, row in enumerate(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'), 1): + row_count = i + file_exsit = False + for object in object_list: + object_key = object.key.rsplit('/', 1) + file_name = object_key[-1] + match_result = re.fullmatch(row[0], file_name) + if match_result is not None: + file_exsit = True + break + if file_exsit == True: + match_count += 1 + info_log('I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + error_log('E-04-01', f'日次I/Fファイルに不足があります ファイル名:{file_name}') + mail_msg = f'  {row[1]}\n' + if row_count == match_count: + info_log('I-04-06', '日次I/Fファイルは全て受領していることを確認しました') + + # ⑤ メール通知本文に出力内容が存在するか確認する + info_log('I-05-01', 'メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + info_log('I-05-02', f'{today} 日次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', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + info_log('I-06-01', '処理終了 SAP_finデータ受領チェック処理(日次)') + 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-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py new file mode 100644 index 00000000..3067d65c --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -0,0 +1,190 @@ +import os +import datetime +import boto3 +import io +import re +import sys + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_DAILY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_DAILY_FILE_NAME_LIST_PATH"] +NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_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データ受領チェック処理(日次)') + today = datetime.date.today().strftime('%Y/%m/%d') + info_log('I-01-02', f'処理稼働日:{today}') + + # ② 営業日チェック処理を行う + info_log('I-02-01', '営業日チェック処理開始') + + # 1.設定ファイル[非営業日設定ファイル]を読み込む + try: + info_log('I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) + non_business_day_response = non_business_day_obj.get() + info_log('I-02-03', '非営業日設定ファイルを読み込みました') + except Exception as e: + error_log('E-02-01', '非営業日設定ファイルの読み込みに失敗しました') + error_process('E-02-01', e) + + # 2.処理稼働日が「1」で読み込んだ「非営業日設定ファイル」に存在するか確認する + try: + today = datetime.date.today() + info_log('I-02-04', f'本日が非営業日かチェックします チェック日:{today}') + non_date_list = [] + for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): + if row[0] == ROW_COMMENT_SYMBOL: + continue + date = row.strip('/') + non_date = datetime.date(date[0], date[1], date[2]) + non_date_list.append(non_date) + if today in non_date_list: + info_log('I-02-05', '本日は非営業日のため、チェック処理をスキップします') + sys.exit() + else: + info_log('I-02-06', '本日は営業日のため、チェック処理を実施します') + except Exception as e: + error_log('E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') + error_process('E-02-02', e) + + # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む + try: + info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) + receive_daily_file_name_response = receive_daily_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) + + # ④ 日次チェック処理を行う + info_log('I-04-01', '日次チェック処理開始') + + # 1.オブジェクトリストを取得する + info_log('I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') + object_prefix = f'{today.strftime("%Y")}/{today.strftime("%m")}/{today.strftime("%d")}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + + # 2.日次I/Fファイルチェック処理 + info_log('I-04-03', '日次I/Fファイルチェック処理開始') + info_log('I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = 0 + match_count = 0 + for i, row in enumerate(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'), 1): + row_count = i + file_exsit = False + for object in object_list: + object_key = object.key.rsplit('/', 1) + file_name = object_key[-1] + match_result = re.fullmatch(row[0], file_name) + if match_result is not None: + file_exsit = True + break + if file_exsit == True: + match_count += 1 + info_log('I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + error_log('E-04-01', f'日次I/Fファイルに不足があります ファイル名:{file_name}') + mail_msg = f'  {row[1]}\n' + if row_count == match_count: + info_log('I-04-06', '日次I/Fファイルは全て受領していることを確認しました') + + # ⑤ メール通知本文に出力内容が存在するか確認する + info_log('I-05-01', 'メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + info_log('I-05-02', f'{today} 日次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', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + info_log('I-06-01', '処理終了 SAP_supデータ受領チェック処理(日次)') + 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 9c0b2cb4244be594df5d334853ba310d9ad028c8 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 20 May 2022 23:06:54 +0900 Subject: [PATCH 03/47] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=BE=A9=E5=8F=B7=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dockerfile | 11 + .../datadecrypt/main.py | 210 ++++++++++++++++++ .../requirements.txt | 3 + 3 files changed, 224 insertions(+) create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/Dockerfile create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/requirements.txt diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/Dockerfile b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/Dockerfile new file mode 100644 index 00000000..329183b1 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.9 + +ENV TZ="Asia/Tokyo" + +WORKDIR /function +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt +COPY datadecrypt ./ + +ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ] +CMD [ "main.handler" ] \ No newline at end of file diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py new file mode 100644 index 00000000..edee2396 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -0,0 +1,210 @@ +import os +import sys +import boto3 +import gnupg +import datetime + +# 環境変数 +SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] +SECRET_KEY_FILE_PATH = os.environ["SECRET_KEY_FILE_PATH"] +SAP_SUP_BUCKET_NAME = os.environ["SAP_SUP_BUCKET_NAME"] +SAP_FIN_BUCKET_NAME = os.environ["SAP_FIN_BUCKET_NAME"] +SAP_DATA_BACKUP_BUCKET_NAME = os.environ["SAP_DATA_BACKUP_BUCKET_NAME"] +DATA_SOURCE_SAP_SUP = os.environ["DATA_SOURCE_SAP_SUP"] +DATA_SOURCE_SAP_FIN = os.environ["DATA_SOURCE_SAP_FIN"] +NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] +NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] + +# 定数 +DIRECTORY_RECV = '/recv/' +DIRECTORY_RECV_ERROR = '/recv_error/' +EXTENSION_ERROR = '.error' +EXTENSION_DECRYPT_ERROR = '.decrypt_error' + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') +event_bucket_name = '' +event_file_path = '' +event_file_name = '' +event_data_source_name = '' + + +def handler(event, context): + # ① 処理開始ログを出力する + try: + info_log('I-01-01', '処理開始 SAPデータ復号処理') + today = datetime.date.today().strftime('%Y/%m/%d') + info_log('I-01-02', f'処理稼働日:{today}') + except Exception as e: + error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process(EXTENSION_ERROR, 'E-99', e) + + # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する + try: + 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}') + except Exception as e: + error_log('E-02-99', f'エラー内容:{e}') + error_process(EXTENSION_ERROR, 'E-02-99', e) + + # ③ S3からPGP暗号化ファイルを読み込む + try: + info_log('I-03-01', f'秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') + s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, '/tmp/private.key') + info_log('I-03-02', '秘密鍵ファイルを読み込みました') + except Exception as e: + error_log('E-03-01', '秘密鍵ファイルの読み込みに失敗しました') + error_process(EXTENSION_ERROR, 'I-03-01', e) + + # ④ S3からPGP暗号化ファイルを読み込む + try: + info_log('I-04-01', f'PGP暗号化ファイル読込 読込元:{event_bucket_name}/{event_file_path}') + s3_client.download_file(event_bucket_name, event_file_path, '/tmp/myencryptedfile') + info_log('I-04-02', 'PGP暗号化ファイルを読み込みました') + except Exception as e: + try: + error_log('E-04-01', '秘密鍵ファイルの読み込みに失敗しました') + + result_error_file_name = event_file_name + EXTENSION_ERROR + result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name + result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) + result_error_obj.put(Body='') + error_log('E-04-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + + error_log('E-04-03', f'保守要員に通知します 通知先トピック:{NDS_NOTICE_TOPIC}') + error_msg = f'E-04-01 のエラーが発生しました。ご確認ください\n詳細:{e}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + + error_log('E-04-04', 'エラー終了 処理を中断します') + sys.exit() + except Exception as e: + error_log('E-04-99', f'エラー内容:{e}') + error_process(EXTENSION_ERROR, 'E-04-99', e) + + # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う + try: + info_log('I-05-01', '秘密鍵ファイルインポート') + gpg = gnupg.GPG(gnupghome='/tmp') + key_data = open('/tmp/private.key').read() + priv_key = gpg.import_keys(key_data) + info_log('I-05-02', '秘密鍵ファイルをインポートしました') + except Exception as e: + error_log('E-05-01', '秘密鍵ファイルのインポートに失敗しました') + error_process(EXTENSION_ERROR, 'E-05-01', e) + + # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する + try: + info_log('I-06-01', 'PGP暗号化ファイルの復号化') + target_file = open('/tmp/myencryptedfile', 'rb') + gpg.decrypt_file(target_file, output='/tmp/decrypt_file') + decrypt_file = open('/tmp/decrypt_file', 'rb') + info_log('I-06-02', 'PGP暗号化ファイルを復号しました') + except Exception as e: + error_log('E-06-01', 'PGP暗号化ファイルの復号化に失敗しました') + error_process(EXTENSION_DECRYPT_ERROR, 'E-06-01', e) + + # ⑦ 各ファイルをS3に出力する + try: + info_log('I-07-01', '各ファイルをS3に出力する') + + # 「⑥」で復号化したファイルをSAPデータ保管用バケットに出力する + decrypt_file_name = event_file_name[:-4] + decrypt_file_key = f'{today}/{decrypt_file_name}' + if event_data_source_name == DATA_SOURCE_SAP_SUP: + decrypt_bucket_name = SAP_SUP_BUCKET_NAME + elif event_data_source_name == DATA_SOURCE_SAP_FIN: + decrypt_bucket_name = SAP_FIN_BUCKET_NAME + info_log('I-07-02', f'復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') + decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) + decrypt_file_obj.put(Body=decrypt_file) + info_log('I-07-03', '復号化ファイルをS3に出力しました') + except Exception as e: + error_log('E-07-01', '復号化ファイルのS3出力に失敗しました') + error_process(EXTENSION_ERROR, 'E-07-01', e) + + try: + # 「④」で読み込んだPGP暗号化ファイルを以下に移動(コピー削除)する + backup_file_key = f'{event_data_source_name}/{today}/{event_file_name}' + info_log('I-07-04', f'PGP暗号化ファイル出力 ファイル名:{event_file_name} 出力先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + decrypt_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) + decrypt_file_obj.put(Body=decrypt_file) + info_log('I-07-05', 'PGP暗号化ファイル出力をS3に出力しました') + except Exception as e: + error_log('E-07-02', 'PGP暗号化ファイルのS3出力に失敗しました') + error_process(EXTENSION_ERROR, 'E-07-02', e) + + # ⑧ 処理終了ログを出力する + try: + info_log('I-08-01', '処理終了 SAPデータ復号処理') + except Exception as e: + error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process(EXTENSION_ERROR, '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(extension, error_log_id, exception): + # ① エラー処理を行う + try: + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + + result_error_file_name = event_file_name + extension + result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name + result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) + result_error_obj.put(Body='') + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + + copy_source = { + 'Bucket': event_bucket_name, + 'Key': event_file_path + } + error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{event_file_name}' + error_key = event_data_source_name + DIRECTORY_RECV_ERROR + error_file_name + error_obj = s3_resource.Object(event_bucket_name, error_key) + error_obj.copy(copy_source) + s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') + + print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-04 処理異常通知の送信指示をしました 通知先トピック:{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-05 エラー終了 処理を中断します') + 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-data-decrypt/requirements.txt b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/requirements.txt new file mode 100644 index 00000000..ae60d971 --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/requirements.txt @@ -0,0 +1,3 @@ +awslambdaric +boto3 +python-gnupg \ No newline at end of file From 380bd9d652891985800b9e74b387588ce13f6302 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 15:26:58 +0900 Subject: [PATCH 04/47] =?UTF-8?q?fin:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E6=97=A5=E4=BB=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E9=83=A8=E5=88=86=E3=81=A7=E5=9E=8B?= =?UTF-8?q?=E3=81=8C=E7=9B=B8=E9=81=95=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=82=92=E6=96=87=E5=AD=97=E5=88=97=E5=9E=8B=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 2 +- ...mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 1f25ca32..a803ac15 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -56,7 +56,7 @@ def lambda_handler(event, context): if row[0] == ROW_COMMENT_SYMBOL: continue date = row.strip('/') - non_date = datetime.date(date[0], date[1], date[2]) + non_date = datetime.date(date[0], date[1], date[2]).strftime('%Y/%m/%d') non_date_list.append(non_date) if today in non_date_list: info_log('I-02-05', '本日は非営業日のため、チェック処理をスキップします') diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 3067d65c..ef07f415 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -56,7 +56,7 @@ def lambda_handler(event, context): if row[0] == ROW_COMMENT_SYMBOL: continue date = row.strip('/') - non_date = datetime.date(date[0], date[1], date[2]) + non_date = datetime.date(date[0], date[1], date[2]).strftime('%Y/%m/%d') non_date_list.append(non_date) if today in non_date_list: info_log('I-02-05', '本日は非営業日のため、チェック処理をスキップします') From 45dfa53d22e09f337a0c228429c0a69fe0e7157d Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 21:58:18 +0900 Subject: [PATCH 05/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E4=B8=8B=E7=94=B0=E3=81=95?= =?UTF-8?q?=E3=82=93=E5=9D=82=E4=BA=95=E3=81=95=E3=82=93=E6=8C=87=E6=91=98?= =?UTF-8?q?=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ging-lambda-sap-sup-receive-check-daily.py | 129 +++++++++--------- 1 file changed, 64 insertions(+), 65 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index ef07f415..52914bb4 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -4,6 +4,7 @@ import boto3 import io import re import sys +import csv # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -19,162 +20,160 @@ NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] # 定数 ROW_COMMENT_SYMBOL = '#' +LOG_INFO = 'Info' +LOG_ERROR = 'Error' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 +INDEX_ROW_COMMENT_SYMBOL = 0 +INDEX_SPLIT_NUM = 0 +INDEX_LAST = -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データ受領チェック処理(日次)') + print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_supデータ受領チェック処理(日次)') 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', '営業日チェック処理開始') + print_log(LOG_INFO, 'I-02-01', '営業日チェック処理開始') # 1.設定ファイル[非営業日設定ファイル]を読み込む try: - info_log('I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + print_log(LOG_INFO, 'I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = non_business_day_obj.get() - info_log('I-02-03', '非営業日設定ファイルを読み込みました') + print_log(LOG_INFO, 'I-02-03', '非営業日設定ファイルを読み込みました') except Exception as e: - error_log('E-02-01', '非営業日設定ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-02-01', '非営業日設定ファイルの読み込みに失敗しました') error_process('E-02-01', e) # 2.処理稼働日が「1」で読み込んだ「非営業日設定ファイル」に存在するか確認する try: - today = datetime.date.today() - info_log('I-02-04', f'本日が非営業日かチェックします チェック日:{today}') - non_date_list = [] + print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{today}') + none_business_day_list = [] for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): - if row[0] == ROW_COMMENT_SYMBOL: + if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - date = row.strip('/') - non_date = datetime.date(date[0], date[1], date[2]).strftime('%Y/%m/%d') - non_date_list.append(non_date) - if today in non_date_list: - info_log('I-02-05', '本日は非営業日のため、チェック処理をスキップします') + non_date = datetime.datetime.strptime(row, "%Y/%m/%d").strftime('%Y/%m/%d') + none_business_day_list .append(non_date) + if today in none_business_day_list: + print_log(LOG_INFO, 'I-02-05', '本日は非営業日のため、チェック処理をスキップします') sys.exit() else: - info_log('I-02-06', '本日は営業日のため、チェック処理を実施します') + print_log(LOG_INFO, 'I-02-06', '本日は営業日のため、チェック処理を実施します') except Exception as e: - error_log('E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') + print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') error_process('E-02-02', e) # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む try: - info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + print_log(LOG_INFO, 'I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = receive_daily_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) # ④ 日次チェック処理を行う - info_log('I-04-01', '日次チェック処理開始') + print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') # 1.オブジェクトリストを取得する - info_log('I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') - object_prefix = f'{today.strftime("%Y")}/{today.strftime("%m")}/{today.strftime("%d")}/' + print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') + object_prefix = f'{today}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) # 2.日次I/Fファイルチェック処理 - info_log('I-04-03', '日次I/Fファイルチェック処理開始') - info_log('I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + print_log(LOG_INFO, 'I-04-03', '日次I/Fファイルチェック処理開始') + print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') row_count = 0 match_count = 0 - for i, row in enumerate(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'), 1): + receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') + for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): row_count = i - file_exsit = False + file_exists = False for object in object_list: - object_key = object.key.rsplit('/', 1) - file_name = object_key[-1] - match_result = re.fullmatch(row[0], file_name) + object_key = object.key.rsplit('/', INDEX_SPLIT_NUM) + file_name = object_key[INDEX_LAST] + match_result = re.fullmatch(row[INDEX_REGEX], file_name) if match_result is not None: - file_exsit = True + file_exists = True break - if file_exsit == True: + if file_exists == True: match_count += 1 - info_log('I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + print_log(LOG_INFO, 'I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - error_log('E-04-01', f'日次I/Fファイルに不足があります ファイル名:{file_name}') - mail_msg = f'  {row[1]}\n' + print_log(LOG_ERROR, 'E-04-01', f'日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]}\n' if row_count == match_count: - info_log('I-04-06', '日次I/Fファイルは全て受領していることを確認しました') + print_log(LOG_INFO, 'I-04-06', '日次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', f'{today} 日次I/Fファイルは全て受領しているため、メール送信処理を開始します') + print_log(LOG_INFO, 'I-05-02', f'{today} 日次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', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + print_log(LOG_INFO, 'I-05-09', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - info_log('I-06-01', '処理終了 SAP_supデータ受領チェック処理(日次)') + print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ受領チェック処理(日次)') 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, @@ -183,8 +182,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 d652dd76bf4f7b82e3bbb82f6fe50b16f6617815 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:00:21 +0900 Subject: [PATCH 06/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E4=B8=8B=E7=94=B0=E3=81=95?= =?UTF-8?q?=E3=82=93=E5=9D=82=E4=BA=95=E3=81=95=E3=82=93=E6=8C=87=E6=91=98?= =?UTF-8?q?=E5=8F=8D=E6=98=A0(fin)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ging-lambda-sap-fin-receive-check-daily.py | 129 +++++++++--------- 1 file changed, 64 insertions(+), 65 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index a803ac15..ec57b49b 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -4,6 +4,7 @@ import boto3 import io import re import sys +import csv # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -19,162 +20,160 @@ NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] # 定数 ROW_COMMENT_SYMBOL = '#' +LOG_INFO = 'Info' +LOG_ERROR = 'Error' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 +INDEX_ROW_COMMENT_SYMBOL = 0 +INDEX_SPLIT_NUM = 0 +INDEX_LAST = -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データ受領チェック処理(日次)') + print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_finデータ受領チェック処理(日次)') 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', '営業日チェック処理開始') + print_log(LOG_INFO, 'I-02-01', '営業日チェック処理開始') # 1.設定ファイル[非営業日設定ファイル]を読み込む try: - info_log('I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + print_log(LOG_INFO, 'I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = non_business_day_obj.get() - info_log('I-02-03', '非営業日設定ファイルを読み込みました') + print_log(LOG_INFO, 'I-02-03', '非営業日設定ファイルを読み込みました') except Exception as e: - error_log('E-02-01', '非営業日設定ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-02-01', '非営業日設定ファイルの読み込みに失敗しました') error_process('E-02-01', e) # 2.処理稼働日が「1」で読み込んだ「非営業日設定ファイル」に存在するか確認する try: - today = datetime.date.today() - info_log('I-02-04', f'本日が非営業日かチェックします チェック日:{today}') - non_date_list = [] + print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{today}') + none_business_day_list = [] for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): - if row[0] == ROW_COMMENT_SYMBOL: + if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - date = row.strip('/') - non_date = datetime.date(date[0], date[1], date[2]).strftime('%Y/%m/%d') - non_date_list.append(non_date) - if today in non_date_list: - info_log('I-02-05', '本日は非営業日のため、チェック処理をスキップします') + non_date = datetime.datetime.strptime(row, "%Y/%m/%d").strftime('%Y/%m/%d') + none_business_day_list .append(non_date) + if today in none_business_day_list: + print_log(LOG_INFO, 'I-02-05', '本日は非営業日のため、チェック処理をスキップします') sys.exit() else: - info_log('I-02-06', '本日は営業日のため、チェック処理を実施します') + print_log(LOG_INFO, 'I-02-06', '本日は営業日のため、チェック処理を実施します') except Exception as e: - error_log('E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') + print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') error_process('E-02-02', e) # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む try: - info_log('I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + print_log(LOG_INFO, 'I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = receive_daily_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) # ④ 日次チェック処理を行う - info_log('I-04-01', '日次チェック処理開始') + print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') # 1.オブジェクトリストを取得する - info_log('I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') - object_prefix = f'{today.strftime("%Y")}/{today.strftime("%m")}/{today.strftime("%d")}/' + print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') + object_prefix = f'{today}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) # 2.日次I/Fファイルチェック処理 - info_log('I-04-03', '日次I/Fファイルチェック処理開始') - info_log('I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + print_log(LOG_INFO, 'I-04-03', '日次I/Fファイルチェック処理開始') + print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') row_count = 0 match_count = 0 - for i, row in enumerate(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'), 1): + receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') + for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): row_count = i - file_exsit = False + file_exists = False for object in object_list: - object_key = object.key.rsplit('/', 1) - file_name = object_key[-1] - match_result = re.fullmatch(row[0], file_name) + object_key = object.key.rsplit('/', INDEX_SPLIT_NUM) + file_name = object_key[INDEX_LAST] + match_result = re.fullmatch(row[INDEX_REGEX], file_name) if match_result is not None: - file_exsit = True + file_exists = True break - if file_exsit == True: + if file_exists == True: match_count += 1 - info_log('I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + print_log(LOG_INFO, 'I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - error_log('E-04-01', f'日次I/Fファイルに不足があります ファイル名:{file_name}') - mail_msg = f'  {row[1]}\n' + print_log(LOG_ERROR, 'E-04-01', f'日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]}\n' if row_count == match_count: - info_log('I-04-06', '日次I/Fファイルは全て受領していることを確認しました') + print_log(LOG_INFO, 'I-04-06', '日次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', f'{today} 日次I/Fファイルは全て受領しているため、メール送信処理を開始します') + print_log(LOG_INFO, 'I-05-02', f'{today} 日次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', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + print_log(LOG_INFO, 'I-05-09', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - info_log('I-06-01', '処理終了 SAP_finデータ受領チェック処理(日次)') + print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_finデータ受領チェック処理(日次)') 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, @@ -183,8 +182,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 00f45a791702884b5ded11def4c26a424829f995 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:30:21 +0900 Subject: [PATCH 07/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=BE=A9=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E4=B8=8B?= =?UTF-8?q?=E7=94=B0=E3=81=95=E3=82=93=E6=8C=87=E6=91=98=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datadecrypt/main.py | 135 +++++++++--------- 1 file changed, 68 insertions(+), 67 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index edee2396..6f9c76df 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -20,6 +20,17 @@ DIRECTORY_RECV = '/recv/' DIRECTORY_RECV_ERROR = '/recv_error/' EXTENSION_ERROR = '.error' EXTENSION_DECRYPT_ERROR = '.decrypt_error' +LOG_INFO = 'Info' +LOG_ERROR = 'Error' +INDEX_EXTENSION_DELETE_NUM = -4 +PATH_TEMP = '/tmp' +PATH_TEMP_PRIVATE_KEY = '/tmp/private.key' +PATH_TEMP_ENCRYPT_FILE = '/tmp/encrypt_file' +PATH_TEMP_DECRYPT_FILE = '/tmp/decrypt_file' +TARGET_BUCKET_BY_DATA_SOURCE = { + DATA_SOURCE_SAP_SUP: SAP_SUP_BUCKET_NAME, + DATA_SOURCE_SAP_FIN: SAP_FIN_BUCKET_NAME +} # 変数 s3_client = boto3.client('s3') @@ -34,54 +45,54 @@ event_data_source_name = '' def handler(event, context): # ① 処理開始ログを出力する try: - info_log('I-01-01', '処理開始 SAPデータ復号処理') + print_log(LOG_INFO, 'I-01-01', '処理開始 SAPデータ復号処理') today = datetime.date.today().strftime('%Y/%m/%d') - info_log('I-01-02', f'処理稼働日:{today}') + print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') except Exception as e: - error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') error_process(EXTENSION_ERROR, 'E-99', e) # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する try: - 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}') except Exception as e: - error_log('E-02-99', f'エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-02-99', e) + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process(EXTENSION_ERROR, 'E-99', e) - # ③ S3からPGP暗号化ファイルを読み込む + # ③ S3から秘密鍵ファイルを読み込む try: - info_log('I-03-01', f'秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') - s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, '/tmp/private.key') - info_log('I-03-02', '秘密鍵ファイルを読み込みました') + print_log(LOG_INFO, 'I-03-01', f'秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') + s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) + print_log(LOG_INFO, 'I-03-02', '秘密鍵ファイルを読み込みました') except Exception as e: - error_log('E-03-01', '秘密鍵ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-03-01', '秘密鍵ファイルの読み込みに失敗しました') error_process(EXTENSION_ERROR, 'I-03-01', e) # ④ S3からPGP暗号化ファイルを読み込む try: - info_log('I-04-01', f'PGP暗号化ファイル読込 読込元:{event_bucket_name}/{event_file_path}') - s3_client.download_file(event_bucket_name, event_file_path, '/tmp/myencryptedfile') - info_log('I-04-02', 'PGP暗号化ファイルを読み込みました') + print_log(LOG_INFO, 'I-04-01', f'PGP暗号化ファイル読込 読込元:{event_bucket_name}/{event_file_path}') + s3_client.download_file(event_bucket_name, event_file_path, PATH_TEMP_ENCRYPT_FILE) + print_log(LOG_INFO, 'I-04-02', 'PGP暗号化ファイルを読み込みました') except Exception as e: try: - error_log('E-04-01', '秘密鍵ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-04-01', 'PGP暗号化ファイルの読み込みに失敗しました') result_error_file_name = event_file_name + EXTENSION_ERROR result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) result_error_obj.put(Body='') - error_log('E-04-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + print_log(LOG_ERROR, 'E-04-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') - error_log('E-04-03', f'保守要員に通知します 通知先トピック:{NDS_NOTICE_TOPIC}') + print_log(LOG_ERROR, 'E-04-03', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'E-04-01 のエラーが発生しました。ご確認ください\n詳細:{e}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -90,111 +101,101 @@ def handler(event, context): } sns_client.publish(**params) - error_log('E-04-04', 'エラー終了 処理を中断します') + print_log(LOG_ERROR, 'E-04-04', 'エラー終了 処理を中断します') sys.exit() except Exception as e: - error_log('E-04-99', f'エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-04-99', e) + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process(EXTENSION_ERROR, 'E-99', e) # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う try: - info_log('I-05-01', '秘密鍵ファイルインポート') - gpg = gnupg.GPG(gnupghome='/tmp') - key_data = open('/tmp/private.key').read() - priv_key = gpg.import_keys(key_data) - info_log('I-05-02', '秘密鍵ファイルをインポートしました') + print_log(LOG_INFO, 'I-05-01', '秘密鍵ファイルインポート') + gpg = gnupg.GPG(gnupghome=PATH_TEMP) + with open(PATH_TEMP_PRIVATE_KEY) as key_file: + gpg.import_keys(key_file.read()) + print_log(LOG_INFO, 'I-05-02', '秘密鍵ファイルをインポートしました') except Exception as e: - error_log('E-05-01', '秘密鍵ファイルのインポートに失敗しました') + print_log(LOG_ERROR, 'E-05-01', '秘密鍵ファイルのインポートに失敗しました') error_process(EXTENSION_ERROR, 'E-05-01', e) # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する try: - info_log('I-06-01', 'PGP暗号化ファイルの復号化') - target_file = open('/tmp/myencryptedfile', 'rb') - gpg.decrypt_file(target_file, output='/tmp/decrypt_file') - decrypt_file = open('/tmp/decrypt_file', 'rb') - info_log('I-06-02', 'PGP暗号化ファイルを復号しました') + print_log(LOG_INFO, 'I-06-01', 'PGP暗号化ファイルの復号化') + with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file: + gpg.decrypt_file(temp_encrypr_file, output=PATH_TEMP_DECRYPT_FILE) + with open(PATH_TEMP_DECRYPT_FILE, 'rb') as temp_decrypt_file: + decrypt_file = temp_decrypt_file + print_log(LOG_INFO, 'I-06-02', 'PGP暗号化ファイルを復号しました') except Exception as e: - error_log('E-06-01', 'PGP暗号化ファイルの復号化に失敗しました') + print_log(LOG_ERROR, 'E-06-01', 'PGP暗号化ファイルの復号化に失敗しました') error_process(EXTENSION_DECRYPT_ERROR, 'E-06-01', e) # ⑦ 各ファイルをS3に出力する try: - info_log('I-07-01', '各ファイルをS3に出力する') + print_log(LOG_INFO, 'I-07-01', '各ファイルをS3に出力する') # 「⑥」で復号化したファイルをSAPデータ保管用バケットに出力する - decrypt_file_name = event_file_name[:-4] + decrypt_file_name = event_file_name[:INDEX_EXTENSION_DELETE_NUM] decrypt_file_key = f'{today}/{decrypt_file_name}' - if event_data_source_name == DATA_SOURCE_SAP_SUP: - decrypt_bucket_name = SAP_SUP_BUCKET_NAME - elif event_data_source_name == DATA_SOURCE_SAP_FIN: - decrypt_bucket_name = SAP_FIN_BUCKET_NAME - info_log('I-07-02', f'復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') + decrypt_bucket_name = TARGET_BUCKET_BY_DATA_SOURCE[event_data_source_name] + print_log(LOG_INFO, 'I-07-02', f'復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) decrypt_file_obj.put(Body=decrypt_file) - info_log('I-07-03', '復号化ファイルをS3に出力しました') + print_log(LOG_INFO, 'I-07-03', '復号化ファイルをS3に出力しました') except Exception as e: - error_log('E-07-01', '復号化ファイルのS3出力に失敗しました') + print_log(LOG_ERROR, 'E-07-01', '復号化ファイルのS3出力に失敗しました') error_process(EXTENSION_ERROR, 'E-07-01', e) try: # 「④」で読み込んだPGP暗号化ファイルを以下に移動(コピー削除)する backup_file_key = f'{event_data_source_name}/{today}/{event_file_name}' - info_log('I-07-04', f'PGP暗号化ファイル出力 ファイル名:{event_file_name} 出力先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル出力 ファイル名:{event_file_name} 出力先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') decrypt_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) decrypt_file_obj.put(Body=decrypt_file) - info_log('I-07-05', 'PGP暗号化ファイル出力をS3に出力しました') + print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイル出力をS3に出力しました') except Exception as e: - error_log('E-07-02', 'PGP暗号化ファイルのS3出力に失敗しました') + print_log(LOG_ERROR, 'E-07-02', 'PGP暗号化ファイルのS3出力に失敗しました') error_process(EXTENSION_ERROR, 'E-07-02', e) # ⑧ 処理終了ログを出力する try: - info_log('I-08-01', '処理終了 SAPデータ復号処理') + print_log(LOG_INFO, 'I-08-01', '処理終了 SAPデータ復号処理') except Exception as e: - error_log('E-99', f'想定外のエラーが発生しました エラー内容:{e}') + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') error_process(EXTENSION_ERROR, '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(extension, 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 エラー処理開始') result_error_file_name = event_file_name + extension result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) result_error_obj.put(Body='') - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') copy_source = { 'Bucket': event_bucket_name, 'Key': event_file_path } - error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{event_file_name}' + error_file_name = f'{datetime.datetime.now():%Y%m%d%H%M%S}_{event_file_name}' error_key = event_data_source_name + DIRECTORY_RECV_ERROR + error_file_name error_obj = s3_resource.Object(event_bucket_name, error_key) error_obj.copy(copy_source) s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-04 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-04 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -203,8 +204,8 @@ def error_process(extension, error_log_id, exception): } sns_client.publish(**params) - print(f'{datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-05 エラー終了 処理を中断します') + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-05 エラー終了 処理を中断します') 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 ddd6e7bdd8fd5d7b05300df64356e9714b3e02d5 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:32:50 +0900 Subject: [PATCH 08/47] =?UTF-8?q?docs:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E9=83=A8=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...wdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 52914bb4..64cff64f 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -45,7 +45,7 @@ def lambda_handler(event, context): # ② 営業日チェック処理を行う print_log(LOG_INFO, 'I-02-01', '営業日チェック処理開始') - # 1.設定ファイル[非営業日設定ファイル]を読み込む + # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む try: print_log(LOG_INFO, 'I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) @@ -55,7 +55,7 @@ def lambda_handler(event, context): print_log(LOG_ERROR, 'E-02-01', '非営業日設定ファイルの読み込みに失敗しました') error_process('E-02-01', e) - # 2.処理稼働日が「1」で読み込んだ「非営業日設定ファイル」に存在するか確認する + # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{today}') none_business_day_list = [] @@ -86,7 +86,7 @@ def lambda_handler(event, context): # ④ 日次チェック処理を行う print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') - # 1.オブジェクトリストを取得する + # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') object_prefix = f'{today}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) @@ -116,7 +116,7 @@ def lambda_handler(event, context): if row_count == match_count: print_log(LOG_INFO, 'I-04-06', '日次I/Fファイルは全て受領していることを確認しました') - # ⑤ メール通知本文に出力内容が存在するか確認する + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') if len(mail_msg) > 0: From 211210b0272a072465c751aebe616bd993b07633 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:36:15 +0900 Subject: [PATCH 09/47] =?UTF-8?q?docs:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E9=83=A8=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F(fin)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...wdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index ec57b49b..6a65c5f4 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -45,7 +45,7 @@ def lambda_handler(event, context): # ② 営業日チェック処理を行う print_log(LOG_INFO, 'I-02-01', '営業日チェック処理開始') - # 1.設定ファイル[非営業日設定ファイル]を読み込む + # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む try: print_log(LOG_INFO, 'I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) @@ -55,7 +55,7 @@ def lambda_handler(event, context): print_log(LOG_ERROR, 'E-02-01', '非営業日設定ファイルの読み込みに失敗しました') error_process('E-02-01', e) - # 2.処理稼働日が「1」で読み込んだ「非営業日設定ファイル」に存在するか確認する + # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{today}') none_business_day_list = [] @@ -86,7 +86,7 @@ def lambda_handler(event, context): # ④ 日次チェック処理を行う print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') - # 1.オブジェクトリストを取得する + # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') object_prefix = f'{today}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) @@ -116,7 +116,7 @@ def lambda_handler(event, context): if row_count == match_count: print_log(LOG_INFO, 'I-04-06', '日次I/Fファイルは全て受領していることを確認しました') - # ⑤ メール通知本文に出力内容が存在するか確認する + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') if len(mail_msg) > 0: From 47e53205acde4f3a209bf89c4362d5255ff0a656 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:57:54 +0900 Subject: [PATCH 10/47] =?UTF-8?q?fix: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=20=E4=B8=8B=E7=94=B0=E3=81=95=E3=82=93?= =?UTF-8?q?=E6=8C=87=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 e4ab956fa8acb5f505ca44d32776469561f18865 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Tue, 24 May 2022 14:29:47 +0900 Subject: [PATCH 11/47] =?UTF-8?q?feat:=E6=96=B0=E8=A6=8F=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=AE=E3=81=9F=E3=82=81=E3=80=81=E4=BB=A5?= =?UTF-8?q?=E4=B8=8B=E3=81=AELambda=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F=20=E2=86=92SAP=5Fsup?= =?UTF-8?q?=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6?= =?UTF-8?q?=E7=90=86=EF=BC=88=E6=9C=88=E6=AC=A1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ct-lambda-sap-sup-receive-check-monthly.py | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py diff --git a/lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py new file mode 100644 index 00000000..024b8a9c --- /dev/null +++ b/lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py @@ -0,0 +1,192 @@ +import os +import datetime +import boto3 +import io +import re +import sys + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +MONTHLY_CEHCK_DAY_LIST_PATH = os.environ["MONTHLY_CEHCK_DAY_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データ受領チェック処理(月次)') + datetoday = datetime.date.today() + today = datetoday.strftime('%Y/%m/%d') + month = f'{datetoday.strftime("%Y")}/{datetoday.strftime("%m")}' + info_log('I-01-02', f'処理稼働日:{today}') + + # ② 営業日チェック処理を行う + info_log('I-02-01', 'チェック処理実施指定日確認処理開始') + + # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む + try: + info_log('I-02-02', f'チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') + monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) + monthly_day_response = monthly_day_obj.get() + info_log('I-02-03', 'チェック処理実施指定日ファイルを読み込みました') + except Exception as e: + error_log('E-02-01', 'チェック処理実施指定日設定ファイルの読み込みに失敗しました') + error_process('E-02-01', e) + + # 2.処理稼働日が「1」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する + try: +# today = datetime.date.today() + info_log('I-02-04', f'本日がチェック処理実施指定日か確認します 確認日:{today}') + check_date_list = [] + for i, row in io.TextIOWrapper(io.BytesIO(monthly_day_response["Body"].read()), encoding='utf-8'): + if row[0] == ROW_COMMENT_SYMBOL: + continue + date = row.split('/') + check_date = datetime.date(int(date[0]), int(date[1]), int(date[2])).strftime('%Y/%m/%d') + check_date_list.append(check_date) + if today in check_date_list: + info_log('I-02-05', '本日はチェック処理実施指定日のため、チェック処理を実施します') + else: + info_log('I-02-06', '本日はチェック処理実施指定日ではないため、チェック処理をスキップします') + sys.exit() + except Exception as e: + error_log('E-02-02', f'チェック処理実施指定日設定ファイルに不備があります 行数:{i}') + error_process('E-02-02', e) + + # ③ 設定ファイル[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ファイルネーム設定ファイルの読み込みに失敗しました', e) + error_process('E-03-01', e) + + # ④ 月次チェック処理を行う + info_log('I-04-01', '月次チェック処理開始') + + # 1.オブジェクトリストを取得する + info_log('I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{month}/') + object_prefix = f'{month}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + + # 2.月次I/Fファイルチェック処理 + info_log('I-04-03', '月次I/Fファイルチェック処理開始') + info_log('I-04-04', '取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = 0 + match_count = 0 + for i, row in io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): + row_count = i + file_exsit = False + for object in object_list: + object_key = object.key.rsplit('/', 1) + file_name = object_key[-1] + match_result = re.fullmatch(row[0], file_name) + if match_result is not None: + file_exsit = True + break + if file_exsit == True: + match_count += 1 + info_log('I-04-05', f'月次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + error_log('E-04-01', f'月次I/Fファイルに不足があります ファイル名:{row}') + mail_msg = mail_msg + f'  {row[1]}\n' + if row_count == match_count: + info_log('I-04-06', '月次I/Fファイルは全て受領していることを確認しました') + + # ⑤ メール通知本文に出力内容が存在するか確認する + info_log('I-05-01', 'メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + info_log('I-05-02', f'{month} 月次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', f'{month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + info_log('I-06-01', '処理終了 SAP_supデータ受領チェック処理(月次)') + 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.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.datetime.now():%Y-%m-%d %H:%M:%S} Error {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) + + +def error_process(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, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') + sys.exit() + except Exception as e: + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + sys.exit() \ No newline at end of file From 4e02590f9727483a6e034f17aa86c590d0917ae8 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Tue, 24 May 2022 18:02:05 +0900 Subject: [PATCH 12/47] =?UTF-8?q?fix:SAP=5Fsup=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=EF=BC=88=E6=9C=88?= =?UTF-8?q?=E6=AC=A1=EF=BC=89=20=E3=83=BBproducti=E2=86=92staging=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=E3=83=BB=E6=97=A5=E6=AC=A1=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E3=82=82=E3=81=A8=E3=81=AB=E3=81=97=E3=81=9F=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ct-lambda-sap-sup-receive-check-monthly.py | 192 ------------------ ...ng-lambda-sap-sup-receive-check-monthly.py | 191 +++++++++++++++++ 2 files changed, 191 insertions(+), 192 deletions(-) delete mode 100644 lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py diff --git a/lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py deleted file mode 100644 index 024b8a9c..00000000 --- a/lambda/mbj-newdwh2021-product-lambda-sap-sup-receive-check-monthly.py +++ /dev/null @@ -1,192 +0,0 @@ -import os -import datetime -import boto3 -import io -import re -import sys - -# 環境変数 -CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] -CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] -RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] -MONTHLY_CEHCK_DAY_LIST_PATH = os.environ["MONTHLY_CEHCK_DAY_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データ受領チェック処理(月次)') - datetoday = datetime.date.today() - today = datetoday.strftime('%Y/%m/%d') - month = f'{datetoday.strftime("%Y")}/{datetoday.strftime("%m")}' - info_log('I-01-02', f'処理稼働日:{today}') - - # ② 営業日チェック処理を行う - info_log('I-02-01', 'チェック処理実施指定日確認処理開始') - - # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む - try: - info_log('I-02-02', f'チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') - monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) - monthly_day_response = monthly_day_obj.get() - info_log('I-02-03', 'チェック処理実施指定日ファイルを読み込みました') - except Exception as e: - error_log('E-02-01', 'チェック処理実施指定日設定ファイルの読み込みに失敗しました') - error_process('E-02-01', e) - - # 2.処理稼働日が「1」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する - try: -# today = datetime.date.today() - info_log('I-02-04', f'本日がチェック処理実施指定日か確認します 確認日:{today}') - check_date_list = [] - for i, row in io.TextIOWrapper(io.BytesIO(monthly_day_response["Body"].read()), encoding='utf-8'): - if row[0] == ROW_COMMENT_SYMBOL: - continue - date = row.split('/') - check_date = datetime.date(int(date[0]), int(date[1]), int(date[2])).strftime('%Y/%m/%d') - check_date_list.append(check_date) - if today in check_date_list: - info_log('I-02-05', '本日はチェック処理実施指定日のため、チェック処理を実施します') - else: - info_log('I-02-06', '本日はチェック処理実施指定日ではないため、チェック処理をスキップします') - sys.exit() - except Exception as e: - error_log('E-02-02', f'チェック処理実施指定日設定ファイルに不備があります 行数:{i}') - error_process('E-02-02', e) - - # ③ 設定ファイル[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ファイルネーム設定ファイルの読み込みに失敗しました', e) - error_process('E-03-01', e) - - # ④ 月次チェック処理を行う - info_log('I-04-01', '月次チェック処理開始') - - # 1.オブジェクトリストを取得する - info_log('I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{month}/') - object_prefix = f'{month}/' - object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) - - # 2.月次I/Fファイルチェック処理 - info_log('I-04-03', '月次I/Fファイルチェック処理開始') - info_log('I-04-04', '取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = 0 - match_count = 0 - for i, row in io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): - row_count = i - file_exsit = False - for object in object_list: - object_key = object.key.rsplit('/', 1) - file_name = object_key[-1] - match_result = re.fullmatch(row[0], file_name) - if match_result is not None: - file_exsit = True - break - if file_exsit == True: - match_count += 1 - info_log('I-04-05', f'月次I/Fファイルの受領を確認しました ファイル名:{file_name}') - else: - error_log('E-04-01', f'月次I/Fファイルに不足があります ファイル名:{row}') - mail_msg = mail_msg + f'  {row[1]}\n' - if row_count == match_count: - info_log('I-04-06', '月次I/Fファイルは全て受領していることを確認しました') - - # ⑤ メール通知本文に出力内容が存在するか確認する - info_log('I-05-01', 'メール送信処理開始') - - if len(mail_msg) > 0: - # 1.存在した場合 - info_log('I-05-02', f'{month} 月次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', f'{month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') - - # ⑥ 処理終了ログを出力する - info_log('I-06-01', '処理終了 SAP_supデータ受領チェック処理(月次)') - 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.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.datetime.now():%Y-%m-%d %H:%M:%S} Error {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) - - -def error_process(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, - 'Subject': NDS_NOTICE_TITLE, - 'Message': error_msg - } - sns_client.publish(**params) - - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') - sys.exit() - except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') - sys.exit() \ No newline at end of file diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py new file mode 100644 index 00000000..6279c87a --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -0,0 +1,191 @@ +import os +import datetime +import boto3 +import io +import re +import sys +import csv + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +MONTHLY_CEHCK_DAY_LIST_PATH = os.environ["MONTHLY_CEHCK_DAY_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 = '#' +LOG_INFO = 'Info' +LOG_ERROR = 'Error' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 +INDEX_ROW_COMMENT_SYMBOL = 0 +INDEX_SPLIT_NUM = 0 +INDEX_LAST = -1 + +# 変数 +s3_client = boto3.client('s3') +s3_resource = boto3.resource('s3') +sns_client = boto3.client('sns') + + +def lambda_handler(event, context): + try: + # ① 処理開始ログを出力する + print_log('I-01-01', '処理開始 SAP_supデータ受領チェック処理(月次)') + datetoday = datetime.date.today() + today = datetoday.strftime('%Y/%m/%d') + month = f'{datetoday.strftime("%Y")}/{datetoday.strftime("%m")}' + print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') + mail_msg = '' + + # ② チェック処理実施指定日か確認を行う + print_log(LOG_INFO, 'I-02-01', 'チェック処理実施指定日確認処理開始') + + # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む + try: + print_log(LOG_INFO, 'I-02-02', f'チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') + monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) + monthly_day_response = monthly_day_obj.get() + print_log(LOG_INFO, 'I-02-03', 'チェック処理実施指定日ファイルを読み込みました') + except Exception as e: + print_log(LOG_ERROR, 'E-02-01', 'チェック処理実施指定日設定ファイルの読み込みに失敗しました') + error_process('E-02-01', e) + + # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する + try: + print_log(LOG_INFO, 'I-02-04', f'本日がチェック処理実施指定日か確認します 確認日:{today}') + check_date_list = [] + for i, row in enumerate(io.TextIOWrapper(io.BytesIO(monthly_day_response["Body"].read()), encoding='utf-8'), 1): + if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: + continue + check_date = datetime.datetime.strptime(row, "%Y/%m/%d").strftime('%Y/%m/%d') + check_date_list.append(check_date) + if today in check_date_list: + print_log(LOG_INFO, 'I-02-05', '本日はチェック処理実施指定日のため、チェック処理を実施します') + else: + print_log(LOG_INFO, 'I-02-06', '本日はチェック処理実施指定日ではないため、チェック処理をスキップします') + sys.exit() + except Exception as e: + print_log(LOG_ERROR, 'E-02-02', f'チェック処理実施指定日設定ファイルに不備があります 行数:{i}') + error_process('E-02-02', e) + + # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(月次)]を読み込む + try: + 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() + print_log(LOG_INFO, 'I-03-02', '月次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + print_log(LOG_ERROR, 'E-03-01', '月次I/Fファイルネーム設定ファイルの読み込みに失敗しました', e) + error_process('E-03-01', e) + + # ④ 月次チェック処理を行う + print_log(LOG_INFO, 'I-04-01', '月次チェック処理開始') + + # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する + print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{month}/') + object_prefix = f'{month}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + + # 2.月次I/Fファイルチェック処理 + print_log(LOG_INFO, 'I-04-03', '月次I/Fファイルチェック処理開始') + print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = 0 + match_count = 0 + receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): + for i, row in enumerate(csv.reader(receive_monthly_file_name_body, delimiter='\t'), 1): + row_count = i + file_exists = False + for object in object_list: + object_key = object.key.rsplit('/', INDEX_SPLIT_NUM) + file_name = object_key[INDEX_LAST] + match_result = re.fullmatch(row[INDEX_REGEX], file_name) + if match_result is not None: + file_exists = True + break + if file_exists == True: + match_count += 1 + print_log(LOG_INFO, 'I-04-05', f'月次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + print_log(LOG_ERROR, 'E-04-01', f'月次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]}\n' + if row_count == match_count: + print_log(LOG_INFO, 'I-04-06', '月次I/Fファイルは全て受領していることを確認しました') + + # ⑤ メール通知本文に出力内容が存在するか確認する + print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + print_log(LOG_INFO, 'I-05-02', f'{month} 月次I/Fファイルに不足があるため、メール送信処理を開始します') + + try: + 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') + print_log(LOG_INFO, 'I-05-04', '通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + print_log(LOG_ERROR, 'E-05-01', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') + error_process('E-05-01', e) + + try: + 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) + 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_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) + print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') + else: + # 2.存在しない場合 + print_log(LOG_INFO, 'I-05-09', f'{month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ受領チェック処理(月次)') + except Exception as e: + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') + error_process('E-99', e) + + +def print_log(log_level, log_id, msg): + 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_process('E-99', e) + + +def error_process(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, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 エラー終了 処理を中断します') + sys.exit() + except Exception as e: + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + sys.exit() \ No newline at end of file From 288b924b6ee156b12421d795df71b28b33086c75 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Tue, 24 May 2022 18:20:51 +0900 Subject: [PATCH 13/47] =?UTF-8?q?fix:SAP=5Fsup=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=EF=BC=88=E6=9C=88?= =?UTF-8?q?=E6=AC=A1=EF=BC=89=20=E3=83=BB=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=83=9F=E3=82=B9=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...j-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index 6279c87a..34cd673f 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -98,7 +98,7 @@ def lambda_handler(event, context): print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') row_count = 0 match_count = 0 - receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'): + receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') for i, row in enumerate(csv.reader(receive_monthly_file_name_body, delimiter='\t'), 1): row_count = i file_exists = False From 1924b6f7ec85a84daab5db3a7edc7a2a9de1cedb Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Tue, 24 May 2022 21:37:26 +0900 Subject: [PATCH 14/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=BE=A9=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E5=8B=95?= =?UTF-8?q?=E4=BD=9C=E7=A2=BA=E8=AA=8D=E6=99=82=E3=81=AB=E7=99=BA=E7=94=9F?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datadecrypt/main.py | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 6f9c76df..11f0260c 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -1,3 +1,4 @@ +from logging import exception import os import sys import boto3 @@ -36,10 +37,6 @@ TARGET_BUCKET_BY_DATA_SOURCE = { s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') -event_bucket_name = '' -event_file_path = '' -event_file_name = '' -event_data_source_name = '' def handler(event, context): @@ -50,7 +47,7 @@ def handler(event, context): print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する try: @@ -66,7 +63,7 @@ def handler(event, context): print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) # ③ S3から秘密鍵ファイルを読み込む try: @@ -74,8 +71,8 @@ def handler(event, context): s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) print_log(LOG_INFO, 'I-03-02', '秘密鍵ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-03-01', '秘密鍵ファイルの読み込みに失敗しました') - error_process(EXTENSION_ERROR, 'I-03-01', e) + print_log(LOG_ERROR, 'E-03-01', f'秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'I-03-01', e) # ④ S3からPGP暗号化ファイルを読み込む try: @@ -84,7 +81,7 @@ def handler(event, context): print_log(LOG_INFO, 'I-04-02', 'PGP暗号化ファイルを読み込みました') except Exception as e: try: - print_log(LOG_ERROR, 'E-04-01', 'PGP暗号化ファイルの読み込みに失敗しました') + print_log(LOG_ERROR, 'E-04-01', f'PGP暗号化ファイルの読み込みに失敗しました エラー内容:{e}') result_error_file_name = event_file_name + EXTENSION_ERROR result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name @@ -105,7 +102,7 @@ def handler(event, context): sys.exit() except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う try: @@ -115,20 +112,19 @@ def handler(event, context): gpg.import_keys(key_file.read()) print_log(LOG_INFO, 'I-05-02', '秘密鍵ファイルをインポートしました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', '秘密鍵ファイルのインポートに失敗しました') - error_process(EXTENSION_ERROR, 'E-05-01', e) + print_log(LOG_ERROR, 'E-05-01', f'秘密鍵ファイルのインポートに失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'E-05-01', e) # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する try: print_log(LOG_INFO, 'I-06-01', 'PGP暗号化ファイルの復号化') with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file: gpg.decrypt_file(temp_encrypr_file, output=PATH_TEMP_DECRYPT_FILE) - with open(PATH_TEMP_DECRYPT_FILE, 'rb') as temp_decrypt_file: - decrypt_file = temp_decrypt_file + decrypt_file = open(PATH_TEMP_DECRYPT_FILE, 'rb') print_log(LOG_INFO, 'I-06-02', 'PGP暗号化ファイルを復号しました') except Exception as e: - print_log(LOG_ERROR, 'E-06-01', 'PGP暗号化ファイルの復号化に失敗しました') - error_process(EXTENSION_DECRYPT_ERROR, 'E-06-01', e) + print_log(LOG_ERROR, 'E-06-01', f'PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_DECRYPT_ERROR, 'E-06-01', e) # ⑦ 各ファイルをS3に出力する try: @@ -141,48 +137,61 @@ def handler(event, context): print_log(LOG_INFO, 'I-07-02', f'復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) decrypt_file_obj.put(Body=decrypt_file) + decrypt_file.close print_log(LOG_INFO, 'I-07-03', '復号化ファイルをS3に出力しました') except Exception as e: - print_log(LOG_ERROR, 'E-07-01', '復号化ファイルのS3出力に失敗しました') - error_process(EXTENSION_ERROR, 'E-07-01', e) + print_log(LOG_ERROR, 'E-07-01', f'復号化ファイルのS3出力に失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'E-07-01', e) try: # 「④」で読み込んだPGP暗号化ファイルを以下に移動(コピー削除)する + copy_source = { + 'Bucket': event_bucket_name, + 'Key': event_file_path + } backup_file_key = f'{event_data_source_name}/{today}/{event_file_name}' - print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル出力 ファイル名:{event_file_name} 出力先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') - decrypt_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) - decrypt_file_obj.put(Body=decrypt_file) - print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイル出力をS3に出力しました') + print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル移動 移動元:{event_bucket_name}/{event_file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) + backup_file_obj.copy(copy_source) + s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) + print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイルをバックアップ用バケットに移動しました') except Exception as e: - print_log(LOG_ERROR, 'E-07-02', 'PGP暗号化ファイルのS3出力に失敗しました') - error_process(EXTENSION_ERROR, 'E-07-02', e) + print_log(LOG_ERROR, 'E-07-02', f'PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') + error_exit(event, EXTENSION_ERROR, 'E-07-02', e) # ⑧ 処理終了ログを出力する try: print_log(LOG_INFO, 'I-08-01', '処理終了 SAPデータ復号処理') except Exception as e: print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process(EXTENSION_ERROR, 'E-99', e) + error_exit(event, EXTENSION_ERROR, 'E-99', e) def print_log(log_level, log_id, msg): 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_process('E-99', e) + exception_msg = f'Error E-99 想定外のエラーが発生しました エラー内容:{e}' + print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {exception_msg}') + raise Exception(exception_msg) -def error_process(extension, error_log_id, exception): +def error_exit(event, extension, error_log_id, exception): # ① エラー処理を行う try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-01 エラー処理開始') + print_log(LOG_ERROR, 'E-ERR-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] result_error_file_name = event_file_name + extension result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) result_error_obj.put(Body='') - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-02 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + print_log(LOG_ERROR, 'E-ERR-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') copy_source = { 'Bucket': event_bucket_name, @@ -193,9 +202,9 @@ def error_process(extension, error_log_id, exception): error_obj = s3_resource.Object(event_bucket_name, error_key) error_obj.copy(copy_source) s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-03 recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') + print_log(LOG_ERROR, 'E-ERR-03', f'recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-04 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + print_log(LOG_ERROR, 'E-ERR-04', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -204,8 +213,8 @@ def error_process(extension, error_log_id, exception): } sns_client.publish(**params) - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-ERR-05 エラー終了 処理を中断します') + print_log(LOG_ERROR, 'E-ERR-05', 'エラー終了 処理を中断します') sys.exit() except Exception as e: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') + print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{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 15/47] =?UTF-8?q?fix: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=20=E5=8B=95=E4=BD=9C=E7=A2=BA=E8=AA=8D?= =?UTF-8?q?=E6=99=82=E3=81=AB=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F=E3=82=A8?= =?UTF-8?q?=E3=83=A9=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 c6f07b94a3cd6a9f1a28fc807da08852254f8fce Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Tue, 24 May 2022 23:05:16 +0900 Subject: [PATCH 16/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E5=8B=95=E4=BD=9C=E7=A2=BA?= =?UTF-8?q?=E8=AA=8D=E6=99=82=E3=81=AB=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ging-lambda-sap-fin-receive-check-daily.py | 44 +++++++++--------- ...ging-lambda-sap-sup-receive-check-daily.py | 46 +++++++++---------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 6a65c5f4..de8b880c 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -38,8 +38,8 @@ def lambda_handler(event, context): try: # ① 処理開始ログを出力する print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_finデータ受領チェック処理(日次)') - 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 = '' # ② 営業日チェック処理を行う @@ -52,26 +52,26 @@ def lambda_handler(event, context): non_business_day_response = non_business_day_obj.get() print_log(LOG_INFO, 'I-02-03', '非営業日設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-02-01', '非営業日設定ファイルの読み込みに失敗しました') - error_process('E-02-01', e) + print_log(LOG_ERROR, 'E-02-01', f'非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: - print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{today}') + print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{execute_date}') none_business_day_list = [] for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - non_date = datetime.datetime.strptime(row, "%Y/%m/%d").strftime('%Y/%m/%d') + non_date = datetime.datetime.strptime(row.rstrip('\n'), "%Y/%m/%d").strftime('%Y/%m/%d') none_business_day_list .append(non_date) - if today in none_business_day_list: + if execute_date in none_business_day_list: print_log(LOG_INFO, 'I-02-05', '本日は非営業日のため、チェック処理をスキップします') sys.exit() else: print_log(LOG_INFO, 'I-02-06', '本日は営業日のため、チェック処理を実施します') except Exception as e: - print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') - error_process('E-02-02', e) + print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i} エラー内容:{e}') + error_exit('E-02-02', e) # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む try: @@ -80,15 +80,15 @@ def lambda_handler(event, context): receive_daily_file_name_response = receive_daily_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) # ④ 日次チェック処理を行う print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') - object_prefix = f'{today}/' + print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + object_prefix = f'{execute_date}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) # 2.日次I/Fファイルチェック処理 @@ -121,7 +121,7 @@ def lambda_handler(event, context): if len(mail_msg) > 0: # 1.存在した場合 - print_log(LOG_INFO, 'I-05-02', f'{today} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + print_log(LOG_INFO, 'I-05-02', f'{execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') try: print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') @@ -129,8 +129,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}') @@ -139,8 +139,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 = { @@ -152,13 +152,13 @@ def lambda_handler(event, context): print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') else: # 2.存在しない場合 - print_log(LOG_INFO, 'I-05-09', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + print_log(LOG_INFO, 'I-05-09', f'{execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_finデータ受領チェック処理(日次)') 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): @@ -166,10 +166,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-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 64cff64f..79bc4ac9 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -25,7 +25,7 @@ LOG_ERROR = 'Error' INDEX_REGEX = 0 INDEX_DATA_NAME = 1 INDEX_ROW_COMMENT_SYMBOL = 0 -INDEX_SPLIT_NUM = 0 +INDEX_SPLIT_NUM = 1 INDEX_LAST = -1 # 変数 @@ -38,8 +38,8 @@ def lambda_handler(event, context): try: # ① 処理開始ログを出力する print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_supデータ受領チェック処理(日次)') - 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 = '' # ② 営業日チェック処理を行う @@ -52,26 +52,26 @@ def lambda_handler(event, context): non_business_day_response = non_business_day_obj.get() print_log(LOG_INFO, 'I-02-03', '非営業日設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-02-01', '非営業日設定ファイルの読み込みに失敗しました') - error_process('E-02-01', e) + print_log(LOG_ERROR, 'E-02-01', f'非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + error_exit('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: - print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{today}') + print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{execute_date}') none_business_day_list = [] for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - non_date = datetime.datetime.strptime(row, "%Y/%m/%d").strftime('%Y/%m/%d') + non_date = datetime.datetime.strptime(row.rstrip('\n'), "%Y/%m/%d").strftime('%Y/%m/%d') none_business_day_list .append(non_date) - if today in none_business_day_list: + if execute_date in none_business_day_list: print_log(LOG_INFO, 'I-02-05', '本日は非営業日のため、チェック処理をスキップします') sys.exit() else: print_log(LOG_INFO, 'I-02-06', '本日は営業日のため、チェック処理を実施します') except Exception as e: - print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i}') - error_process('E-02-02', e) + print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i} エラー内容:{e}') + error_exit('E-02-02', e) # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む try: @@ -80,15 +80,15 @@ def lambda_handler(event, context): receive_daily_file_name_response = receive_daily_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) # ④ 日次チェック処理を行う print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{today}/') - object_prefix = f'{today}/' + print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + object_prefix = f'{execute_date}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) # 2.日次I/Fファイルチェック処理 @@ -121,7 +121,7 @@ def lambda_handler(event, context): if len(mail_msg) > 0: # 1.存在した場合 - print_log(LOG_INFO, 'I-05-02', f'{today} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + print_log(LOG_INFO, 'I-05-02', f'{execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') try: print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') @@ -129,8 +129,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}') @@ -139,8 +139,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 = { @@ -152,13 +152,13 @@ def lambda_handler(event, context): print_log(LOG_INFO, 'I-05-08', 'メール送信指示をしました') else: # 2.存在しない場合 - print_log(LOG_INFO, 'I-05-09', f'{today} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + print_log(LOG_INFO, 'I-05-09', f'{execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ受領チェック処理(日次)') 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): @@ -166,10 +166,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 040901bae9a500512356356b62c1548da86ae638 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Wed, 25 May 2022 19:23:04 +0900 Subject: [PATCH 17/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E9=83=A8?= =?UTF-8?q?=E5=88=86=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 --- ...ging-lambda-sap-fin-receive-check-daily.py | 158 ++++++++++-------- ...ging-lambda-sap-sup-receive-check-daily.py | 156 +++++++++-------- 2 files changed, 177 insertions(+), 137 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index de8b880c..5dcff2ae 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -3,8 +3,8 @@ import datetime import boto3 import io import re -import sys import csv +import logging # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -20,160 +20,168 @@ NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] # 定数 ROW_COMMENT_SYMBOL = '#' -LOG_INFO = 'Info' -LOG_ERROR = 'Error' INDEX_REGEX = 0 INDEX_DATA_NAME = 1 INDEX_ROW_COMMENT_SYMBOL = 0 -INDEX_SPLIT_NUM = 0 +INDEX_SPLIT_NUM = 1 INDEX_LAST = -1 +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' # 変数 s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') +# logger設定 +logger = logging.getLogger() +logger.setLevel(logging.INFO) +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s.%(msecs)dZ\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +for handler in logger.handlers: + handler.setFormatter(formatter) + def lambda_handler(event, context): try: # ① 処理開始ログを出力する - print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_finデータ受領チェック処理(日次)') + logging.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(日次)') execute_date = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{execute_date}') + logging.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② 営業日チェック処理を行う - print_log(LOG_INFO, 'I-02-01', '営業日チェック処理開始') + logging.info('I-02-01 営業日チェック処理開始') # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む try: - print_log(LOG_INFO, 'I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + logging.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = non_business_day_obj.get() - print_log(LOG_INFO, 'I-02-03', '非営業日設定ファイルを読み込みました') + logging.info('I-02-03 非営業日設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-02-01', f'非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-02-01', e) + logging.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: - print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{execute_date}') + logging.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') none_business_day_list = [] - for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): + for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - non_date = datetime.datetime.strptime(row.rstrip('\n'), "%Y/%m/%d").strftime('%Y/%m/%d') + non_date = row.rstrip('\n') + # 日付妥当性判定 + try: + datetime.datetime.strptime(non_date, "%Y/%m/%d") + except Exception as e: + raise e none_business_day_list .append(non_date) if execute_date in none_business_day_list: - print_log(LOG_INFO, 'I-02-05', '本日は非営業日のため、チェック処理をスキップします') - sys.exit() + logging.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') + return else: - print_log(LOG_INFO, 'I-02-06', '本日は営業日のため、チェック処理を実施します') + logging.info('I-02-06 本日は営業日のため、チェック処理を実施します') except Exception as e: - print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i} エラー内容:{e}') - error_exit('E-02-02', e) + logging.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') + raise NoneBusinessDayException('E-02-02', e) # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む try: - print_log(LOG_INFO, 'I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + logging.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = receive_daily_file_name_obj.get() - print_log(LOG_INFO, 'I-03-02', '日次I/Fファイルネーム設定ファイルを読み込みました') + logging.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) + logging.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) # ④ 日次チェック処理を行う - print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') + logging.info('I-04-01 日次チェック処理開始') # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + logging.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') object_prefix = f'{execute_date}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + file_list = [] + for obj in object_list: + obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) + file_list.append(obj_key[INDEX_LAST]) # 2.日次I/Fファイルチェック処理 - print_log(LOG_INFO, 'I-04-03', '日次I/Fファイルチェック処理開始') - print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = 0 + logging.info('I-04-03 日次I/Fファイルチェック処理開始') + logging.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): - row_count = i file_exists = False - for object in object_list: - object_key = object.key.rsplit('/', INDEX_SPLIT_NUM) - file_name = object_key[INDEX_LAST] + for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) if match_result is not None: file_exists = True break if file_exists == True: match_count += 1 - print_log(LOG_INFO, 'I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + logging.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - print_log(LOG_ERROR, 'E-04-01', f'日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') - mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]}\n' + logging.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' if row_count == match_count: - print_log(LOG_INFO, 'I-04-06', '日次I/Fファイルは全て受領していることを確認しました') + logging.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') + logging.info('I-05-01 メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - print_log(LOG_INFO, 'I-05-02', f'{execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + logging.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') try: - print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + logging.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', '通知メール(タイトル)テンプレートファイルを読み込みました') + logging.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-01', e) + logging.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}') + logging.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', '通知メール(本文)テンプレートファイルを読み込みました') + logging.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-02', e) + logging.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) - print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + logging.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', 'メール送信指示をしました') + logging.info('I-05-08 メール送信指示をしました') else: # 2.存在しない場合 - print_log(LOG_INFO, 'I-05-09', f'{execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + logging.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_finデータ受領チェック処理(日次)') + logging.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(日次)') + 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) + logging.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, @@ -181,9 +189,21 @@ 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() + logging.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() + logging.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + return + + +class CustomException(Exception): + 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-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 79bc4ac9..5c87970a 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -3,8 +3,8 @@ import datetime import boto3 import io import re -import sys import csv +import logging # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -20,160 +20,168 @@ NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] # 定数 ROW_COMMENT_SYMBOL = '#' -LOG_INFO = 'Info' -LOG_ERROR = 'Error' INDEX_REGEX = 0 INDEX_DATA_NAME = 1 INDEX_ROW_COMMENT_SYMBOL = 0 INDEX_SPLIT_NUM = 1 INDEX_LAST = -1 +# メール本文に出力する不足ファイル名一覧のインデント +MAIL_INDENT = '  ' # 変数 s3_client = boto3.client('s3') s3_resource = boto3.resource('s3') sns_client = boto3.client('sns') +# logger設定 +logger = logging.getLogger() +logger.setLevel(logging.INFO) +formatter = logging.Formatter( + '[%(levelname)s]\t%(asctime)s.%(msecs)dZ\t%(message)s\n', + '%Y-%m-%d %H:%M:%S' +) +for handler in logger.handlers: + handler.setFormatter(formatter) + def lambda_handler(event, context): try: # ① 処理開始ログを出力する - print_log(LOG_INFO, 'I-01-01', '処理開始 SAP_supデータ受領チェック処理(日次)') + logging.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(日次)') execute_date = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{execute_date}') + logging.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② 営業日チェック処理を行う - print_log(LOG_INFO, 'I-02-01', '営業日チェック処理開始') + logging.info('I-02-01 営業日チェック処理開始') # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む try: - print_log(LOG_INFO, 'I-02-02', f'非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + logging.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = non_business_day_obj.get() - print_log(LOG_INFO, 'I-02-03', '非営業日設定ファイルを読み込みました') + logging.info('I-02-03 非営業日設定ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-02-01', f'非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-02-01', e) + logging.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: - print_log(LOG_INFO, 'I-02-04', f'本日が非営業日かチェックします チェック日:{execute_date}') + logging.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') none_business_day_list = [] - for i, row in enumerate(io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'), 1): + for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - non_date = datetime.datetime.strptime(row.rstrip('\n'), "%Y/%m/%d").strftime('%Y/%m/%d') + non_date = row.rstrip('\n') + # 日付妥当性判定 + try: + datetime.datetime.strptime(non_date, "%Y/%m/%d") + except Exception as e: + raise e none_business_day_list .append(non_date) if execute_date in none_business_day_list: - print_log(LOG_INFO, 'I-02-05', '本日は非営業日のため、チェック処理をスキップします') - sys.exit() + logging.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') + return else: - print_log(LOG_INFO, 'I-02-06', '本日は営業日のため、チェック処理を実施します') + logging.info('I-02-06 本日は営業日のため、チェック処理を実施します') except Exception as e: - print_log(LOG_ERROR, 'E-02-02', f'メルク社非営業日設定ファイルに不備があります 行数:{i} エラー内容:{e}') - error_exit('E-02-02', e) + logging.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') + raise NoneBusinessDayException('E-02-02', e) # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む try: - print_log(LOG_INFO, 'I-03-01', f'日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + logging.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = receive_daily_file_name_obj.get() - print_log(LOG_INFO, 'I-03-02', '日次I/Fファイルネーム設定ファイルを読み込みました') + logging.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) + logging.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) # ④ 日次チェック処理を行う - print_log(LOG_INFO, 'I-04-01', '日次チェック処理開始') + logging.info('I-04-01 日次チェック処理開始') # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + logging.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') object_prefix = f'{execute_date}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + file_list = [] + for obj in object_list: + obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) + file_list.append(obj_key[INDEX_LAST]) # 2.日次I/Fファイルチェック処理 - print_log(LOG_INFO, 'I-04-03', '日次I/Fファイルチェック処理開始') - print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = 0 + logging.info('I-04-03 日次I/Fファイルチェック処理開始') + logging.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): - row_count = i file_exists = False - for object in object_list: - object_key = object.key.rsplit('/', INDEX_SPLIT_NUM) - file_name = object_key[INDEX_LAST] + for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) if match_result is not None: file_exists = True break if file_exists == True: match_count += 1 - print_log(LOG_INFO, 'I-04-05', f'日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + logging.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - print_log(LOG_ERROR, 'E-04-01', f'日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') - mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]}\n' + logging.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' if row_count == match_count: - print_log(LOG_INFO, 'I-04-06', '日次I/Fファイルは全て受領していることを確認しました') + logging.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - print_log(LOG_INFO, 'I-05-01', 'メール送信処理開始') + logging.info('I-05-01 メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - print_log(LOG_INFO, 'I-05-02', f'{execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + logging.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') try: - print_log(LOG_INFO, 'I-05-03', f'通知メール(タイトル)テンプレートファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NOTICE_MAIL_TITLE_TEMPLATE_PATH}') + logging.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', '通知メール(タイトル)テンプレートファイルを読み込みました') + logging.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-01', f'通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-01', e) + logging.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}') + logging.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', '通知メール(本文)テンプレートファイルを読み込みました') + logging.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-05-02', f'通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') - error_exit('E-05-02', e) + logging.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) - print_log(LOG_INFO, 'I-05-07', f'メール送信指示をします 送信先トピック:{MBJ_SAP_NOTICE_TOPIC}') + logging.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', 'メール送信指示をしました') + logging.info('I-05-08 メール送信指示をしました') else: # 2.存在しない場合 - print_log(LOG_INFO, 'I-05-09', f'{execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + logging.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ受領チェック処理(日次)') + logging.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(日次)') + 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) + logging.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, @@ -181,9 +189,21 @@ 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() + logging.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() + logging.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + return + + +class CustomException(Exception): + def __init__(self, id, arg): + self.arg = arg + self.id = id + + +class FileReadException(CustomException): + pass + + +class NoneBusinessDayException(CustomException): + pass From ce214017eb89791c8207559e688dbcdfdae9d4ee Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Wed, 25 May 2022 19:35:35 +0900 Subject: [PATCH 18/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=83=AD=E3=82=B0=E3=83=AC?= =?UTF-8?q?=E3=83=99=E3=83=AB=E3=82=92=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E3=81=A7=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=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 --- ...2021-staging-lambda-sap-fin-receive-check-daily.py | 11 ++++++++--- ...2021-staging-lambda-sap-sup-receive-check-daily.py | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 5dcff2ae..cedc103c 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -17,6 +17,7 @@ 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"] # 定数 ROW_COMMENT_SYMBOL = '#' @@ -25,6 +26,7 @@ INDEX_DATA_NAME = 1 INDEX_ROW_COMMENT_SYMBOL = 0 INDEX_SPLIT_NUM = 1 INDEX_LAST = -1 + # メール本文に出力する不足ファイル名一覧のインデント MAIL_INDENT = '  ' @@ -35,14 +37,17 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() -logger.setLevel(logging.INFO) formatter = logging.Formatter( - '[%(levelname)s]\t%(asctime)s.%(msecs)dZ\t%(message)s\n', + '[%(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: @@ -78,7 +83,7 @@ def lambda_handler(event, context): datetime.datetime.strptime(non_date, "%Y/%m/%d") except Exception as e: raise e - none_business_day_list .append(non_date) + none_business_day_list.append(non_date) if execute_date in none_business_day_list: logging.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') return diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 5c87970a..be82a7e4 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -17,6 +17,7 @@ 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"] # 定数 ROW_COMMENT_SYMBOL = '#' @@ -25,6 +26,7 @@ INDEX_DATA_NAME = 1 INDEX_ROW_COMMENT_SYMBOL = 0 INDEX_SPLIT_NUM = 1 INDEX_LAST = -1 + # メール本文に出力する不足ファイル名一覧のインデント MAIL_INDENT = '  ' @@ -35,14 +37,17 @@ sns_client = boto3.client('sns') # logger設定 logger = logging.getLogger() -logger.setLevel(logging.INFO) formatter = logging.Formatter( - '[%(levelname)s]\t%(asctime)s.%(msecs)dZ\t%(message)s\n', + '[%(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: @@ -78,7 +83,7 @@ def lambda_handler(event, context): datetime.datetime.strptime(non_date, "%Y/%m/%d") except Exception as e: raise e - none_business_day_list .append(non_date) + none_business_day_list.append(non_date) if execute_date in none_business_day_list: logging.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') return From 031dcdd02eccd0f345c345b0e7ffa5cf58f6a089 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Wed, 25 May 2022 22:27:29 +0900 Subject: [PATCH 19/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20logger=E3=81=AE=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0Exception=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=B9=E3=82=92=E6=8A=BD=E8=B1=A1=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ging-lambda-sap-fin-receive-check-daily.py | 74 ++++++++++--------- ...ging-lambda-sap-sup-receive-check-daily.py | 74 ++++++++++--------- 2 files changed, 76 insertions(+), 72 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index cedc103c..c175d15c 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -5,6 +5,7 @@ import io import re import csv import logging +from abc import * # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -49,30 +50,31 @@ if not isinstance(level, int): level = logging.INFO logger.setLevel(level) + def lambda_handler(event, context): try: # ① 処理開始ログを出力する - logging.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(日次)') + logger.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(日次)') execute_date = datetime.date.today().strftime('%Y/%m/%d') - logging.info(f'I-01-02 処理稼働日:{execute_date}') + logger.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② 営業日チェック処理を行う - logging.info('I-02-01 営業日チェック処理開始') + logger.info('I-02-01 営業日チェック処理開始') # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む try: - logging.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = non_business_day_obj.get() - logging.info('I-02-03 非営業日設定ファイルを読み込みました') + logger.info('I-02-03 非営業日設定ファイルを読み込みました') except Exception as e: - logging.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: - logging.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') + logger.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') none_business_day_list = [] for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: @@ -85,29 +87,29 @@ def lambda_handler(event, context): raise e none_business_day_list.append(non_date) if execute_date in none_business_day_list: - logging.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') + logger.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') return else: - logging.info('I-02-06 本日は営業日のため、チェック処理を実施します') + logger.info('I-02-06 本日は営業日のため、チェック処理を実施します') except Exception as e: - logging.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') + logger.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') raise NoneBusinessDayException('E-02-02', e) # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(日次)]を読み込む try: - logging.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = receive_daily_file_name_obj.get() - logging.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') + logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - logging.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-03-01', e) # ④ 日次チェック処理を行う - logging.info('I-04-01 日次チェック処理開始') + logger.info('I-04-01 日次チェック処理開始') # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - logging.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') object_prefix = f'{execute_date}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) file_list = [] @@ -116,8 +118,8 @@ def lambda_handler(event, context): file_list.append(obj_key[INDEX_LAST]) # 2.日次I/Fファイルチェック処理 - logging.info('I-04-03 日次I/Fファイルチェック処理開始') - logging.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + logger.info('I-04-03 日次I/Fファイルチェック処理開始') + logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') @@ -130,57 +132,57 @@ def lambda_handler(event, context): break if file_exists == True: match_count += 1 - logging.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + logger.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - logging.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + logger.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' if row_count == match_count: - logging.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') + logger.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - logging.info('I-05-01 メール送信処理開始') + logger.info('I-05-01 メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - logging.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + logger.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') try: - logging.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{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') - logging.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - logging.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-05-01', e) try: - logging.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{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) - logging.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - logging.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-05-02', e) - logging.info(f'I-05-07 メール送信指示をします 送信先トピック:{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) - logging.info('I-05-08 メール送信指示をしました') + logger.info('I-05-08 メール送信指示をしました') else: # 2.存在しない場合 - logging.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + logger.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - logging.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(日次)') + logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(日次)') except CustomException as e: error_notice(e.id, e.arg) except Exception as e: - logging.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') error_notice('E-99', e) return @@ -194,13 +196,13 @@ def error_notice(error_log_id, exception) -> None: 'Message': error_msg } sns_client.publish(**params) - logging.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: - logging.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') return -class CustomException(Exception): +class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): self.arg = arg self.id = id diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index be82a7e4..524322ca 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -5,6 +5,7 @@ import io import re import csv import logging +from abc import * # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -49,30 +50,31 @@ if not isinstance(level, int): level = logging.INFO logger.setLevel(level) + def lambda_handler(event, context): try: # ① 処理開始ログを出力する - logging.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(日次)') + logger.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(日次)') execute_date = datetime.date.today().strftime('%Y/%m/%d') - logging.info(f'I-01-02 処理稼働日:{execute_date}') + logger.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② 営業日チェック処理を行う - logging.info('I-02-01 営業日チェック処理開始') + logger.info('I-02-01 営業日チェック処理開始') # 1.設定ファイル[メルク社非営業日設定ファイル]を読み込む try: - logging.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') + logger.info(f'I-02-02 非営業日設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{NON_BUSINESS_DAY_LIST_PATH}') non_business_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, NON_BUSINESS_DAY_LIST_PATH) non_business_day_response = non_business_day_obj.get() - logging.info('I-02-03 非営業日設定ファイルを読み込みました') + logger.info('I-02-03 非営業日設定ファイルを読み込みました') except Exception as e: - logging.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-02-01 非営業日設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「メルク社非営業日設定ファイル」に存在するか確認する try: - logging.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') + logger.info(f'I-02-04 本日が非営業日かチェックします チェック日:{execute_date}') none_business_day_list = [] for row in io.TextIOWrapper(io.BytesIO(non_business_day_response["Body"].read()), encoding='utf-8'): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: @@ -85,29 +87,29 @@ def lambda_handler(event, context): raise e none_business_day_list.append(non_date) if execute_date in none_business_day_list: - logging.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') + logger.info('I-02-05 本日は非営業日のため、チェック処理をスキップします') return else: - logging.info('I-02-06 本日は営業日のため、チェック処理を実施します') + logger.info('I-02-06 本日は営業日のため、チェック処理を実施します') except Exception as e: - logging.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') + logger.error(f'E-02-02 メルク社非営業日設定ファイルに不備があります エラー内容:{e}') raise NoneBusinessDayException('E-02-02', e) # ③ 設定ファイル[SAP_supI/Fファイルネーム設定ファイル(日次)]を読み込む try: - logging.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') + logger.info(f'I-03-01 日次I/Fファイルネーム設定ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{RECEIVE_DAILY_FILE_NAME_LIST_PATH}') receive_daily_file_name_obj = s3_resource.Object(CONFIG_BUCKET_NAME, RECEIVE_DAILY_FILE_NAME_LIST_PATH) receive_daily_file_name_response = receive_daily_file_name_obj.get() - logging.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') + logger.info('I-03-02 日次I/Fファイルネーム設定ファイルを読み込みました') except Exception as e: - logging.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-03-01 日次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-03-01', e) # ④ 日次チェック処理を行う - logging.info('I-04-01 日次チェック処理開始') + logger.info('I-04-01 日次チェック処理開始') # 1.SAP保管用バケットの処理稼働日に該当するサブフォルダにあるファイル一覧を取得する - logging.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') + logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_date}/') object_prefix = f'{execute_date}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) file_list = [] @@ -116,8 +118,8 @@ def lambda_handler(event, context): file_list.append(obj_key[INDEX_LAST]) # 2.日次I/Fファイルチェック処理 - logging.info('I-04-03 日次I/Fファイルチェック処理開始') - logging.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') + logger.info('I-04-03 日次I/Fファイルチェック処理開始') + logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') @@ -130,57 +132,57 @@ def lambda_handler(event, context): break if file_exists == True: match_count += 1 - logging.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') + logger.info(f'I-04-05 日次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - logging.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + logger.error(f'E-04-01 日次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' if row_count == match_count: - logging.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') + logger.info('I-04-06 日次I/Fファイルは全て受領していることを確認しました') # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する - logging.info('I-05-01 メール送信処理開始') + logger.info('I-05-01 メール送信処理開始') if len(mail_msg) > 0: # 1.存在した場合 - logging.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') + logger.info(f'I-05-02 {execute_date} 日次I/Fファイルに不足があるため、メール送信処理を開始します') try: - logging.info(f'I-05-03 通知メール(タイトル)テンプレートファイル読込 読込元:{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') - logging.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') except Exception as e: - logging.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-05-01', e) try: - logging.info(f'I-05-05 通知メール(本文)テンプレートファイル読込 読込元:{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) - logging.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: - logging.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-05-02', e) - logging.info(f'I-05-07 メール送信指示をします 送信先トピック:{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) - logging.info('I-05-08 メール送信指示をしました') + logger.info('I-05-08 メール送信指示をしました') else: # 2.存在しない場合 - logging.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + logger.info(f'I-05-09 {execute_date} 日次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - logging.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(日次)') + logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(日次)') except CustomException as e: error_notice(e.id, e.arg) except Exception as e: - logging.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') error_notice('E-99', e) return @@ -194,13 +196,13 @@ def error_notice(error_log_id, exception) -> None: 'Message': error_msg } sns_client.publish(**params) - logging.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: - logging.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') return -class CustomException(Exception): +class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): self.arg = arg self.id = id From 9bfd316292b0bcf5c9c31d5f25464292c300710b Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 00:23:56 +0900 Subject: [PATCH 20/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=BE=A9=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87?= =?UTF-8?q?=E6=91=98=E9=83=A8=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datadecrypt/main.py | 345 ++++++++++-------- 1 file changed, 191 insertions(+), 154 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 11f0260c..7ff4145f 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -1,9 +1,10 @@ -from logging import exception +import logging import os -import sys import boto3 import gnupg import datetime +import logging +from abc import * # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] @@ -15,14 +16,13 @@ DATA_SOURCE_SAP_SUP = os.environ["DATA_SOURCE_SAP_SUP"] DATA_SOURCE_SAP_FIN = os.environ["DATA_SOURCE_SAP_FIN"] NDS_NOTICE_TOPIC = os.environ["NDS_NOTICE_TOPIC"] NDS_NOTICE_TITLE = os.environ["NDS_NOTICE_TITLE"] +LOG_LEVEL = os.environ["LOG_LEVEL"] # 定数 DIRECTORY_RECV = '/recv/' DIRECTORY_RECV_ERROR = '/recv_error/' EXTENSION_ERROR = '.error' EXTENSION_DECRYPT_ERROR = '.decrypt_error' -LOG_INFO = 'Info' -LOG_ERROR = 'Error' INDEX_EXTENSION_DELETE_NUM = -4 PATH_TEMP = '/tmp' PATH_TEMP_PRIVATE_KEY = '/tmp/private.key' @@ -38,173 +38,159 @@ 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 handler(event, context): - # ① 処理開始ログを出力する try: - print_log(LOG_INFO, 'I-01-01', '処理開始 SAPデータ復号処理') - today = datetime.date.today().strftime('%Y/%m/%d') - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') - except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-99', e) + # ① 処理開始ログを出力する + logger.info('I-01-01 処理開始 SAPデータ復号処理') + execute_date = datetime.date.today().strftime('%Y/%m/%d') + logger.info(f'I-01-02 処理稼働日:{execute_date}') - # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する - try: - print_log(LOG_INFO, 'I-02-01', 'イベント情報出力処理') + # ② 処理開始時に受け取ったイベント情報の以下内容をログに出力しメモリに保持する + logger.info('I-02-01 イベント情報出力処理') + s3_event = S3EventInfo(event["Records"][0]["s3"]) + logger.info(f'I-02-02 バケット名:{s3_event.bucket_name}') + logger.info(f'I-02-03 ファイルパス:{s3_event.file_path}') + logger.info(f'I-02-04 データソース名:{s3_event.data_source_name}') - 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] - 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}') - except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-99', e) - - # ③ S3から秘密鍵ファイルを読み込む - try: - print_log(LOG_INFO, 'I-03-01', f'秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') - s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) - print_log(LOG_INFO, 'I-03-02', '秘密鍵ファイルを読み込みました') - except Exception as e: - print_log(LOG_ERROR, 'E-03-01', f'秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'I-03-01', e) - - # ④ S3からPGP暗号化ファイルを読み込む - try: - print_log(LOG_INFO, 'I-04-01', f'PGP暗号化ファイル読込 読込元:{event_bucket_name}/{event_file_path}') - s3_client.download_file(event_bucket_name, event_file_path, PATH_TEMP_ENCRYPT_FILE) - print_log(LOG_INFO, 'I-04-02', 'PGP暗号化ファイルを読み込みました') - except Exception as e: + # ③ S3からPGP暗号化ファイルを読み込む try: - print_log(LOG_ERROR, 'E-04-01', f'PGP暗号化ファイルの読み込みに失敗しました エラー内容:{e}') - - result_error_file_name = event_file_name + EXTENSION_ERROR - result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name - result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) - result_error_obj.put(Body='') - print_log(LOG_ERROR, 'E-04-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') - - print_log(LOG_ERROR, 'E-04-03', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') - error_msg = f'E-04-01 のエラーが発生しました。ご確認ください\n詳細:{e}' - params = { - 'TopicArn': NDS_NOTICE_TOPIC, - 'Subject': NDS_NOTICE_TITLE, - 'Message': error_msg - } - sns_client.publish(**params) - - print_log(LOG_ERROR, 'E-04-04', 'エラー終了 処理を中断します') - sys.exit() + logger.info(f'I-03-01 PGP暗号化ファイル読込 読込元:{s3_event.bucket_name}/{s3_event.file_path}') + s3_client.download_file(s3_event.bucket_name, s3_event.file_path, PATH_TEMP_ENCRYPT_FILE) + logger.info('I-03-02 PGP暗号化ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-99', e) + logger.error(f'E-03-01 PGP暗号化ファイルの読み込みに失敗しました エラー内容:{e}') + raise EncryptFileReadException('E-03-01', EXTENSION_ERROR, e) - # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う - try: - print_log(LOG_INFO, 'I-05-01', '秘密鍵ファイルインポート') - gpg = gnupg.GPG(gnupghome=PATH_TEMP) - with open(PATH_TEMP_PRIVATE_KEY) as key_file: - gpg.import_keys(key_file.read()) - print_log(LOG_INFO, 'I-05-02', '秘密鍵ファイルをインポートしました') - except Exception as e: - print_log(LOG_ERROR, 'E-05-01', f'秘密鍵ファイルのインポートに失敗しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-05-01', e) + # ④ S3から秘密鍵ファイルを読み込む + try: + logger.info('I-04-01 秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') + s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) + logger.info('I-04-02 秘密鍵ファイルを読み込みました') + except Exception as e: + logger.error(f'E-04-01 秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-04-01', EXTENSION_ERROR, e) - # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する - try: - print_log(LOG_INFO, 'I-06-01', 'PGP暗号化ファイルの復号化') - with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file: - gpg.decrypt_file(temp_encrypr_file, output=PATH_TEMP_DECRYPT_FILE) - decrypt_file = open(PATH_TEMP_DECRYPT_FILE, 'rb') - print_log(LOG_INFO, 'I-06-02', 'PGP暗号化ファイルを復号しました') - except Exception as e: - print_log(LOG_ERROR, 'E-06-01', f'PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}') - error_exit(event, EXTENSION_DECRYPT_ERROR, 'E-06-01', e) + # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う + try: + logger.info('I-05-01 秘密鍵ファイルインポート') + gpg = gnupg.GPG(gnupghome=PATH_TEMP) + with open(PATH_TEMP_PRIVATE_KEY) as key_file: + gpg.import_keys(key_file.read()) + logger.info('I-05-02 秘密鍵ファイルをインポートしました') + except Exception as e: + logger.error(f'E-05-01 秘密鍵ファイルのインポートに失敗しました エラー内容:{e}') + raise PrivateKeyImportException('E-05-01', EXTENSION_ERROR, e) - # ⑦ 各ファイルをS3に出力する - try: - print_log(LOG_INFO, 'I-07-01', '各ファイルをS3に出力する') + # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する + try: + logger.info('I-06-01 PGP暗号化ファイルの復号化') + with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file: + gpg.decrypt_file(temp_encrypr_file, output=PATH_TEMP_DECRYPT_FILE) + decrypt_file = open(PATH_TEMP_DECRYPT_FILE, 'rb') + logger.info('I-06-02 PGP暗号化ファイルを復号しました') + except Exception as e: + logger.error(f'E-06-01 PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}') + raise DecryptException('E-06-01', EXTENSION_DECRYPT_ERROR, e) - # 「⑥」で復号化したファイルをSAPデータ保管用バケットに出力する - decrypt_file_name = event_file_name[:INDEX_EXTENSION_DELETE_NUM] - decrypt_file_key = f'{today}/{decrypt_file_name}' - decrypt_bucket_name = TARGET_BUCKET_BY_DATA_SOURCE[event_data_source_name] - print_log(LOG_INFO, 'I-07-02', f'復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') - decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) - decrypt_file_obj.put(Body=decrypt_file) - decrypt_file.close - print_log(LOG_INFO, 'I-07-03', '復号化ファイルをS3に出力しました') - except Exception as e: - print_log(LOG_ERROR, 'E-07-01', f'復号化ファイルのS3出力に失敗しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-07-01', e) + # ⑦ 各ファイルをS3に出力する + try: + logger.info('I-07-01 各ファイルをS3に出力する') + + # 「⑥」で復号化したファイルをSAPデータ保管用バケットに出力する + decrypt_file_name = s3_event.file_name[:INDEX_EXTENSION_DELETE_NUM] + decrypt_file_key = f'{execute_date}/{decrypt_file_name}' + decrypt_bucket_name = TARGET_BUCKET_BY_DATA_SOURCE[s3_event.data_source_name] + logger.info(f'I-07-02 復号化ファイル出力 ファイル名:{decrypt_file_name} 出力先:{decrypt_bucket_name}/{decrypt_file_key}') + decrypt_file_obj = s3_resource.Object(decrypt_bucket_name, decrypt_file_key) + decrypt_file_obj.put(Body=decrypt_file) + decrypt_file.close + logger.info('I-07-03 復号化ファイルをS3に出力しました') + except Exception as e: + logger.error(f'E-07-01 復号化ファイルのS3出力に失敗しました エラー内容:{e}') + raise FileOutputException('E-07-01', EXTENSION_ERROR, e) - try: # 「④」で読み込んだPGP暗号化ファイルを以下に移動(コピー削除)する - copy_source = { - 'Bucket': event_bucket_name, - 'Key': event_file_path - } - backup_file_key = f'{event_data_source_name}/{today}/{event_file_name}' - print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル移動 移動元:{event_bucket_name}/{event_file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') - backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) - backup_file_obj.copy(copy_source) - s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) - print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイルをバックアップ用バケットに移動しました') + try: + copy_source = { + 'Bucket': s3_event.bucket_name, + 'Key': s3_event.file_path + } + backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}' + logger.info(f'I-07-04 PGP暗号化ファイル移動 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}') + backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) + backup_file_obj.copy(copy_source) + s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) + logger.info('I-07-05 PGP暗号化ファイルをバックアップ用バケットに移動しました') + except Exception as e: + logger.error(f'E-07-02 PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') + raise FileOutputException('E-07-02', EXTENSION_ERROR, e) + + # ⑧ 処理終了ログを出力する + logger.info('I-08-01 処理終了 SAPデータ復号処理') + except EncryptFileReadException as e: + create_status_file(event, e.extension) + error_notice(e.id, e.arg) + except CustomException as e: + create_status_file(event, e.extension) + move_encrypt_file(event) + error_notice(e.id, e.arg) except Exception as e: - print_log(LOG_ERROR, 'E-07-02', f'PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-07-02', e) + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + create_status_file(event, EXTENSION_ERROR) + move_encrypt_file(event) + error_notice('E-99', e) + return - # ⑧ 処理終了ログを出力する + +# エラーステータスファイル作成 +def create_status_file(s3_event, extension) -> None: try: - print_log(LOG_INFO, 'I-08-01', '処理終了 SAPデータ復号処理') - except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_exit(event, EXTENSION_ERROR, 'E-99', e) - - -def print_log(log_level, log_id, msg): - try: - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {log_level} {log_id} {msg}') - except Exception as e: - exception_msg = f'Error E-99 想定外のエラーが発生しました エラー内容:{e}' - print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {exception_msg}') - raise Exception(exception_msg) - - -def error_exit(event, extension, error_log_id, exception): - # ① エラー処理を行う - try: - print_log(LOG_ERROR, 'E-ERR-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] - - result_error_file_name = event_file_name + extension - result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name - result_error_obj = s3_resource.Object(event_bucket_name, result_error_key) + result_error_file_name = s3_event.file_name + extension + result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name + result_error_obj = s3_resource.Object(s3_event.bucket_name, result_error_key) result_error_obj.put(Body='') - print_log(LOG_ERROR, 'E-ERR-02', f'recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{event_bucket_name}/{result_error_key}') + logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') + except Exception as e: + logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') + return + +# PGP暗号化ファイル移動 +def move_encrypt_file(s3_event) -> None: + try: copy_source = { - 'Bucket': event_bucket_name, - 'Key': event_file_path + 'Bucket': s3_event.bucket_name, + 'Key': s3_event.file_path } - error_file_name = f'{datetime.datetime.now():%Y%m%d%H%M%S}_{event_file_name}' - error_key = event_data_source_name + DIRECTORY_RECV_ERROR + error_file_name - error_obj = s3_resource.Object(event_bucket_name, error_key) + error_file_name = f'{datetime.datetime.now():%Y%m%d%H%M%S}_{s3_event.file_name}' + error_key = s3_event.data_source_name + DIRECTORY_RECV_ERROR + error_file_name + error_obj = s3_resource.Object(s3_event.bucket_name, error_key) error_obj.copy(copy_source) - s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) - print_log(LOG_ERROR, 'E-ERR-03', f'recv_errorディレクトリにファイルを移動しました 移動元:{event_bucket_name}/{event_file_path} 移動先:{event_bucket_name}/{error_key}') + s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path) + logger.error(f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') + except Exception as e: + logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') + return - print_log(LOG_ERROR, 'E-ERR-04', f'処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: + try: error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' params = { 'TopicArn': NDS_NOTICE_TOPIC, @@ -212,9 +198,60 @@ def error_exit(event, extension, error_log_id, exception): 'Message': error_msg } sns_client.publish(**params) - - print_log(LOG_ERROR, 'E-ERR-05', 'エラー終了 処理を中断します') - sys.exit() + logger.error(f'E-ERR-03 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - sys.exit() + logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + return + + +# S3イベント情報を保持するクラス +class S3EventInfo: + def __init__(self, s3_event) -> None: + self._bucket_name = s3_event["bucket"]["name"] + self._file_path = s3_event["object"]["key"] + self._file_name = os.path.basename(s3_event["object"]["key"]) + self._data_source_name = os.path.dirname(s3_event["object"]["key"]).split('/')[0] + + @property + def bucket_name(self): + return self._bucket_name + + @property + def file_path(self): + return self._file_path + + @property + def file_name(self): + return self._file_name + + @property + def data_source_name(self): + return self._data_source_name + + +# カスタムExceptionクラス +class CustomException(Exception, metaclass=ABCMeta): + def __init__(self, id, extension, arg): + self.id = id + self.extension = extension + self.arg = arg + + +class FileReadException(CustomException): + pass + + +class EncryptFileReadException(CustomException): + pass + + +class FileOutputException(CustomException): + pass + + +class PrivateKeyImportException(CustomException): + pass + + +class DecryptException(CustomException): + pass From 0d668c57cda14aec04475969c1e06a360e4154ec Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 00:29:21 +0900 Subject: [PATCH 21/47] =?UTF-8?q?docs:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E9=83=A8=E5=88=86=E3=82=92=E8=BF=BD=E8=A8=98=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 2 ++ ...mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index c175d15c..29c506fe 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -187,6 +187,7 @@ def lambda_handler(event, context): return +# 保守要員チーム通知 def error_notice(error_log_id, exception) -> None: try: error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' @@ -202,6 +203,7 @@ def error_notice(error_log_id, exception) -> None: return +# カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): self.arg = arg diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 524322ca..2ab4734e 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -187,6 +187,7 @@ def lambda_handler(event, context): return +# 保守要員チーム通知 def error_notice(error_log_id, exception) -> None: try: error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' @@ -202,6 +203,7 @@ def error_notice(error_log_id, exception) -> None: return +# カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): self.arg = arg From 68b53f243a3bec1d3f7b961978d801be9f7eb191 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 00:39:03 +0900 Subject: [PATCH 22/47] =?UTF-8?q?fix: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=20=E3=82=B3=E3=83=BC=E3=83=89=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E9=83=A8=E5=88=86?= =?UTF-8?q?=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 | 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 e6f566422f4ce8c7b89d064ca730f48f2abd1d1a Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Thu, 26 May 2022 12:04:18 +0900 Subject: [PATCH 23/47] =?UTF-8?q?fix:SAP=5Fsup=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=EF=BC=88=E6=9C=88?= =?UTF-8?q?=E6=AC=A1=EF=BC=89=20=E3=83=BB=E6=97=A5=E6=AC=A1=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=83=99=E3=83=BC=E3=82=B9=E3=81=A7=E3=82=BD=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=82=B3=E3=83=BC=E3=83=89=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ng-lambda-sap-sup-receive-check-monthly.py | 183 ++++++++++-------- 1 file changed, 106 insertions(+), 77 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index 34cd673f..0fd6d212 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -3,8 +3,9 @@ import datetime import boto3 import io import re -import sys import csv +import logging +from abc import * # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -17,165 +18,180 @@ 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"] # 定数 ROW_COMMENT_SYMBOL = '#' -LOG_INFO = 'Info' -LOG_ERROR = 'Error' INDEX_REGEX = 0 INDEX_DATA_NAME = 1 INDEX_ROW_COMMENT_SYMBOL = 0 -INDEX_SPLIT_NUM = 0 +INDEX_SPLIT_NUM = 1 INDEX_LAST = -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('I-01-01', '処理開始 SAP_supデータ受領チェック処理(月次)') - datetoday = datetime.date.today() - today = datetoday.strftime('%Y/%m/%d') - month = f'{datetoday.strftime("%Y")}/{datetoday.strftime("%m")}' - print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') + logger.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(月次)') + execute_datetoday = datetime.date.today() + execute_date = execute_datetoday.strftime('%Y/%m/%d') + execute_month = f'{execute_datetoday.strftime("%Y")}/{execute_datetoday.strftime("%m")}' + logger.info(f'I-01-02 処理稼働日:{execute_date}') mail_msg = '' # ② チェック処理実施指定日か確認を行う - print_log(LOG_INFO, 'I-02-01', 'チェック処理実施指定日確認処理開始') + logger.info('I-02-01 チェック処理実施指定日確認処理開始') # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む try: - print_log(LOG_INFO, 'I-02-02', f'チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') + logger.info(f'I-02-02 チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) monthly_day_response = monthly_day_obj.get() - print_log(LOG_INFO, 'I-02-03', 'チェック処理実施指定日ファイルを読み込みました') + logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') except Exception as e: - print_log(LOG_ERROR, 'E-02-01', 'チェック処理実施指定日設定ファイルの読み込みに失敗しました') - error_process('E-02-01', e) + logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました') + raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する try: - print_log(LOG_INFO, 'I-02-04', f'本日がチェック処理実施指定日か確認します 確認日:{today}') + logger.info(f'I-02-04 本日がチェック処理実施指定日か確認します 確認日:{execute_date}') check_date_list = [] - for i, row in enumerate(io.TextIOWrapper(io.BytesIO(monthly_day_response["Body"].read()), encoding='utf-8'), 1): + for row in io.TextIOWrapper(io.BytesIO(monthly_day_response["Body"].read()), encoding='utf-8'): if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: continue - check_date = datetime.datetime.strptime(row, "%Y/%m/%d").strftime('%Y/%m/%d') - check_date_list.append(check_date) - if today in check_date_list: - print_log(LOG_INFO, 'I-02-05', '本日はチェック処理実施指定日のため、チェック処理を実施します') + check_date = row.rstrip('\n') + # 日付妥当性判定 + try: + datetime.datetime.strptime(check_date, "%Y/%m/%d") + except Exception as e: + raise e + check_date_list.append(check_date) + if execute_date in check_date_list: + logger.info('I-02-05 本日はチェック処理実施指定日のため、チェック処理を実施します') else: - print_log(LOG_INFO, 'I-02-06', '本日はチェック処理実施指定日ではないため、チェック処理をスキップします') - sys.exit() + logger.info('I-02-06 本日はチェック処理実施指定日ではないため、チェック処理をスキップします') + return except Exception as e: - print_log(LOG_ERROR, 'E-02-02', f'チェック処理実施指定日設定ファイルに不備があります 行数:{i}') - error_process('E-02-02', e) + logger.error(f'E-02-02 チェック処理実施指定日設定ファイルに不備があります エラー内容:{e}') + raise CheckDayException('E-02-02', e) # ③ 設定ファイル[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', '月次I/Fファイルネーム設定ファイルの読み込みに失敗しました', e) - error_process('E-03-01', e) + logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) # ④ 月次チェック処理を行う - print_log(LOG_INFO, 'I-04-01', '月次チェック処理開始') + logger.info('I-04-01', '月次チェック処理開始') # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する - print_log(LOG_INFO, 'I-04-02', f'オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{month}/') - object_prefix = f'{month}/' + logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/') + object_prefix = f'{execute_month}/' object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + file_list = [] + for obj in object_list: + obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) + file_list.append(obj_key[INDEX_LAST]) # 2.月次I/Fファイルチェック処理 - print_log(LOG_INFO, 'I-04-03', '月次I/Fファイルチェック処理開始') - print_log(LOG_INFO, 'I-04-04', '取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = 0 + logger.info('I-04-03 月次I/Fファイルチェック処理開始') + logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') - for i, row in enumerate(csv.reader(receive_monthly_file_name_body, delimiter='\t'), 1): - row_count = i + for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): file_exists = False - for object in object_list: - object_key = object.key.rsplit('/', INDEX_SPLIT_NUM) - file_name = object_key[INDEX_LAST] + for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) if match_result is not None: file_exists = True break if file_exists == True: match_count += 1 - print_log(LOG_INFO, 'I-04-05', f'月次I/Fファイルの受領を確認しました ファイル名:{file_name}') + logger.info(f'I-04-05 月次I/Fファイルの受領を確認しました ファイル名:{file_name}') else: - print_log(LOG_ERROR, 'E-04-01', f'月次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') - mail_msg = f'{mail_msg}  {row[INDEX_DATA_NAME]}\n' + logger.error(f'E-04-01 月次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' if row_count == match_count: - print_log(LOG_INFO, 'I-04-06', '月次I/Fファイルは全て受領していることを確認しました') + logger.info('I-04-06 月次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', f'{month} 月次I/Fファイルに不足があるため、メール送信処理を開始します') + logger.info(f'I-05-02 {execute_month} 月次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', '通知メール(タイトル)テンプレートファイルの読み込みに失敗しました') - error_process('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', '通知メール(本文)テンプレートファイルの読み込みに失敗しました') - error_process('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', f'{month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + logger.info(f'I-05-09 {execute_month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - print_log(LOG_INFO, 'I-06-01', '処理終了 SAP_supデータ受領チェック処理(月次)') + logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(月次)') + except CustomException as e: + error_notice(e.id, e.arg) except Exception as e: - print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{e}') - error_process('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_process('E-99', e) - - -def error_process(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, @@ -183,9 +199,22 @@ def error_process(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() \ No newline at end of file + 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 CheckDayException(CustomException): + pass From 2b684b45cfd356906a71ef4529001d3c89b16792 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 13:35:02 +0900 Subject: [PATCH 24/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=9F?= =?UTF-8?q?=E3=82=81=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 --- ...mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 2 +- ...mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 29c506fe..45ffca4c 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -123,7 +123,7 @@ def lambda_handler(event, context): row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): + for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 2ab4734e..98ab2ceb 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -123,7 +123,7 @@ def lambda_handler(event, context): row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): + for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) From 92d6c7a59f1177a1b44e52770191777ea462e5f1 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Thu, 26 May 2022 13:35:08 +0900 Subject: [PATCH 25/47] =?UTF-8?q?feat:SAP=5Ffin=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=EF=BC=88=E6=9C=88?= =?UTF-8?q?=E6=AC=A1=EF=BC=89=20=E3=83=BB=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=8A=E3=83=B3=E3=82=B9=E7=94=A8=E6=9C=88=E6=AC=A1=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=92=E6=96=B0=E8=A6=8F=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ng-lambda-sap-fin-receive-check-monthly.py | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py new file mode 100644 index 00000000..384f8bcb --- /dev/null +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py @@ -0,0 +1,220 @@ +import os +import datetime +import boto3 +import io +import re +import csv +import logging +from abc import * + +# 環境変数 +CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] +CONFIG_BUCKET_NAME = os.environ["CONFIG_BUCKET_NAME"] +RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST_PATH"] +MONTHLY_CEHCK_DAY_LIST_PATH = os.environ["MONTHLY_CEHCK_DAY_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"] +LOG_LEVEL = os.environ["LOG_LEVEL"] + +# 定数 +ROW_COMMENT_SYMBOL = '#' +INDEX_REGEX = 0 +INDEX_DATA_NAME = 1 +INDEX_ROW_COMMENT_SYMBOL = 0 +INDEX_SPLIT_NUM = 1 +INDEX_LAST = -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: + # ① 処理開始ログを出力する + logger.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(月次)') + execute_datetoday = datetime.date.today() + execute_date = execute_datetoday.strftime('%Y/%m/%d') + execute_month = f'{execute_datetoday.strftime("%Y")}/{execute_datetoday.strftime("%m")}' + logger.info(f'I-01-02 処理稼働日:{execute_date}') + mail_msg = '' + + # ② チェック処理実施指定日か確認を行う + logger.info('I-02-01 チェック処理実施指定日確認処理開始') + + # 1.設定ファイル[チェック処理実施指定日ファイル]を読み込む + try: + logger.info(f'I-02-02 チェック処理実施指定日ファイル読込 読込元:{CONFIG_BUCKET_NAME}/{MONTHLY_CEHCK_DAY_LIST_PATH}') + monthly_day_obj = s3_resource.Object(CONFIG_BUCKET_NAME, MONTHLY_CEHCK_DAY_LIST_PATH) + monthly_day_response = monthly_day_obj.get() + logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') + except Exception as e: + logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました') + raise FileReadException('E-02-01', e) + + # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する + try: + logger.info(f'I-02-04 本日がチェック処理実施指定日か確認します 確認日:{execute_date}') + check_date_list = [] + for row in io.TextIOWrapper(io.BytesIO(monthly_day_response["Body"].read()), encoding='utf-8'): + if row[INDEX_ROW_COMMENT_SYMBOL] == ROW_COMMENT_SYMBOL: + continue + check_date = row.rstrip('\n') + # 日付妥当性判定 + try: + datetime.datetime.strptime(check_date, "%Y/%m/%d") + except Exception as e: + raise e + check_date_list.append(check_date) + if execute_date in check_date_list: + logger.info('I-02-05 本日はチェック処理実施指定日のため、チェック処理を実施します') + else: + logger.info('I-02-06 本日はチェック処理実施指定日ではないため、チェック処理をスキップします') + return + except Exception as e: + logger.error(f'E-02-02 チェック処理実施指定日設定ファイルに不備があります エラー内容:{e}') + raise CheckDayException('E-02-02', e) + + # ③ 設定ファイル[SAP_finI/Fファイルネーム設定ファイル(月次)]を読み込む + try: + 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() + logger.info('I-03-02 月次I/Fファイルネーム設定ファイルを読み込みました') + except Exception as e: + logger.error(f'E-03-01 月次I/Fファイルネーム設定ファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-03-01', e) + + # ④ 月次チェック処理を行う + logger.info('I-04-01', '月次チェック処理開始') + + # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する + logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/') + object_prefix = f'{execute_month}/' + object_list = s3_resource.Bucket(CHECK_BUCKET_NAME).objects.filter(Prefix=object_prefix) + file_list = [] + for obj in object_list: + obj_key = obj.key.rsplit('/', INDEX_SPLIT_NUM) + file_list.append(obj_key[INDEX_LAST]) + + # 2.月次I/Fファイルチェック処理 + logger.info('I-04-03 月次I/Fファイルチェック処理開始') + logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') + row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'))) + match_count = 0 + 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'): + file_exists = False + for file_name in file_list: + match_result = re.fullmatch(row[INDEX_REGEX], file_name) + if match_result is not None: + file_exists = True + break + if file_exists == True: + match_count += 1 + logger.info(f'I-04-05 月次I/Fファイルの受領を確認しました ファイル名:{file_name}') + else: + logger.error(f'E-04-01 月次I/Fファイルに不足があります ファイル名:{row[INDEX_DATA_NAME]}') + mail_msg += f'{MAIL_INDENT}{row[INDEX_DATA_NAME]}\n' + if row_count == match_count: + logger.info('I-04-06 月次I/Fファイルは全て受領していることを確認しました') + + # ⑤ 「①」でメモリ保持しているメール挿入用文言に出力内容が存在するか確認する + logger.info('I-05-01 メール送信処理開始') + + if len(mail_msg) > 0: + # 1.存在した場合 + logger.info(f'I-05-02 {execute_month} 月次I/Fファイルに不足があるため、メール送信処理を開始します') + + try: + 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') + logger.info('I-05-04 通知メール(タイトル)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-01 通知メール(タイトル)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-01', e) + + try: + 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) + logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') + except Exception as e: + logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') + raise FileReadException('E-05-02', e) + + 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) + logger.info('I-05-08 メール送信指示をしました') + else: + # 2.存在しない場合 + logger.info(f'I-05-09 {execute_month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') + + # ⑥ 処理終了ログを出力する + logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(月次)') + except CustomException as e: + error_notice(e.id, e.arg) + except Exception as e: + logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + error_notice('E-99', e) + return + + +# 保守要員チーム通知 +def error_notice(error_log_id, exception) -> None: + try: + error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}' + params = { + 'TopicArn': NDS_NOTICE_TOPIC, + 'Subject': NDS_NOTICE_TITLE, + 'Message': error_msg + } + sns_client.publish(**params) + logger.error(f'E-ERR-01 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') + except Exception as e: + 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 CheckDayException(CustomException): + pass From c78ba8a24c6481aa5eeea6fa41a870361ace1c2e Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Thu, 26 May 2022 15:02:11 +0900 Subject: [PATCH 26/47] =?UTF-8?q?fix:SAP=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=20=E3=83=BB?= =?UTF-8?q?=EF=BC=97=EF=BC=94=E8=A1=8C=E7=9B=AE=E3=81=AE=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=83=AD=E3=82=B0=E3=81=AB=E3=82=A8=E3=82=AF=E3=82=BB?= =?UTF-8?q?=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=20=E3=83=BB=EF=BC=91=EF=BC=98?= =?UTF-8?q?=EF=BC=93=E8=A1=8C=E7=9B=AE=E3=81=AE=E5=87=A6=E7=90=86=E7=B5=82?= =?UTF-8?q?=E4=BA=86=E3=83=AD=E3=82=B0=E3=81=AE=E3=82=A4=E3=83=B3=E3=83=87?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py | 4 ++-- ...newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py index 384f8bcb..9f225763 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py @@ -71,7 +71,7 @@ def lambda_handler(event, context): monthly_day_response = monthly_day_obj.get() logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') except Exception as e: - logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました') + logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する @@ -180,7 +180,7 @@ def lambda_handler(event, context): logger.info(f'I-05-09 {execute_month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(月次)') + logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(月次)') except CustomException as e: error_notice(e.id, e.arg) except Exception as e: diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index 0fd6d212..8e4270df 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -71,7 +71,7 @@ def lambda_handler(event, context): monthly_day_response = monthly_day_obj.get() logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') except Exception as e: - logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました') + logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する @@ -180,7 +180,7 @@ def lambda_handler(event, context): logger.info(f'I-05-09 {execute_month} 月次I/Fファイルに不足がなかったため、メール送信処理をスキップします') # ⑥ 処理終了ログを出力する - logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(月次)') + logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(月次)') except CustomException as e: error_notice(e.id, e.arg) except Exception as e: From f3643407a28c5c12783afd59b0111413087a0abc Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 16:45:59 +0900 Subject: [PATCH 27/47] =?UTF-8?q?fix: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=20=E4=B8=8D=E8=A6=81=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=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 cf29d0786a02a71c2d032f07c5488b1746a22ae8 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Fri, 27 May 2022 15:08:50 +0900 Subject: [PATCH 28/47] =?UTF-8?q?fix:SAP=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=20=E3=83=BB?= =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=B3=E3=83=BC=E3=83=89=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=81=AE=E6=8C=87=E6=91=98=E5=8F=8D?= =?UTF-8?q?=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...wdwh2021-staging-lambda-sap-fin-receive-check-monthly.py | 6 +++--- ...wdwh2021-staging-lambda-sap-sup-receive-check-monthly.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py index 9f225763..8cb264f7 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py @@ -53,7 +53,7 @@ logger.setLevel(level) def lambda_handler(event, context): try: - # ① 処理開始ログを出力する + # ① 処理開始ログを出力する logger.info('I-01-01 処理開始 SAP_finデータ受領チェック処理(月次)') execute_datetoday = datetime.date.today() execute_date = execute_datetoday.strftime('%Y/%m/%d') @@ -71,7 +71,7 @@ def lambda_handler(event, context): monthly_day_response = monthly_day_obj.get() logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') except Exception as e: - logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する @@ -87,7 +87,7 @@ def lambda_handler(event, context): datetime.datetime.strptime(check_date, "%Y/%m/%d") except Exception as e: raise e - check_date_list.append(check_date) + check_date_list.append(check_date) if execute_date in check_date_list: logger.info('I-02-05 本日はチェック処理実施指定日のため、チェック処理を実施します') else: diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index 8e4270df..a1a5f14b 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -53,7 +53,7 @@ logger.setLevel(level) def lambda_handler(event, context): try: - # ① 処理開始ログを出力する + # ① 処理開始ログを出力する logger.info('I-01-01 処理開始 SAP_supデータ受領チェック処理(月次)') execute_datetoday = datetime.date.today() execute_date = execute_datetoday.strftime('%Y/%m/%d') @@ -71,7 +71,7 @@ def lambda_handler(event, context): monthly_day_response = monthly_day_obj.get() logger.info('I-02-03 チェック処理実施指定日ファイルを読み込みました') except Exception as e: - logger.error('E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') + logger.error(f'E-02-01 チェック処理実施指定日設定ファイルの読み込みに失敗しました エラー内容:{e}') raise FileReadException('E-02-01', e) # 2.処理稼働日が「②1.」で読み込んだ「チェック処理実施指定日ファイル」に存在するか確認する @@ -87,7 +87,7 @@ def lambda_handler(event, context): datetime.datetime.strptime(check_date, "%Y/%m/%d") except Exception as e: raise e - check_date_list.append(check_date) + check_date_list.append(check_date) if execute_date in check_date_list: logger.info('I-02-05 本日はチェック処理実施指定日のため、チェック処理を実施します') else: From ebb82494369db605b0b89e8625feeaa17de5c8ca Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 27 May 2022 19:26:55 +0900 Subject: [PATCH 29/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=BE=A9=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=20=E3=83=AD=E3=82=B0=E3=81=AE=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=A0=E3=82=BE=E3=83=BC=E3=83=B3=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=80=80=E5=BC=95=E6=95=B0=E8=A8=AD=E5=AE=9A=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datadecrypt/main.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 7ff4145f..617a2b9b 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -5,6 +5,7 @@ import gnupg import datetime import logging from abc import * +from zoneinfo import ZoneInfo # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] @@ -40,10 +41,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) @@ -78,7 +82,7 @@ def handler(event, context): # ④ S3から秘密鍵ファイルを読み込む try: - logger.info('I-04-01 秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') + logger.info(f'I-04-01 秘密鍵ファイル読込 読込元:{SECRET_KEY_FILE_BUCKET_NAME}/{SECRET_KEY_FILE_PATH}') s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY) logger.info('I-04-02 秘密鍵ファイルを読み込みました') except Exception as e: @@ -143,16 +147,16 @@ def handler(event, context): # ⑧ 処理終了ログを出力する logger.info('I-08-01 処理終了 SAPデータ復号処理') except EncryptFileReadException as e: - create_status_file(event, e.extension) + create_status_file(s3_event, e.extension) error_notice(e.id, e.arg) except CustomException as e: - create_status_file(event, e.extension) - move_encrypt_file(event) + create_status_file(s3_event, e.extension) + move_encrypt_file(s3_event) error_notice(e.id, e.arg) except Exception as e: logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') - create_status_file(event, EXTENSION_ERROR) - move_encrypt_file(event) + create_status_file(s3_event, EXTENSION_ERROR) + move_encrypt_file(s3_event) error_notice('E-99', e) return From 08159dbd67e35d3fd911f330fba678c280c331f3 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 10:17:11 +0900 Subject: [PATCH 30/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=83=AD=E3=82=B0=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=BE=E3=83=BC=E3=83=B3=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=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 --- ...j-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 4 ++++ ...j-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 45ffca4c..191e7856 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -6,6 +6,7 @@ import re import csv import logging from abc import * +from zoneinfo import ZoneInfo # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -38,10 +39,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) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 98ab2ceb..f34fc592 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -6,6 +6,7 @@ import re import csv import logging from abc import * +from zoneinfo import ZoneInfo # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -38,10 +39,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) From 462043654fa2d3e731dd7853d4bd9761f5aefe67 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 10:57:28 +0900 Subject: [PATCH 31/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=83=AA=E3=82=B9=E3=83=88?= =?UTF-8?q?=E5=86=85=E5=8C=85=E8=A1=A8=E8=A8=98=E3=82=92=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=A8=E3=83=A1=E3=83=A2=E3=83=AA=E4=B8=8D?= =?UTF-8?q?=E8=B6=B3=E3=81=A3=E3=81=BD=E3=81=84=E5=8B=95=E3=81=8D=E3=82=92?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=AE=E3=81=A7=E5=88=A5=E3=81=AE=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=81=AB=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 --- ...-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 5 +++-- ...-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 191e7856..8a894c91 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -124,10 +124,11 @@ def lambda_handler(event, context): # 2.日次I/Fファイルチェック処理 logger.info('I-04-03 日次I/Fファイルチェック処理開始') logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) + row_count = 0 match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): + for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): + row_count = i file_exists = False for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index f34fc592..2f43f12d 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -124,10 +124,11 @@ def lambda_handler(event, context): # 2.日次I/Fファイルチェック処理 logger.info('I-04-03 日次I/Fファイルチェック処理開始') logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8'))) + row_count = 0 match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): + for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): + row_count = i file_exists = False for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) From b589223bc7091728e0f4460acf063ece65f46b78 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 11:16:01 +0900 Subject: [PATCH 32/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E8=AA=BF=E6=9F=BB=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=81=A8=E3=81=93=E3=82=8D=E3=83=A1=E3=83=A2=E3=83=AA?= =?UTF-8?q?=E4=B8=8D=E8=B6=B3=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8B=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=81=9F=E3=82=81=E3=83=AA=E3=82=B9=E3=83=88=E5=86=85?= =?UTF-8?q?=E5=8C=85=E8=A1=A8=E8=A8=98=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E6=88=BB=E3=81=97=E3=81=BE?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ewdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 7 +++---- ...ewdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 8a894c91..77cac4b1 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -124,11 +124,10 @@ def lambda_handler(event, context): # 2.日次I/Fファイルチェック処理 logger.info('I-04-03 日次I/Fファイルチェック処理開始') logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = 0 - match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): - row_count = i + match_count = 0 + row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_response["Body"].read())) + for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 2f43f12d..429b6c31 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -124,11 +124,10 @@ def lambda_handler(event, context): # 2.日次I/Fファイルチェック処理 logger.info('I-04-03 日次I/Fファイルチェック処理開始') logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = 0 - match_count = 0 receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') - for i, row in enumerate(csv.reader(receive_daily_file_name_body, delimiter='\t'), 1): - row_count = i + match_count = 0 + row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_response["Body"].read())) + for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: match_result = re.fullmatch(row[INDEX_REGEX], file_name) From 6144d04382bccbf7def144dfd825d6fbbbb4d66b Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 13:38:32 +0900 Subject: [PATCH 33/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20response=E3=82=92read=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=A8=E8=A1=8C=E6=95=B0=E3=81=8C=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=86=E3=81=9F=E3=82=81=E3=80=81=E3=82=AA?= =?UTF-8?q?=E3=83=96=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=81=8B=E3=82=89?= =?UTF-8?q?=E5=86=8D=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=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 --- ...mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 2 +- ...mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index 77cac4b1..d736f3bc 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -126,7 +126,7 @@ def lambda_handler(event, context): logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') match_count = 0 - row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_response["Body"].read())) + row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 429b6c31..3a19f94e 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -126,7 +126,7 @@ def lambda_handler(event, context): logger.info('I-04-04 取得したオブジェクトリストと日次I/Fファイルネーム設定ファイルの突き合わせを開始します') receive_daily_file_name_body = io.TextIOWrapper(io.BytesIO(receive_daily_file_name_response["Body"].read()), encoding='utf-8') match_count = 0 - row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_response["Body"].read())) + row_count = sum(1 for line in io.BytesIO(receive_daily_file_name_obj.get()["Body"].read())) for row in csv.reader(receive_daily_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: From f6d46de57769fd0e7d2da5c56ad348bffec8cd75 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 14:07:49 +0900 Subject: [PATCH 34/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20Subject=E3=81=8B=E3=82=89?= =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 2 +- ...mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index d736f3bc..dd769643 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -172,7 +172,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) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 3a19f94e..3ead95e9 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -172,7 +172,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) From 38e0718271456aecfb18f0890a5e0ace7e502cb6 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Mon, 30 May 2022 15:02:26 +0900 Subject: [PATCH 35/47] =?UTF-8?q?fix:SAP=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86=EF=BC=88=E6=9C=88?= =?UTF-8?q?=E6=AC=A1=EF=BC=89=20=E3=83=BB=E3=82=BF=E3=82=A4=E3=83=A0?= =?UTF-8?q?=E3=82=BE=E3=83=BC=E3=83=B3=E3=81=AE=E5=A4=89=E6=9B=B4=E5=87=A6?= =?UTF-8?q?=E7=90=86=20=E3=83=BB=E9=80=9A=E7=9F=A5=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC=E3=83=89=E5=8F=96=E3=82=8A?= =?UTF-8?q?=E9=99=A4=E3=81=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...021-staging-lambda-sap-fin-receive-check-monthly.py | 10 +++++++--- ...021-staging-lambda-sap-sup-receive-check-monthly.py | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py index 8cb264f7..3ed67422 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py @@ -6,6 +6,7 @@ import re import csv import logging from abc import * +from zoneinfo import ZoneInfo # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -38,10 +39,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) @@ -122,9 +126,9 @@ def lambda_handler(event, context): # 2.月次I/Fファイルチェック処理 logger.info('I-04-03 月次I/Fファイルチェック処理開始') logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'))) - match_count = 0 receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') + match_count = 0 + row_count = sum(1 for line in io.BytesIO(receive_monthly_file_name_obj.get()["Body"].read())) for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: @@ -170,7 +174,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) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index a1a5f14b..d1ed116f 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -6,6 +6,7 @@ import re import csv import logging from abc import * +from zoneinfo import ZoneInfo # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -38,10 +39,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) @@ -122,9 +126,9 @@ def lambda_handler(event, context): # 2.月次I/Fファイルチェック処理 logger.info('I-04-03 月次I/Fファイルチェック処理開始') logger.info('I-04-04 取得したオブジェクトリストと月次I/Fファイルネーム設定ファイルの突き合わせを開始します') - row_count = sum(1 for line in open(io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8'))) - match_count = 0 receive_monthly_file_name_body = io.TextIOWrapper(io.BytesIO(receive_monthly_file_name_response["Body"].read()), encoding='utf-8') + match_count = 0 + row_count = sum(1 for line in io.BytesIO(receive_monthly_file_name_obj.get()["Body"].read())) for row in csv.reader(receive_monthly_file_name_body, delimiter='\t'): file_exists = False for file_name in file_list: @@ -170,7 +174,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) From f5b6da00329d6ff5e5ff3396a1bd4ef202cca66a Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 15:20:17 +0900 Subject: [PATCH 36/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=97=A5=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E8=A9=B3=E7=B4=B0=E3=81=AA?= =?UTF-8?q?=E3=83=88=E3=83=AC=E3=83=BC=E3=82=B9=E3=83=90=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=81=8C=E5=87=BA=E5=8A=9B=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81=E3=80=81?= =?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?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 --- ...j-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py | 4 ++++ ...j-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py index dd769643..27057ff4 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py @@ -7,6 +7,7 @@ import csv import logging from abc import * from zoneinfo import ZoneInfo +import traceback # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -184,9 +185,11 @@ def lambda_handler(event, context): # ⑥ 処理終了ログを出力する logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(日次)') 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 @@ -204,6 +207,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-receive-check-daily.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py index 3ead95e9..6dbe7624 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py @@ -7,6 +7,7 @@ import csv import logging from abc import * from zoneinfo import ZoneInfo +import traceback # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -184,9 +185,11 @@ def lambda_handler(event, context): # ⑥ 処理終了ログを出力する logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(日次)') 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 @@ -204,6 +207,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 From 7573891095517fcbca0bdcfe0466ad0b323c2620 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Mon, 30 May 2022 16:43:56 +0900 Subject: [PATCH 37/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E6=9C=88=E6=AC=A1=E5=8F=97=E9=A0=98=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E5=87=A6=E7=90=86=20=E3=83=BB=E8=A9=B3=E7=B4=B0?= =?UTF-8?q?=E3=81=AA=E3=83=88=E3=83=AC=E3=83=BC=E3=82=B9=E3=83=90=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=8C=E5=87=BA=E5=8A=9B=E3=81=95=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=80=81=E5=87=BA=E5=8A=9B=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=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 --- ...newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py | 4 ++++ ...newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py index 3ed67422..2e002860 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py @@ -7,6 +7,7 @@ import csv import logging from abc import * from zoneinfo import ZoneInfo +import traceback # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -186,9 +187,11 @@ def lambda_handler(event, context): # ⑥ 処理終了ログを出力する logger.info('I-06-01 処理終了 SAP_finデータ受領チェック処理(月次)') 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 @@ -206,6 +209,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-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index d1ed116f..82ab16fb 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -7,6 +7,7 @@ import csv import logging from abc import * from zoneinfo import ZoneInfo +import traceback # 環境変数 CHECK_BUCKET_NAME = os.environ["CHECK_BUCKET_NAME"] @@ -186,9 +187,11 @@ def lambda_handler(event, context): # ⑥ 処理終了ログを出力する logger.info('I-06-01 処理終了 SAP_supデータ受領チェック処理(月次)') 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 @@ -206,6 +209,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 From 3ddc8789aa9a45df58e667ddddc24f6a65596016 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 17:34:56 +0900 Subject: [PATCH 38/47] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E5=BE=A9=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E3=83=88?= =?UTF-8?q?=E3=83=AC=E3=83=BC=E3=82=B9=E3=83=90=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?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 --- .../datadecrypt/main.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py index 617a2b9b..ec4d24ae 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py @@ -6,6 +6,7 @@ import datetime import logging from abc import * from zoneinfo import ZoneInfo +import traceback # 環境変数 SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"] @@ -147,14 +148,17 @@ def handler(event, context): # ⑧ 処理終了ログを出力する logger.info('I-08-01 処理終了 SAPデータ復号処理') except EncryptFileReadException as e: + traceback.print_exc() create_status_file(s3_event, e.extension) error_notice(e.id, e.arg) except CustomException as e: + traceback.print_exc() create_status_file(s3_event, e.extension) move_encrypt_file(s3_event) error_notice(e.id, e.arg) except Exception as e: logger.error(f'E-99 想定外のエラーが発生しました エラー内容:{e}') + traceback.print_exc() create_status_file(s3_event, EXTENSION_ERROR) move_encrypt_file(s3_event) error_notice('E-99', e) @@ -171,6 +175,7 @@ def create_status_file(s3_event, extension) -> None: logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_event.bucket_name}/{result_error_key}') except Exception as e: logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}') + traceback.print_exc() return @@ -189,6 +194,7 @@ def move_encrypt_file(s3_event) -> None: logger.error(f'E-ERR-02 recv_errorディレクトリにファイルを移動しました 移動元:{s3_event.bucket_name}/{s3_event.file_path} 移動先:{s3_event.bucket_name}/{error_key}') except Exception as e: logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}') + traceback.print_exc() return @@ -205,6 +211,7 @@ def error_notice(error_log_id, exception) -> None: logger.error(f'E-ERR-03 処理異常通知の送信指示をしました 通知先トピック:{NDS_NOTICE_TOPIC}') except Exception as e: logger.error(f'E-98 処理異常通知の送信指示に失敗しました エラー内容:{e}') + traceback.print_exc() return From 81f514525fd74ef94bd5df0b9cb864dfe0dd27ca Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Mon, 30 May 2022 18:52:48 +0900 Subject: [PATCH 39/47] =?UTF-8?q?fix:SAP=E5=8F=97=E9=A0=98=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E5=87=A6=E7=90=86(=E6=9C=88?= =?UTF-8?q?=E6=AC=A1)=20=E3=83=BB=E3=80=8CI-04-01=E3=80=8D=E3=81=AE?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E=E3=83=83?= =?UTF-8?q?=E3=83=88=E4=B8=8D=E5=82=99=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...j-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py | 2 +- ...j-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py index 2e002860..00170d36 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py @@ -113,7 +113,7 @@ def lambda_handler(event, context): raise FileReadException('E-03-01', e) # ④ 月次チェック処理を行う - logger.info('I-04-01', '月次チェック処理開始') + logger.info('I-04-01 月次チェック処理開始') # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/') diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py index 82ab16fb..2c6be537 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py +++ b/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py @@ -113,7 +113,7 @@ def lambda_handler(event, context): raise FileReadException('E-03-01', e) # ④ 月次チェック処理を行う - logger.info('I-04-01', '月次チェック処理開始') + logger.info('I-04-01 月次チェック処理開始') # 1.SAP保管用バケットの処理稼働月に該当するサブフォルダにあるファイル一覧を取得する logger.info(f'I-04-02 オブジェクトリストの取得 取得先:{CHECK_BUCKET_NAME}/{execute_month}/') From c380f1dfe340a3143ea5891d81ca0a0cbe3e65d3 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 21:11:43 +0900 Subject: [PATCH 40/47] =?UTF-8?q?fix: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=20=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=BE?= =?UTF-8?q?=E3=83=BC=E3=83=B3=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=80=80=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E3=83=A1=E3=83=BC=E3=83=AB=E3=82=BF=E3=82=A4=E3=83=88?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=80=80=E3=83=88=E3=83=AC=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=82=AF=E3=81=AE=E5=87=BA=E5=8A=9B=E3=82=92?= =?UTF-8?q?=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 --- ...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 From 7a0bffc3b191ce59e46b1fc9f8805b62f57d6270 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Wed, 8 Jun 2022 09:56:48 +0900 Subject: [PATCH 41/47] =?UTF-8?q?fix:VPC=E3=82=A8=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88=E5=89=8A=E9=99=A4=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=82=8B=E3=83=87=E3=83=BC=E3=82=BF=E5=8F=96=E8=BE=BC?= =?UTF-8?q?=E5=87=A6=E7=90=86(Lambda)=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/mbj-newdwh2021-staging-lambda-dataimport.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/lambda/mbj-newdwh2021-staging-lambda-dataimport.py b/lambda/mbj-newdwh2021-staging-lambda-dataimport.py index fb79ede5..00fe2f86 100644 --- a/lambda/mbj-newdwh2021-staging-lambda-dataimport.py +++ b/lambda/mbj-newdwh2021-staging-lambda-dataimport.py @@ -8,10 +8,8 @@ TASK_NAME = os.environ["TASK_NAME"] CONTAINER_NAME = os.environ["CONTAINER_NAME"] SUBNET_ID_AP_NORTHEAST_1A = os.environ["SUBNET_ID_AP_NORTHEAST_1A"] SUBNET_ID_AP_NORTHEAST_1D = os.environ["SUBNET_ID_AP_NORTHEAST_1D"] -SECURITY_GROUP_ID_ECRAPI = os.environ["SECURITY_GROUP_ID_ECRAPI"] -SECURITY_GROUP_ID_ECRDKR = os.environ["SECURITY_GROUP_ID_ECRDKR"] -SECURITY_GROUP_ID_LOGS = os.environ["SECURITY_GROUP_ID_LOGS"] -SECURITY_GROUP_ID_RDS = os.environ["SECURITY_GROUP_ID_RDS"] +SECURITY_GROUP_ID_ECSALL = os.environ["SECURITY_GROUP_ID_ECSALL"] +SECURITY_GROUP_ID_ECSDATAIMPORT = os.environ["SECURITY_GROUP_ID_ECSDATAIMPORT"] MODE = os.environ["MODE"] # クラス変数 @@ -43,12 +41,9 @@ def lambda_handler(event, context): SUBNET_ID_AP_NORTHEAST_1D, ], "securityGroups": [ - SECURITY_GROUP_ID_ECRAPI, - SECURITY_GROUP_ID_ECRDKR, - SECURITY_GROUP_ID_LOGS, - SECURITY_GROUP_ID_RDS, + SECURITY_GROUP_ID_ECSALL, + SECURITY_GROUP_ID_ECSDATAIMPORT, ], - "assignPublicIp": 'ENABLED', } }, overrides={ From d2c7e38fe1fa70629b52d8cffcc6db43b0df24d8 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Wed, 22 Jun 2022 14:56:09 +0900 Subject: [PATCH 42/47] =?UTF-8?q?docs:=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E6=A7=8B=E6=88=90=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/{Dockerfile => dataimport}/Dockerfile | 0 .../dataimport/chk.py | 0 .../dataimport/common.py | 0 .../dataimport/controller.py | 0 .../dataimport/end.py | 0 .../dataimport/error.py | 0 .../dataimport/ini.py | 0 .../dataimport/main.py | 0 .../requirements.txt | 0 .../index.js | 74 +++++++++--------- .../mbj-newdwh2021-staging-NoticeToSlack.zip | Bin .../package.json | 30 +++---- .../index.js | 58 +++++++------- .../mbj-newdwh2021-staging-PublishFromLog.zip | Bin .../package.json | 30 +++---- .../dataimport.py} | 0 .../Dockerfile | 0 .../datadecrypt/main.py | 0 .../requirements.txt | 0 .../sap-fin-monthly-data-notice-daily.py} | 0 .../sap-fin-receive-check-daily.py} | 0 .../sap-fin-receive-check-monthly.py} | 0 .../sap-sup-monthly-data-notice-daily.py} | 0 .../sap-sup-receive-check-daily.py} | 0 .../sap-sup-receive-check-monthly.py} | 0 .../data/encise/settings}/CITFD_Merck01.txt | 24 +++--- .../data/encise/settings}/CITFD_Merck06.txt | 24 +++--- .../data/encise/settings}/CITFD_Merck07.txt | 24 +++--- .../data/encise/settings}/CITFD_Merck10.txt | 24 +++--- .../data/encise/settings}/CITFM_PROADD.txt | 24 +++--- .../data/encise/settings}/CITFM_PROLST.txt | 24 +++--- .../data/encise/settings}/CITFM_REGION.txt | 24 +++--- .../data/encise/settings}/CITFM_SEGMNT.txt | 24 +++--- .../data/encise/settings}/CITQD_Merck01.txt | 24 +++--- .../data/encise/settings}/CITQD_Merck06.txt | 24 +++--- .../data/encise/settings}/CITQD_Merck07.txt | 24 +++--- .../data/encise/settings}/CITQD_Merck10.txt | 24 +++--- .../data/encise/settings}/CITQM_PROADD.txt | 24 +++--- .../data/encise/settings}/CITQM_PROLST.txt | 24 +++--- .../data/encise/settings}/CITQM_REGION.txt | 24 +++--- .../data/encise/settings}/CITQM_SEGMNT.txt | 24 +++--- .../data/encise/settings}/CLUFD_Merck02.txt | 24 +++--- .../data/encise/settings}/CLUFD_Merck02_D.txt | 24 +++--- .../data/encise/settings}/CLUFD_Merck03.txt | 24 +++--- .../data/encise/settings}/CLUFD_Merck03_D.txt | 24 +++--- .../data/encise/settings}/CLUFD_Merck04.txt | 24 +++--- .../data/encise/settings}/CLUFD_Merck04_D.txt | 24 +++--- .../data/encise/settings}/CLUFM_CLUMST.txt | 24 +++--- .../data/encise/settings}/CLUFM_CLUMST_ex.sql | 14 ++-- .../data/encise/settings}/CLUFM_PROADD.txt | 24 +++--- .../data/encise/settings}/CLUFM_PROLST.txt | 24 +++--- .../data/encise/settings}/MST_BRAND.txt | 24 +++--- .../data/encise/settings}/NATFD.txt | 24 +++--- .../data/encise/settings}/NATFD_D.txt | 24 +++--- .../data/encise/settings}/NATFM_PROADD.txt | 24 +++--- .../data/encise/settings}/NATFM_SEGMNT.txt | 24 +++--- .../data/encise/settings}/NATQD.txt | 24 +++--- .../data/encise/settings}/NATQM_PROADD.txt | 24 +++--- .../data/encise/settings}/NATQM_SEGMNT.txt | 24 +++--- .../data/encise/settings}/configmap.config | 74 +++++++++--------- 60 files changed, 536 insertions(+), 536 deletions(-) rename ecs/{Dockerfile => dataimport}/Dockerfile (100%) rename ecs/{Dockerfile => dataimport}/dataimport/chk.py (100%) rename ecs/{Dockerfile => dataimport}/dataimport/common.py (100%) rename ecs/{Dockerfile => dataimport}/dataimport/controller.py (100%) rename ecs/{Dockerfile => dataimport}/dataimport/end.py (100%) rename ecs/{Dockerfile => dataimport}/dataimport/error.py (100%) rename ecs/{Dockerfile => dataimport}/dataimport/ini.py (100%) rename ecs/{Dockerfile => dataimport}/dataimport/main.py (100%) rename ecs/{Dockerfile => dataimport}/requirements.txt (100%) rename lambda/{mbj-newdwh2021-staging-NoticeToSlack => NoticeToSlack}/index.js (96%) rename lambda/{mbj-newdwh2021-staging-NoticeToSlack => NoticeToSlack}/mbj-newdwh2021-staging-NoticeToSlack.zip (100%) rename lambda/{mbj-newdwh2021-staging-NoticeToSlack => NoticeToSlack}/package.json (95%) rename lambda/{mbj-newdwh2021-staging-PublishFromLog => PublishFromLog}/index.js (97%) rename lambda/{mbj-newdwh2021-staging-PublishFromLog => PublishFromLog}/mbj-newdwh2021-staging-PublishFromLog.zip (100%) rename lambda/{mbj-newdwh2021-staging-PublishFromLog => PublishFromLog}/package.json (95%) rename lambda/{mbj-newdwh2021-staging-lambda-dataimport.py => dataimport/dataimport.py} (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-data-decrypt => sap-data-decrypt}/Dockerfile (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-data-decrypt => sap-data-decrypt}/datadecrypt/main.py (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-data-decrypt => sap-data-decrypt}/requirements.txt (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py => sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py} (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py => sap-fin-receive-check-daily/sap-fin-receive-check-daily.py} (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py => sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py} (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py => sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py} (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py => sap-sup-receive-check-daily/sap-sup-receive-check-daily.py} (100%) rename lambda/{mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py => sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py} (100%) rename {config/data_import/encise => s3/data/encise/settings}/CITFD_Merck01.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITFD_Merck06.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITFD_Merck07.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITFD_Merck10.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITFM_PROADD.txt (99%) rename {config/data_import/encise => s3/data/encise/settings}/CITFM_PROLST.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITFM_REGION.txt (92%) rename {config/data_import/encise => s3/data/encise/settings}/CITFM_SEGMNT.txt (93%) rename {config/data_import/encise => s3/data/encise/settings}/CITQD_Merck01.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITQD_Merck06.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITQD_Merck07.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITQD_Merck10.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITQM_PROADD.txt (99%) rename {config/data_import/encise => s3/data/encise/settings}/CITQM_PROLST.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CITQM_REGION.txt (92%) rename {config/data_import/encise => s3/data/encise/settings}/CITQM_SEGMNT.txt (93%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFD_Merck02.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFD_Merck02_D.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFD_Merck03.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFD_Merck03_D.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFD_Merck04.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFD_Merck04_D.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFM_CLUMST.txt (97%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFM_CLUMST_ex.sql (97%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFM_PROADD.txt (99%) rename {config/data_import/encise => s3/data/encise/settings}/CLUFM_PROLST.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/MST_BRAND.txt (98%) rename {config/data_import/encise => s3/data/encise/settings}/NATFD.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/NATFD_D.txt (97%) rename {config/data_import/encise => s3/data/encise/settings}/NATFM_PROADD.txt (99%) rename {config/data_import/encise => s3/data/encise/settings}/NATFM_SEGMNT.txt (93%) rename {config/data_import/encise => s3/data/encise/settings}/NATQD.txt (96%) rename {config/data_import/encise => s3/data/encise/settings}/NATQM_PROADD.txt (99%) rename {config/data_import/encise => s3/data/encise/settings}/NATQM_SEGMNT.txt (93%) rename {config/data_import/encise => s3/data/encise/settings}/configmap.config (98%) diff --git a/ecs/Dockerfile/Dockerfile b/ecs/dataimport/Dockerfile similarity index 100% rename from ecs/Dockerfile/Dockerfile rename to ecs/dataimport/Dockerfile diff --git a/ecs/Dockerfile/dataimport/chk.py b/ecs/dataimport/dataimport/chk.py similarity index 100% rename from ecs/Dockerfile/dataimport/chk.py rename to ecs/dataimport/dataimport/chk.py diff --git a/ecs/Dockerfile/dataimport/common.py b/ecs/dataimport/dataimport/common.py similarity index 100% rename from ecs/Dockerfile/dataimport/common.py rename to ecs/dataimport/dataimport/common.py diff --git a/ecs/Dockerfile/dataimport/controller.py b/ecs/dataimport/dataimport/controller.py similarity index 100% rename from ecs/Dockerfile/dataimport/controller.py rename to ecs/dataimport/dataimport/controller.py diff --git a/ecs/Dockerfile/dataimport/end.py b/ecs/dataimport/dataimport/end.py similarity index 100% rename from ecs/Dockerfile/dataimport/end.py rename to ecs/dataimport/dataimport/end.py diff --git a/ecs/Dockerfile/dataimport/error.py b/ecs/dataimport/dataimport/error.py similarity index 100% rename from ecs/Dockerfile/dataimport/error.py rename to ecs/dataimport/dataimport/error.py diff --git a/ecs/Dockerfile/dataimport/ini.py b/ecs/dataimport/dataimport/ini.py similarity index 100% rename from ecs/Dockerfile/dataimport/ini.py rename to ecs/dataimport/dataimport/ini.py diff --git a/ecs/Dockerfile/dataimport/main.py b/ecs/dataimport/dataimport/main.py similarity index 100% rename from ecs/Dockerfile/dataimport/main.py rename to ecs/dataimport/dataimport/main.py diff --git a/ecs/Dockerfile/requirements.txt b/ecs/dataimport/requirements.txt similarity index 100% rename from ecs/Dockerfile/requirements.txt rename to ecs/dataimport/requirements.txt diff --git a/lambda/mbj-newdwh2021-staging-NoticeToSlack/index.js b/lambda/NoticeToSlack/index.js similarity index 96% rename from lambda/mbj-newdwh2021-staging-NoticeToSlack/index.js rename to lambda/NoticeToSlack/index.js index 5c0a7226..630c769d 100644 --- a/lambda/mbj-newdwh2021-staging-NoticeToSlack/index.js +++ b/lambda/NoticeToSlack/index.js @@ -1,37 +1,37 @@ -"use-strict"; - -const request = require("request-promise"); -exports.handler = (event, context, callback) => { - const attaches = event.Records.map(evt => { - return { - "fallback":`Notification from mbj-newdwh2021 AWS: ${evt.EventSubscriptionArn}`, - "pretext":`Notification from mbj-newdwh2021 AWS: ${evt.EventSubscriptionArn}`, - "color":"#0000D0", - "fields":[ - { - "title": `${evt.Sns.Subject}`, - "value": `${evt.Sns.Timestamp}: ${evt.Sns.Message} (MessageId: ${evt.Sns.MessageId})`, - "short": false - } - ] - }; - }); - request({ - method: "POST", - url: process.env.webhookurl, - body: { - attachments: attaches - - }, - json: true - }).then((body => { - callback(null, `Request succeed. ${body}`); - })).catch((err) => { - callback("failed to request to slack.", { - result: "ERROR", - event: event, - cause: `request failed. ${err}.` - }); - }) - -}; +"use-strict"; + +const request = require("request-promise"); +exports.handler = (event, context, callback) => { + const attaches = event.Records.map(evt => { + return { + "fallback":`Notification from mbj-newdwh2021 AWS: ${evt.EventSubscriptionArn}`, + "pretext":`Notification from mbj-newdwh2021 AWS: ${evt.EventSubscriptionArn}`, + "color":"#0000D0", + "fields":[ + { + "title": `${evt.Sns.Subject}`, + "value": `${evt.Sns.Timestamp}: ${evt.Sns.Message} (MessageId: ${evt.Sns.MessageId})`, + "short": false + } + ] + }; + }); + request({ + method: "POST", + url: process.env.webhookurl, + body: { + attachments: attaches + + }, + json: true + }).then((body => { + callback(null, `Request succeed. ${body}`); + })).catch((err) => { + callback("failed to request to slack.", { + result: "ERROR", + event: event, + cause: `request failed. ${err}.` + }); + }) + +}; diff --git a/lambda/mbj-newdwh2021-staging-NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip b/lambda/NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip similarity index 100% rename from lambda/mbj-newdwh2021-staging-NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip rename to lambda/NoticeToSlack/mbj-newdwh2021-staging-NoticeToSlack.zip diff --git a/lambda/mbj-newdwh2021-staging-NoticeToSlack/package.json b/lambda/NoticeToSlack/package.json similarity index 95% rename from lambda/mbj-newdwh2021-staging-NoticeToSlack/package.json rename to lambda/NoticeToSlack/package.json index 1495f188..30e2c8fe 100644 --- a/lambda/mbj-newdwh2021-staging-NoticeToSlack/package.json +++ b/lambda/NoticeToSlack/package.json @@ -1,15 +1,15 @@ -{ - "name": "mbj-newdwh2021-staging-noticetoslack", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "request": "^2.88.2", - "request-promise": "^4.2.6" - } -} +{ + "name": "mbj-newdwh2021-staging-noticetoslack", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "request": "^2.88.2", + "request-promise": "^4.2.6" + } +} diff --git a/lambda/mbj-newdwh2021-staging-PublishFromLog/index.js b/lambda/PublishFromLog/index.js similarity index 97% rename from lambda/mbj-newdwh2021-staging-PublishFromLog/index.js rename to lambda/PublishFromLog/index.js index f0b608f8..196905d1 100644 --- a/lambda/mbj-newdwh2021-staging-PublishFromLog/index.js +++ b/lambda/PublishFromLog/index.js @@ -1,30 +1,30 @@ -const zlib = require("zlib"); -const aws = require("aws-sdk"); -const sns = new aws.SNS({ - apiVersion: "2010-03-31", - region: 'ap-northeast-1' -}); - -exports.handler = function(input, context) { - var payload = new Buffer.from(input.awslogs.data, 'base64'); - zlib.gunzip(payload, function(e, result) { - if (e) { - context.fail(e); - } else { - result = JSON.parse(result.toString('UTF-8')); - const publishMessage = { - Subject: `Detect Error(or Warning) in ${result.logGroup}`, - Message: result.logEvents.map((l) => l.message).join('\n'), - TopicArn: process.env.topicArn - }; - console.log(publishMessage); - - sns.publish(publishMessage, (err, data) => { - console.log(err, data); - if(err){ - context.fail(err); - } - }); - } - }); +const zlib = require("zlib"); +const aws = require("aws-sdk"); +const sns = new aws.SNS({ + apiVersion: "2010-03-31", + region: 'ap-northeast-1' +}); + +exports.handler = function(input, context) { + var payload = new Buffer.from(input.awslogs.data, 'base64'); + zlib.gunzip(payload, function(e, result) { + if (e) { + context.fail(e); + } else { + result = JSON.parse(result.toString('UTF-8')); + const publishMessage = { + Subject: `Detect Error(or Warning) in ${result.logGroup}`, + Message: result.logEvents.map((l) => l.message).join('\n'), + TopicArn: process.env.topicArn + }; + console.log(publishMessage); + + sns.publish(publishMessage, (err, data) => { + console.log(err, data); + if(err){ + context.fail(err); + } + }); + } + }); }; \ No newline at end of file diff --git a/lambda/mbj-newdwh2021-staging-PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip b/lambda/PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip similarity index 100% rename from lambda/mbj-newdwh2021-staging-PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip rename to lambda/PublishFromLog/mbj-newdwh2021-staging-PublishFromLog.zip diff --git a/lambda/mbj-newdwh2021-staging-PublishFromLog/package.json b/lambda/PublishFromLog/package.json similarity index 95% rename from lambda/mbj-newdwh2021-staging-PublishFromLog/package.json rename to lambda/PublishFromLog/package.json index 1e0d12e7..c1156fde 100644 --- a/lambda/mbj-newdwh2021-staging-PublishFromLog/package.json +++ b/lambda/PublishFromLog/package.json @@ -1,15 +1,15 @@ -{ - "name": "mbj-newdwh2021-staging-publishfromlog", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "aws-sdk": "^2.1011.0", - "zlib": "^1.0.5" - } -} +{ + "name": "mbj-newdwh2021-staging-publishfromlog", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "aws-sdk": "^2.1011.0", + "zlib": "^1.0.5" + } +} diff --git a/lambda/mbj-newdwh2021-staging-lambda-dataimport.py b/lambda/dataimport/dataimport.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-dataimport.py rename to lambda/dataimport/dataimport.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/Dockerfile b/lambda/sap-data-decrypt/Dockerfile similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/Dockerfile rename to lambda/sap-data-decrypt/Dockerfile diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py b/lambda/sap-data-decrypt/datadecrypt/main.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/datadecrypt/main.py rename to lambda/sap-data-decrypt/datadecrypt/main.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/requirements.txt b/lambda/sap-data-decrypt/requirements.txt similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-data-decrypt/requirements.txt rename to lambda/sap-data-decrypt/requirements.txt diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py b/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-fin-monthly-data-notice-daily.py rename to lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py b/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-daily.py rename to lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py b/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-fin-receive-check-monthly.py rename to lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py b/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-sup-monthly-data-notice-daily.py rename to lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py b/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-daily.py rename to lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py diff --git a/lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py similarity index 100% rename from lambda/mbj-newdwh2021-staging-lambda-sap-sup-receive-check-monthly.py rename to lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py diff --git a/config/data_import/encise/CITFD_Merck01.txt b/s3/data/encise/settings/CITFD_Merck01.txt similarity index 96% rename from config/data_import/encise/CITFD_Merck01.txt rename to s3/data/encise/settings/CITFD_Merck01.txt index 229d1550..e6f0a4f9 100644 --- a/config/data_import/encise/CITFD_Merck01.txt +++ b/s3/data/encise/settings/CITFD_Merck01.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citfd -org01.en_citfd_01 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citfd +org01.en_citfd_01 + diff --git a/config/data_import/encise/CITFD_Merck06.txt b/s3/data/encise/settings/CITFD_Merck06.txt similarity index 96% rename from config/data_import/encise/CITFD_Merck06.txt rename to s3/data/encise/settings/CITFD_Merck06.txt index e6c8955f..2d2983c1 100644 --- a/config/data_import/encise/CITFD_Merck06.txt +++ b/s3/data/encise/settings/CITFD_Merck06.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citfd -org01.en_citfd_06 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citfd +org01.en_citfd_06 + diff --git a/config/data_import/encise/CITFD_Merck07.txt b/s3/data/encise/settings/CITFD_Merck07.txt similarity index 96% rename from config/data_import/encise/CITFD_Merck07.txt rename to s3/data/encise/settings/CITFD_Merck07.txt index 03dd1512..cc8f6376 100644 --- a/config/data_import/encise/CITFD_Merck07.txt +++ b/s3/data/encise/settings/CITFD_Merck07.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citfd -org01.en_citfd_07 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citfd +org01.en_citfd_07 + diff --git a/config/data_import/encise/CITFD_Merck10.txt b/s3/data/encise/settings/CITFD_Merck10.txt similarity index 96% rename from config/data_import/encise/CITFD_Merck10.txt rename to s3/data/encise/settings/CITFD_Merck10.txt index 1a6d9b28..4c350bb7 100644 --- a/config/data_import/encise/CITFD_Merck10.txt +++ b/s3/data/encise/settings/CITFD_Merck10.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citfd -org01.en_citfd_10 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citfd +org01.en_citfd_10 + diff --git a/config/data_import/encise/CITFM_PROADD.txt b/s3/data/encise/settings/CITFM_PROADD.txt similarity index 99% rename from config/data_import/encise/CITFM_PROADD.txt rename to s3/data/encise/settings/CITFM_PROADD.txt index 4858d296..a885b1ef 100644 --- a/config/data_import/encise/CITFM_PROADD.txt +++ b/s3/data/encise/settings/CITFM_PROADD.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -49 -統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) -universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date -src01.en_citfm_proadd -org01.en_citfm_proadd - +ensice +, +cp932 +" +CRLF +1 +49 +統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) +universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date +src01.en_citfm_proadd +org01.en_citfm_proadd + diff --git a/config/data_import/encise/CITFM_PROLST.txt b/s3/data/encise/settings/CITFM_PROLST.txt similarity index 96% rename from config/data_import/encise/CITFM_PROLST.txt rename to s3/data/encise/settings/CITFM_PROLST.txt index dac87a8b..f428a804 100644 --- a/config/data_import/encise/CITFM_PROLST.txt +++ b/s3/data/encise/settings/CITFM_PROLST.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -7 -統一商品コード,製品名,包装単位,販売元名,更新日(西暦),薬効分類コード,薬効分類名 -universal_product_code,product_SKU_name,package,seller_name,update_date,data_file_code,data_file_name -src01.en_citfm_prolst -org01.en_citfm_prolst - +ensice +, +cp932 +" +CRLF +1 +7 +統一商品コード,製品名,包装単位,販売元名,更新日(西暦),薬効分類コード,薬効分類名 +universal_product_code,product_SKU_name,package,seller_name,update_date,data_file_code,data_file_name +src01.en_citfm_prolst +org01.en_citfm_prolst + diff --git a/config/data_import/encise/CITFM_REGION.txt b/s3/data/encise/settings/CITFM_REGION.txt similarity index 92% rename from config/data_import/encise/CITFM_REGION.txt rename to s3/data/encise/settings/CITFM_REGION.txt index 75d4ae36..5cee5d25 100644 --- a/config/data_import/encise/CITFM_REGION.txt +++ b/s3/data/encise/settings/CITFM_REGION.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -3 -地域コード,地域名,更新日(西暦) -region_code,region_name,update_date -src01.en_citfm_region -org01.en_citfm_region - +ensice +, +cp932 +" +CRLF +1 +3 +地域コード,地域名,更新日(西暦) +region_code,region_name,update_date +src01.en_citfm_region +org01.en_citfm_region + diff --git a/config/data_import/encise/CITFM_SEGMNT.txt b/s3/data/encise/settings/CITFM_SEGMNT.txt similarity index 93% rename from config/data_import/encise/CITFM_SEGMNT.txt rename to s3/data/encise/settings/CITFM_SEGMNT.txt index 2a936099..dbc75ce1 100644 --- a/config/data_import/encise/CITFM_SEGMNT.txt +++ b/s3/data/encise/settings/CITFM_SEGMNT.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -3 -セグメントコード,セグメント名,更新日(西暦) -segment_code,segment_name,update_date -src01.en_citfm_segmnt -org01.en_citfm_segmnt - +ensice +, +cp932 +" +CRLF +1 +3 +セグメントコード,セグメント名,更新日(西暦) +segment_code,segment_name,update_date +src01.en_citfm_segmnt +org01.en_citfm_segmnt + diff --git a/config/data_import/encise/CITQD_Merck01.txt b/s3/data/encise/settings/CITQD_Merck01.txt similarity index 96% rename from config/data_import/encise/CITQD_Merck01.txt rename to s3/data/encise/settings/CITQD_Merck01.txt index 891d5c2c..49bc0b90 100644 --- a/config/data_import/encise/CITQD_Merck01.txt +++ b/s3/data/encise/settings/CITQD_Merck01.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citqd -org01.en_citqd_01 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citqd +org01.en_citqd_01 + diff --git a/config/data_import/encise/CITQD_Merck06.txt b/s3/data/encise/settings/CITQD_Merck06.txt similarity index 96% rename from config/data_import/encise/CITQD_Merck06.txt rename to s3/data/encise/settings/CITQD_Merck06.txt index 09423f1f..30412a25 100644 --- a/config/data_import/encise/CITQD_Merck06.txt +++ b/s3/data/encise/settings/CITQD_Merck06.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citqd -org01.en_citqd_06 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citqd +org01.en_citqd_06 + diff --git a/config/data_import/encise/CITQD_Merck07.txt b/s3/data/encise/settings/CITQD_Merck07.txt similarity index 96% rename from config/data_import/encise/CITQD_Merck07.txt rename to s3/data/encise/settings/CITQD_Merck07.txt index 71443d89..ba1fede1 100644 --- a/config/data_import/encise/CITQD_Merck07.txt +++ b/s3/data/encise/settings/CITQD_Merck07.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citqd -org01.en_citqd_07 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citqd +org01.en_citqd_07 + diff --git a/config/data_import/encise/CITQD_Merck10.txt b/s3/data/encise/settings/CITQD_Merck10.txt similarity index 96% rename from config/data_import/encise/CITQD_Merck10.txt rename to s3/data/encise/settings/CITQD_Merck10.txt index 087164c2..51aab6d0 100644 --- a/config/data_import/encise/CITQD_Merck10.txt +++ b/s3/data/encise/settings/CITQD_Merck10.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_citqd -org01.en_citqd_10 - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_citqd +org01.en_citqd_10 + diff --git a/config/data_import/encise/CITQM_PROADD.txt b/s3/data/encise/settings/CITQM_PROADD.txt similarity index 99% rename from config/data_import/encise/CITQM_PROADD.txt rename to s3/data/encise/settings/CITQM_PROADD.txt index d62e0f00..e5347211 100644 --- a/config/data_import/encise/CITQM_PROADD.txt +++ b/s3/data/encise/settings/CITQM_PROADD.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -49 -統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) -universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date -src01.en_citqm_proadd -org01.en_citqm_proadd - +ensice +, +cp932 +" +CRLF +1 +49 +統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) +universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date +src01.en_citqm_proadd +org01.en_citqm_proadd + diff --git a/config/data_import/encise/CITQM_PROLST.txt b/s3/data/encise/settings/CITQM_PROLST.txt similarity index 96% rename from config/data_import/encise/CITQM_PROLST.txt rename to s3/data/encise/settings/CITQM_PROLST.txt index a12c8d9e..028149c2 100644 --- a/config/data_import/encise/CITQM_PROLST.txt +++ b/s3/data/encise/settings/CITQM_PROLST.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -7 -統一商品コード,製品名,包装単位,販売元名,更新日(西暦),薬効分類コード,薬効分類名 -universal_product_code,product_SKU_name,package,seller_name,update_date,data_file_code,data_file_name -src01.en_citqm_prolst -org01.en_citqm_prolst - +ensice +, +cp932 +" +CRLF +1 +7 +統一商品コード,製品名,包装単位,販売元名,更新日(西暦),薬効分類コード,薬効分類名 +universal_product_code,product_SKU_name,package,seller_name,update_date,data_file_code,data_file_name +src01.en_citqm_prolst +org01.en_citqm_prolst + diff --git a/config/data_import/encise/CITQM_REGION.txt b/s3/data/encise/settings/CITQM_REGION.txt similarity index 92% rename from config/data_import/encise/CITQM_REGION.txt rename to s3/data/encise/settings/CITQM_REGION.txt index e618e526..b8272963 100644 --- a/config/data_import/encise/CITQM_REGION.txt +++ b/s3/data/encise/settings/CITQM_REGION.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -3 -地域コード,地域名,更新日(西暦) -region_code,region_name,update_date -src01.en_citqm_region -org01.en_citqm_region - +ensice +, +cp932 +" +CRLF +1 +3 +地域コード,地域名,更新日(西暦) +region_code,region_name,update_date +src01.en_citqm_region +org01.en_citqm_region + diff --git a/config/data_import/encise/CITQM_SEGMNT.txt b/s3/data/encise/settings/CITQM_SEGMNT.txt similarity index 93% rename from config/data_import/encise/CITQM_SEGMNT.txt rename to s3/data/encise/settings/CITQM_SEGMNT.txt index 0ccc7faf..abffa6da 100644 --- a/config/data_import/encise/CITQM_SEGMNT.txt +++ b/s3/data/encise/settings/CITQM_SEGMNT.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -3 -セグメントコード,セグメント名,更新日(西暦) -segment_code,segment_name,update_date -src01.en_citqm_segmnt -org01.en_citqm_segmnt - +ensice +, +cp932 +" +CRLF +1 +3 +セグメントコード,セグメント名,更新日(西暦) +segment_code,segment_name,update_date +src01.en_citqm_segmnt +org01.en_citqm_segmnt + diff --git a/config/data_import/encise/CLUFD_Merck02.txt b/s3/data/encise/settings/CLUFD_Merck02.txt similarity index 96% rename from config/data_import/encise/CLUFD_Merck02.txt rename to s3/data/encise/settings/CLUFD_Merck02.txt index ec73fad8..e7b98408 100644 --- a/config/data_import/encise/CLUFD_Merck02.txt +++ b/s3/data/encise/settings/CLUFD_Merck02.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -11 -クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_clufd -org01.en_clufd_02 - +ensice +, +cp932 +" +CRLF +1 +11 +クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_clufd +org01.en_clufd_02 + diff --git a/config/data_import/encise/CLUFD_Merck02_D.txt b/s3/data/encise/settings/CLUFD_Merck02_D.txt similarity index 96% rename from config/data_import/encise/CLUFD_Merck02_D.txt rename to s3/data/encise/settings/CLUFD_Merck02_D.txt index 992b88c7..f6f35e6b 100644 --- a/config/data_import/encise/CLUFD_Merck02_D.txt +++ b/s3/data/encise/settings/CLUFD_Merck02_D.txt @@ -1,12 +1,12 @@ -ensice -, -utf-8-sig - -CRLF -1 -12 -クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg -cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg -src01.en_clufd -org01.en_clufd_d_02 - +ensice +, +utf-8-sig + +CRLF +1 +12 +クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg +cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg +src01.en_clufd +org01.en_clufd_d_02 + diff --git a/config/data_import/encise/CLUFD_Merck03.txt b/s3/data/encise/settings/CLUFD_Merck03.txt similarity index 96% rename from config/data_import/encise/CLUFD_Merck03.txt rename to s3/data/encise/settings/CLUFD_Merck03.txt index c456b163..46622eb0 100644 --- a/config/data_import/encise/CLUFD_Merck03.txt +++ b/s3/data/encise/settings/CLUFD_Merck03.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -11 -クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_clufd -org01.en_clufd_03 - +ensice +, +cp932 +" +CRLF +1 +11 +クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_clufd +org01.en_clufd_03 + diff --git a/config/data_import/encise/CLUFD_Merck03_D.txt b/s3/data/encise/settings/CLUFD_Merck03_D.txt similarity index 96% rename from config/data_import/encise/CLUFD_Merck03_D.txt rename to s3/data/encise/settings/CLUFD_Merck03_D.txt index ad37c208..4121304b 100644 --- a/config/data_import/encise/CLUFD_Merck03_D.txt +++ b/s3/data/encise/settings/CLUFD_Merck03_D.txt @@ -1,12 +1,12 @@ -ensice -, -utf-8-sig - -CRLF -1 -12 -クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg -cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg -src01.en_clufd -org01.en_clufd_d_03 - +ensice +, +utf-8-sig + +CRLF +1 +12 +クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg +cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg +src01.en_clufd +org01.en_clufd_d_03 + diff --git a/config/data_import/encise/CLUFD_Merck04.txt b/s3/data/encise/settings/CLUFD_Merck04.txt similarity index 96% rename from config/data_import/encise/CLUFD_Merck04.txt rename to s3/data/encise/settings/CLUFD_Merck04.txt index 7727273e..ad207cad 100644 --- a/config/data_import/encise/CLUFD_Merck04.txt +++ b/s3/data/encise/settings/CLUFD_Merck04.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -11 -クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_clufd -org01.en_clufd_04 - +ensice +, +cp932 +" +CRLF +1 +11 +クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_clufd +org01.en_clufd_04 + diff --git a/config/data_import/encise/CLUFD_Merck04_D.txt b/s3/data/encise/settings/CLUFD_Merck04_D.txt similarity index 96% rename from config/data_import/encise/CLUFD_Merck04_D.txt rename to s3/data/encise/settings/CLUFD_Merck04_D.txt index 765bd4a5..187b65aa 100644 --- a/config/data_import/encise/CLUFD_Merck04_D.txt +++ b/s3/data/encise/settings/CLUFD_Merck04_D.txt @@ -1,12 +1,12 @@ -ensice -, -utf-8-sig - -CRLF -1 -12 -クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg -cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg -src01.en_clufd -org01.en_clufd_d_04 - +ensice +, +utf-8-sig + +CRLF +1 +12 +クラスターコード,クラスター名,セグメントコード,セグメント名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg +cluster_code,cluster_name,segment_code,segment_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg +src01.en_clufd +org01.en_clufd_d_04 + diff --git a/config/data_import/encise/CLUFM_CLUMST.txt b/s3/data/encise/settings/CLUFM_CLUMST.txt similarity index 97% rename from config/data_import/encise/CLUFM_CLUMST.txt rename to s3/data/encise/settings/CLUFM_CLUMST.txt index c3b2598a..c2693b08 100644 --- a/config/data_import/encise/CLUFM_CLUMST.txt +++ b/s3/data/encise/settings/CLUFM_CLUMST.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -12 -対象期間,クラスターコード,クラスター名,都道府県コード,都道府県名,施設コード,施設名,更新日,更新事由,適用年月,セグメントコード,セグメント名 -data_period,cluster_code,cluster_name,pref_code,pref_name,HCO_coce,HCO_name,update_date,update_remarks,master_YM,segment_code,segment_name -src01.en_clufm_clumst -org01.en_clufm_clumst -CLUFM_CLUMST_ex.sql +ensice +, +cp932 +" +CRLF +1 +12 +対象期間,クラスターコード,クラスター名,都道府県コード,都道府県名,施設コード,施設名,更新日,更新事由,適用年月,セグメントコード,セグメント名 +data_period,cluster_code,cluster_name,pref_code,pref_name,HCO_coce,HCO_name,update_date,update_remarks,master_YM,segment_code,segment_name +src01.en_clufm_clumst +org01.en_clufm_clumst +CLUFM_CLUMST_ex.sql diff --git a/config/data_import/encise/CLUFM_CLUMST_ex.sql b/s3/data/encise/settings/CLUFM_CLUMST_ex.sql similarity index 97% rename from config/data_import/encise/CLUFM_CLUMST_ex.sql rename to s3/data/encise/settings/CLUFM_CLUMST_ex.sql index 2b6f8b5d..20bebf79 100644 --- a/config/data_import/encise/CLUFM_CLUMST_ex.sql +++ b/s3/data/encise/settings/CLUFM_CLUMST_ex.sql @@ -1,7 +1,7 @@ -/* クラスターマスタのTO年月をセットする */ -update src01.en_clufm_clumst set -to_ym = case when substr(data_period,9,7) is null then '0000/00' - else substr(data_period,9,7) - end -where to_ym is null; - +/* クラスターマスタのTO年月をセットする */ +update src01.en_clufm_clumst set +to_ym = case when substr(data_period,9,7) is null then '0000/00' + else substr(data_period,9,7) + end +where to_ym is null; + diff --git a/config/data_import/encise/CLUFM_PROADD.txt b/s3/data/encise/settings/CLUFM_PROADD.txt similarity index 99% rename from config/data_import/encise/CLUFM_PROADD.txt rename to s3/data/encise/settings/CLUFM_PROADD.txt index 8cb378b4..488bd73e 100644 --- a/config/data_import/encise/CLUFM_PROADD.txt +++ b/s3/data/encise/settings/CLUFM_PROADD.txt @@ -1,12 +1,12 @@ -encise -, -cp932 -" -CRLF -1 -49 -統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) -universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date -src01.en_clufm_proadd -org01.en_clufm_proadd - +encise +, +cp932 +" +CRLF +1 +49 +統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) +universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date +src01.en_clufm_proadd +org01.en_clufm_proadd + diff --git a/config/data_import/encise/CLUFM_PROLST.txt b/s3/data/encise/settings/CLUFM_PROLST.txt similarity index 96% rename from config/data_import/encise/CLUFM_PROLST.txt rename to s3/data/encise/settings/CLUFM_PROLST.txt index ce4c4dcb..f8a827b4 100644 --- a/config/data_import/encise/CLUFM_PROLST.txt +++ b/s3/data/encise/settings/CLUFM_PROLST.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -7 -統一商品コード,製品名,包装単位,販売元名,更新日(西暦),薬効分類コード,薬効分類名 -universal_product_code,product_SKU_name,package,seller_name,update_date,data_file_code,data_file_name -src01.en_clufm_prolst -org01.en_clufm_prolst - +ensice +, +cp932 +" +CRLF +1 +7 +統一商品コード,製品名,包装単位,販売元名,更新日(西暦),薬効分類コード,薬効分類名 +universal_product_code,product_SKU_name,package,seller_name,update_date,data_file_code,data_file_name +src01.en_clufm_prolst +org01.en_clufm_prolst + diff --git a/config/data_import/encise/MST_BRAND.txt b/s3/data/encise/settings/MST_BRAND.txt similarity index 98% rename from config/data_import/encise/MST_BRAND.txt rename to s3/data/encise/settings/MST_BRAND.txt index 032c6a87..42fc7fde 100644 --- a/config/data_import/encise/MST_BRAND.txt +++ b/s3/data/encise/settings/MST_BRAND.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -30 -JANコード,統一商品コード,YJコード,使用区分名,剤型コード,剤型名,商品名,一般名,規格容量,規格単位名,販売元コード,販売元名,製造元コード,製造元名,Route of Administration,Form,Brand_Name,Molecule_Name,Strength,SalesCompany,Manufacturer,薬効分類コード,薬効分類名,日本標準薬効2,日本標準薬効名2,薬価基準収載医薬品コード,処方せん医薬品,薬価基準収載区分,ENCODE,名称 -jan_code,universal_product_code,yj_code,drug_usage_name,drug_form_code,drug_form_name,product_SKU_name,active_ingredient_name,package,SKU_name,seller_code,seller_name,manufacturer_code,manufacturer_name,eng_route_of_administration,eng_form,eng_brand_name,eng_molecule_name,eng_strength,eng_seller_name,eng_manufacturer_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,NHI_pricing_code,ethical_drug_flag,NHI_pricing_flag,encode,encise_active_ingredient_name -src01.en_mst_brand -org01.en_mst_brand - +ensice +, +cp932 +" +CRLF +1 +30 +JANコード,統一商品コード,YJコード,使用区分名,剤型コード,剤型名,商品名,一般名,規格容量,規格単位名,販売元コード,販売元名,製造元コード,製造元名,Route of Administration,Form,Brand_Name,Molecule_Name,Strength,SalesCompany,Manufacturer,薬効分類コード,薬効分類名,日本標準薬効2,日本標準薬効名2,薬価基準収載医薬品コード,処方せん医薬品,薬価基準収載区分,ENCODE,名称 +jan_code,universal_product_code,yj_code,drug_usage_name,drug_form_code,drug_form_name,product_SKU_name,active_ingredient_name,package,SKU_name,seller_code,seller_name,manufacturer_code,manufacturer_name,eng_route_of_administration,eng_form,eng_brand_name,eng_molecule_name,eng_strength,eng_seller_name,eng_manufacturer_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,NHI_pricing_code,ethical_drug_flag,NHI_pricing_flag,encode,encise_active_ingredient_name +src01.en_mst_brand +org01.en_mst_brand + diff --git a/config/data_import/encise/NATFD.txt b/s3/data/encise/settings/NATFD.txt similarity index 96% rename from config/data_import/encise/NATFD.txt rename to s3/data/encise/settings/NATFD.txt index 7529f0c9..a0e8da1b 100644 --- a/config/data_import/encise/NATFD.txt +++ b/s3/data/encise/settings/NATFD.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_natfd -org01.en_natfd - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_natfd +org01.en_natfd + diff --git a/config/data_import/encise/NATFD_D.txt b/s3/data/encise/settings/NATFD_D.txt similarity index 97% rename from config/data_import/encise/NATFD_D.txt rename to s3/data/encise/settings/NATFD_D.txt index 080cceab..5694a989 100644 --- a/config/data_import/encise/NATFD_D.txt +++ b/s3/data/encise/settings/NATFD_D.txt @@ -1,12 +1,12 @@ -ensice -, -utf-8-sig - -CRLF -1 -14 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg -src01.en_natfd -org01.en_natfd_d - +ensice +, +utf-8-sig + +CRLF +1 +14 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月,direct_flg +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month,direct_flg +src01.en_natfd +org01.en_natfd_d + diff --git a/config/data_import/encise/NATFM_PROADD.txt b/s3/data/encise/settings/NATFM_PROADD.txt similarity index 99% rename from config/data_import/encise/NATFM_PROADD.txt rename to s3/data/encise/settings/NATFM_PROADD.txt index 43bfe5f9..41a7e5b6 100644 --- a/config/data_import/encise/NATFM_PROADD.txt +++ b/s3/data/encise/settings/NATFM_PROADD.txt @@ -1,12 +1,12 @@ -encise -, -cp932 -" -CRLF -1 -49 -統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) -universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date -src01.en_natfm_proadd -org01.en_natfm_proadd - +encise +, +cp932 +" +CRLF +1 +49 +統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) +universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date +src01.en_natfm_proadd +org01.en_natfm_proadd + diff --git a/config/data_import/encise/NATFM_SEGMNT.txt b/s3/data/encise/settings/NATFM_SEGMNT.txt similarity index 93% rename from config/data_import/encise/NATFM_SEGMNT.txt rename to s3/data/encise/settings/NATFM_SEGMNT.txt index 6269bbf8..298de016 100644 --- a/config/data_import/encise/NATFM_SEGMNT.txt +++ b/s3/data/encise/settings/NATFM_SEGMNT.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -3 -セグメントコード,セグメント名,更新日(西暦) -segment_code,segment_name,update_date -src01.en_natfm_segmnt -org01.en_natfm_segmnt - +ensice +, +cp932 +" +CRLF +1 +3 +セグメントコード,セグメント名,更新日(西暦) +segment_code,segment_name,update_date +src01.en_natfm_segmnt +org01.en_natfm_segmnt + diff --git a/config/data_import/encise/NATQD.txt b/s3/data/encise/settings/NATQD.txt similarity index 96% rename from config/data_import/encise/NATQD.txt rename to s3/data/encise/settings/NATQD.txt index 16bd0c49..7690f867 100644 --- a/config/data_import/encise/NATQD.txt +++ b/s3/data/encise/settings/NATQD.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -13 -地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 -region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month -src01.en_natqd -org01.en_natqd - +ensice +, +cp932 +" +CRLF +1 +13 +地域コード,地域名,セグメントコード,セグメント名,施設コード,施設名,統一商品コード,製品名,包装単位,数量,金額(薬価),年,月 +region_code,region_name,segment_code,segment_name,HCO_code,HCO_name,universal_product_code,product_SKU_name,package,qty,value_NHI,year,month +src01.en_natqd +org01.en_natqd + diff --git a/config/data_import/encise/NATQM_PROADD.txt b/s3/data/encise/settings/NATQM_PROADD.txt similarity index 99% rename from config/data_import/encise/NATQM_PROADD.txt rename to s3/data/encise/settings/NATQM_PROADD.txt index 1d483ad1..5a11c589 100644 --- a/config/data_import/encise/NATQM_PROADD.txt +++ b/s3/data/encise/settings/NATQM_PROADD.txt @@ -1,12 +1,12 @@ -encise -, -cp932 -" -CRLF -1 -49 -統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) -universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date -src01.en_natqm_proadd -org01.en_natqm_proadd - +encise +, +cp932 +" +CRLF +1 +49 +統一商品コード,販売元コード,販売元名称,製造販売元コード,製造販売元名称,製品分類コード(大),製品分類名称(大),製品分類コード(中),製品分類名称(中),製品分類コード(小),製品分類名称(小),Encise ATC分類コード(第1レベル),Encise ATC分類名称(第1レベル),Encise ATC分類コード(第2レベル),Encise ATC分類名称(第2レベル),Encise ATC分類コード(第3レベル),Encise ATC分類名称(第3レベル),Encise ATC分類コード(第4レベル),Encise ATC分類名称(第4レベル),WHO ATC分類コード(第1レベル),WHO ATC分類名称(第1レベル),WHO ATC分類コード(第2レベル),WHO ATC分類名称(第2レベル),WHO ATC分類コード(第3レベル),WHO ATC分類名称(第3レベル),WHO ATC分類コード(第4レベル),WHO ATC分類名称(第4レベル),日本標準商品分類番号薬効分類コード(大),日本標準商品分類番号薬効分類名称(大),日本標準商品分類番号薬効分類コード(中),日本標準商品分類番号薬効分類名称(中),日本標準商品分類番号薬効分類コード(小),日本標準商品分類番号薬効分類名称(小),日本標準商品分類番号薬効分類コード(細),日本標準商品分類番号薬効分類名称(細),使用区分コード,使用区分名称,剤型区分コード,剤型区分名称,長期収載品区分コード,長期収載品区分名,薬価基準収載区分コード,薬価基準収載区分名,後発医薬品区分コード,後発医薬品区分名,有効成分一般名コード,有効成分一般名,新薬創出加算区分,更新日(西暦) +universal_product_code,seller_code,seller_name,manufacturer_code,manufacturer_name,product_brand_code,product_brand_name,product_item_code,product_item_name,product_SKU_code,product_SKU_name,Encise_ATC_1_code,Encise_ATC_1_name,Encise_ATC_2_code,Encise_ATC_2_name,Encise_ATC_3_code,Encise_ATC_3_name,Encise_ATC_4_code,Encise_ATC_4_name,WHO_ATC_1_code,WHO_ATC_1_name,WHO_ATC_2_code,WHO_ATC_2_name,WHO_ATC_3_code,WHO_ATC_3_name,WHO_ATC_4_code,WHO_ATC_4_name,JPN_pharma_category_1_code,JPN_pharma_category_1_name,JPN_pharma_category_2_code,JPN_pharma_category_2_name,JPN_pharma_category_3_code,JPN_pharma_category_3_name,JPN_pharma_category_4_code,JPN_pharma_category_4_name,drug_usage_code,drug_usage_name,drug_form_code,drug_form_name,long_listed_code,long_listed_flag,NHI_pricing_code,NHI_pricing_flag,generic_code,generic_flag,active_ingredient_code,active_ingredient_name,new_drug_premium_code,update_date +src01.en_natqm_proadd +org01.en_natqm_proadd + diff --git a/config/data_import/encise/NATQM_SEGMNT.txt b/s3/data/encise/settings/NATQM_SEGMNT.txt similarity index 93% rename from config/data_import/encise/NATQM_SEGMNT.txt rename to s3/data/encise/settings/NATQM_SEGMNT.txt index 63ea7316..ef44ee1c 100644 --- a/config/data_import/encise/NATQM_SEGMNT.txt +++ b/s3/data/encise/settings/NATQM_SEGMNT.txt @@ -1,12 +1,12 @@ -ensice -, -cp932 -" -CRLF -1 -3 -セグメントコード,セグメント名,更新日(西暦) -segment_code,segment_name,update_date -src01.en_natqm_segmnt -org01.en_natqm_segmnt - +ensice +, +cp932 +" +CRLF +1 +3 +セグメントコード,セグメント名,更新日(西暦) +segment_code,segment_name,update_date +src01.en_natqm_segmnt +org01.en_natqm_segmnt + diff --git a/config/data_import/encise/configmap.config b/s3/data/encise/settings/configmap.config similarity index 98% rename from config/data_import/encise/configmap.config rename to s3/data/encise/settings/configmap.config index 8aebcda8..377cf1af 100644 --- a/config/data_import/encise/configmap.config +++ b/s3/data/encise/settings/configmap.config @@ -1,37 +1,37 @@ -/* 第3営業日:速報データ */ -CITQD_Merck01_496_[0-9]{6}\.(CSV|csv) CITQD_Merck01.txt -CITQD_Merck06_496_[0-9]{6}\.(CSV|csv) CITQD_Merck06.txt -CITQD_Merck07_496_[0-9]{6}\.(CSV|csv) CITQD_Merck07.txt -CITQD_Merck10_496_[0-9]{6}\.(CSV|csv) CITQD_Merck10.txt -CITQM_PROADD_496_[0-9]{6}\.(CSV|csv) CITQM_PROADD.txt -CITQM_PROLST_496_[0-9]{6}\.(CSV|csv) CITQM_PROLST.txt -CITQM_REGION_496_[0-9]{6}\.(CSV|csv) CITQM_REGION.txt -CITQM_SEGMNT_496_[0-9]{6}\.(CSV|csv) CITQM_SEGMNT.txt -NATQD_496_[0-9]{6}\.(CSV|csv) NATQD.txt -NATQM_PROADD_496_[0-9]{6}\.(CSV|csv) NATQM_PROADD.txt -NATQM_SEGMNT_496_[0-9]{6}\.(CSV|csv) NATQM_SEGMNT.txt -/* 毎月15日:確定データ */ -CITFD_Merck01_496_[0-9]{6}\.(CSV|csv) CITFD_Merck01.txt -CITFD_Merck06_496_[0-9]{6}\.(CSV|csv) CITFD_Merck06.txt -CITFD_Merck07_496_[0-9]{6}\.(CSV|csv) CITFD_Merck07.txt -CITFD_Merck10_496_[0-9]{6}\.(CSV|csv) CITFD_Merck10.txt -CITFM_PROADD_496_[0-9]{6}\.(CSV|csv) CITFM_PROADD.txt -CITFM_PROLST_496_[0-9]{6}\.(CSV|csv) CITFM_PROLST.txt -CITFM_REGION_496_[0-9]{6}\.(CSV|csv) CITFM_REGION.txt -CITFM_SEGMNT_496_[0-9]{6}\.(CSV|csv) CITFM_SEGMNT.txt -MST_BRAND[0-9]{6}\.(CSV|csv) MST_BRAND.txt -NATFD_496_[0-9]{6}\.(CSV|csv) NATFD.txt -NATFM_PROADD_496_[0-9]{6}\.(CSV|csv) NATFM_PROADD.txt -NATFM_SEGMNT_496_[0-9]{6}\.(CSV|csv) NATFM_SEGMNT.txt -/* 毎月20日:En-Cluster */ -CLUFD_Merck02_496_[0-9]{6}\.(CSV|csv) CLUFD_Merck02.txt -CLUFD_Merck03_496_[0-9]{6}\.(CSV|csv) CLUFD_Merck03.txt -CLUFD_Merck04_496_[0-9]{6}\.(CSV|csv) CLUFD_Merck04.txt -CLUFM_CLUMST_496_01_[0-9]{6}\.(CSV|csv) CLUFM_CLUMST.txt -CLUFM_PROADD_496_[0-9]{6}\.(CSV|csv) CLUFM_PROADD.txt -CLUFM_PROLST_496_[0-9]{6}\.(CSV|csv) CLUFM_PROLST.txt -/* 直販データ */ -CLUFD_Merck02_496_[0-9]{6}D\.(CSV|csv) CLUFD_Merck02_D.txt -CLUFD_Merck03_496_[0-9]{6}D\.(CSV|csv) CLUFD_Merck03_D.txt -CLUFD_Merck04_496_[0-9]{6}D\.(CSV|csv) CLUFD_Merck04_D.txt -NATFD_496_[0-9]{6}D\.(CSV|csv) NATFD_D.txt +/* 第3営業日:速報データ */ +CITQD_Merck01_496_[0-9]{6}\.(CSV|csv) CITQD_Merck01.txt +CITQD_Merck06_496_[0-9]{6}\.(CSV|csv) CITQD_Merck06.txt +CITQD_Merck07_496_[0-9]{6}\.(CSV|csv) CITQD_Merck07.txt +CITQD_Merck10_496_[0-9]{6}\.(CSV|csv) CITQD_Merck10.txt +CITQM_PROADD_496_[0-9]{6}\.(CSV|csv) CITQM_PROADD.txt +CITQM_PROLST_496_[0-9]{6}\.(CSV|csv) CITQM_PROLST.txt +CITQM_REGION_496_[0-9]{6}\.(CSV|csv) CITQM_REGION.txt +CITQM_SEGMNT_496_[0-9]{6}\.(CSV|csv) CITQM_SEGMNT.txt +NATQD_496_[0-9]{6}\.(CSV|csv) NATQD.txt +NATQM_PROADD_496_[0-9]{6}\.(CSV|csv) NATQM_PROADD.txt +NATQM_SEGMNT_496_[0-9]{6}\.(CSV|csv) NATQM_SEGMNT.txt +/* 毎月15日:確定データ */ +CITFD_Merck01_496_[0-9]{6}\.(CSV|csv) CITFD_Merck01.txt +CITFD_Merck06_496_[0-9]{6}\.(CSV|csv) CITFD_Merck06.txt +CITFD_Merck07_496_[0-9]{6}\.(CSV|csv) CITFD_Merck07.txt +CITFD_Merck10_496_[0-9]{6}\.(CSV|csv) CITFD_Merck10.txt +CITFM_PROADD_496_[0-9]{6}\.(CSV|csv) CITFM_PROADD.txt +CITFM_PROLST_496_[0-9]{6}\.(CSV|csv) CITFM_PROLST.txt +CITFM_REGION_496_[0-9]{6}\.(CSV|csv) CITFM_REGION.txt +CITFM_SEGMNT_496_[0-9]{6}\.(CSV|csv) CITFM_SEGMNT.txt +MST_BRAND[0-9]{6}\.(CSV|csv) MST_BRAND.txt +NATFD_496_[0-9]{6}\.(CSV|csv) NATFD.txt +NATFM_PROADD_496_[0-9]{6}\.(CSV|csv) NATFM_PROADD.txt +NATFM_SEGMNT_496_[0-9]{6}\.(CSV|csv) NATFM_SEGMNT.txt +/* 毎月20日:En-Cluster */ +CLUFD_Merck02_496_[0-9]{6}\.(CSV|csv) CLUFD_Merck02.txt +CLUFD_Merck03_496_[0-9]{6}\.(CSV|csv) CLUFD_Merck03.txt +CLUFD_Merck04_496_[0-9]{6}\.(CSV|csv) CLUFD_Merck04.txt +CLUFM_CLUMST_496_01_[0-9]{6}\.(CSV|csv) CLUFM_CLUMST.txt +CLUFM_PROADD_496_[0-9]{6}\.(CSV|csv) CLUFM_PROADD.txt +CLUFM_PROLST_496_[0-9]{6}\.(CSV|csv) CLUFM_PROLST.txt +/* 直販データ */ +CLUFD_Merck02_496_[0-9]{6}D\.(CSV|csv) CLUFD_Merck02_D.txt +CLUFD_Merck03_496_[0-9]{6}D\.(CSV|csv) CLUFD_Merck03_D.txt +CLUFD_Merck04_496_[0-9]{6}D\.(CSV|csv) CLUFD_Merck04_D.txt +NATFD_496_[0-9]{6}D\.(CSV|csv) NATFD_D.txt From ecc136f6c8d5b8a47c94f397c4b116210172d3b7 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 23 Jun 2022 17:21:34 +0900 Subject: [PATCH 43/47] =?UTF-8?q?feat:SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E4=BF=9D=E7=AE=A1=20=E8=A8=AD=E5=AE=9A=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=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 --- s3/config/SAP/monthly_check_day_list.config | 7 ++ ...ap_fin_daily_receive_file_name_list.config | 4 + ...nthly_data_notice_mail_body_monthly.config | 6 ++ ...thly_data_notice_mail_title_monthly.config | 1 + ..._fin_monthly_receive_file_name_list.config | 1 + ...p_fin_receive_check_mail_body_daily.config | 8 ++ ...fin_receive_check_mail_body_monthly.config | 8 ++ ..._fin_receive_check_mail_title_daily.config | 1 + ...in_receive_check_mail_title_monthly.config | 1 + ...ap_sup_daily_receive_file_name_list.config | 1 + ...nthly_data_notice_mail_body_monthly.config | 6 ++ ...thly_data_notice_mail_title_monthly.config | 1 + ..._sup_monthly_receive_file_name_list.config | 6 ++ ...p_sup_receive_check_mail_body_daily.config | 8 ++ ...sup_receive_check_mail_body_monthly.config | 8 ++ ..._sup_receive_check_mail_title_daily.config | 1 + ...up_receive_check_mail_title_monthly.config | 1 + s3/config/non_business_day_list.config | 73 +++++++++++++++++++ 18 files changed, 142 insertions(+) create mode 100644 s3/config/SAP/monthly_check_day_list.config create mode 100644 s3/config/SAP/sap_fin_daily_receive_file_name_list.config create mode 100644 s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config create mode 100644 s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config create mode 100644 s3/config/SAP/sap_fin_monthly_receive_file_name_list.config create mode 100644 s3/config/SAP/sap_fin_receive_check_mail_body_daily.config create mode 100644 s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config create mode 100644 s3/config/SAP/sap_fin_receive_check_mail_title_daily.config create mode 100644 s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config create mode 100644 s3/config/SAP/sap_sup_daily_receive_file_name_list.config create mode 100644 s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config create mode 100644 s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config create mode 100644 s3/config/SAP/sap_sup_monthly_receive_file_name_list.config create mode 100644 s3/config/SAP/sap_sup_receive_check_mail_body_daily.config create mode 100644 s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config create mode 100644 s3/config/SAP/sap_sup_receive_check_mail_title_daily.config create mode 100644 s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config create mode 100644 s3/config/non_business_day_list.config diff --git a/s3/config/SAP/monthly_check_day_list.config b/s3/config/SAP/monthly_check_day_list.config new file mode 100644 index 00000000..900bcc9a --- /dev/null +++ b/s3/config/SAP/monthly_check_day_list.config @@ -0,0 +1,7 @@ +2022/06/15 +2022/07/15 +2022/08/15 +2022/09/15 +2022/10/15 +2022/11/15 +2022/12/15 diff --git a/s3/config/SAP/sap_fin_daily_receive_file_name_list.config b/s3/config/SAP/sap_fin_daily_receive_file_name_list.config new file mode 100644 index 00000000..10ee861a --- /dev/null +++ b/s3/config/SAP/sap_fin_daily_receive_file_name_list.config @@ -0,0 +1,4 @@ +CostReport_[0-9]{8}_[0-9]{6}\.tsv Cost Report +IOReport_[0-9]{8}_[0-9]{6}\.tsv Internal Order Report +WBSReport_[0-9]{8}_[0-9]{6}\.tsv WBS Report +Invoice_[0-9]{8}_[0-9]{6}\.tsv Invoice Data diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config new file mode 100644 index 00000000..275b3316 --- /dev/null +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config @@ -0,0 +1,6 @@ +宛先各位 + SAP月次I/Fである以下のファイルを受領しましたので、通知いたします。 +@pgm_str_01@ + + 尚、本メールはシステム自動送信のため、返信は出来ません。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config new file mode 100644 index 00000000..a9dbb42f --- /dev/null +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_title_monthly.config @@ -0,0 +1 @@ +【MeDaCa連携通知】SAP Finance 月次I/Fファイルを受領しました diff --git a/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config b/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config new file mode 100644 index 00000000..ecc258fe --- /dev/null +++ b/s3/config/SAP/sap_fin_monthly_receive_file_name_list.config @@ -0,0 +1 @@ +WBSList_[0-9]{8}_[0-9]{6}\.tsv WBS List diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config new file mode 100644 index 00000000..8c4e87a0 --- /dev/null +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config @@ -0,0 +1,8 @@ +宛先各位 + SAP日次I/Fである以下のファイルを受領できておりません。 +@pgm_str_01@ + + SAPシステム側のSFTP送信状況のご確認をお願いいたします。 + + 尚、本メールはシステム自動送信のため、返信は出来ません。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config new file mode 100644 index 00000000..d08f0ac8 --- /dev/null +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config @@ -0,0 +1,8 @@ +宛先各位 + SAP月次I/Fである以下のファイルを受領できておりません。 +@pgm_str_01@ + + SAPシステム側のSFTP送信状況のご確認をお願いいたします。 + + 尚、本メールはシステム自動送信のため、返信は出来ません。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config new file mode 100644 index 00000000..f45971a0 --- /dev/null +++ b/s3/config/SAP/sap_fin_receive_check_mail_title_daily.config @@ -0,0 +1 @@ +【MeDaCa連携エラー通知】SAP Finance 日次I/Fファイル未受領 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config new file mode 100644 index 00000000..a6ba208a --- /dev/null +++ b/s3/config/SAP/sap_fin_receive_check_mail_title_monthly.config @@ -0,0 +1 @@ +【MeDaCa連携エラー通知】SAP Finance 月次I/Fファイル未受領 diff --git a/s3/config/SAP/sap_sup_daily_receive_file_name_list.config b/s3/config/SAP/sap_sup_daily_receive_file_name_list.config new file mode 100644 index 00000000..202d503f --- /dev/null +++ b/s3/config/SAP/sap_sup_daily_receive_file_name_list.config @@ -0,0 +1 @@ +StockList_[0-9]{8}_[0-9]{6}\.tsv Stock List diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config new file mode 100644 index 00000000..275b3316 --- /dev/null +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config @@ -0,0 +1,6 @@ +宛先各位 + SAP月次I/Fである以下のファイルを受領しましたので、通知いたします。 +@pgm_str_01@ + + 尚、本メールはシステム自動送信のため、返信は出来ません。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config new file mode 100644 index 00000000..adafc514 --- /dev/null +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_title_monthly.config @@ -0,0 +1 @@ +【MeDaCa連携通知】SAP SupplyChain 月次I/Fファイルを受領しました diff --git a/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config b/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config new file mode 100644 index 00000000..cbc5ee68 --- /dev/null +++ b/s3/config/SAP/sap_sup_monthly_receive_file_name_list.config @@ -0,0 +1,6 @@ +GRReport_[0-9]{8}_[0-9]{6}\.tsv Goods Receipt data +QAReport_[0-9]{8}_[0-9]{6}\.tsv QA release data +MLCReport_[0-9]{8}_[0-9]{6}\.tsv MLC transfer data +POReport_[0-9]{8}_[0-9]{6}\.tsv Purchase Order data +ConfReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Confirmation data +GMReport_[0-9]{8}_[0-9]{6}\.tsv Process Order Goods movement data diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config new file mode 100644 index 00000000..8c4e87a0 --- /dev/null +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config @@ -0,0 +1,8 @@ +宛先各位 + SAP日次I/Fである以下のファイルを受領できておりません。 +@pgm_str_01@ + + SAPシステム側のSFTP送信状況のご確認をお願いいたします。 + + 尚、本メールはシステム自動送信のため、返信は出来ません。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config new file mode 100644 index 00000000..d08f0ac8 --- /dev/null +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config @@ -0,0 +1,8 @@ +宛先各位 + SAP月次I/Fである以下のファイルを受領できておりません。 +@pgm_str_01@ + + SAPシステム側のSFTP送信状況のご確認をお願いいたします。 + + 尚、本メールはシステム自動送信のため、返信は出来ません。 + 本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config new file mode 100644 index 00000000..10015ee3 --- /dev/null +++ b/s3/config/SAP/sap_sup_receive_check_mail_title_daily.config @@ -0,0 +1 @@ +【MeDaCa連携エラー通知】SAP SupplyChain 日次I/Fファイル未受領 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config new file mode 100644 index 00000000..a85319bb --- /dev/null +++ b/s3/config/SAP/sap_sup_receive_check_mail_title_monthly.config @@ -0,0 +1 @@ +【MeDaCa連携エラー通知】SAP SupplyChain 月次I/Fファイル未受領 diff --git a/s3/config/non_business_day_list.config b/s3/config/non_business_day_list.config new file mode 100644 index 00000000..b816fa34 --- /dev/null +++ b/s3/config/non_business_day_list.config @@ -0,0 +1,73 @@ +2022/06/04 +2022/06/05 +2022/06/11 +2022/06/12 +2022/06/18 +2022/06/19 +2022/06/25 +2022/06/26 +2022/07/02 +2022/07/03 +2022/07/09 +2022/07/10 +2022/07/16 +2022/07/17 +2022/07/18 +2022/07/23 +2022/07/24 +2022/07/30 +2022/07/31 +2022/08/06 +2022/08/07 +2022/08/11 +2022/08/12 +2022/08/13 +2022/08/14 +2022/08/15 +2022/08/16 +2022/08/20 +2022/08/21 +2022/08/27 +2022/08/28 +2022/09/03 +2022/09/04 +2022/09/10 +2022/09/11 +2022/09/17 +2022/09/18 +2022/09/19 +2022/09/23 +2022/09/24 +2022/09/25 +2022/10/01 +2022/10/02 +2022/10/08 +2022/10/09 +2022/10/10 +2022/10/15 +2022/10/16 +2022/10/22 +2022/10/23 +2022/10/29 +2022/10/30 +2022/11/03 +2022/11/05 +2022/11/06 +2022/11/12 +2022/11/13 +2022/11/19 +2022/11/20 +2022/11/23 +2022/11/26 +2022/11/27 +2022/12/03 +2022/12/04 +2022/12/10 +2022/12/11 +2022/12/17 +2022/12/18 +2022/12/24 +2022/12/25 +2022/12/29 +2022/12/30 +2022/12/31 From 42831781b62852ed2011bb8802e553b38043035a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 28 Jun 2022 15:16:29 +0900 Subject: [PATCH 44/47] =?UTF-8?q?feat:=20SAP=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E4=BF=9D=E7=AE=A1=E3=81=AE=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=A7=E9=80=9A=E7=9F=A5=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=83=AB=E6=96=87=E3=81=AE=E7=BD=AE=E3=81=8D?= =?UTF-8?q?=E6=8F=9B=E3=81=88=E5=87=A6=E7=90=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sap-fin-monthly-data-notice-daily.py | 20 ++++++++++++++++-- .../sap-fin-receive-check-daily.py | 20 ++++++++++++++++-- .../sap-fin-receive-check-monthly.py | 21 +++++++++++++++++-- .../sap-sup-monthly-data-notice-daily.py | 20 ++++++++++++++++-- .../sap-sup-receive-check-daily.py | 20 ++++++++++++++++-- .../sap-sup-receive-check-monthly.py | 21 +++++++++++++++++-- ...nthly_data_notice_mail_body_monthly.config | 2 +- ...p_fin_receive_check_mail_body_daily.config | 2 +- ...fin_receive_check_mail_body_monthly.config | 2 +- ...nthly_data_notice_mail_body_monthly.config | 2 +- ...p_sup_receive_check_mail_body_daily.config | 2 +- ...sup_receive_check_mail_body_monthly.config | 2 +- 12 files changed, 116 insertions(+), 18 deletions(-) diff --git a/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py b/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py index 236091dd..f5b59d26 100644 --- a/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py +++ b/lambda/sap-fin-monthly-data-notice-daily/sap-fin-monthly-data-notice-daily.py @@ -15,7 +15,6 @@ RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST 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"] LOG_LEVEL = os.environ["LOG_LEVEL"] @@ -112,7 +111,8 @@ def lambda_handler(event, context): 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) + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') @@ -159,6 +159,22 @@ def error_notice(error_log_id, exception) -> None: return +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + # カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): diff --git a/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py b/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py index 27057ff4..35fc666e 100644 --- a/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py +++ b/lambda/sap-fin-receive-check-daily/sap-fin-receive-check-daily.py @@ -17,7 +17,6 @@ NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_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"] LOG_LEVEL = os.environ["LOG_LEVEL"] @@ -164,7 +163,8 @@ def lambda_handler(event, context): 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) + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') @@ -210,6 +210,22 @@ def error_notice(error_log_id, exception) -> None: traceback.print_exc() return +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + # カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): diff --git a/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py b/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py index 00170d36..57688ebb 100644 --- a/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py +++ b/lambda/sap-fin-receive-check-monthly/sap-fin-receive-check-monthly.py @@ -17,7 +17,6 @@ MONTHLY_CEHCK_DAY_LIST_PATH = os.environ["MONTHLY_CEHCK_DAY_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"] LOG_LEVEL = os.environ["LOG_LEVEL"] @@ -166,7 +165,8 @@ def lambda_handler(event, context): 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) + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') @@ -213,6 +213,23 @@ def error_notice(error_log_id, exception) -> None: return +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + + # カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): diff --git a/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py b/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py index f4d1d1e7..a160cf94 100644 --- a/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py +++ b/lambda/sap-sup-monthly-data-notice-daily/sap-sup-monthly-data-notice-daily.py @@ -15,7 +15,6 @@ RECEIVE_MONTHLY_FILE_NAME_LIST_PATH = os.environ["RECEIVE_MONTHLY_FILE_NAME_LIST 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"] LOG_LEVEL = os.environ["LOG_LEVEL"] @@ -112,7 +111,8 @@ def lambda_handler(event, context): 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) + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') @@ -159,6 +159,22 @@ def error_notice(error_log_id, exception) -> None: return +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + # カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): diff --git a/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py b/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py index 6dbe7624..addb19b3 100644 --- a/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py +++ b/lambda/sap-sup-receive-check-daily/sap-sup-receive-check-daily.py @@ -17,7 +17,6 @@ NON_BUSINESS_DAY_LIST_PATH = os.environ["NON_BUSINESS_DAY_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"] LOG_LEVEL = os.environ["LOG_LEVEL"] @@ -164,7 +163,8 @@ def lambda_handler(event, context): 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) + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') @@ -210,6 +210,22 @@ def error_notice(error_log_id, exception) -> None: traceback.print_exc() return +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + # カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): diff --git a/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py index 2c6be537..7d91326a 100644 --- a/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py +++ b/lambda/sap-sup-receive-check-monthly/sap-sup-receive-check-monthly.py @@ -17,7 +17,6 @@ MONTHLY_CEHCK_DAY_LIST_PATH = os.environ["MONTHLY_CEHCK_DAY_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"] LOG_LEVEL = os.environ["LOG_LEVEL"] @@ -166,7 +165,8 @@ def lambda_handler(event, context): 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) + # メール本文内のプレースホルダーを置き換える + mail_body = substitute_mail_body(mail_body_response, mail_msg) logger.info('I-05-06 通知メール(本文)テンプレートファイルを読み込みました') except Exception as e: logger.error(f'E-05-02 通知メール(本文)テンプレートファイルの読み込みに失敗しました エラー内容:{e}') @@ -213,6 +213,23 @@ def error_notice(error_log_id, exception) -> None: return +def substitute_mail_body(before_mail_body:str, mail_msg: str) -> str: + """メール本文のプレースホルダーを置き換えます + + Args: + before_mail_body (str): 置き換え前のメール本文 + mail_msg (str): メール本文のプレースホルダーを置き換える文言 + + Returns: + str: 置き換え後のメール本文 + """ + substitute_dict = { + "notice_file_names": mail_msg + } + mail_body = before_mail_body.format_map(substitute_dict) + return mail_body + + # カスタムExceptionクラス class CustomException(Exception, metaclass=ABCMeta): def __init__(self, id, arg): diff --git a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config index 275b3316..f5ee0569 100644 --- a/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config +++ b/s3/config/SAP/sap_fin_monthly_data_notice_mail_body_monthly.config @@ -1,6 +1,6 @@ 宛先各位  SAP月次I/Fである以下のファイルを受領しましたので、通知いたします。 -@pgm_str_01@ +{notice_file_names}  尚、本メールはシステム自動送信のため、返信は出来ません。  本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config index 8c4e87a0..f1b7410f 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_daily.config @@ -1,6 +1,6 @@ 宛先各位  SAP日次I/Fである以下のファイルを受領できておりません。 -@pgm_str_01@ +{notice_file_names}  SAPシステム側のSFTP送信状況のご確認をお願いいたします。 diff --git a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config index d08f0ac8..17fd53d7 100644 --- a/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config +++ b/s3/config/SAP/sap_fin_receive_check_mail_body_monthly.config @@ -1,6 +1,6 @@ 宛先各位  SAP月次I/Fである以下のファイルを受領できておりません。 -@pgm_str_01@ +{notice_file_names}  SAPシステム側のSFTP送信状況のご確認をお願いいたします。 diff --git a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config index 275b3316..f5ee0569 100644 --- a/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config +++ b/s3/config/SAP/sap_sup_monthly_data_notice_mail_body_monthly.config @@ -1,6 +1,6 @@ 宛先各位  SAP月次I/Fである以下のファイルを受領しましたので、通知いたします。 -@pgm_str_01@ +{notice_file_names}  尚、本メールはシステム自動送信のため、返信は出来ません。  本件に関する問い合わせは、IT部門 ゴザリ様にお願いいたします。 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config index 8c4e87a0..f1b7410f 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_daily.config @@ -1,6 +1,6 @@ 宛先各位  SAP日次I/Fである以下のファイルを受領できておりません。 -@pgm_str_01@ +{notice_file_names}  SAPシステム側のSFTP送信状況のご確認をお願いいたします。 diff --git a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config index d08f0ac8..17fd53d7 100644 --- a/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config +++ b/s3/config/SAP/sap_sup_receive_check_mail_body_monthly.config @@ -1,6 +1,6 @@ 宛先各位  SAP月次I/Fである以下のファイルを受領できておりません。 -@pgm_str_01@ +{notice_file_names}  SAPシステム側のSFTP送信状況のご確認をお願いいたします。 From 0a18941e6687406108fa62dc6e03c6b00325205e Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Jul 2022 07:51:43 +0900 Subject: [PATCH 45/47] =?UTF-8?q?feat:=20.gitignore=E3=82=92=E6=95=B4?= =?UTF-8?q?=E7=90=86=E3=80=81=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=E5=AE=9F?= =?UTF-8?q?=E8=A1=8C=E7=94=A8=E3=82=82=E8=80=83=E6=85=AE=E3=81=AB=E5=85=A5?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E7=84=A1=E8=A6=96=E3=81=99=E3=82=8B=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index e4f6d9fb..4342f002 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ -lambda/mbj-newdwh2021-staging-NoticeToSlack/package-lock.json -lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/* -lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json -lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/* \ No newline at end of file +# Node.jsで実装されたLambdaの管理対象外ファイル群 +package-lock.json +node_modules/ +# ローカル確認用環境変数ファイル +.env +# pythonのキャッシュファイル +__pycache__/ \ No newline at end of file From 1194b07c656ab10839275c42bb8f3fcc6561cf03 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Jul 2022 09:45:07 +0900 Subject: [PATCH 46/47] =?UTF-8?q?feat(dataimport):=20Docker=E3=82=A4?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=B8=E3=83=93=E3=83=AB=E3=83=89=E6=99=82?= =?UTF-8?q?=E3=81=AB=E3=82=BB=E3=82=AD=E3=83=A5=E3=83=AA=E3=83=86=E3=82=A3?= =?UTF-8?q?=E3=83=91=E3=83=83=E3=83=81=E3=82=A2=E3=83=83=E3=83=97=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=82=92=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ecs/dataimport/Dockerfile b/ecs/dataimport/Dockerfile index ec5fb0e0..dfe25cb3 100644 --- a/ecs/dataimport/Dockerfile +++ b/ecs/dataimport/Dockerfile @@ -4,7 +4,12 @@ ENV TZ="Asia/Tokyo" WORKDIR /usr/src/app COPY requirements.txt ./ -RUN pip install --no-cache-dir -r requirements.txt +RUN \ + apt update -y && \ + # パッケージのセキュリティアップデートのみを適用するコマンド + apt install -y unattended-upgrades && \ + unattended-upgrades && \ + pip install --no-cache-dir -r requirements.txt COPY dataimport ./ CMD [ "python", "./controller.py" ] From 3567630bc7ffd68948e5eec1d39273e2ee735aa8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Jul 2022 13:52:08 +0900 Subject: [PATCH 47/47] =?UTF-8?q?feat(sap-data-decrypt):=20Docker=E3=82=A4?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=B8=E3=83=93=E3=83=AB=E3=83=89=E6=99=82?= =?UTF-8?q?=E3=81=AB=E3=82=BB=E3=82=AD=E3=83=A5=E3=83=AA=E3=83=86=E3=82=A3?= =?UTF-8?q?=E3=83=91=E3=83=83=E3=83=81=E3=82=A2=E3=83=83=E3=83=97=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=82=92=E5=AE=9F=E8=A1=8C=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda/sap-data-decrypt/Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lambda/sap-data-decrypt/Dockerfile b/lambda/sap-data-decrypt/Dockerfile index 329183b1..a850e222 100644 --- a/lambda/sap-data-decrypt/Dockerfile +++ b/lambda/sap-data-decrypt/Dockerfile @@ -4,7 +4,12 @@ ENV TZ="Asia/Tokyo" WORKDIR /function COPY requirements.txt ./ -RUN pip install --no-cache-dir -r requirements.txt +RUN \ + apt update -y && \ + # パッケージのセキュリティアップデートのみを適用するコマンド + apt install -y unattended-upgrades && \ + unattended-upgrades && \ + pip install --no-cache-dir -r requirements.txt COPY datadecrypt ./ ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]