Cloud Functions로 Cloud SQL에 연결

최종 업데이트: 2020년 6월 17일

Cloud SQL이란 무엇인가요?

Cloud SQL은 Google Cloud Platform에서 관계형 데이터베이스를 손쉽게 설정하고 유지하고 관리할 수 있게 해주는 완전 관리형 데이터베이스 서비스입니다.

Cloud Functions란 무엇인가요?

Cloud Functions는 경량형 컴퓨팅 솔루션으로, 서버 또는 런타임 환경을 관리할 필요 없이 Cloud 이벤트에 응답하는 것이 유일한 목적인 독립 실행형 함수를 만들기 위해 사용합니다.

제작할 앱

이 Codelab에서는 Python으로 Cloud 함수를 작성합니다. 이 함수는 다음을 수행합니다.

  • Cloud SQL 데이터베이스 인스턴스에 연결합니다.
  • 데이터베이스의 테이블로 삽입 문을 전송합니다.

학습 내용

  • Google Cloud Console에서 Cloud Functions 웹 UI에 액세스하는 방법
  • Cloud 함수를 만드는 방법
  • Cloud 함수를 테스트하는 방법
  • Python을 사용하여 Cloud SQL 데이터베이스 인스턴스(MySQL 또는 PostgreSQL)에 연결하는 방법
  • Python을 사용하여 Cloud SQL 데이터베이스에 쓰는 방법
  • 브라우저(Chrome, Firefox 등)
  • Cloud SQL 인스턴스가 포함된 Google Cloud Platform 프로젝트
  • 아직 가이드가 없다면 가이드를 참조하세요. 인스턴스 삭제를 제외한 모든 단계를 수행합니다.
  • 인스턴스에는 테이블이 있는 MySQL 또는 PostgreSQL 데이터베이스가 포함됩니다.
  • 인스턴스 연결 이름, 데이터베이스 및 테이블 이름, 데이터베이스 사용자 이름, 사용자 비밀번호
  • Cloud SQL 클라이언트 역할이 있는 서비스 계정

Cloud SQL 데이터베이스에 연결하는 Cloud 함수 코드가 바로 여기에 있습니다. 일부 변수 값은 Cloud SQL 데이터베이스가 MySQL인지 또는 PostgreSQL인지 여부와 자체 데이터베이스 정보에 따라 달라집니다.

Cloud Console의 Cloud Functions UI에는 텍스트 편집기가 포함되어 있습니다. 코드를 복사하여 붙여넣고 수정하거나, 먼저 로컬에서 코드를 수정한 다음 UI에 복사하여 붙여넣을 수 있습니다.

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab.
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently.
# In this code we are inserting only one field with one value.
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into table_name (table_field) values (table_field_value)')

    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'
  1. 브라우저에서 Google Cloud Platform Console UI로 이동합니다.
  2. 탐색 메뉴에서 Cloud Functions를 선택합니다.
  3. 버튼 모음에서 함수 만들기를 클릭합니다.
  4. 함수의 이름을 입력합니다.
  5. HTTP 트리거를 선택합니다. 트리거 항목 아래에 표시된 URL을 기록해 둡니다. 형식은 https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME입니다.
  6. 소스 코드 옵션으로 인라인 편집기를 선택합니다.
  7. 런타임 옵션으로 Python 3.7을 선택합니다.
  8. 소스 코드 편집기 창에서 requirements.txtmain.py의 기존 콘텐츠를 삭제하고 위 코드의 수정 버전으로 바꿉니다.
  9. 실행할 함수의 이름으로 insert를 입력합니다.
  10. 고급 옵션에서 Cloud SQL 클라이언트 역할이 있는 서비스 계정을 선택합니다.
  11. 만들기를 클릭하고 스피너가 멈출 때까지 기다립니다. 함수를 사용할 준비가 되면 녹색 체크표시가 나타납니다.
  1. 브라우저에서 Google Cloud Platform Console UI로 이동합니다.
  2. 탐색 메뉴에서 Cloud Functions를 선택합니다.
  3. 앞에서 만든 함수의 이름을 클릭합니다.
  4. 페이지 중간에 있는 테스트 링크를 선택합니다.
  5. 함수 테스트를 선택합니다.
  6. 결과는 ok로 표시됩니다. 테스트에 실패하면 디버깅에 도움이 되는 스택 트레이스가 표시됩니다.
  7. 브라우저에서 이전에 함수를 만들 때 저장한 URL로 이동합니다.
  8. 브라우저에도 결과가 ok로 표시됩니다.

수고하셨습니다. Cloud SQL에서 작동하는 Cloud 함수를 성공적으로 빌드했습니다.

특히 Cloud SQL 데이터베이스 인스턴스에 연결하고 쓰는 Cloud 함수를 만들었습니다.

다음 Codelab을 확인해 보세요.

추가 자료

참조 문서