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