繁体   English   中英

如何通过 vpn 和使用 ssl 在 python(不带 vpc)中使用 aws lambda 访问外部 mysql 数据库

[英]How to access external mysql database with aws lambda in python (without vpc) through vpn and using ssl

我想从 python 中的 aws lambda 连接到外部 mysql 数据库(通过 vpn 和使用 ssl)。

它确实通过 shell 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())

我总是收到这个错误:

{"errorMessage": "2003: 无法在 'xxx.yyy.de:3306' 上连接到 MySQL 服务器(110 连接超时)", "errorType": "InterfaceError",

是互联网接入吗? 或者它与vpn有关吗?

我创建了一个带有公共和私有子网以及一个 NAT 网关的 VPC,所以我可以为我的 Lambda 函数提供一个静态弹性 IP 地址,它可以访问外部数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM