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 모두 초보자인 상태로, 상태가 커넥션 클로즈 넣어 보았던 걸로,
공부가 되었습니다. . .

좋은 웹페이지 즐겨찾기