์ด์ ๊ธ์ ์ด์ด Lambda์ RDS๋ฅผ ์ฐ๊ฒฐํ๋ ๋ถ๋ถ์ ๊ตฌํํด๋ณด์.
RDS๋ก๋ MySQL์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
RDS
1. ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน ์ค์
RDS ์์ฑ ํ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์์ ๋ช ๊ฐ์ง ํ๊ฒฝ ์ค์ ์์ ์ ํด์ค์ผ ํ๋ค.
- ํ์์กด ์ค์
- Character Set
- Max Connection
RDS > ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน > ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน ์์ฑ
ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน ํจ๋ฐ๋ฆฌ์๋ RDB ์์ฑ ์ ์ ํํ๋ MySQL ๋ฒ์ ์ ์ ํํ๋ค.
์์ฑ๋ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ ํด๋ฆญํ๊ณ ํธ์ง์ ์ ํํ๋ค.
time_zone → Asia/Seoul
character_set_client, character_set_connection, character_set_database, character_set_filesystem, character_set_results, character_set_server → uft8mb4
collation_connection, collation_server → utf8mb4_general_ci
์ฐธ๊ณ : utf8mb4์ utf8์ ์ฐจ์ด
→ ์ด๋ชจ์ง ์ ์ฅ ๊ฐ๋ฅ ์ฌ๋ถ์ด๋ค. utf8mb4๋ ์ด๋ชจ์ง๋ฅผ ์ ์ฅํ ์ ์๋ค.
max_connection → ๊ธฐ๋ณธ (์ธ์คํด์ค ์ฌ์์ ๋ฐ๋ผ ์๋์ผ๋ก ์ ํด์ง)
์์ฑํ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ์ฐ๊ฒฐํด์ผ ํ๋ค.
RDS > ๋ฐ์ดํฐ๋ฒ ์ด์ค > ์์ฑํ ์ธ์คํด์ค ์ ํ > ์์ > ์ถ๊ฐ ๊ตฌ์ฑ
DB ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ default.mysql8.0์์ ๋ฐฉ๊ธ ์์ฑํ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ผ๋ก ๋ฐ๊พผ๋ค.
์๋น์ค๊ฐ ์ด์ ์ค์ธ ์ํ๊ฐ ์๋๋ผ๋ฉด ์ฆ์ ์ ์ฉ์ ์ ํํ๋ค. ์์ ์๋ฃ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ถํ ํด์ค๋ค.
2. ๋ณด์ ๊ทธ๋ฃน ์ค์
๋ก์ปฌ PC ๋ฐ EC2์์ RDS์ ์ ๊ทผํ๊ธฐ ์ํด RDS์ ๋ณด์ ๊ทธ๋ฃน์ IP๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค > ์ฐ๊ฒฐ ๋ฐ ๋ณด์ > VPC ๋ณด์ ๊ทธ๋ฃน
๋ณด์ ๊ทธ๋ฃน ์ ํ > ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง
์ ํ์์ MYSQL/Aurora ์ ํ ํ ๋ด IP๋ฅผ ๋ฑ๋กํ๋ค.
IAM
IAM > ์ญํ > ์ญํ ์์ฑ
AWS ์๋น์ค, Lambda ์ ํ
AWSLambdaVPCAccessExecutionRole ๊ถํ ์ถ๊ฐ ํ ์ด๋ฆ ์ ๋ ฅํ๊ณ ์ญํ ์์ฑ!
Lambda
1. Lambda ํจ์ ์์ฑ
๋ก์ปฌ์์ lambda_function.py ์ฝ๋๋ฅผ ์์ฑํ๊ณ zip ํ์ผ๋ก ์์ถํด์ ์ ๋ก๋ํ ๊ฒ์ด๋ค.
lambda_function.py
import sys
import logging
import pymysql
import json
import random
rds_host = "RDS ์๋ํฌ์ธํธ"
user_name = "Master ์ฌ์ฉ์ ์ด๋ฆ"
password = "Password"
db_name = "์ด๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ"
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(host=rds_host, user=user_name, passwd=password, db=db_name, connect_timeout=5)
except pymysql.MySQLError as e:
logger.error("์ฐ๊ฒฐ ์คํจ!")
logger.error(e)
sys.exit()
logger.info("์ฐ๊ฒฐ ์ฑ๊ณต!")
def lambda_handler(event, context):
print(event)
randnum = random.randrange(1,123)
userid = "user_test" + str(randnum)
url = event["body-json"]["url"]
item_count = 0
sql_string = f"insert into URLS (userid, url) values('{userid}', '{url}')"
with conn.cursor() as cur:
cur.execute("create table if not exists URLS ( userid varchar(20) PRIMARY KEY, url varchar(20) NOT NULL)")
cur.execute(sql_string)
conn.commit()
return "Lambda+RDS ์ฑ๊ณต!"
lambda_handler ํจ์ ์์์ printํ event๋ CloudWatch ๋ก๊ทธ์์ ํ์ธํ ์ ์๋ค.
lambda_function.py ํ์ผ์ด ์๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋์์ผ๋ก pip install --target [dir_name] pymysql --no-user ์ฝ๋๋ฅผ ํฐ๋ฏธ๋์ ์ ๋ ฅํ๋ค.
๋ค์๊ณผ ๊ฐ์ ํด๋๋ค์ด ์๊ธฐ๋๋ฐ, lambda_function.py ํ์ผ๊ณผ ํด๋๋ค์ lambda_function.zip์ผ๋ก ์์ถํ๋ค. ์ด zip ํ์ผ์ Lambda์ ์ ๋ก๋ํ๋ค.
2. ์ญํ ์์
๊ธฐ์กด ์ญํ ์ AWSLambdaVPCAccessExecutionRole ๊ถํ์ด ์๋ ์ญํ ๋ก ๋ฐ๊พผ๋ค.
3. VPC ์ค์
๊ตฌ์ฑ > VPC > ํธ์ง
VPC, ์๋ธ๋ท, VPC ๋ณด์ ๊ทธ๋ฃน์ RDS์ ๋๊ฐ์ด ์ค์ ํ๋ค.
MySQL Workbench
๋ก์ปฌ์ MySQL Workbench๋ฅผ ์ค์นํ๊ณ MySQL Connections์์ RDS์ ์ฐ๊ฒฐํ๋ค.
Connection Name, Hostname(RDS ์๋ํฌ์ธํธ), Username(Master ์ฌ์ฉ์ ์ด๋ฆ), Password(Master ์ฌ์ฉ์ ์ํธ)๋ฅผ ์ ๋ ฅํ ํ ์ ์ํ๋ฉด AWS์์ RDS ์ธ์คํด์ค ์์ฑ ์ ์ค์ ํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ณด์ธ๋ค.
ํ ์ด๋ธ์ ์กฐํํด๋ณด๋ฉด Postman์ผ๋ก ๋ณด๋ธ POST ์์ฒญ์ด ์ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค!
'AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
AWS Amplify๋ (0) | 2024.04.14 |
---|---|
[AWS] CLF-C02: Cloud Practitioner Essentials ๊ฐ์ ๋ ธํธ (3) (0) | 2024.03.31 |
[AWS] CLF-C02: Cloud Practitioner Essentials ๊ฐ์ ๋ ธํธ (2) (0) | 2024.03.24 |
[AWS] CLF-C02: Cloud Practitioner Essentials ๊ฐ์ ๋ ธํธ (1) (1) | 2024.03.10 |
[AWS] API Gateway + Lambda + RDS(MySQL) ์ฐ๊ฒฐ (1) (0) | 2024.02.14 |