はじめに
みなさんこんにちは!この記事では、「API Gateway・Lambda・AuroraでAPIを作成してみた」というテーマのもと作成方法を複数回に分けてご紹介しております。今回はLambdaからデータベースに格納した情報を取得する方法についてご紹介します。
目次
- 全体編
- VPC・サブネット・セキュリティグループ編
- Aurora編
- CloudShell編
- Lambda編 << 今回はこちら
- Secrets Manager編
- API Gateway編
本記事の対象
全体の構成図に対して、本記事では赤字で記載しているLambda関数の作成、Auroraとの接続を行いデータベースの情報を取得していきます。
作成の流れ
以下の流れで実施していきます。
- Lambda関数の作成
- レイヤーの追加
- コードの作成
- コードのテスト
前提として以下が必要となります。詳細は目次のリンクよりご確認ください。
- VPC・サブネット・セキュリティグループの作成
- Auroraの作成
- Auroraへデータの格納
実際に作成してみた
Lambda関数の作成
まずはLambda関数を作成します。今回はAuroraを操作するため、VPCと接続するように設定します。詳細は以下スクリーンショットよりご確認ください。
レイヤーの追加
データベースの接続や操作をするためにpymysqlといったライブラリが必要となります。今回はライブラリを使用するために、公開されているLambdaレイヤーを追加します。「コード」タブよりレイヤーを追加します。
コード作成
Lambdaで実行するコードを作成します。今回は以下コードでデータベースに格納した情報を取得します。
import pymysql
import json
HOST = "RDS Proxyのエンドポイント"
DB_NAME = "dev"
DB_USER_NAME = "データベースのユーザ名"
DB_PASSWORD = "パスワード"
def lambda_handler(event, context):
# データベースへ接続
conn = pymysql.connect(
host=HOST,
user=DB_USER_NAME,
password=DB_PASSWORD,
database=DB_NAME,
cursorclass=pymysql.cursors.DictCursor
)
try:
# SQLクエリ実行・結果取得
with conn.cursor() as cur:
cur.execute('SELECT * FROM book')
results = cur.fetchall()
return {
'statusCode': 200,
'body': results
}
except Exception as e:
# エラーハンドリング
return{
'statusCode': 500,
'body': json.dumps({'error': str(e)})
}
finally:
# 接続を閉じる
conn.close()
上記コードではデータベースの認証情報(ユーザ・パスワード)がハードコートされており、認証情報漏洩のリスクがあります。「Secrets Manager編」にて、ハードコートせず認証情報を取得する方法をご紹介します。詳細は目次のリンクよりご確認ください。
コードのテスト
コードをデプロイし「テスト」タブよりコードのテストを行います。レスポンスの中に、データベースに格納した情報が含まれていれば成功です。
終わりに
いかがだったでしょうか。今回はLambdaからデータベースに格納した情報を取得する方法についてご紹介しました。次回はSecrets Manager編をご紹介します。是非、次回以降もご覧いただけますと幸いです。もしこの記事がお役に立ちましたら、「いいね」「記事のストック」をお願いします!
- AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
- その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。