【俺得】lambdaからSESを呼びだすPG

# 前置き
構成図は後程追加するが個人備忘録として先に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")
```