Как получить доступ к внешней базе данных mysql с помощью aws lambda на python (без vpc) через vpn и с использованием ssl

#python #mysql #amazon-web-services #ssl #aws-lambda

#python #mysql #amazon-web-сервисы #ssl #aws-lambda

Вопрос:

Я хочу подключиться к внешней базе данных mysql из aws lambda на python (через vpn и с использованием ssl).

Он работает через оболочку mysql --host=xxx.yyy.de --user=xxx -p --ssl-mode=REQUIRED --ssl-ca=/Users/.../ca-cert.pem --ssl-cert=/Users/.../client-cert.pem --ssl-key=/Users/.../client-key.pem

И он работает локально с клиентом aws SAM

 import mysql.connector
import boto3

dynamotable_name = "testTable03"

def connect_db():
    mydb = mysql.connector.connect(
        host="xxx.yyy.de",
        user="xxx",
        password="zzz",
        database="database",
        ssl_ca="ca-cert.pem",
        ssl_cert="client-cert.pem",
        ssl_key="client-key.pem"
    )
    cur = mydb.cursor(buffered=True)
    cur.execute("select * from measure order by measure_id desc limit 10;")
    result = cur.fetchall()
    return result


def fill_dynamodb(data):
    for x in data:
        measure_id = x[0]
        sensor_id = x[1]
        sensor_value = x[2]
        location_id = x[3]
        datetime = x[4]

        # put items into an existing DynamoDB table
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table(dynamotable_name)
        table.put_item(
            Item={
                'measure_id': str(measure_id),
                'sensor_id': sensor_id,
                'sensor_value': sensor_value,
                'location_id': location_id,
                'datetime': str(datetime)
            }
        )


def lambda_handler(event, context):
    fill_dynamodb(connect_db())
  

Я всегда получал эту ошибку :

{«Сообщение об ошибке»: «2003: не удается подключиться к серверу MySQL на ‘xxx.yyy.de: 3306’ (время ожидания 110 подключений истекло)», «ErrorType»: «Ошибка интерфейса»,

Это доступ в Интернет? или это что-то связано с vpn?

Ответ №1:

Я создал VPC с общедоступными и частными подсетями и шлюзом NAT, чтобы я мог присвоить своей функции Lambda статический эластичный IP-адрес, который получил доступ к внешней базе данных.