はじめに
Lambda関数からRDSデータベースへ接続を行う機会があり、
その際に実装を行った方法について、備忘録として記載します。
前提
・RDSデータベースの作成・設定済みとする。
・本記事では、下記の赤矢印①〜②の実装方法について記載する。
目次
1. Lambda関数の作成
2. Lambda関数のソースコード実装
3. IAMロールの設定
4. Lambda関数のVPC設定
(おまけ)Lambda関数のテスト実行
1. Lambda関数の作成
Lambda(関数)のコンソール画面から下記の設定値でLambda関数を作成する。
設定項目 | 設定値 |
---|---|
以下のいずれかのオプションを選択して、関数を作成します。 | 一から作成 |
関数名 | 任意の値 |
ランタイム | Python 3.8 |
アーキテクチャ | x86_64 |
実行ロール | 基本的な Lambda アクセス権限で新しいロールを作成 ※ |
※「3. IAMロールの設定」にて、自動作成されるIAMロールの設定を変更するため、ロール名をメモしておく。
2. Lambda関数のソースコード実装
2-1. PyMySQLライブラリのインストール
※PyMySQL:データベース接続に使用するライブラリ
※PyMySQLライブラリのインストール手順は、下記のサイトを参考にしている。
https://teratail.com/questions/269811
ローカルPCのコマンドラインにて、下記の手順でLambda関数へアップロードするzipファイルを作成する。
# 作業用フォルダを作成
mkdir lambda
cd lambda
# 作業用フォルダ内にpymysqlをインストール
pip3 install pymysql -t .
# 空のlambda_function.pyを作成
vi lambda_function.py
# Lambda関数へアップロードするzipファイルを作成
zip -r app.zip *
2-2. zipファイル(PyMySQLライブラリ)のアップロード
1にて作成したLambda関数のコンソール画面にて、「アップロード元」プルダウンから2-1で作成したzipファイルをアップロードする。
2-3. ソースコード実装
1にて作成したLambda関数のコンソール画面にて、下記の内容を参考にデータベース接続処理を実装する。
import pymysql
def lambda_handler(event, context):
try:
# パラメータ設定
rds_host = [接続するRDSのエンドポイント]
db_name = [接続するデータベースのデータベース名]
db_username = [接続するデータベースのユーザー名]
db_password = [接続するデータベースのパスワード]
# RDSデータベースへ接続
conn = pymysql.connect(
host = rds_host,
user = db_username,
passwd = db_password,
db = db_name,
connect_timeout = 5,
cursorclass = pymysql.cursors.DictCursor)
with conn.cursor() as cur:
# クエリ文作成
sql_select = "select item"
sql_from = " from " + db_name + ".t_table"
sql_where = ""
query = sql_select + sql_from + sql_where
# クエリ文実行
cur.execute(query)
data = cur.fetchall()
# 取得結果を返却
return data
except Exception as e:
# エラー
print(e)
3. IAMロールの設定
デフォルトのIAMロールでは、VPCの設定権限がないため、権限設定を行う。
IAM(ロール)のコンソール画面にて、1で自動作成されたロールを選択する。
「ポリシーをアタッチします」ボタンを押下し、「AWSLambdaVPCAccessExecutionRole」ポリシーを追加する。
4. Lambda関数のVPC設定
1にて作成したLambda関数のコンソール画面にて、下記の設定値でVPCの設定を行う。
※保存ボタン押下後、VPCの設定変更に少し時間がかかる。
設定項目 | 設定値 |
---|---|
VPC | 接続するRDSに設定しているVPC |
サブネット | 接続するRDSに設定しているサブネット |
セキュリティグループ | 接続するRDSに設定しているセキュリティグループ |
(おまけ)Lambda関数のテスト実行
1にて作成したLambda関数のコンソール画面にて、正常にデータベース接続ができているかテスト実行することができる。
「テスト」タブにて、適当な名前を入力し、「変更を保存」→「テスト」ボタン押下でテスト実行する。
また、実行時にリクエストパラメータが必要な場合は、下部のテキスト入力欄に キーと値をJSON形式で入力することで設定することができる。
参考
AWSのlambdaからRDS(Aurora Mysql)に接続したい
RDS インスタンスに接続するように Lambda 関数を設定する方法を教えてください。
チュートリアル: Amazon VPC の Amazon RDS にアクセスする Lambda 関数の設定
Lambda から RDS にアクセスする方法 (python)