前回は『 【AWS Lambda】VPC内のElastiCacheへの接続のコツ 』と題して、VPCにあるElastiCacheへ接続を試してみました。
今回は『AWS Lambda編~VPCにあるRDSへ接続を試してみる~』と題して、VPCにあるRDSへ接続を試してみたいと思います。
AWS Lambda VPCサポート
AWS LambdaはVPC内リソースとしても作成することが出来ます。
この機能によりセキュアにAWS Lambdaを利用する事が出来るようになり、
VPC内にある他サービスとの連携が可能です。
試してみる
1. RDSの準備
VPC内にパブリックアクセスを許可していないRDSを準備します。
SecurityGroupでLambdaが利用するSecurityGroupを許可しておきます。
2. スクリプトの準備
DBとの接続するPythonスクリプトを用意します。
今回はAWSのサンプルプログラムを利用します。
app.py として以下を保存します。
rds_hostは作成したRDSのホスト名を置き換えます。
1import sys2import logging3import rds_config4import pymysql56#rds settings7rds_host = "rds-instance-endpoint"8name = rds_config.db_username9password = rds_config.db_password10db_name = rds_config.db_name1112logger = logging.getLogger()13logger.setLevel(logging.INFO)1415try:16 conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)17except:18 logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")19 sys.exit()2021logger.info("SUCCESS: Connection to RDS mysql instance succeeded")22def handler(event, context):23 """24 This function fetches content from mysql RDS instance25 """2627 item_count = 02829 with conn.cursor() as cur:3031 cur.execute("create table Employee3 ( EmpID int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (EmpID))")32 cur.execute('insert into Employee3 (EmpID, Name) values(1, "Joe")')33 cur.execute('insert into Employee3 (EmpID, Name) values(2, "Bob")')34 cur.execute('insert into Employee3 (EmpID, Name) values(3, "Mary")')35 conn.commit()36 cur.execute("select * from Employee3")37 for row in cur:38 item_count += 139 logger.info(row)40 #print(row)4142 return "Added %d items from RDS MySQL table" %(item_count)同じ階層にrds_config.pyというDB接続情報ファイルを作成します。
1#config file containing credentials for rds mysql instance2db_username = "username"3db_password = "password"4db_name = "databasename"次にpipコマンドを利用して必要モジュールをインストールします。
※今回は pymysql を利用します。
$ pip install pymysql -t ./
最後にzip 化しておきます。
1$ zip -r app.zip ./*3. Lamdbaの設定
続いてLambdaを起動していきます。
先程作成したコードをアップします。
VPCの権限を利用出来るRoleを選択しておきます。
また、lambdafunction.lambdahandlerをapp.handlerに変更します。
RDSと同一のVPCに起動します。
4. テストしてみる
実際にテストしてみます。
左上の「test」からクリックします。
Hello worldのEventでSave and Testをクリックします。
結果が返ってくるのがわかります。