Lambda x python에서 연결 닫기 오류 발생
시작
Lambda x python으로 RDS 연결하는 작업이 필요하기 때문에 AWS 자습서
원래 테이블에서 선택하여 반환하는 느낌으로 조금 변경하여 작성
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / ぁ mb다 / ㅁ st / dg / vpcards-에서 p ぉ y 맨 tpkg. HTML
튜토리얼에서는 커넥션을 닫고 있는 모습이 없고,
"이봐, 연결 닫지 않거나 바보인가"라고 생각하면서 연결 닫기를 넣을 수있다.
내가 바보였다. . .
# -*- coding: utf-8 -*-
import json
import datetime
import sys
import logging
import rds_config
import pymysql
#rds settings
rds_host = "DBのエンドポイント"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def handler(event, context):
"""
This function fetches content from mysql RDS instance
"""
item_count = 0
with conn.cursor() as cur:
cur.execute("select id from table limit 1")
for row in cur:
data = row
#print(row)
conn.close()
return {'statusCode': 200,
'body': json.dumps(data),
'headers': {'Content-Type': 'application/json'}}
시도
첫 번째 처리는 성공
오! 잘 갔다고 감동
두 번째 두드리면 InternalServer 오류
헉? 그리고 로그 확인
그러면, 1회째의 처리시에는 커넥션 작성 OK의 로그가 나와 있지만,
두 번째 처리 중에 연결 생성 로그가 없습니다.
원인
이해하면 당연하지만,
Lambda 컨테이너 로드시는 handler 이외의 부분도 실시되지만,
Lambda 컨테이너에있는 동안 handler 만 호출됩니다.
그래서 튜토리얼에는 다음과 같이 쓰여졌는지 납득
성능 향상을 위해 여기에 표시된 대로 pymysql.connect() 는 핸들러 외부에서 실행하는 것이 좋습니다.
컨테이너 로드된 첫회는
커넥션 작성(또는 PG로드)⇒handler 실행⇒SELECT⇒커넥션 클로즈
컨테이너 로드된 상태의 두 번째 이후에는
handler 실행 ⇒ SELECT하지만 연결이 닫혀 있기 때문에 오류
라는 상황이었습니다.
[conn.close()]를 제거하고 처리를 실시하면, 처음이나 2번째 이후에도 에러 없이 처리할 수 있게 되었습니다
Lambda, python 모두 초보자인 상태로, 상태가 커넥션 클로즈 넣어 보았던 걸로,
공부가 되었습니다. . .
Reference
이 문제에 관하여(Lambda x python에서 연결 닫기 오류 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/isse0127/items/9643dce3d2849fda253f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: utf-8 -*-
import json
import datetime
import sys
import logging
import rds_config
import pymysql
#rds settings
rds_host = "DBのエンドポイント"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def handler(event, context):
"""
This function fetches content from mysql RDS instance
"""
item_count = 0
with conn.cursor() as cur:
cur.execute("select id from table limit 1")
for row in cur:
data = row
#print(row)
conn.close()
return {'statusCode': 200,
'body': json.dumps(data),
'headers': {'Content-Type': 'application/json'}}
첫 번째 처리는 성공
오! 잘 갔다고 감동
두 번째 두드리면 InternalServer 오류
헉? 그리고 로그 확인
그러면, 1회째의 처리시에는 커넥션 작성 OK의 로그가 나와 있지만,
두 번째 처리 중에 연결 생성 로그가 없습니다.
원인
이해하면 당연하지만,
Lambda 컨테이너 로드시는 handler 이외의 부분도 실시되지만,
Lambda 컨테이너에있는 동안 handler 만 호출됩니다.
그래서 튜토리얼에는 다음과 같이 쓰여졌는지 납득
성능 향상을 위해 여기에 표시된 대로 pymysql.connect() 는 핸들러 외부에서 실행하는 것이 좋습니다.
컨테이너 로드된 첫회는
커넥션 작성(또는 PG로드)⇒handler 실행⇒SELECT⇒커넥션 클로즈
컨테이너 로드된 상태의 두 번째 이후에는
handler 실행 ⇒ SELECT하지만 연결이 닫혀 있기 때문에 오류
라는 상황이었습니다.
[conn.close()]를 제거하고 처리를 실시하면, 처음이나 2번째 이후에도 에러 없이 처리할 수 있게 되었습니다
Lambda, python 모두 초보자인 상태로, 상태가 커넥션 클로즈 넣어 보았던 걸로,
공부가 되었습니다. . .
Reference
이 문제에 관하여(Lambda x python에서 연결 닫기 오류 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/isse0127/items/9643dce3d2849fda253f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Lambda x python에서 연결 닫기 오류 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/isse0127/items/9643dce3d2849fda253f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)