LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

前置き

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