3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LambdaからRDSへの接続設定が簡単になったのでやってみる

前提

言語(バージョン):Python3.8
RDS:PostgreSQL
※RDSは作成済みとする
ライブラリ:psycopg2

全体の流れ

・ Lambda関数の作成
・ コードの作成
・ 環境変数の設定
・ レイヤーの追加
・ RDS接続設定

関数作成

・ 一から作成を選択
・ 任意の関数名を入力
・ ランタイムはpython3.8を選択
※理由は後述
・ アーキテクチャはx86_64を選択

関数の作成を押下

コードを作成しDeploy

import psycopg2
import os

# 環境変数から接続情報を取得
db_endpoint = os.environ['DB_ENDPOINT']
db_username = os.environ['DB_USERNAME']
db_password = os.environ['DB_PASSWORD']
db_name = os.environ['DB_NAME']

def lambda_handler(event, context):
    # データベースに接続
    conn = psycopg2.connect(
        dbname=db_name,
        user=db_username,
        password=db_password,
        host=db_endpoint
    )

    # カーソルの作成
    cur = conn.cursor()

    # SQL の実行
    cur.execute('SELECT *  FROM テーブル名;')
    records = cur.fetchall()

    # カーソルと接続のクローズ
    cur.close()
    conn.close()

    # 結果の返却
    return {
        'statusCode': 200,
        'body': records
    }

環境変数の設定

設定 → 環境変数より以下を設定する
・ DB_ENDPOINT
    RDSのエンドポイントを指定する
・ DB_USERNAME
    接続用のユーザ名を指定する
・ DB_PASSWORD
    接続用のパスワードを指定する
・ DB_NAME
    接続先のDB名を指定する

レイヤーを追加する

・ レイヤーソース:「ARNを指定」を選択
・ 下記サイトからARNをコピーして入力
・ 検証を押下後、追加を押下

※ psycopg2-lambda-layer
https://github.com/jetbridge/psycopg2-lambda-layer
※東京リージョンのPython3.8の場合は↓
arn:aws:lambda:ap-northeast-1:898466741470:layer:psycopg2-py38:1
※ pythonのバージョンを3.8にしている理由はここです。
2023年12月時点で3.8が最新バージョン

RDS接続設定

・ 設定 → RDSデータベース
・ RDSデータベースに接続 を押下
・ 事前に作成したデータベースを選択する
・ プロキシは使用しないを選択
   (今回はテストのためプロキシは使用しない)
・ 作成を押下

完成

Testを押下して実行してみよう
※ イベントは適当(デフォルトのまま)で作成でOKです。

以上です。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?