为什么函数计算无法成功接入VPC调试?

如果您的服务中已经设置了vpcConfig,但却无法成功接入VPC,可能是以下原因:

  • 交换机所在的子网故障或子网中的IP地址用尽,您可以在配置VPC时提供两个或者多个vSwitchIds,如果一个可用区出现故障,您的函数可以在其他可用区运行,提高容错能力。
  • 安全组配置错误,请您按照以下要求配置安全组,关于安全组的配置步骤,请参见添加安全组规则
    • 需要设置VPC中的安全组的入站规则为允许函数计算所在的安全组访问。
    • 安全组出口方向需要允许ICMP协议,函数计算会通过ICMP协议检查VPC网络联通性。

为什么函数内部调用其他云资源时出现网络问题?

为了支持函数计算能够访问VPC内资源功能,函数计算将您的运行环境从经典网络迁移至VPC网络。所以从函数内部访问云服务器或者其他云服务可能会出现网络不通的问题,您可以参考以下场景调试:

  • 访问云服务提供的内网Endpoint时出现网络问题。您需要使用该云服务在VPC网络下的Endpoint进行访问。如果该服务没有提供VPC网络的Endpoint,请设置函数所在的服务的InternetAccess为true,然后使用该云服务提供的公网Endpoint进行访问。
    注意 公网Endpoint访问模式会产生流量费用。
  • 访问经典网络中的ECS上的自建资源(Web服务或者文件系统等)或者经典网络中的RDS时出现网络问题。
    • 如果必须使用经典网络的ECS或者RDS,请使用公网IP地址或者公网访问方式,该访问方式会产生流量费用。
    • 如果您可以将资源迁移到VPC网络中,您可以通过函数计算访问VPC内资源。更多信息,请参见配置函数访问VPC内资源
  • 访问RDS时出现网络问题。
    RDS实例创建成功后,您需要设置白名单,进入相应实例。更多信息,请参见 白名单模式
    说明 在VPC中设置RDS允许所有地址访问不会存在安全隐患,请放心设置。

错误排查

函数计算无法在设置vpcConfig时对访问VPC的权限进行检测,而需要在执行函数时检测,因此在通过InvokeFunction接口调用函数时会引入一些新的错误类型。下表描述了接入VPC时一些常见的错误,以便您迅速排查问题。

错误码 状态码 问题原因 解决方案
InvalidArgument 400 函数计算不支持您提供的vSwitchId所在的可用区。 重新设置vSwitchId
未找到vpcConfig中的vpcIdvSwitchIdssecurityGroupId对应的资源。 检查vpcConfig参数设置。
设置的VSwitch或安全组不在相应的VPC中。 检查vpcConfig参数设置,确保vSwitchIdsecurityGroupId对应的资源在vpcId对应的VPC中。
AccessDenied 403 未提供对ENI的操作授权。 检查服务的权限。更多信息,请参见授权
ResourceExhausted 429 VPC中ENI资源耗尽,函数计算无法创建更多的ENI。 提供更多的ENI。