테스트로 호출했으니 이제 디비를 연결시켜보자
Globals:
Api:
Cors:
AllowMethods: "'POST, GET'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"
EndpointConfiguration:
Type: REGIONAL
GatewayResponses:
DEFAULT_4XX:
ResponseParameters:
Headers:
Access-Control-Allow-Origin: "'*'"
DEFAULT_5XX:
ResponseParameters:
Headers:
Access-Control-Allow-Origin: "'*'"
Function:
Timeout: 3
Runtime: nodejs22.x
MemorySize: 2048
Environment:
Variables:
JWT_ISSUER:
JWT_SECRET:
HOSTNAME:
USERNAME:
PASSWORD:
DATABASE:
yaml에 임시로 변수를 작성해두고 추후 환경변수든 뭐든 뺄예정
const tokenOptions = {
algorithm: 'HS256',
expiresIn: '10m',
issuer: process.env.JWT_ISSUER
}
const refreshTokenOptions = {
algorithm: 'HS256',
expiresIn: '30d',
issuer: process.env.JWT_ISSUER
}
const createConnection = async () => {
return await mariadb.createConnection({
host: process.env.HOSTNAME,
user: process.env.USERNAME,
password: process.env.PASSWORD,
database: process.env.DATABASE
});
}
const createResponse = (resultCode, body = {}) => {
return {
statusCode: resultCode,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify(body)
}
}
export const login = async (event) => {
const body = JSON.parse(event.body)
const userId = body.userId;
const password = body.password;
if (userId && password) {
let connection = await createConnection();
try {
const [user] = await connection.query(
'select * from user where user_id = ?;',
[userId]
)
const passwordHash = user.password;
const shaPass = sha256(password);
if (shaPass === passwordHash) {
delete user.password;
const token = jwt.sign(user, process.env.JWT_SECRET, tokenOptions);
const refreshToken = jwt.sign(user, process.env.JWT_SECRET, refreshTokenOptions);
const date = new Date();
date.setDate(date.getDate() + 30);
connection.destroy();
return createResponse(200, {token, refreshToken});
} else {
connection.destroy();
return createResponse(401, {message: 'NOT_FOUND'});
}
}
catch (err) {
connection.destroy();
return createResponse(500, {message: err.message});
}
}else {
return createResponse(500, {message: 'PARAMETER_ERROR'});
}
}
간단하게 조회만 우선 시키고 토큰 발급해보자
message": "Internal server error"
로그를 확인하니 람다에 vpc설정이 없어서 디비를 설치한 ec2와 같은 vpc와 서브넷을 yaml에 추가했다
VpcConfig:
SecurityGroupIds:
-
SubnetIds:
-
디비 주소도 내부ip로 변경하니 정상호출 확인
"message": "NOT_FOUND"
계정 디비에 저장시키고

발급 확인
이제 도메인 연결을 해야겠다.
먼저 ssl을 만들어야한다.
AWS Certificate Manager 가서

* 달고 구매한 도메인 입력후 다른건 건드릴거 없고 화면 넘어가고 *말고 앞에 Alias지정하고 할땐
route 53에서 레코드 생성 해야 발급됨으로 변했는데 그냥 되더라

이제 api gateway에서 도메인 이름 추가해서 원하는 Alias 붙이고 ACM는 좀전에 만든거 설정하고

다음 화면 넘어가면 api매칭 구성해서 만들어논 람다로 만들고
route53 가서

앞에 도메인 이름에 적은 Alias로 레코드 생성. 엔드포인트는 API Gateway 도메인 이름 인데 알아서 뜨더라

도메인으로 다시 시도하니 잘된다