2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQL にアクセスする Lambda 関数 (Python3)

Last updated at Posted at 2018-01-28

python3 で MySQL にアクセスする AWS の Lambda 関数を書いてみました。
ライブラリーは、pymysql を使います。

mysql_scan.py
# -*- coding: utf-8 -*-
#
#	mysql_scan.py
#
#					Jan/27/2018
# --------------------------------------------------------------------
import	sys
import	json
#
from mysql_scan_exec import mysql_scan_exec_proc
# --------------------------------------------------------------------
def mysql_scan_handler(event, context):
	sys.stderr.write("*** mysql_scan_handler *** start ***\n")
#
	table_name = "No table_name"
#
	sys.stderr.write("Received event: " + json.dumps(event, indent=2) + "\n")
	if ('table_name' in event):
		sys.stderr.write("table_name = " + event['table_name'] + "\n")
		table_name = event['table_name']
#
	version = "Jan/27/2018 PM 18:46"
	sys.stderr.write("version: " + version + "\n")
#
	sys.stderr.write("*** mysql_scan_handler *** ccc ***\n")
#
	rvalue = mysql_scan_exec_proc(table_name)
#
	sys.stderr.write("*** mysql_scan_handler *** end ***\n")
#
	return rvalue
# --------------------------------------------------------------------
mysql_scan_exec.py
# -*- coding: utf-8 -*-
#
#	mysql_scan_exec.py
#
#					Jan/28/2018
# --------------------------------------------------------------------
import	os
import	sys
import	json
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'api'))
import pymysql
#
from mysql_config import mysql_config_proc
# --------------------------------------------------------------------
def mysql_scan_exec_proc(table_name):
	rvalue = []
	connection = mysql_config_proc()
	cursor = connection.cursor()
#
	sql_str="select * from " + table_name
	sys.stderr.write("sql_str = " + sql_str + "\n")
	cursor.execute (sql_str)
	rows = cursor.fetchall ()
#
	cursor.close()
	connection.close()
#
	return rows
# --------------------------------------------------------------------
mysql_config.py
# -*- coding: utf-8 -*-
#
#	mysql_config.py
#
#					Jan/28/2018
# ---------------------------------------------------------------
import os
import sys
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'api'))

import pymysql
# ---------------------------------------------------------------
def mysql_config_proc():
#
	host_aa='test_aa.abcdefghijkl.ap-northeast-1.rds.amazonaws.com'
	data_base = 'city'
	user_aa ='scott'
	password_aa = 'tiger123'
#
	connection = pymysql.connect(host_aa, user=user_aa, \
		passwd=password_aa, db=data_base, \
		cursorclass=pymysql.cursors.DictCursor, connect_timeout=5)
	return connection
#
# ---------------------------------------------------------------

ラムダ関数の作成手順
api というフォルダーに pymysql を保存

mkdir api
pip install PyMySQL -t ./api

ラムダ関数を作成するスクリプト
morning_exec_role というロールが作られているとします。

function_create.sh
#
FUNCTION='mysql_scan'
ZIP_FILE=$FUNCTION".zip"
#
zip -r $ZIP_FILE $FUNCTION".py" mysql_config.py mysql_scan_exec.py api
#
#
aws lambda create-function \
	--function-name $FUNCTION \
	--runtime python3.6 \
	--role arn:aws:iam::123456789012:role/morning_exec_role \
	--handler $FUNCTION.mysql_scan_handler \
	--zip-file fileb://$ZIP_FILE \
	--region ap-northeast-1
#

Lambda 関数を更新するスクリプト
(何かを変更した時に使います。)

function_update.sh
#
FUNCTION='mysql_scan'
ZIP_FILE=$FUNCTION".zip"
#
zip -r $ZIP_FILE $FUNCTION".py" mysql_config.py mysql_scan_exec.py api
#
#
aws lambda update-function-code \
	--function-name $FUNCTION \
	--zip-file fileb://$ZIP_FILE
#
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?