RDS的DNS查找超时



我有一个RDS实例my_instance和一个lambda。两者位于同一专有网络上。

RDS具有一个SCmy-security-group-rds和lambda另一个安全组my-security-group-lambda

my-security-group-lambda具有无约束的出站规则。IP为0.0.0.0/0的所有协议。

my-security-group-rds具有允许来自my-security-group-lambda的任何访问的入站规则。

在lambda内部,我想执行主机名的DNS解析:

def dns_lookup(domainname,record_type,*dnsserver):
"""
Get dns lookup results
:param domain:
:return: list of dns lookup results
"""
try:
lookup_result_list = []
myResolver = dns.resolver.Resolver()
if not dnsserver:
lookupAnswer = myResolver.query(domainname, record_type)
else:
myResolver.nameservers = dnsserver[0]
lookupAnswer = myResolver.query(domainname,record_type)
for answer in lookupAnswer:
lookup_result_list.append(str(answer))
return lookup_result_list
except Exception as err:
logger.exception("Not able to lookup DNS:{}".format(err))
raise

我首先在rds区域服务器上执行dns_lookup,结果很好。

listOfAuthoritiveNames = dns_lookup("eu-west-1.rds.amazonaws.com", "NS")

然后我尝试在我的实例上执行dns查找:

dns_lookup("my-database.dfafda.eu-west-1.rds.amazonaws.com", "A", listOfAuthoritiveNames)

这会导致超时。如果我为数据库使用了错误的主机名,它会说没有记录,所以它似乎可以访问名称服务器。

知道可能缺少什么吗?

嗨,我看到你缺少lambda的角色。遵循以下步骤:

  • 打开IAM控制台的"角色"页面,然后选择"创建角色">
  • 对于受信任实体类型,选择AWS服务,对于用例,选择Lambda
  • 选择"下一步">
  • 通过执行以下操作添加IAM管理的策略:
  • 使用策略搜索框,搜索AWSLambdaVPCAccessExecutionRole
  • 在结果列表中,选中角色旁边的复选框,然后选择清除筛选器
  • 使用策略搜索框,搜索其他角色权限AWSLambda...ExecutionRole。在结果列表中,选中角色旁边的复选框,然后选择"下一步">
  • 输入lambda-vpcname-role作为"角色名称",然后选择"创建角色">

使用AWS CLI:传递您的lambda角色和sg lambda。

aws lambda create-function --function-name LambdaFunctionWithRDS --runtime python3.9 
--zip-file fileb://lambda_function.zip --handler lambda_function.lambda_handler 
--role arn:aws:iam::111122223333:role/lambda-vpc-sqs-role 
--vpc-config SubnetIds=subnet-1234567890abcdef0,subnet-abcdef01234567890,
subnet-021345abcdef6789,subnet-1234abcdef567890,SecurityGroupIds=sg-1234567890abcdef0

希望这能帮助

参考:

  1. https://docs.aws.amazon.com/lambda/latest/dg/services-rds-tutorial.html#w122aac77d191c13c27

最新更新