본문 바로가기

Cloud/AWS

AWS RDS parameter group을 이용하여 Function 생성하기

반응형

지난 포스팅에서 AWS RDS를 이용해 MySQL DB를 생성해보았습니다.

이후에 MySQL DB에서 Fucntion을 생성하고 사용해야하는 경우가 생기게 됩니다.

예를 들어,

DROP FUNCTION IF EXISTS hello_world;
DELIMITER $$
CREATE FUNCTION hello_world(addressee TEXT)
RETURNS TEXT
DETERMINISTIC
READS SQL DATA
BEGIN
RETURN CONCAT('Hello ', addressee);
END;
$$
DELIMITER ;

SELECT hello_world('Earth');

위와 같은 FUNCTION을 생성하려고 SQL문을 작성하고 실행해보면 AWS RDS는

Error Code: 1419. You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

이런 에러가 발생하게 됩니다. 에러를 확인해보면 log_bin_trust_function_creators_variable 를 설정하라는 내용입니다.

기존의 로컬이나 물리적 서버 설치였으면 cnf와 같은 환경설정 파일 상에서 환경변수를 설정해줄 수 있었지만,  AWS RDS는 ssh와 같은 접속을 지원하지 않기때문에 parameter group 설정을 지원하고있습니다.

AWS RDS Dashboard로 이동합니다.

왼쪽 메뉴에서 파라미터그룹탭으로 이동하면 default 그룹만 있는 상태입니다. 파라미터 그룹 생성을 클릭합니다.


사용하고 있는 DB 엔진을 선택하고 그룹이름과 설명을 입력하고 생성을 클릭합니다.


새로 생성한 파라미터 그룹의 파라미터 편집버튼을 누르고 필터에 function이라고 입력하면

전에 에러가 났던 log_bin_trust_functions_creators 변수 설정이 보여집니다.


  •  log_bin_trust_functions_creators : 1

값을 1로 편집하고 변경 사항을 저장합니다.

 파라미터 그룹을 생성하고 값을 편집까지 했습니다. 그렇다면 이제 사용하고 있는 RDS의 파라미터 그룹을 새로 생성한 파라미터그룹으로 수정해줘야겠죠. 다시 콘솔에서 인스턴스를 클릭하여 사용하고 있는 인스턴스를 선택하고 인스턴스 작업 > 수정을 클릭합니다.


최초에 DB 인스턴스를 설치할 때의 고급설정 화면에서 DB 파라미터 그룹을 방금 생성한 파라미터 그룹으로 변경해주고 최하단의 즉시 적용을 체크 한뒤 수정을 완료합니다.


다시 콘솔에서 인스턴스로 가면 파라미터 그룹이 변경되고 적용되고 있는 것을 확인하실 수 있습니다.

파라미터 그룹이 적용되면 재시작 보류중이라는 상태를 보여주고

인스턴스 작업 > 재시작 까지 해주시면 모든 설정은 완료되었습니다.

 이제 다시 workbench로 돌아가서
DROP FUNCTION IF EXISTS hello_world;
DELIMITER $$
CREATE FUNCTION hello_world(addressee TEXT)
RETURNS TEXT
DETERMINISTIC
READS SQL DATA
BEGIN
RETURN CONCAT('Hello ', addressee);
END;
$$
DELIMITER ;

SELECT hello_world('Earth');

function을 생성해보면 정상적으로 function이 생성되고 결과 값 또한 확인하실 수 있습니다.