AWS Lambda編~VPCにあるRDSへ接続を試してみる~

前回は『 【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を許可しておきます。

01

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を起動していきます。

先程作成したコードをアップします。

02

VPCの権限を利用出来るRoleを選択しておきます。

また、lambdafunction.lambdahandlerをapp.handlerに変更します。

03

RDSと同一のVPCに起動します。

04

4. テストしてみる

実際にテストしてみます。
左上の「test」からクリックします。

05

Hello worldのEventでSave and Testをクリックします。

06

結果が返ってくるのがわかります。

07
いかがでしたでしょうか?次回もお楽しみに!!!次回記事:Amazon Machine Learning編~別アカウントS3でDatasourcesを試してみる~

この記事を書いた人

aws-recipe-user