AWS RDS Aurora Time Zone 변경하기.

Development / AWS / RDS / Aurora

  1. 발단

    AWS RDS Aurora DB를 사용하고 있는데, 'NOW()'의 결과가 UTC+0으로 나옴. 이를 'Asia/Seoul(UTC+9)'로 바꾸고 싶었다. 그런데 Parameter group에 default_timezone 파라미터가 Modifiable: False로 되어있었다. Docs를 읽어보니 MySQL이나 MariaDB에서는 수정되는거 같던데..

  2. 웹을 뒤짐

    구글링 했는데 요것밖에 결과를 얻지 못함.. 이제 일본어 웹까지 뒤져봐야 하는 시대라니.. 내가 구글링을 못한건가..ㅎㅎ.. 여튼 Parameter group에서 init_connect 부분을 고쳐 모든 커넥션이 붙을 때 마다 SESSION의 time_zone을 임시로 바꾸는 방식이었음.

    SET SESSION time_zone = CASE WHEN POSITION('rds' IN CURRENT_USER()) = 1 THEN 'UTC' ELSE 'Asia/Tokyo' END;
    

    방식이 별로 마음에 안들어 그냥 AWS 서포트에 물어보기로 했음. (투자사에서 받은 서포트 크레딧이 있었다! 헤헤..)

  3. AWS Support center의 답변

    ... 전략 ...

    I understand that you want to change the time zone of your Aurora instance to Korea Standard Time (UTC +9), but you are unable to change the default_timezone parameter using the DB Parameter Group.

    Unfortunately, the default_timezone parameter is not modifiable, as you have already checked in the parameter group. Despite we currently support changing default timezone in MySQL and MariaDB, I'm afraid that in Aurora there's no direct way to change the timezone of an instance, and the suggestion is to make the conversions in the application side. Nonetheless, you can use the following workaround:

    -Create the following stored procedure:

    DELIMITER |  
     CREATE PROCEDURE mysql.store_time_zone ()     
        SET SESSION time_zone = '+9:00';  
    |
    

    -Change the value of init_connect parameter in your DB Parameter Group to this: CALL mysql.store_time_zone

    After that, every time when you connect to the database, the time_zone will be changed to your desired one. You can check it as follows:

    mysql> select @@time_zone;
    +-------------+
    | @@time_zone |
    +-------------+
    | +09:00      |
    +-------------+
    1 row in set (0.08 sec)
    

    Finally, you can find more information about changing time zones on RDS products and about DB Parameter Groups in the following documentation links:

    https://aws.amazon.com/premiumsupport/knowledge-center/rds-change-time-zone/ http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

    ...후략...

    결론은 뭐.. 친절한거 빼곤 그게 그거였다.(하지만 매우 친절했기 때문에 기분이 좋아졌다.) 오히려 프로시져로 만드는것 보다 쌩쿼리를 넣는게 새로운 DB Instance를 올렸을 때도 유효하게 적용될 것 같아서 나 같은 경우에는 그렇게 했다. 오랫만에 두서 없는 개발글 작성 끝~

Share on : Twitter, Facebook or Google+