fix:SAPデータ復号化処理 動作確認時に発生したエラーを修正した

This commit is contained in:
*lcOeIaePm0 2022-05-24 21:37:26 +09:00
parent 00f45a7917
commit 1924b6f7ec

View File

@ -1,3 +1,4 @@
from logging import exception
import os import os
import sys import sys
import boto3 import boto3
@ -36,10 +37,6 @@ TARGET_BUCKET_BY_DATA_SOURCE = {
s3_client = boto3.client('s3') s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3') s3_resource = boto3.resource('s3')
sns_client = boto3.client('sns') sns_client = boto3.client('sns')
event_bucket_name = ''
event_file_path = ''
event_file_name = ''
event_data_source_name = ''
def handler(event, context): def handler(event, context):
@ -50,7 +47,7 @@ def handler(event, context):
print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}') print_log(LOG_INFO, 'I-01-02', f'処理稼働日:{today}')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{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: try:
@ -66,7 +63,7 @@ def handler(event, context):
print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}') print_log(LOG_INFO, 'I-02-04', f'データソース名:{event_data_source_name}')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{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から秘密鍵ファイルを読み込む # ③ S3から秘密鍵ファイルを読み込む
try: 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) s3_client.download_file(SECRET_KEY_FILE_BUCKET_NAME, SECRET_KEY_FILE_PATH, PATH_TEMP_PRIVATE_KEY)
print_log(LOG_INFO, 'I-03-02', '秘密鍵ファイルを読み込みました') print_log(LOG_INFO, 'I-03-02', '秘密鍵ファイルを読み込みました')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-03-01', '秘密鍵ファイルの読み込みに失敗しました') print_log(LOG_ERROR, 'E-03-01', f'秘密鍵ファイルの読み込みに失敗しました エラー内容:{e}')
error_process(EXTENSION_ERROR, 'I-03-01', e) error_exit(event, EXTENSION_ERROR, 'I-03-01', e)
# ④ S3からPGP暗号化ファイルを読み込む # ④ S3からPGP暗号化ファイルを読み込む
try: try:
@ -84,7 +81,7 @@ def handler(event, context):
print_log(LOG_INFO, 'I-04-02', 'PGP暗号化ファイルを読み込みました') print_log(LOG_INFO, 'I-04-02', 'PGP暗号化ファイルを読み込みました')
except Exception as e: except Exception as e:
try: 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_file_name = event_file_name + EXTENSION_ERROR
result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name
@ -105,7 +102,7 @@ def handler(event, context):
sys.exit() sys.exit()
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{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ライブラリにインポートを行う # ⑤ 「③」で読み込んだ秘密鍵ファイルをPGPライブラリにインポートを行う
try: try:
@ -115,20 +112,19 @@ def handler(event, context):
gpg.import_keys(key_file.read()) gpg.import_keys(key_file.read())
print_log(LOG_INFO, 'I-05-02', '秘密鍵ファイルをインポートしました') print_log(LOG_INFO, 'I-05-02', '秘密鍵ファイルをインポートしました')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-05-01', '秘密鍵ファイルのインポートに失敗しました') print_log(LOG_ERROR, 'E-05-01', f'秘密鍵ファイルのインポートに失敗しました エラー内容:{e}')
error_process(EXTENSION_ERROR, 'E-05-01', e) error_exit(event, EXTENSION_ERROR, 'E-05-01', e)
# ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する # ⑥ 「④」で読み込んだPGP暗号化ファイルを「⑤」でインポートした秘密鍵ファイルで復号する
try: try:
print_log(LOG_INFO, 'I-06-01', 'PGP暗号化ファイルの復号化') print_log(LOG_INFO, 'I-06-01', 'PGP暗号化ファイルの復号化')
with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file: with open(PATH_TEMP_ENCRYPT_FILE, 'rb') as temp_encrypr_file:
gpg.decrypt_file(temp_encrypr_file, output=PATH_TEMP_DECRYPT_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 = open(PATH_TEMP_DECRYPT_FILE, 'rb')
decrypt_file = temp_decrypt_file
print_log(LOG_INFO, 'I-06-02', 'PGP暗号化ファイルを復号しました') print_log(LOG_INFO, 'I-06-02', 'PGP暗号化ファイルを復号しました')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-06-01', 'PGP暗号化ファイルの復号化に失敗しました') print_log(LOG_ERROR, 'E-06-01', f'PGP暗号化ファイルの復号化に失敗しました エラー内容:{e}')
error_process(EXTENSION_DECRYPT_ERROR, 'E-06-01', e) error_exit(event, EXTENSION_DECRYPT_ERROR, 'E-06-01', e)
# ⑦ 各ファイルをS3に出力する # ⑦ 各ファイルをS3に出力する
try: 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}') 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 = s3_resource.Object(decrypt_bucket_name, decrypt_file_key)
decrypt_file_obj.put(Body=decrypt_file) decrypt_file_obj.put(Body=decrypt_file)
decrypt_file.close
print_log(LOG_INFO, 'I-07-03', '復号化ファイルをS3に出力しました') print_log(LOG_INFO, 'I-07-03', '復号化ファイルをS3に出力しました')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-07-01', '復号化ファイルのS3出力に失敗しました') print_log(LOG_ERROR, 'E-07-01', f'復号化ファイルのS3出力に失敗しました エラー内容:{e}')
error_process(EXTENSION_ERROR, 'E-07-01', e) error_exit(event, EXTENSION_ERROR, 'E-07-01', e)
try: try:
# 「④」で読み込んだPGP暗号化ファイルを以下に移動コピー削除する # 「④」で読み込んだPGP暗号化ファイルを以下に移動コピー削除する
copy_source = {
'Bucket': event_bucket_name,
'Key': event_file_path
}
backup_file_key = f'{event_data_source_name}/{today}/{event_file_name}' 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}') print_log(LOG_INFO, 'I-07-04', f'PGP暗号化ファイル移動 移動元{event_bucket_name}/{event_file_path} 移動先:{SAP_DATA_BACKUP_BUCKET_NAME}/{backup_file_key}')
decrypt_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key) backup_file_obj = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key)
decrypt_file_obj.put(Body=decrypt_file) backup_file_obj.copy(copy_source)
print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイル出力をS3に出力しました') s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path)
print_log(LOG_INFO, 'I-07-05', 'PGP暗号化ファイルをバックアップ用バケットに移動しました')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-07-02', 'PGP暗号化ファイルのS3出力に失敗しました') print_log(LOG_ERROR, 'E-07-02', f'PGP暗号化ファイルのS3出力に失敗しました エラー内容:{e}')
error_process(EXTENSION_ERROR, 'E-07-02', e) error_exit(event, EXTENSION_ERROR, 'E-07-02', e)
# ⑧ 処理終了ログを出力する # ⑧ 処理終了ログを出力する
try: try:
print_log(LOG_INFO, 'I-08-01', '処理終了 SAPデータ復号処理') print_log(LOG_INFO, 'I-08-01', '処理終了 SAPデータ復号処理')
except Exception as e: except Exception as e:
print_log(LOG_ERROR, 'E-99', f'想定外のエラーが発生しました エラー内容:{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): def print_log(log_level, log_id, msg):
try: try:
print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} {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: except Exception as e:
print(f'{datetime.datetime.now():%Y-%m-%d %H:%M:%S} Error E-99 想定外のエラーが発生しました エラー内容:{e}') exception_msg = f'Error E-99 想定外のエラーが発生しました エラー内容:{e}'
error_process('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: 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_file_name = event_file_name + extension
result_error_key = event_data_source_name + DIRECTORY_RECV + result_error_file_name 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 = s3_resource.Object(event_bucket_name, result_error_key)
result_error_obj.put(Body='') 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 = { copy_source = {
'Bucket': event_bucket_name, '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 = s3_resource.Object(event_bucket_name, error_key)
error_obj.copy(copy_source) error_obj.copy(copy_source)
s3_client.delete_object(Bucket=event_bucket_name, Key=event_file_path) 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}' error_msg = f'{error_log_id} のエラーが発生しました。ご確認ください\n詳細:{exception}'
params = { params = {
'TopicArn': NDS_NOTICE_TOPIC, 'TopicArn': NDS_NOTICE_TOPIC,
@ -204,8 +213,8 @@ def error_process(extension, error_log_id, exception):
} }
sns_client.publish(**params) 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() sys.exit()
except Exception as e: 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() sys.exit()