From 9c0b2cb4244be594df5d334853ba310d9ad028c8 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 20 May 2022 23:06:54 +0900 Subject: [PATCH 1/6] =?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 00f45a791702884b5ded11def4c26a424829f995 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 23 May 2022 22:30:21 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E5=BE=A9?= =?UTF-8?q?=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E4=B8=8B=E7=94=B0?= =?UTF-8?q?=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 1924b6f7ec85a84daab5db3a7edc7a2a9de1cedb Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Tue, 24 May 2022 21:37:26 +0900 Subject: [PATCH 3/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E5=BE=A9?= =?UTF-8?q?=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E5=8B=95=E4=BD=9C?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E6=99=82=E3=81=AB=E7=99=BA=E7=94=9F=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=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 9bfd316292b0bcf5c9c31d5f25464292c300710b Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Thu, 26 May 2022 00:23:56 +0900 Subject: [PATCH 4/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E5=BE=A9?= =?UTF-8?q?=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98?= =?UTF-8?q?=E9=83=A8=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 --- .../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 ebb82494369db605b0b89e8625feeaa17de5c8ca Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Fri, 27 May 2022 19:26:55 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E5=BE=A9?= =?UTF-8?q?=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=20=E3=83=AD=E3=82=B0=E3=81=AE=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=A0=E3=82=BE=E3=83=BC=E3=83=B3=E8=A8=AD=E5=AE=9A=E3=80=80?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E8=A8=AD=E5=AE=9A=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=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 3ddc8789aa9a45df58e667ddddc24f6a65596016 Mon Sep 17 00:00:00 2001 From: *lcOeIaePm0 Date: Mon, 30 May 2022 17:34:56 +0900 Subject: [PATCH 6/6] =?UTF-8?q?fix:SAP=E3=83=87=E3=83=BC=E3=82=BF=E5=BE=A9?= =?UTF-8?q?=E5=8F=B7=E5=8C=96=E5=87=A6=E7=90=86=20=E3=83=88=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E3=83=90=E3=83=83=E3=82=AF=E3=82=92=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=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 --- .../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