1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

みなさんこんにちは!この記事では、「API Gateway・Lambda・AuroraでAPIを作成してみた」というテーマのもと作成方法を複数回に分けてご紹介しております。今回はLambdaからデータベースに格納した情報を取得する方法についてご紹介します。

目次

本記事の対象

全体の構成図に対して、本記事では赤字で記載しているLambda関数の作成、Auroraとの接続を行いデータベースの情報を取得していきます。

image.drawio.png

作成の流れ

以下の流れで実施していきます。

  • Lambda関数の作成
  • レイヤーの追加
  • コードの作成
  • コードのテスト

前提として以下が必要となります。詳細は目次のリンクよりご確認ください。

  • VPC・サブネット・セキュリティグループの作成
  • Auroraの作成
  • Auroraへデータの格納

実際に作成してみた

Lambda関数の作成

まずはLambda関数を作成します。今回はAuroraを操作するため、VPCと接続するように設定します。詳細は以下スクリーンショットよりご確認ください。

詳細な設定項目と設定値

lambda1.drawio.png

lambda2.drawio.png

レイヤーの追加

データベースの接続や操作をするためにpymysqlといったライブラリが必要となります。今回はライブラリを使用するために、公開されているLambdaレイヤーを追加します。「コード」タブよりレイヤーを追加します。

lambda3.drawio.png

コード作成

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編」にて、ハードコートせず認証情報を取得する方法をご紹介します。詳細は目次のリンクよりご確認ください。

コードのテスト

コードをデプロイし「テスト」タブよりコードのテストを行います。レスポンスの中に、データベースに格納した情報が含まれていれば成功です。

lambda4.drawio.png

終わりに

いかがだったでしょうか。今回はLambdaからデータベースに格納した情報を取得する方法についてご紹介しました。次回はSecrets Manager編をご紹介します。是非、次回以降もご覧いただけますと幸いです。もしこの記事がお役に立ちましたら、「いいね」「記事のストック」をお願いします!


  • AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
  • その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?