feat: 設定ファイルバケットからの取得処理追記。JSONのパースはこれから
This commit is contained in:
parent
3337a0abff
commit
3ca1a8d7b6
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,4 +2,5 @@ lambda/mbj-newdwh2021-staging-NoticeToSlack/package-lock.json
|
|||||||
lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/*
|
lambda/mbj-newdwh2021-staging-NoticeToSlack/node_modules/*
|
||||||
lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json
|
lambda/mbj-newdwh2021-staging-PublishFromLog/package-lock.json
|
||||||
lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/*
|
lambda/mbj-newdwh2021-staging-PublishFromLog/node_modules/*
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
.env
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
import boto3
|
||||||
|
import environments
|
||||||
|
import exceptions
|
||||||
|
from botocore.exceptions import ClientError
|
||||||
|
from constants import AWS_RESOURCE_S3, S3_RESPONSE_BODY
|
||||||
|
|
||||||
|
|
||||||
|
class S3Resource:
|
||||||
|
|
||||||
|
def __init__(self, bucket_name: str) -> None:
|
||||||
|
self.__s3_resource = boto3.resource(AWS_RESOURCE_S3)
|
||||||
|
self.__s3_bucket = self.__s3_resource.Bucket(bucket_name)
|
||||||
|
|
||||||
|
def get_object(self, object_key: str):
|
||||||
|
s3_object = self.__s3_bucket.Object(object_key)
|
||||||
|
response = s3_object.get()
|
||||||
|
return response[S3_RESPONSE_BODY].read()
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigBucket:
|
||||||
|
__s3_resource: S3Resource = None
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.__s3_resource = S3Resource(environments.CONFIG_BUCKET_NAME)
|
||||||
|
|
||||||
|
def read_check_target_schema_names(self):
|
||||||
|
try:
|
||||||
|
return self.__s3_resource.get_object(environments.CHECK_TARGET_SCHEMA_NAMES_PATH)
|
||||||
|
except ClientError as error:
|
||||||
|
if error.response['Error']['Code'] == 'NoSuchKey':
|
||||||
|
raise exceptions.FileNotFoundException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{error}')
|
||||||
@ -1,3 +1,23 @@
|
|||||||
|
# logger
|
||||||
LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n'
|
LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n'
|
||||||
LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
|
LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
|
||||||
DEFAULT_TIMEZONE = "Asia/Tokyo"
|
DEFAULT_TIMEZONE = "Asia/Tokyo"
|
||||||
|
LOG_LEVEL = 'LOG_LEVEL'
|
||||||
|
LOG_LEVEL_INFO = 'INFO'
|
||||||
|
|
||||||
|
# environments
|
||||||
|
CHECK_TARGET_SCHEMA_NAMES_PATH = 'CHECK_TARGET_SCHEMA_NAMES_PATH'
|
||||||
|
CONFIG_BUCKET_NAME = 'CONFIG_BUCKET_NAME'
|
||||||
|
LOG_LEVEL = 'LOG_LEVEL'
|
||||||
|
MBJ_NOTICE_TOPIC = 'MBJ_NOTICE_TOPIC'
|
||||||
|
NDS_NOTICE_TOPIC = 'NDS_NOTICE_TOPIC'
|
||||||
|
NOTICE_MAIL_BODY_TEMPLATE_PATH = 'NOTICE_MAIL_BODY_TEMPLATE_PATH'
|
||||||
|
NOTICE_MAIL_TITLE_TEMPLATE_PATH = 'NOTICE_MAIL_TITLE_TEMPLATE_PATH'
|
||||||
|
PARAM_NAME_DB_HOST = 'PARAM_NAME_DB_HOST'
|
||||||
|
PARAM_NAME_DB_USER_NAME = 'PARAM_NAME_DB_USER_NAME'
|
||||||
|
PARAM_NAME_DB_USER_PASSWORD = 'PARAM_NAME_DB_USER_PASSWORD'
|
||||||
|
|
||||||
|
# system var
|
||||||
|
AWS_RESOURCE_S3 = 's3'
|
||||||
|
S3_RESPONSE_BODY = 'Body'
|
||||||
|
UTF8 = 'utf-8'
|
||||||
|
|||||||
@ -1,3 +1,19 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO')
|
from constants import (CHECK_TARGET_SCHEMA_NAMES_PATH, CONFIG_BUCKET_NAME,
|
||||||
|
LOG_LEVEL, LOG_LEVEL_INFO, MBJ_NOTICE_TOPIC,
|
||||||
|
NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH,
|
||||||
|
NOTICE_MAIL_TITLE_TEMPLATE_PATH, PARAM_NAME_DB_HOST,
|
||||||
|
PARAM_NAME_DB_USER_NAME, PARAM_NAME_DB_USER_PASSWORD)
|
||||||
|
|
||||||
|
LOG_LEVEL = os.environ.get(LOG_LEVEL, LOG_LEVEL_INFO)
|
||||||
|
CHECK_TARGET_SCHEMA_NAMES_PATH = os.environ[CHECK_TARGET_SCHEMA_NAMES_PATH]
|
||||||
|
CONFIG_BUCKET_NAME = os.environ[CONFIG_BUCKET_NAME]
|
||||||
|
MBJ_NOTICE_TOPIC = os.environ[MBJ_NOTICE_TOPIC]
|
||||||
|
NDS_NOTICE_TOPIC = os.environ[NDS_NOTICE_TOPIC]
|
||||||
|
NOTICE_MAIL_BODY_TEMPLATE_PATH = os.environ[NOTICE_MAIL_BODY_TEMPLATE_PATH]
|
||||||
|
NOTICE_MAIL_TITLE_TEMPLATE_PATH = os.environ[NOTICE_MAIL_TITLE_TEMPLATE_PATH]
|
||||||
|
|
||||||
|
PARAM_NAME_DB_HOST = os.environ[PARAM_NAME_DB_HOST]
|
||||||
|
PARAM_NAME_DB_USER_NAME = os.environ[PARAM_NAME_DB_USER_NAME]
|
||||||
|
PARAM_NAME_DB_USER_PASSWORD = os.environ[PARAM_NAME_DB_USER_PASSWORD]
|
||||||
|
|||||||
@ -2,17 +2,28 @@
|
|||||||
Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント
|
Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from exceptions import FileNotFoundException, MeDaCaException
|
from aws.s3 import ConfigBucket
|
||||||
|
from exceptions import MeDaCaException
|
||||||
from medaca_logger import MeDaCaLogger
|
from medaca_logger import MeDaCaLogger
|
||||||
|
|
||||||
|
|
||||||
def handler(event, context):
|
def handler(event, context):
|
||||||
logger = MeDaCaLogger.get_logger()
|
logger = MeDaCaLogger.get_logger()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
logger.info('lambda handle')
|
logger.info('I-01-01', '処理開始 Viewセキュリティオプション付与チェック')
|
||||||
raise FileNotFoundException('E-02-01', 'ファイル見つかりません')
|
logger.info('I-01-02', 'チェック対象スキーマ名ファイルを読み込み 開始')
|
||||||
|
config_bucket = ConfigBucket()
|
||||||
|
check_target_schema_names = config_bucket.read_check_target_schema_names()
|
||||||
|
print(check_target_schema_names)
|
||||||
|
|
||||||
except MeDaCaException as e:
|
except MeDaCaException as e:
|
||||||
logger.exception(f'exception: {e.error_id} {e}')
|
logger.exception(e.error_id, e)
|
||||||
|
raise e
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception('E-99', f'想定外のエラーが発生しました エラー内容:{e}')
|
||||||
|
finally:
|
||||||
|
logger.info('I-06-01', '処理終了 Viewセキュリティオプション付与チェック')
|
||||||
|
|
||||||
|
|
||||||
# ローカル実行用
|
# ローカル実行用
|
||||||
|
|||||||
@ -8,9 +8,9 @@ from environments import LOG_LEVEL
|
|||||||
|
|
||||||
|
|
||||||
class SingletonLogger:
|
class SingletonLogger:
|
||||||
# インスタンス生成
|
__logger: logging.Logger = None
|
||||||
@staticmethod
|
|
||||||
def __internal_new__() -> logging.Logger:
|
def __init__(self) -> None:
|
||||||
# logger設定
|
# logger設定
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
formatter = logging.Formatter(
|
formatter = logging.Formatter(
|
||||||
@ -27,15 +27,34 @@ class SingletonLogger:
|
|||||||
handler.setFormatter(formatter)
|
handler.setFormatter(formatter)
|
||||||
level = logging.getLevelName(LOG_LEVEL)
|
level = logging.getLevelName(LOG_LEVEL)
|
||||||
logger.setLevel(level)
|
logger.setLevel(level)
|
||||||
return logger
|
|
||||||
|
self.__logger = logger
|
||||||
|
|
||||||
|
def debug(self, log_id: str, msg: str):
|
||||||
|
self._log(logging.DEBUG, log_id, msg)
|
||||||
|
|
||||||
|
def info(self, log_id: str, msg: str):
|
||||||
|
self._log(logging.INFO, log_id, msg)
|
||||||
|
|
||||||
|
def warning(self, log_id: str, msg: str):
|
||||||
|
self._log(logging.WARNING, log_id, msg)
|
||||||
|
|
||||||
|
def error(self, log_id: str, msg: str):
|
||||||
|
self._log(logging.ERROR, log_id, msg)
|
||||||
|
|
||||||
|
def exception(self, log_id: str, msg: str):
|
||||||
|
self._log(logging.ERROR, log_id, msg, exc_info=True)
|
||||||
|
|
||||||
|
def _log(self, log_level: int, log_id: str, msg: str, exc_info=False):
|
||||||
|
self.__logger.log(log_level, f'{log_id} {msg}', exc_info=exc_info)
|
||||||
|
|
||||||
|
|
||||||
class MeDaCaLogger:
|
class MeDaCaLogger:
|
||||||
__unique_instance: logging.Logger = None
|
__unique_instance: logging.Logger = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_logger():
|
def get_logger() -> SingletonLogger:
|
||||||
# インスタンス未生成の場合、唯一のインスタンスを生成する
|
# インスタンス未生成の場合、唯一のインスタンスを生成する
|
||||||
if not MeDaCaLogger.__unique_instance:
|
if not MeDaCaLogger.__unique_instance:
|
||||||
MeDaCaLogger.__unique_instance = SingletonLogger.__internal_new__()
|
MeDaCaLogger.__unique_instance = SingletonLogger()
|
||||||
return MeDaCaLogger.__unique_instance
|
return MeDaCaLogger.__unique_instance
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
import logging
|
|
||||||
import os
|
|
||||||
import boto3
|
|
||||||
import gnupg
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import traceback
|
||||||
from abc import *
|
from abc import *
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
import traceback
|
|
||||||
|
import boto3
|
||||||
|
import gnupg
|
||||||
|
|
||||||
# 環境変数
|
# 環境変数
|
||||||
SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"]
|
SECRET_KEY_FILE_BUCKET_NAME = os.environ["SECRET_KEY_FILE_BUCKET_NAME"]
|
||||||
@ -42,8 +42,12 @@ sns_client = boto3.client('sns')
|
|||||||
|
|
||||||
# logger設定
|
# logger設定
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
def custome_time(*arg):
|
def custome_time(*arg):
|
||||||
return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple()
|
return datetime.datetime.now(ZoneInfo("Asia/Tokyo")).timetuple()
|
||||||
|
|
||||||
|
|
||||||
formatter = logging.Formatter(
|
formatter = logging.Formatter(
|
||||||
'[%(levelname)s]\t%(asctime)s\t%(message)s\n',
|
'[%(levelname)s]\t%(asctime)s\t%(message)s\n',
|
||||||
'%Y-%m-%d %H:%M:%S'
|
'%Y-%m-%d %H:%M:%S'
|
||||||
@ -136,7 +140,8 @@ def handler(event, context):
|
|||||||
'Key': s3_event.file_path
|
'Key': s3_event.file_path
|
||||||
}
|
}
|
||||||
backup_file_key = f'{s3_event.data_source_name}/{execute_date}/{s3_event.file_name}'
|
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}')
|
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 = s3_resource.Object(SAP_DATA_BACKUP_BUCKET_NAME, backup_file_key)
|
||||||
backup_file_obj.copy(copy_source)
|
backup_file_obj.copy(copy_source)
|
||||||
s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path)
|
s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path)
|
||||||
@ -172,7 +177,8 @@ def create_status_file(s3_event, extension) -> None:
|
|||||||
result_error_key = s3_event.data_source_name + DIRECTORY_RECV + result_error_file_name
|
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 = s3_resource.Object(s3_event.bucket_name, result_error_key)
|
||||||
result_error_obj.put(Body='')
|
result_error_obj.put(Body='')
|
||||||
logger.error(f'E-ERR-01 recvディレクトリにエラーファイルを作成しました ファイル名:{result_error_file_name} 出力先:{s3_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:
|
except Exception as e:
|
||||||
logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}')
|
logger.error(f'E-96 エラーステータスファイルの作成に失敗しました エラー内容:{e}')
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
@ -191,7 +197,8 @@ def move_encrypt_file(s3_event) -> None:
|
|||||||
error_obj = s3_resource.Object(s3_event.bucket_name, error_key)
|
error_obj = s3_resource.Object(s3_event.bucket_name, error_key)
|
||||||
error_obj.copy(copy_source)
|
error_obj.copy(copy_source)
|
||||||
s3_client.delete_object(Bucket=s3_event.bucket_name, Key=s3_event.file_path)
|
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}')
|
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:
|
except Exception as e:
|
||||||
logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}')
|
logger.error(f'E-97 PGP暗号化ファイルの移動に失敗しました エラー内容:{e}')
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|||||||
3
s3/config/view_check/check_target_schemas.json
Normal file
3
s3/config/view_check/check_target_schemas.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"check_target_schemas": ["custom01", "custom02", "custom03"]
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user