클라우드 엔지니어/클라우드 캠프과정

AWS Lambda API Gateway 실습

해아's 2022. 10. 1. 19:44

Lambda  를 활용하여 파이선 코드로 RDS에 연동하는 실습을 진행한다.

 

GET방식

import pymysql

def lambda_handler(event,context):
    conn = pymysql.connect(
        host='[db주소]', 
        user='[아이디]', 
        password='[비번]',
        db='[db이름]', 
        charset='utf8')
 
    curs = conn.cursor()
 
    sql = "SELECT sage FROM student WHERE sname='"+event["sname"]+"'"
    
    curs.execute(sql)
 
    rows = curs.fetchall()
    
    conn.close()
    
    return rows[0][0]

db에서 이름으로 정보 불러오는  html코드

람다에 함수를 추가하고 테스트를 진행하고 성공하면 API 게이트웨이를 설정한다.

 api게이트웨이에서는

get 방식으로 설정하고

 

메서드 요청에 쿼리문자열 추가

통합요청에 이전에 배운 제이슨 받는 설정을 삽입해둔다.

 

 api 배포를 눌러 스테이지를 생성(test)하고

접속해본다

https://[스테이지url]/[스테이지명]/[api명]?[보낼값이름]=[보낼값]

https://[스테이지url]/test/sql_select?sname=pws

작동되면 html코드로 올려보자

<!DOCTYPE html>
<html lang="ko">

<head>
	<meta charset="UTF-8">
	<title>Ajax Request</title>
	<script>
		function sendRequest() {
			var httpRequest = new XMLHttpRequest();
			httpRequest.onreadystatechange = function() {
				if (httpRequest.readyState == XMLHttpRequest.DONE && httpRequest.status == 200 ) {
					document.getElementById("text").innerHTML = httpRequest.responseText;
				}
			};
			var sname = document.getElementById('sname').value;
			console.log(sname);
			// GET 방식으로 요청을 보내면서 데이터를 동시에 전달함.
			httpRequest.open("GET", "[api]?sname="+sname, true);
			httpRequest.send();
		}
	</script>
</head>

<body>

	<h1>GET 방식의 요청</h1>
	<button type="button" onclick="sendRequest()">GET 방식으로 요청 보내기!</button>
	<input id="sname" type="text">
	<p id="text"></p>
	
</body>

</html>

 

 

cors 에러!!

 

 

 

POST방식 테스트하기 - 실패.... 더 공부하자

람다에 코드를 삽입하고 테스트후 되면 api와 묶어주자

 

 람다 - 파이선 db에 컬럼추가 함수

import pymysql

def lambda_handler(event,context):
    conn = pymysql.connect(
        host='[db주소]', 
        user='[아이디]', 
        password='[비번]',
        db='[db이름]', 
        charset='utf8')
 
    curs = conn.cursor()

    sql = "INSERT INTO student VALUES('"+event["sname"]+"',"+event["sage"]+");"
    curs.execute(sql)
    conn.commit()

    return "success"

 

연동할 html코드를 생성하자

<!DOCTYPE html>
<html lang="ko">

<head>
	<meta charset="UTF-8">
	<title>Ajax Request</title>
	<script>
		function sendRequest() {
			var httpRequest = new XMLHttpRequest();
			httpRequest.onreadystatechange = function() {
				if (httpRequest.readyState == XMLHttpRequest.DONE && httpRequest.status == 200 ) {
					document.getElementById("text").innerHTML = httpRequest.responseText;
				}
			};
			// POST 방식의 요청은 데이터를 Http 헤더에 포함시켜 전송함.
			var sname = document.getElementById('sname').value;
			var sage = document.getElementById('sage').value;
			
			httpRequest.open("POST", "[URL]/insert", true);
			httpRequest.setRequestHeader("Content-Type", "application/json");
			
			console.log("{\"sname\":\""+sname+"\",\"sage\":\""+sage+"\"}");
			
			httpRequest.send("{\"sname\":\""+sname+"\",\"sage\":\""+sage+"\"}");
		}
	</script>
</head>

<body>

	<h1>POST 방식의 요청</h1>
	<button type="button" onclick="sendRequest()">POST 방식으로 요청 보내기!</button> <br>
	이름 : <input id="sname" type="text"> <br>
	나이 : <input id="sage" type="text"> <br>
	<p id="text"></p>
	
</body>

</html>

728x90
반응형