3
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 1 year has passed since last update.

【AWS】同一VPN内のLambdaからRDSへ接続を行う

Last updated at Posted at 2021-11-16

はじめに

Lambda関数からRDSデータベースへ接続を行う機会があり、
その際に実装を行った方法について、備忘録として記載します。

前提
 ・RDSデータベースの作成・設定済みとする。
 ・本記事では、下記の赤矢印①〜②の実装方法について記載する。
lambda_rds_1.png

目次

1. Lambda関数の作成
2. Lambda関数のソースコード実装
3. IAMロールの設定
4. Lambda関数のVPC設定
(おまけ)Lambda関数のテスト実行

1. Lambda関数の作成

Lambda(関数)のコンソール画面から下記の設定値でLambda関数を作成する。

設定項目 設定値
以下のいずれかのオプションを選択して、関数を作成します。 一から作成
関数名 任意の値
ランタイム Python 3.8
アーキテクチャ x86_64
実行ロール 基本的な Lambda アクセス権限で新しいロールを作成 ※

※「3. IAMロールの設定」にて、自動作成されるIAMロールの設定を変更するため、ロール名をメモしておく。
lambda_rds_2.png

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ファイルをアップロードする。
lambda_rds_3.png

2-3. ソースコード実装

1にて作成したLambda関数のコンソール画面にて、下記の内容を参考にデータベース接続処理を実装する。

lambda_function.py
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の設定変更に少し時間がかかる。
lambda_rds_4.png

設定項目 設定値
VPC 接続するRDSに設定しているVPC
サブネット 接続するRDSに設定しているサブネット
セキュリティグループ 接続するRDSに設定しているセキュリティグループ

(おまけ)Lambda関数のテスト実行

1にて作成したLambda関数のコンソール画面にて、正常にデータベース接続ができているかテスト実行することができる。

「テスト」タブにて、適当な名前を入力し、「変更を保存」→「テスト」ボタン押下でテスト実行する。
また、実行時にリクエストパラメータが必要な場合は、下部のテキスト入力欄に キーと値をJSON形式で入力することで設定することができる。
lambda_rds_5.png

参考

AWSのlambdaからRDS(Aurora Mysql)に接続したい
RDS インスタンスに接続するように Lambda 関数を設定する方法を教えてください。
チュートリアル: Amazon VPC の Amazon RDS にアクセスする Lambda 関数の設定
Lambda から RDS にアクセスする方法 (python)

3
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
3
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?