【发布时间】:2019-11-07 21:39:01
【问题描述】:
我有一个 lambda,它试图对 AWS 之外的本地服务器进行 REST 调用。我们的 lambda 从一个 VPC 运行,该 VPC 与我们的本地资源有 VPN 连接。使用 VPC 从 EC2 成功运行相同的 rest 调用,但 lambda 请求挂起。安全组是开放的。有什么想法可以调试吗?
这是 lambda 的大部分内容
def lambda_handler(event, context):
config = configparser.ConfigParser()
config.read('config')
pattern = re.compile(".*"+config['DEFAULT']['my-pattern'])
logger.info(event['Records'])
sns_json = event['Records'][0]['Sns']
sns_message = json.loads(sns_json['Message'])
logger.info(sns_message['Records'][0]['s3'])
s3_object = sns_message['Records'][0]['s3']
new_file_name = s3_object['object']['key']
bucket = s3_object['bucket']['name']
if pattern.match(new_file_name):
new_json = {"text": "New file (" + new_file_name + ") added to the bucket. " + bucket,
"title": config['DEFAULT']['default_message_title']}
webhook_post = requests.get("http://some-ip:4500/")
logger.info("Webhook Post Status: " + str(webhook_post.status_code) + str(webhook_post))
logger.info("Skip teams webhook");
outgoing_message_dict = {
's3Bucket': bucket,
'somefile': new_file_name
}
return outgoing_message_dict
我没有收到来自请求的任何错误,它只是挂起,直到我的 lambda 超时。
【问题讨论】:
-
当您的 lambda 在 VPC 之外时会发生什么?你的 lambda 是在私有子网还是公共子网中?
-
Lambda 函数是否连接到与您说有效的 EC2 实例相同的子网?
some-ip是公共 IP 地址还是私有 IP 地址(例如10.)? EC2 实例是在公有子网还是私有子网中工作? -
@john Lambda 运行在与 EC2 相同的私有子网上。
-
@deosha Lambda 在 VPC 之外运行良好,但我当然无法访问我的内部资源。
-
您在自己的 prem 防火墙中打开了哪个 IP?对于 EC2,它会起作用,因为您可以在自己的 prem 防火墙上打开私有 IP。 Lambda 没有静态 IP
标签: amazon-web-services aws-lambda vpn vpc