紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【AWS Lambda】PythonからPostgreSQLのストアドプロシージャを実行する方法 #aws

f:id:yokoyantech:20181116165345p:plain

やりたいこと

  • PythonからPostgreSQLのストアドプロシージャを実行したい。
    • 具体的にはAWS Lambdaからストアドを実行したい。

実行環境

  • AWS Lambda
  • Python3.6
  • psycopg2
  • PostgreSQL9.6.6

実現方法

psycopg2callprocメソッドを使う。

実装例

import sys
import logging
import rds_config
import psycopg2
from botocore.exceptions import ClientError

try:
    conn = psycopg2.connect(
        host=rds_host,
        database=rds_database,
        port=rds_port,
        user=rds_user,
        password=rds_password
    )
except psycopg2.DatabaseError:
    logger.error(
        "ERROR: Unexpected error: "
        "Could not connect to PostgreSQL instance."
    )
    sys.exit()


def lambda_handler(event, context):
    try:
        with conn.cursor() as cur:
            # RDSで作成したストアドプロシージャの実行
            cur.callproc('hoge_function')

            conn.commit()

    except ClientError as e:
        logger.error(e.response['Error']['Message'])

    return "success!"

参考情報

www.postgresqltutorial.com