前置き
構成図は後程追加するが個人備忘録として先にPGを記載しておく。
利用サービスは、lambda、RDS、SESを利用、
動きとしては、{"data":"10100"}みたいなデータをlambdaで受け取り、
RDSに対して上記データを利用したselectを条件句で実行、取得した値を利用してさらに別テーブルでselectをwhere句で実行、
メールアドレスを取得してsesへ連携という流れ。
lambda~SES利用時の注意点
・東京リージョンではSESのエンドポイントがありませんでした。
・今回lambdaはVPC内に作成していましたが、Publicサブネットにあるからといってインターネットアクセスは不可みたいです。今回はPrivateサブネットへ移動しNatGatewayを利用しました。
zipに含めたもの
・lambda_function.py
下記はpip install pymysql -t .でインストールを実施しました。
・PyMySQL-0.10.1.dist-info
・pymysql
SESを呼び出すプログラム
lambda_function.py
import boto3
import sys
import logging
import pymysql
import json
HOST = "xxx.rds.amazonaws.com"
DBNAME = "xxx"
DBUSER = "xxx"
PASSWD = "xxx"
SRC_MAIL = "xxx.com"
REGION = "ap-northeast-1"
To =""
def lambda_handler(event, context):
try:
Data = event['data']
print(Data)
Upload_M = Data[0:2]
Upload_SN = Data[2:5]
except Exception as e:
print("error1")
program_end()
return 0
try:
print('DBconnection')
connect = pymysql.connect(
host=HOST,
db=DBNAME,
user=DBUSER,
password=PASSWD)
connect.cursorclass = pymysql.cursors.DictCursor
connect.autocommit(False)
cursor = connect.cursor()
except Exception as e:
print("DB connecterror:{}")
program_end()
return 0
try:
print('kaiselect start')
get_kai = ("SELECT 取り出したいカラム名 from テーブル名 WHERE カラム名 = %s AND カラム名 = %s")
print(get_kai)
cursor.execute(get_kai, (Upload_M, Upload_SN))
results = cursor.fetchall()
print(results)
for result in results:
print(result["取り出したいカラム名"])
kai = result["取り出したいカラム名"]
except Exception as e:
print("kaiSelecterror:{}".format(e))
cursor.close()
connect.close()
program_end()
return 0
try:
print('adrressselect start')
get_address = ("SELECT mailaddress from テーブル名 WHERE カラム名 = %s")
print(get_address)
cursor.execute(get_address, (kai))
address_results = cursor.fetchall()
print(address_results)
for address_result in address_results:
print(address_result["mailaddress"])
global To
To = address_result["mailaddress"]
except Exception as e:
print("addressSelecterror:{}".format(e))
cursor.close()
connect.close()
program_end()
return 0
try:
email = "error occured"
message = 'テスト。' + '\n'
message += '' + '\n'
message += '-----' + '\n'
r = send_email(SRC_MAIL, To, email, message)
print("before")
return r
except Exception as e:
print("messsage_emailerror:{}")
cursor.close()
connect.close()
program_end()
return 0
def send_email(source, to, subject, body):
try:
client = boto3.client('ses', region_name=REGION)
response = client.send_email(
Source=source,
Destination={
'ToAddresses': [
to,
]
},
Message={
'Subject': {
'Data': subject,
},
'Body': {
'Text': {
'Data': body,
},
}
}
)
return response
except Exception as e:
print("send_emailerror:{}")
cursor.close()
connect.close()
program_end()
return 0
def program_end():
print("END")