[AWS] RDS: RDS Proxy

RDS ํ๋ก์๋ ๋ง ๊ทธ๋๋ก RDS ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ํ๋ก์๋ฅผ ์ ๊ณตํด์ฃผ๋ ์๋น์ค๋ค.
Aurora์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
2019๋ ์ ๋์จ๊ฑฐ๋ผ์ ๊ฝค ๊ทผ๋์ ๋์จ ์๋น์ค์ธ๋ฐ, ๋์ฌ ๋๋ ๋๋ฆ ๊ฐ๊ด์ ๋ฐ์๋ค๊ณ ํ๋ค.
์ด๊ฒ ์ ํ์ํ๋ ๊ฑธ๊น?
์๊ฐํด๋ณด์.
์๋ง์กด์์ ์ ๊ณตํ๋ AWS Lambda ๊ฐ์ ์๋ฒ๋ฆฌ์ค ์๋น์ค๋, PHP ๊ฐ์ ๋จ์๋ฌด์ํ ํ์ด์งํ ํ๊ฒฝ์ผ๋ก ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ค ๋ณด๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ปค๋ฅ์ ์ ์ง์์ ์ผ๋ก ๋ค๊ณ ์์ง ์๊ฒ ๋๋ค.
์์ฒญ์ด ๋ค์ด์ค๋ฉด ๊ทธ๋๊ทธ๋ ํ๋ก์ธ์ค๊ฐ ํ๋์ฉ ์ฌ๋ผ๊ฐ๋ฉด์, ํ๋ก์ธ์ค ํ๋๋น ์ปค๋ฅ์ ์ ๋ค๊ณ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๊ฒ ์ ๋ฌธ์ ๊ฐ ๋๋๋?
๊ธฐ๋ณธ์ ์ผ๋ก RDB๋ค์ ์ปค๋ฅ์
์ ๋ํ ํ๊ณ์น๋ฅผ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ค์ ํ๊ธฐ์ ๋ฐ๋ผ์ ๊ฝค ๋ง์ด ๋๋ฆด ์๋ ์์ง๋ง, ๊ทธ๋๋ ๋์ฒด๋ก 1000-20000๊ฐ ์ฌ์ด๊ฐ ์ ์ ์ ์ด๋ค.
์์ฒญ์ด ๋ฏธ์น๋ฏ์ด ๋ค์ด์์ ํ๋ก์ธ์ค๊ฐ ์ปค๋ฅ์
์ ํ๋์ฉ ๋ค ๋ค๊ณ ์์ผ๋ฉด, ์ปค๋ฅ์
์ด ํ๊ณ์น์ ๋๋ฌํด์ ๋ ์ด์์ ์ปค๋ฅ์
์์ฑ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค.
๊ทธ๋ ๋ค. ๊ธฐ์กด์ ์ปค๋ฅ์
์ ๋ฌผ๊ณ ์๋ ๋์ด ์ฌ๋ผ์ง์ง ์๋๋ค๋ฉด, ์๋ก ๋ค์ด์ค๋ ํ๋ก์ธ์ค๋ ์ปค๋ฅ์
์ ๋ฐ์ง ๋ชปํ๊ณ ๋ป๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ php์ ์ปค๋ฅ์ ํ๋ ๋ฌ์ง ์์ ์ผ๋งค์ ์ฌ์ดํธ๋ค์ ๋ณด๋ฉด, connection max์ ๋๋ฌํ๋ค๊ณ ์๋ฒ๊ฐ ํฐ์ง๋ ์ผ์ด ์ข ์ข ๋ณด์ธ๋ค.
์ด๊ฑด ์ค๊ฐ์ ์ปค๋ฅ์
ํ์ด๋ ํ๋ก์๋ง ํ๋ ๋ฌ์๋ ํด๊ฒฐํ ์ ์๋ค.
RDS ํ๋ก์๋ ๊ทธ๋ฐ๊ฑธ ๊ด๋ฆฌํ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด๋ค.
์๊ธ์ ์๋ ์๊ธํ๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
https://aws.amazon.com/ko/rds/proxy/pricing/
์ ๋ ดํ์ง ์๋ค.
์ด์ ํ๋ก์๋ฅผ ๋ง๋ค์ด๋ณด์.
ํ๋ก์ ์์ฑ
RDS ํญ์ ๋ค์ด๊ฐ์ ์๋์ ํ๋ก์๋ก ์ด๋, ํ๋ก์ ์์ฑ์ ํด๋ฆญํด์ ์์ฑ์ฐฝ์ ๋์ด๋ค.


์์ฑ ์ฐฝ์ ๋ค์ด๊ฐ๋ฉด ์ฐ๋ํ ์์ง ์ข ๋ฅ๋ฅผ ๋จผ์ ๊ณ ๋ฅด๊ณ

๊ฐ๋ฆฌํฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์, ์ต๋ ์ฐ๊ฒฐ ์๋ฅผ ์ง์ ํ๋ค.
๊ธฐ๋ณธ๊ฐ์ 100ํผ์ผํธ๋ก ๋์ด์๋๋ฐ, 100ํผ์ผํธ๋ฉด ์ปค๋ฅ์
ํ๊ณ์น์ ์ ๋ฐ๊น์ง๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๋ป์ด๊ณ , 50ํผ์ผํธ๋ฉด ์ ๋ฐ๋ง ์ธ ์ ์๋ ์์ด๋ค.
๊ทผ๋ฐ 100ํผ์ผํธ๋ ์ข ์๋ ๊ฒ ๊ฐ๊ณ , ํ์์ ๋ฐ๋ผ์ ์ ๋ง์ถฐ์ฃผ๋ฉด ๋๊ฒ ๋ค.
๊ทธ๋ฆฌ๊ณ ์ํฌ๋ฆฟ ๋งค๋์ ๋ฅผ ํตํด์ ๋ณด์์ค์ ์ ํด์ค์ผ ํ๋ค.
์ ๊ธฐ์ "์ ๋ณด์ ์ํธ ์์ฑ"์ ๋๋ฅด๋ฉด ์์ฑ์ฐฝ์ผ๋ก ์ด๋ํ๋๋ฐ

์ ๋นํ ํจ์ค์๋ ์ฑ์๋๊ณ ๋ง๋ค์ด์, ์ ํํ ๋ค์์ ํ๋ก์๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
์ฌ์ฉ์ ์ด๋ฆ๊ณผ ํจ์ค์๋๋ ๊ธฐ์กด ์ค์ ๊ณผ ๋์ผํด์ผ ํจ์ ์ ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ postgresql์ "postgres" ๊ฐ์ ๊ธฐ๋ณธ ๋ง์คํฐ ๋ฃจํธ ๊ณ์ ์ ๋ฃ์ผ๋ฉด ์ ๋์ํ์ง ์๋๋ค. ์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
๊ทธ๋ผ ์ด๋ฐ์์ผ๋ก ํ๋ก์๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
ํ๋ก์์ ์ค์ ๋ ๋ณด์๊ทธ๋ฃน์ ๋ค์ด๊ฐ์
mysql ํฌํธ ์ด๋ ค์๋ ํ์ธํด๋ณด๊ณ ์์ผ๋ฉด ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
ํ๋ก์์ ์ฌ์ฉ (with Lambda)
RDS ํ๋ก์๋ public access๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ , ๋์ผํ VPC ๋ด์์๋ง ์ง์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ Lambda ๊ฐ์ ์๋น์ค์์ ์ง์ ํธ์ถํ๊ฑฐ๋, ssh๋ก ์ฐํํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํ๋ค.
๊ทผ๋ฐ ์ฌ์ค Lambda๋ฅผ ์ํ ์๋น์ค๋ผ ๋ด๋ ๋ฌด๋ฐฉํ๋ค.
ํจ์๋ฅผ ๋จผ์ ๋ง๋ค์ด๋ณด์.
์ด๋ฆ์ ์ทจํฅ๊ป ์ง๊ณ

๋จผ์ EC2 ๊ถํ์ ๋ถ์ฌ์ค๋ค. VPC ์ฐ๊ฒฐ์ ์ฌ์ฉ๋๋ค.

๊ทธ๋ฆฌ๊ณ VPC ํญ์ ๋ค์ด๊ฐ์ RDS Proxy์ ๋์ผํ VPC๋ก ์ค์ ํด์ค๋ค.

๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์ ๋งบ๊ธฐ ์ํด ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์ด์ด์ ์ฌ๋ ค์ ๋๋ค์ ์ฐ๊ฒฐํ๋ค.
๋๋ sequelize๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ผ ์ด์ ๋ฐ์์
์ ๋๊ฐ ๋๋ ๊ฒ์ด๋ค.
ํ
์คํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ๋ ๊ฒ ์ด๋ ค์ธ ๊ฒ์ ์๋ค.
rds proxy ์๋ํฌ์ธํธ๋ฅผ ํธ์คํธ๋ก ํ๊ณ , ์ํฌ๋ฆฟ ๋งค๋์ ๋ก ์ค์ ํ ์ ์ ๋ค์/ํจ์ค์๋๋ก ๋ก๊ทธ์ธ์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.

const sequelize = require('sequelize');
exports.handler = async (event) => {
const connection = new sequelize.Sequelize(
'test',
process.env.USER_NAME,
process.env.PASSWORD,
{
dialect: 'mysql',
host: process.env.HOST,
port: 3306,
});
const list = await connection.query(`
select *
from test.\`person\`
`, {
type: sequelize.QueryTypes.SELECT,
logging:false,
}
);
console.log(list);
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(list),
};
return response;
};
๊ทธ๋ผ ์ ๋ ๊ฒ์ด๋ค.

๊ทธ๋ ๋ค.
์ฐธ์กฐ
https://stackoverflow.com/questions/63278572/cant-connect-to-rds-postgresql-db-instance-through-an-rds-proxy
https://aws.amazon.com/ko/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/