#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-адрес, который получил доступ к внешней базе данных.