函数创建完成后,默认可以通过公网调用函数,无法通过VPC调用。如果您想让函数能够访问VPC内的资源,或允许指定的VPC来调用函数,则需手动为服务配置网络和权限。网络配置是服务级别的,即对该服务下的所有函数生效。本文介绍如何在函数计算控制台为服务配置网络。

网络访问能力

使用VPC功能会降低函数计算的冷启动效率,建议非必要请勿配置该功能。您可优先选择使用RAM授权方式访问资源,例如表格存储Tablestore

根据对网络的不同设置,函数有以下网络访问能力,您可按需设置:

  • 函数出流量:是否允许函数访问公网或VPC内资源的出流量,对应的配置包含允许函数访问 VPC 内资源允许函数访问公网
    表 1. 函数出流量
    网络配置 说明
    仅允许函数访问公网 函数仅能访问公网地址,例如阿里云官网、淘宝网和云服务的公网地址。所需的网络配置如下:
    • 设置允许函数访问 VPC 内资源
    • 设置允许函数访问公网
    仅允许函数访问VPC 函数仅能访问已配置的VPC资源,例如RDS、NAS和ECS。所需的网络配置如下:
    • 设置允许函数访问 VPC 内资源,并配置允许函数访问的VPC信息。
    • 设置允许函数访问公网
    允许函数既能访问公网,也能访问VPC 函数既能访问公网,也能访问VPC。所需的网络配置如下:
    • 设置允许函数访问 VPC 内资源,并配置允许函数访问的VPC信息。
    • 设置允许函数访问公网
    既不允许函数访问公网,也不允许访问VPC 函数不可以访问公网,也不可以访问VPC。所需的网络配置如下:
    • 设置允许函数访问 VPC 内资源
    • 设置允许函数访问公网
  • 函数入流量:是否允许通过公网地址或VPC地址访问函数的入流量,对应的配置为仅允许指定 VPC 调用函数
    表 2. 函数入流量
    网络配置 说明
    仅允许通过公网访问函数 函数创建完成后,默认可以通过公网地址调用函数,无法通过VPC调用。所需的网络配置如下:
    • 设置仅允许指定 VPC 调用函数
    仅允许通过VPC访问函数 允许通过指定的VPC调用函数,并禁止通过公网调用函数。所需的网络配置如下:
    • 设置仅允许指定 VPC 调用函数,并配置允许调用函数的VPC信息。
    说明 函数入流量的两个配置项互斥,不能同时允许通过公网和VPC来调用函数。

可用区注意事项

如果您的资源所在的可用区不在以下列表中,可以通过在您的VPC环境中创建一个与函数计算支持的可用区的交换机,并在函数计算的服务的VPC配置中设置此交换机ID。由于同一VPC内不同交换机之间私网互通,因此函数计算可以通过该交换机访问在其他可用区的VPC内的资源。具体步骤,请参见遇到vSwitch is in unsupported zone的错误怎么办?

地域 地域ID 函数计算支持的可用区
华东1(杭州) cn-hangzhou cn-hangzhou-f、cn-hangzhou-g、cn-hangzhou-h
华东2(上海) cn-shanghai cn-shanghai-b、cn-shanghai-e、cn-shanghai-g、cn-shanghai-f
华北1(青岛) cn-qingdao cn-qingdao-c
华北2(北京) cn-beijing cn-beijing-h、cn-beijing-c、cn-beijing-e、cn-beijing-f
华北3(张家口) cn-zhangjiakou cn-zhangjiakou-b、cn-zhangjiakou-a
华北5(呼和浩特) cn-huhehaote cn-huhehaote-a、cn-huhehaote-b
华南1(深圳) cn-shenzhen cn-shenzhen-e、cn-shenzhen-d
西南1(成都) cn-chengdu cn-chengdu-a、 cn-chengdu-b
中国香港 cn-hongkong cn-hongkong-c
新加坡 ap-southeast-1 ap-southeast-1a、ap-southeast-1b
澳大利亚(悉尼) ap-southeast-2 ap-southeast-2a、ap-southeast-2b
马来西亚(吉隆坡) ap-southeast-3 ap-southeast-3a
印度尼西亚(雅加达) ap-southeast-5 ap-southeast-5a、ap-southeast-5b
日本(东京) ap-northeast-1 ap-northeast-1b、ap-northeast-1a
英国(伦敦) eu-west-1 eu-west-1a
德国(法兰克福) eu-central-1 u-central-a、eu-central-1a、eu-central-1b
美国(硅谷) us-west-1 us-west-1a、us-west-1b
美国(弗吉尼亚) us-east-1 us-east-1b、us-east-1a
印度(孟买) ap-south-1 ap-south-1a、ap-south-1b

前提条件

配置网络和角色

函数计算访问VPC的配置和权限的配置是服务级别的,为一个服务配置了访问VPC的能力后,此服务下的所有函数都可以访问VPC。

  1. 登录函数计算控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击服务及函数
  4. 服务列表页面,找到目标服务。在其操作列,单击配置
  5. 在编辑服务页面的角色配置区域,选择服务角色,授予服务访问VPC的权限。

    推荐您使用函数计算按照最小权限原则为您提供的AliyunFCDefaultRole角色。如需更细粒度的权限管控,请参见权限策略及示例

    service_role_vpc_config_new_console
  6. 网络配置区域,根据实际情况修改以下网络配置参数。
    • 允许函数访问 VPC 内资源:是否允许函数访问VPC内资源。取值说明如下:
      • :允许函数访问VPC内资源。选择后,则需配置配置方式,取值说明如下:
        • (推荐)自动配置:函数计算会为您自动创建专有网络、交换机和安全组等资源,无需您手动创建。创建完成后,也可再次按需修改。auto_vpc_config
          说明 自动创建的网络资源均以fc.auto.create开头。
        • 自定义配置:您需手动选择已有的网络资源,请确保您已提前创建好相关资源。vpc_config_new_console

          涉及的参数如下:

          • 专有网络:在列表中选择要访问的VPC ID。
          • 交换机:在列表中选择交换机ID,至少需选择一个交换机ID。

            该字段限定了函数计算可以访问的子网,建议设置两个或多个交换机ID。当一个可用区出现故障或IP地址不足时,您的函数可以在其他子网下运行。

          • 安全组:在列表中选择安全组ID。

            此安全组是函数计算所在的安全组,安全组限定了函数计算在VPC中的出入站规则。需要设置您的VPC所在安全组的入站规则为允许函数计算所在的安全组访问。否则,函数计算无法顺畅地访问您的VPC内资源。

      • :不允许函数访问VPC内资源。
    • 允许函数访问公网:是否允许函数访问公网。取值说明如下:
      • :允许函数访问公网。
      • :不允许函数访问公网。
    • 仅允许指定VPC调用函数:是否允许指定的VPC调用函数。取值说明如下:
      • :允许指定的VPC调用函数。需注意以下事项:
        • 同一个服务最多绑定20个VPC。
        • 设置仅允许指定VPC调用函数后,使用触发器调用函数不受影响。
        • VPC绑定后对服务的所有版本和别名生效。
        • 设置允许指定VPC调用函数后,会拒绝来自公网和其他VPC的调用请求,StatusCode为403,ErrorCodeAccessDenied,错误信息为Resource access is bound by VPC: VPCID
        • 只允许使用私网HTTP接入点绑定VPC,不允许使用公网接入点和私网HTTPS接入点绑定VPC。
      • :不允许指定VPC调用函数,仅允许通过公网调用函数。
  7. 单击保存
    页面跳转至服务详情页面,您可查看到刚才保存的服务配置信息。

常见问题

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

    如果您的服务中已经设置允许函数访问VPC,却无法成功接入VPC,可能是以下原因:

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

      安全组的具体配置步骤,请参见添加安全组规则

  • 如果我新增网络资源时,发现资源不足该怎么办?

    如果您在创建VPC网络资源时,自动配置提供的IP地址数量是/24=256个,那么实例数量过多时,有可能会超出限制。您需手动调整交换机IP地址网段,以及对应的安全组。

故障排查

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

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

后续步骤

如需访问VPC内的数据库,具体步骤,请参见访问数据库