19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS-Lambda + PythonでAWS-RDS/PostgreSQLのテーブルを読み込む

Posted at

AWS-Lambda + PythonでAWS-RDS/PostgreSQLのテーブルを読み込む

はじめに

Mac環境の記事ですが、Windows環境も同じ手順になります。環境依存の部分は読み替えてお試しください。

目的

この記事を最後まで読むと、次のことができるようになります。

No. 概要 キーワード
1 コーディング Python, psycopg2
2 Lambda設定 Lambda

実行環境

環境 Ver.
macOS Catalina 10.15.3
Python 3.7.3
psycopg2 2.8.4

ソースコード

実際に実装内容やソースコードを追いながら読むとより理解が深まるかと思います。是非ご活用ください。

GitHub

関連する記事

AWS-Lambdaの特徴

本サービスは従量課金制となります。ご留意ください。

全体の流れ

  1. Pythonコードを書く
  2. Lambda関数を作成する
  3. 環境変数を設定する
  4. 基本設定を設定する
  5. VPCを設定する

1. Pythonコードを書く

コーディング

app/lambda_function.py
"""app/lambda_function.py
"""

import os
import sys

import psycopg2


class Database():
    """Database
    """
    class Parameter():
        """Parameter
        """

        def __init__(self, host, port, dbname, table, user, password, query):
            self.host = host
            self.port = port
            self.dbname = dbname
            self.table = table
            self.user = user
            self.password = password
            self.query = query

    def __init__(self, param):
        self.db = param
        self.header = tuple()
        self.records = list()
        self.counts = int()

    def _connection(self):
        """_connection
        """
        print('connect to db: {}/{}'.format(self.db.host, self.db.dbname))
        return psycopg2.connect(
            host=self.db.host,
            port=self.db.port,
            dbname=self.db.dbname,
            user=self.db.user,
            password=self.db.password
        )

    def query(self):
        """query
        """
        with self._connection() as conn:
            with conn.cursor() as cursor:
                try:
                    cursor.execute(self.db.query)
                    self.header = cursor.description
                    self.records = cursor.fetchall()
                    self.counts = len(self.records)
                except psycopg2.Error as e:
                    print(e)
                    sys.exit()
        return True


def lambda_handler(event, context):
    """lambda_handler
    """
    print('event: {}'.format(event))
    print('context: {}'.format(context))

    param = Database.Parameter(
        host=os.getenv('DB_HOST', ''),
        port=os.getenv('DB_PORT', ''),
        dbname=os.getenv('DB_DBNAME', ''),
        table=os.getenv('DB_TABLE', ''),
        user=os.getenv('DB_USER', ''),
        password=os.getenv('DB_PASSWORD', ''),
        query=os.getenv('DB_QUERY', '')
    )

    db = Database(param=param)
    db.query()

    return {
        'status_code': 200,
        'records': str(db.records),
        'counts': db.counts
    }


if __name__ == '__main__':
    print(lambda_handler(event=None, context=None))

2. Lambda関数を作成する

AWS-Lambda + Python + CronでWEBスクレイピングを定期的に実行するの記事を参考にzipのアップロードまで実施する

3. 環境変数を設定する

環境変数

  1. 環境変数セクションの編集から設定する
キー
DB_HOST {host}
DB_PORT {port}
DB_DBNAME {dbname}
DB_TABLE {table}
DB_USER {user}
DB_PASSWORD {password}
DB_QUERY {query}

{}は環境毎に異なります。

4. 基本設定を設定する

基本設定

  1. 基本設定セクションの編集から設定する
  2. タイムアウトは最大15分0秒まで設定可能
  3. メモリは最大3008MBまで設定可能

5. VPCを設定する

VPC

  1. VPCセクションの編集から設定する
  2. VPCサブネットセキュリティグループを設定する

RDSの設定と合わせる必要がある

19
18
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
19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?