[英]Cannot connect to MySQL on lightsail from lambda
我在 lightsail 实例上有一个 MySQL 服务器。 目标是从 lambda function 访问 MySQL 服务器。
我所做的如下。
下面是 CDK 的 lambda 代码和 app.py。 结果是以下错误。 如果我尝试使用来自同一 VPC/子网中另一个 EC2 实例的相同代码连接到同一 MySQL 服务器,我可以成功连接。
我想念什么?
[ERROR] OperationalError: (2003, "Can't connect to MySQL server on 'host' (timed out)")
Traceback (most recent call last):
File "/var/task/hello.py", line 13, in main
con=MySQLdb.connect(host=host,db=db,user=user,passwd=pw,charset="utf8");
File "/opt/python/pymysql/connections.py", line 353, in __init__
self.connect()
File "/opt/python/pymysql/connections.py", line 664, in connect
raise exc
Lambda function (hello.py)
import pymysql as MySQLdb;
def main(event, context):
print("hello");
con=MySQLdb.connect(host=host,db=db,user=user,passwd=pw,charset="utf8");
print("done");
应用程序.py
from aws_cdk import (
aws_lambda as lam,
aws_iam as iam,
aws_ec2 as ec2,
core,
)
import os;
class MyStack(core.Stack):
def __init__(self, app: core.App, id: str) -> None:
super().__init__(app, id)
vpc = ec2.Vpc.from_vpc_attributes(
self,"VPC",
vpc_id=vpcid,
availability_zones=[zone],
isolated_subnet_ids=[subnet],
);
sg = ec2.SecurityGroup.from_security_group_id(
self,"SG",
security_group_id=sgid,
mutable=False
);
layer = lam.LayerVersion(
self, "MyLayer",
code=lam.AssetCode.from_asset('./lib'),
);
lamrole = iam.Role.from_role_arn(
self, "LambdaRole",
rolearn,
);
helloFn = lam.Function(
self, "hello",
function_name='hello',
code=lam.AssetCode.from_asset('./code'),
handler="hello.main",
timeout=core.Duration.seconds(900),
role=lamrole,
vpc=vpc, # for mysql
security_groups=[sg],
layers=[layer],
runtime=lam.Runtime.PYTHON_3_7,
)
app = core.App()
MyStack(app, "hello")
app.synth()
知道它已经有 8 个月大了,但遇到了同样的问题并让它发挥作用。 但是,我将 LightSail 与 Nginx 一起使用,所以对您来说情况可能会略有不同。
想你在哪里很近。 我不确定顺序,但我按以下顺序进行:
AmazonVPCFullAccess
和/或AmazonVPCFullAccess
作为与 Lambda 相关的用户角色的权限。GRANT ALL on *.* TO 'root'@'172.%.%.%' IDENTIFIED BY 'adminpass'
。 确保更改用户名、IP 地址和密码。my.cnf
文件从bind_address=127.0.0.1
更改为bind_address=0.0.0.0
sudo /opt/bitnami/ctlscript.sh restart
完成上述操作后,我终于可以连接了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.