405 MySQL SSM access sprint backlog - 100-hours-a-week/KTB4-3rd-CLOUD GitHub Wiki
MySQL SSM ์ ๊ทผ ๊ตฌ์ฑ ์คํ๋ฆฐํธ ๋ฐฑ๋ก๊ทธ
์คํ๋ฆฐํธ ๋ชฉํ
๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ Dev MySQL์ ์ง์ ๋คํธ์ํฌ ํฌํธ๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ , ๊ฐ์ธ IAM User์ AWS Systems Manager Session Manager ํฌํธํฌ์๋ฉ์ ํตํด ์ ์ํด ์น์ธ๋ DMLยทDDL ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ค.
์ฌ์ฉ์ ์คํ ๋ฆฌ
๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก์ ๋ก์ปฌ MySQL ํด๋ผ์ด์ธํธ ๋๋ DB GUI ๋๊ตฌ์์ Dev MySQL์ ์์ ํ๊ฒ ์ ์ํ๊ณ ์ถ๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์กฐํยท์์ ๊ณผ ๊ฐ๋ฐ ์ค ํ์ํ ์คํค๋ง ๋ณ๊ฒฝ์ ์ํํ๋, EC2 ์ ธยทProd EC2ยท๋ค๋ฅธ AWS ๋ฆฌ์์ค์ ๋ํ ๋ถํ์ํ ๊ถํ์ ๊ฐ์ง ์๋๋ค.
๋ฒ์
- Dev EC2
i-0e3cbbaa5ee4866ca์ ๋ํ SSM ํฌํธํฌ์๋ฉ - ๊ฐ๋ฐ์๋ณ IAM User์ ๊ณตํต IAM User Group
- MySQL ์ฌ์ฉ์
moyeota_be์ ์ญํmoyeota_dev_rw moyeota๋ฐ์ดํฐ๋ฒ ์ด์ค์ DMLยทDDL ๊ถํ- EC2 ๋ฃจํ๋ฐฑ
127.0.0.1:3306๋ฐ์ธ๋ฉ - ๋ก์ปฌ AWS CLIยทSession Manager PluginยทMySQL ์ ์ ์ ์ฐจ
- ์๊ฒฉ ์ฆ๋ช ๋ฐฐํฌยทํ์ยท๊ต์ฒด ๋ฐ ์ ์ ๊ฒ์ฆ ์ ์ฐจ
๋น๋ฒ์
- Prod MySQL ์ง์ ์ ๊ทผ
- EC2 ์ผ๋ฐ ์ ธยทSSH ์ ๊ทผ
ssm:SendCommand๊ถํ- MySQL
GRANT OPTION,FILE,PROCESS,SUPER๋๋ ์ ์ญ*.*๊ถํ - ๋ณด์ ๊ทธ๋ฃน์ 3306 ์ธ๋ฐ์ด๋ ๊ฐ๋ฐฉ
- ๊ณต์ฉ AWS Access Key ์ฌ์ฉ
์คํ๋ฆฐํธ ๋ฐฑ๋ก๊ทธ
| ID | ์ฐ์ ์์ | ์๊ตฌ ์ฌํญ | ์๋ฃ ์กฐ๊ฑด | ๋ด๋น์ | ํฌ์ธํธ | ์ํ |
|---|---|---|---|---|---|---|
| CLOUD-DB-01 | 1 | ๋ฐฑ์๋ ๊ฐ๋ฐ์์ฉ IAM User Group๊ณผ ๊ฐ๋ฐ์๋ณ IAM User๋ฅผ ๊ตฌ์ฑํ๋ค. | ๊ฐ๋ฐ์๋ณ IAM User๊ฐ ์์ฑ๋๊ณ ๊ณตํต ๊ทธ๋ฃน์ ํฌํจ๋๋ฉฐ ๊ณต์ฉ IAM User ๋๋ ๊ณต์ฉ Access Key๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. | ํด๋ผ์ฐ๋ | 2 | ์๋ฃ |
| CLOUD-DB-02 | 2 | IAM ๊ทธ๋ฃน์ Dev MySQL ํฌํธํฌ์๋ฉ ์ต์ ๊ถํ ์ ์ฑ ์ ์ฐ๊ฒฐํ๋ค. | ssm:StartSession์ด Dev EC2์ AWS-StartPortForwardingSession ๋ฌธ์์๋ง ํ์ฉ๋๊ณ , ์์ ์ ์ธ์
์ ๋ํ OpenDataChannel, ResumeSession, TerminateSession๋ง ํ์ฉ๋๋ค. ์ผ๋ฐ ์
ธยทSSHยทSendCommandยทProd EC2 ์ ๊ทผ์ ๊ฑฐ๋ถ๋๋ค. |
ํด๋ผ์ฐ๋ | 3 | ์๋ฃ |
| CLOUD-DB-03 | 3 | ๋ฐฑ์๋์ฉ MySQL ์ญํ ๊ณผ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ค. | moyeota_dev_rw ์ญํ ๊ณผ moyeota_be ์ฌ์ฉ์๊ฐ ์กด์ฌํ๊ณ ๊ธฐ๋ณธ ์ญํ ์ฐ๊ฒฐ์ด ํ์ธ๋๋ค. |
ํด๋ผ์ฐ๋ยทBE | 2 | ์๋ฃ |
| CLOUD-DB-04 | 4 | ๋ฐฑ์๋ MySQL ์ญํ ์ ์น์ธ๋ DMLยทDDL ๊ถํ์ ๋ถ์ฌํ๋ค. | moyeota.* ๋ฒ์์์ SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX, REFERENCES, CREATE VIEW, SHOW VIEW, TRIGGER, CREATE ROUTINE, ALTER ROUTINE, EXECUTE๊ฐ ๋์ํ๋ฉฐ ์ ์ญ ๊ถํ๊ณผ ๊ถํ ์์์ ๋ถ๊ฐ๋ฅํ๋ค. |
ํด๋ผ์ฐ๋ยทBE | 3 | ์๋ฃ |
| CLOUD-DB-05 | 5 | MySQL์ EC2 ๋ฃจํ๋ฐฑ์๋ง ๊ฒ์ํ ์ ์๋๋ก Compose ๋คํธ์ํฌ๋ฅผ ์์ ํ๋ค. | MySQL์ ๊ธฐ์กด internal: true์ธ database ๋คํธ์ํฌ์ ํฌํธ ๊ฒ์์ฉ ์ ์ฉ ๋น๋ด๋ถ ๋คํธ์ํฌ์ ํจ๊ป ์ฐ๊ฒฐ๋๋ค. docker compose ps์ 127.0.0.1:3306->3306/tcp๊ฐ ํ์๋๊ณ 0.0.0.0:3306์ ์กด์ฌํ์ง ์๋๋ค. |
ํด๋ผ์ฐ๋ | 5 | ์งํ |
| CLOUD-DB-06 | 6 | ์ ์ฅ์์ EC2์ Compose ์ค์ ์ ์ผ์น์ํจ๋ค. | ์ ์ฅ์ ์๋ณธ๊ณผ /opt/moyeota/compose.yaml์ ๋์ผํ MySQL ํฌํธยท๋คํธ์ํฌ ๊ตฌ์ฑ์ด ๋ฐ์๋๊ณ ์ฌ๋ฐฐํฌ ํ์๋ ์ค์ ์ด ์ ์ง๋๋ค. |
ํด๋ผ์ฐ๋ | 3 | ์์ |
| CLOUD-DB-07 | 7 | EC2 ๋ด๋ถ์์ MySQL ๋ชฉ์ ์ง ์ฐ๊ฒฐ์ ๊ฒ์ฆํ๋ค. | EC2์ 127.0.0.1:3306 TCP ์ฐ๊ฒฐ๊ณผ MySQL ์ด๊ธฐ handshake๊ฐ ์ฑ๊ณตํ๊ณ MySQL ์ปจํ
์ด๋๊ฐ healthy ์ํ๋ค. |
ํด๋ผ์ฐ๋ | 2 | ์์ |
| CLOUD-DB-08 | 8 | ๊ฐ๋ฐ์๋ณ Access Key๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๊ณ ๋ก์ปฌ AWS ํ๋กํ ์ค์ ์ ์ฐจ๋ฅผ ์ ๊ณตํ๋ค. | ๊ฐ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ธ ํค๋ฅผ ๋ณด์ ์ฑ๋๋ก 1ํ ์ ๋ฌ๋ฐ์ moyeota-backend-dev ํ๋กํ์ ์ค์ ํ๊ณ sts get-caller-identity์์ ์์ ์ IAM User๋ฅผ ํ์ธํ๋ค. ํค๊ฐ ์ ์ฅ์ยท๋ฉ์ ์ ยทํ๋ก์ ํธ .env์ ๋จ์ง ์๋๋ค. |
ํด๋ผ์ฐ๋ยทBE | 3 | ์์ |
| CLOUD-DB-09 | 9 | SSM ํฌํธํฌ์๋ฉ๊ณผ MySQL ์ ์์ E2E ๊ฒ์ฆํ๋ค. | ๊ฐ๋ฐ์ PC์ 127.0.0.1:13306์์ Dev EC2 127.0.0.1:3306์ผ๋ก ํฐ๋์ด ์ด๋ฆฌ๊ณ moyeota_be๋ก ๋ก๊ทธ์ธํ ์ ์๋ค. CURRENT_ROLE()์ moyeota_dev_rw๊ฐ ํ์๋๋ค. |
ํด๋ผ์ฐ๋ยทBE | 5 | ์์ |
| CLOUD-DB-10 | 10 | DMLยทDDL ๊ถํ๊ณผ ๊ธ์ง ๊ถํ์ ๊ฒ์ฆํ๋ค. | ํ ์คํธ ํ ์ด๋ธ์์ CRUDยทCREATEยทALTERยทDROP์ด ์ฑ๊ณตํ๊ณ , ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผยท์ฌ์ฉ์ ์์ฑยท๊ถํ ์์ยท์๋ฒ ์ ์ญ ๊ถํ ์์ ์ ์คํจํ๋ค. ํ ์คํธ ๊ฐ์ฒด๋ ๊ฒ์ฆ ํ ์ญ์ ํ๋ค. | BEยทQA | 3 | ์์ |
| CLOUD-DB-11 | 11 | ๋ ธ์ถ๋ ์ด์ Secret์ ๊ต์ฒดํ๋ค. | ์ ๊ฒ ๊ณผ์ ์์ ์ถ๋ ฅ๋ MySQL ๋น๋ฐ๋ฒํธ, JWT Secret, ์ธ๋ถ OAuth Client Secret, ์ํธํ ํค๊ฐ ๋ชจ๋ ๊ต์ฒด๋๊ณ ์ด์ ๊ฐ์ด ํ๊ธฐ๋๋ค. ๊ต์ฒด ํ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์ฆยท์๋ณตํธํยทDB ์ฐ๊ฒฐ ํ๊ท ํ ์คํธ๋ฅผ ํต๊ณผํ๋ค. | ํด๋ผ์ฐ๋ยทBE | 5 | ์์ |
| CLOUD-DB-12 | 12 | ์จ๋ณด๋ฉยท์ฅ์ ๋์ยทํ์ ์ ์ฐจ๋ฅผ ๋ฌธ์ํํ๋ค. | ์ค์น, ํ๋กํ ์ค์ , ํฐ๋ ์คํ, DB ์ ์, AccessDenied, TargetNotConnected, Connection refused ๋์, Access Key ํ์ยท๊ต์ฒด, MySQL ๊ณ์ ์ ๊ธ ์ ์ฐจ๊ฐ ๋ฌธ์ํ๋๋ค. |
ํด๋ผ์ฐ๋ยทBE | 3 | ์์ |
์ด ์์ ํฌ์ธํธ๋ 39์ด๋ฉฐ, ์ด๋ฏธ ์๋ฃ๋ ํญ๋ชฉ์ ์ ์ธํ ์์ฌ ํฌ์ธํธ๋ 29๋ค.
๊ตฌํ ๊ธฐ์ค
Compose ๋คํธ์ํฌ
MySQL์ ์ ํ๋ฆฌ์ผ์ด์ ํต์ ์ฉ ๋ด๋ถ ๋คํธ์ํฌ๋ฅผ ์ ์งํ๋ฉด์ ํธ์คํธ ํฌํธ ๊ฒ์๊ฐ ๊ฐ๋ฅํ ์ ์ฉ ๋คํธ์ํฌ์๋ ์ฐ๊ฒฐํ๋ค.
services:
mysql:
ports:
- "127.0.0.1:3306:3306"
networks:
- database
- database-access
networks:
database:
name: moyeota-db-${APP_ENV:?Set APP_ENV to dev or prod}
internal: true
database-access:
name: moyeota-db-access-${APP_ENV:?Set APP_ENV to dev or prod}
database-access์๋ MySQL ์ด์ธ์ ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค๋ฅผ ์ฐ๊ฒฐํ์ง ์๋๋ค. ๋ณด์ ๊ทธ๋ฃน์๋
3306 ์ธ๋ฐ์ด๋ ๊ท์น์ ๋ง๋ค์ง ์๋๋ค.
์ ์ ๋ช ๋ น
aws ssm start-session \
--profile moyeota-backend-dev \
--region ap-northeast-2 \
--target i-0e3cbbaa5ee4866ca \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["3306"],"localPortNumber":["13306"]}'
mysql \
--protocol=TCP \
--host 127.0.0.1 \
--port 13306 \
--user moyeota_be \
--password \
moyeota
๊ฒ์ฆ ์ฒดํฌ๋ฆฌ์คํธ
-
docker compose ps mysql์127.0.0.1:3306->3306/tcp๊ฐ ํ์๋๋ค. -
docker inspect์NetworkSettings.Ports["3306/tcp"]๊ฐnull์ด ์๋๋ค. - EC2์์
127.0.0.1:3306MySQL handshake๊ฐ ์ฑ๊ณตํ๋ค. - EC2 ๋ณด์ ๊ทธ๋ฃน์ 3306 ์ธ๋ฐ์ด๋ ๊ท์น์ด ์๋ค.
- ํ์ฉ๋ IAM User๋ง Dev EC2 ํฌํธํฌ์๋ฉ ์ธ์ ์ ์์ํ ์ ์๋ค.
- ์ผ๋ฐ Session Manager ์ ธ๊ณผ Prod EC2 ์ ์์ ๊ฑฐ๋ถ๋๋ค.
- ๋ก์ปฌ 13306 ํฌํธ๋ฅผ ํตํด
moyeota_be๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ค. -
CURRENT_ROLE()์ดmoyeota_dev_rw๋ฅผ ๋ฐํํ๋ค. - ์น์ธ๋ DMLยทDDL ์์ ์ด ์ฑ๊ณตํ๋ค.
- ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ IAM ๋น๋์ ๋ฆฌ์์ค ์ ๊ทผ์ ์คํจํ๋ค.
- ๊ณต์ ๋ ๋ฌธ์์ ๋ก๊ทธ์ Secret์ด ํฌํจ๋์ง ์๋๋ค.
- ๋ ธ์ถ๋ ๊ธฐ์กด Secret์ด ๋ชจ๋ ๊ต์ฒด๋๋ค.
์๋ฃ ์ ์
- ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ ๋ช ์ด์์ด ์ ๊ท ๋ก์ปฌ ํ๊ฒฝ์์ ๋ฌธ์๋ง ๋ณด๊ณ SSM ํฐ๋๊ณผ MySQL ์ ์์ ์ฑ๊ณตํ๋ค.
- MySQL์ EC2 ๋ฃจํ๋ฐฑ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ณ AWS ๋ณด์ ๊ทธ๋ฃน์ 3306 ์ธ๋ฐ์ด๋๊ฐ ์๋ค.
- IAM ์ ์ฑ ์๋ฎฌ๋ ์ด์ ๋๋ ์ค์ ํ ์คํธ์์ Dev ํฌํธํฌ์๋ฉ ์ธ ๊ถํ์ด ๊ฑฐ๋ถ๋๋ค.
- DMLยทDDL ํ์ฉ ๋ฒ์์ ์ ์ญยท๊ด๋ฆฌ ๊ถํ ๊ฑฐ๋ถ๊ฐ ๊ฒ์ฆ๋๋ค.
- Secret ๊ต์ฒด์ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ท ํ ์คํธ๊ฐ ์๋ฃ๋๋ค.
- ์ ์ฅ์ Compose์ EC2 ๋ฐฐํฌ๋ณธ ์ฌ์ด์ ์ค์ ์ฐจ์ด๊ฐ ์๋ค.
์ด์ ์ฃผ์์ฌํญ
- IAM Access Key๋ ๊ฐ๋ฐ์๋ณ๋ก ๋ฐ๊ธํ๋ฉฐ ๊ณต์ ํ์ง ์๋๋ค.
- ์ฅ๊ธฐ Access Key ์ฌ์ฉ ํํฉ์ ์ ๊ธฐ ์ ๊ฒํ๊ณ ๋ฏธ์ฌ์ฉ ํค๋ฅผ ๋นํ์ฑํํ๋ค.
- ํ์ ๋ณ๊ฒฝ ์ IAM ๊ทธ๋ฃน ์ ๊ฑฐ, Access Key ๋นํ์ฑํ, MySQL ๋น๋ฐ๋ฒํธ ๊ต์ฒด๋ฅผ ํจ๊ป ์ํํ๋ค.
- ๊ณต์ฉ MySQL ์ฌ์ฉ์
moyeota_be๋ SQL ์์ ์๋ฅผ ์๋ณํ๊ธฐ ์ด๋ ต๋ค. ํ์ ๋ฐฑ๋ก๊ทธ์์ ๊ฐ์ธ๋ณ MySQL ์ฌ์ฉ์ ์ ํ ๋๋ ๊ฐ์ฌ ๋ก๊ทธ ๋์ ์ ๊ฒํ ํ๋ค. - SSM ํฌํธํฌ์๋ฉ ์ธ์ ์ SQL ๋ด์ฉ์ ๊ธฐ๋กํ์ง ์์ผ๋ฏ๋ก ๋ณ๊ฒฝ ์ถ์ ์ด ํ์ํ ์์ ์ ๋ณ๋์ ๋ง์ด๊ทธ๋ ์ด์ ๊ธฐ๋ก์ด๋ DB ๊ฐ์ฌ ๋ก๊ทธ๋ก ๋ณด์ํ๋ค.