Background
- terraform과 Ansible로 IaC 구현하는 프로젝트를 진행중 자동화에 관련해서 부딪힌 문제입니다.
- 현재 init_mysql.sql으로 Database생성과 Table 생성 및 Attribute, Record 생성 그리고 Test Value값을 할당 script를 자동화하기위해 다음과 같은 명령어를 사용중입니다.
${..}
의 코드는 Terraform에서 provisioning 단계에서 처리되는 변수값들입니다.
기존 terraform에서의 mysqldump 자동화 Script
$ mysql -u ${aws_db_instance.my_db[count.index].username} -p${var.my_db_password} -h
$ {aws_db_instance.my_db[count.index].address} < init_mysql.sql"
Problem
다음과 같은 insecure 하다는 문구와 함께 terraform의 null_resource가 provisioning 하다가 중단되는 상황이 발생했습니다
(mysql 5.6 이후에서 shell 또는 Command line에서 계정 정보를 그대로 노출하면 다음과 같은 에러가 발생한다고 합니다.)
How to do?
mysql_config_editor을 사용하여 로그인 파일을 생성해두고, config file명만 명시하는 형식으로 script의 자동화를 오류 없이 진행할 수 있습니다.
Usage
mysql_config_editor의 사용법은 다음과 같습니다.
설정추가
$ mysql_config_editor set --login-path=<configuration name> --host=<hostname> --user=<username> --port=<port number> --password
설정사용
$ mysql_config_editor --login-path=<configuration name>
설정삭제
$ mysql_config_editor remove --login-path=<configuration name>
$ mysql_config_editor remove --login-path=<configuration name> --user #설정 중 user 만 삭제
$ mysql_config_editor reset # 설정 전체 삭제
설정내용확인
mysql_config_editor print --all
mysql_config_eidtor print --login-path=<configuration name>
mysql_config_editor
로 계정정보를 만들게 되면 접속한 계정의 home directory에 .mylogin.cnf 이름으로 접속정보가 암호화된 파일이 생성됩니다.- .mylogin.cnf는 파일 소유자만 Read-Write할 수 있는 600 권한이어야만 동작합니다. (아닌 경우는 동작 X)
- Password에 '#'을 포함할 경우 정상적으로 로그인 되지 않습니다.
mysql_config_editor을 사용하여 변경된 자동화 script code
$ echo '${var.my_db_password}' | unbuffer -p mysql_config_editor set --login-path=flask --host=${aws_db_instance.my_db[count.index].address} --user=${var.my_db_user} --port=3306 --password
$ mysql --login-path=flask < init_mysql.sql
- 여기서 CLI interaction을 자동하하기 위해
unbuffer
이라는 명령어를 사용하였습니다.
⚠️unbuffer은 expect package를 설치하면 됩니다. (CentOS 기준)
다음과 같이 Enter Password:의 상호작용을 skip한 채로 넘어가게 됩니다.
mysql_config_editor
의 설정내용을 조회하는 명령어는 다음과 같습니다.
$ mysql_config_editor print --all
mysql_config_editor
의 설정 내용은 home directory에 저장됩니다.
ref
unbuffer, expect 관련해서는 조금 더 공부해서 정리 후 올려야겠습니다. :)
'DevOps > Automation' 카테고리의 다른 글
[Automation] AWS CLI 이용하여 "EC2 instance 자동으로 켜고 Public IP 받기 자동화" (0) | 2021.01.01 |
---|