默认情况下,函数计算无法访问VPC中的资源,如果您想让函数计算能够访问VPC中的资源,您需要手动为服务配置VPC功能和相关权限。

背景信息

判断是否需要配置VPC

使用VPC功能会带来一些额外的费用,如果可以使用RAM授权方式访问的资源建议您不要使用VPC功能,例如OTS。因此,在配置VPC前,需要先判断您的场景是否需要使用VPC功能。weather use vpc

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

说明 如果您的VPC资源不在函数计算当前可用区,可以通过在VPC环境中创建一个与函数计算相同可用区的VSwitch,并在函数计算的服务的VPC配置中设置此VSwitchID。由于同一VPC内不同交换机之间内网互通,因此函数计算可以通过该VSwitch访问在其他可用区的VPC内资源。

vpcConfig属性

vpcConfig下有三个字段vpcIdvSwitchIdssecurityGroupId,每一个字段都不允许为空。
  • vpcId:要访问的VPC ID。
  • vSwitchIds:一系列交换机的列表,至少要提供一个VSwitch ID。

    该字段限定了函数计算可以访问的子网,建议在vSwitchIds中设置两个或多个VSwitch,如果一个可用区出现故障或IP地址不足,您的函数可以在其他子网下运行。如果指定了多个VSwitch ID,函数计算在创建ENI的时候会随机选取一个。

  • securityGroupId:ENI所在安全组的ID。
    "vpcConfig": {
          "vpcId": "string",
          "vSwitchIds": [ "string" ],
          "securityGroupId": "string"
      }

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

访问公网

函数计算的服务中有internetAccess字段,布尔类型,用于表示此服务是否可以访问公网,默认值为true,表示此服务可以访问互联网。您可以将internetAccess字段设置为false,表示此服务下的所有函数都无法连接互联网。

原理说明

专有网络VPC是基于阿里云创建的自定义私有网络,不同的VPC之间彻底逻辑隔离。您可以在自己创建的VPC内创建和管理云产品实例,例如ECS、SLB、RDS等,以便这些资源不被公共互联网访问。

函数计算访问VPC内的资源原理如下:

VPC是您的私有网络,需要授予弹性网卡ENI访问VPC的权限,并将此弹性网卡ENI插入到执行您的函数的实例上,从而使函数可以访问您VPC内的资源。关于弹性网卡ENI的内容请参见弹性网卡概述访问VPC

创建弹性网卡ENI时,需要您提供VPC ID、安全组ID、交换机ID等配置信息,函数计算使用这些信息配置弹性网卡ENI,您的函数可以通过ENI安全访问指定VPC中的资源。

函数计算访问VPC内资源的使用示例请参见访问数据库概述

注意事项

  • 华东1(杭州)、华东2(上海)、华北2(北京)、华南1(深圳)这四个地域如果无法使用VPC功能,则需要根据控制台的申请提示申请开通。
  • 函数计算支持访问的可用区列表如下。如果您的资源所在的可用区不在以下列表中,请参见遇到VSwitch is in unsupported zone的错误怎么办?
    地域 地域ID VPC
    华东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 eu-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。
函数不访问公网,可以访问VPC。
函数不可以访问公网,也不可以访问VPC。

配置网络及权限

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

说明 如果您的VPC资源不在函数计算当前可用区,可以通过在您的VPC环境中创建一个与函数计算相同可用区的交换机,并在函数计算的服务的VPC配置中设置此交换机ID。由于同一VPC内不同交换机之间内网互通,因此函数计算可以通过该交换机访问在其他可用区的VPC内的资源。
  1. 登录函数计算控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击服务/函数
  4. 在服务列表,单击目标服务名称。
  5. 单击服务配置,在服务配置页签单击修改
    modify
  6. 网络配置区域,根据实际情况修改网络配置。
    参数 操作
    允许函数访问公网 是否允许函数访问公网。
    • 打开开关:允许函数访问公网。
    • 关闭开关:不允许函数访问公网。
    允许函数访问VPC内资源 是否允许函数访问VPC内资源。
    • 打开开关:允许函数访问VPC内资源。
      打开开关后,需要配置以下参数:
      • 专有网络:在列表中选择要访问的VPC。
      • 交换机:在列表中选择交换机,可多选。
      • 安全组:在列表中选择ENI所在的安全组。
    • 关闭开关:不允许函数访问VPC内资源。
    仅允许指定VPC调用函数 是否允许指定的VPC调用函数,详情请参见允许指定的VPC调用函数
  7. 权限配置区域,配置权限,然后单击点击授权

    由于函数计算是通过ENI访问VPC中的资源,因此您需要授予访问VPC的服务对ENI的创建、描述以及删除等权限,想了解更多权限介绍请参见权限定义

    role-authority
    参数 操作
    角色创建方式 在列表中选择角色创建方式,取值:
    • 选择已有角色:您已经创建过角色时选择。
    • 新建角色:您未创建过角色选择。
    已经存在角色 在列表中选择已创建的角色。

    角色创建方式选择选择已有角色时需要填写。

    系统模板授权 在列表中选择AliyunECSNetworkInterfaceManagementAccess
    该权限模板包含以下权限:
    • vpc:DescribeVSwitchAttributes
    • ecs:CreateNetworkInterface
    • ecs:DeleteNetworkInterface
    • ecs:DescribeNetworkInterfaces
    • ecs:CreateNetworkInterfacePermission
    • ecs:DescribeNetworkInterfacePermissions
  8. 单击提交,完成网络及权限配置。