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 |
ソースコード
実際に実装内容やソースコードを追いながら読むとより理解が深まるかと思います。是非ご活用ください。
関連する記事
AWS-Lambdaの特徴
本サービスは従量課金制となります。ご留意ください。
全体の流れ
- Pythonコードを書く
- Lambda関数を作成する
- 環境変数を設定する
- 基本設定を設定する
- 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. 環境変数を設定する
環境変数
-
環境変数
セクションの編集
から設定する
キー | 値 |
---|---|
DB_HOST | {host} |
DB_PORT | {port} |
DB_DBNAME | {dbname} |
DB_TABLE | {table} |
DB_USER | {user} |
DB_PASSWORD | {password} |
DB_QUERY | {query} |
{}は環境毎に異なります。
4. 基本設定を設定する
基本設定
-
基本設定
セクションの編集
から設定する - タイムアウトは最大
15分0秒
まで設定可能 - メモリは最大
3008MB
まで設定可能
5. VPCを設定する
VPC
-
VPC
セクションの編集
から設定する -
VPC
、サブネット
、セキュリティグループ
を設定する
RDSの設定と合わせる必要がある