访问数据库是指在函数计算中通过函数调用数据库应用编程接口,对数据库执行数据插入、查询等操作。通常函数计算中不同的执行环境实例之间的状态是不共享的,通过数据库可以将结构化的数据持久化以实现状态共享。本文以Python 3为例,介绍如何使用Serverless Devs部署函数来访问RDS PostgreSQL数据库。

前提条件

  • 创建RDS PostgreSQL实例
    重要
    • 请确保您所创建的数据库实例与需要访问该数据库实例的函数在同一地域。

    • 建议您在函数计算支持的可用区创建数据库实例。更多信息,请参见函数计算支持的可用区

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

  • 创建名为COMPANY的表,并插入ID、NAME、AGE、ADDRESS和SALARY列。

    本示例中,s init初始化的模板代码中的代码逻辑为向名为COMPANY的数据库表插入一条数据,表的Schema包含ID、NAME、AGE、ADDRESS和SALARY列。因此,需提前创建该表与相应列。

步骤一:配置数据库IP访问白名单

请使用IP地址白名单来实现安全访问,请勿使用安全组。否则,可能会导致函数连接不稳定的情况,影响业务正常运行。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击白名单与安全组
    白名单设置页面,可查看当前的IP白名单模式。
    说明 较早创建的实例可能采用高安全模式。新创建的实例都采用通用白名单模式。
  3. 在默认显示的白名单设置页签,找到default白名单分组,在其右侧,单击修改
  4. 修改白名单分组对话框,修改组内白名单,单击确定
    重要 此处填写的IP地址,需为在函数计算服务的网络配置中添加的vSwitch的IP段。

步骤二:部署并调用函数

  1. 安装Serverless Devs和Docker,并添加密钥信息。
  2. 执行以下命令初始化项目。
    s init start-fc-postgresql-python -d start-fc-postgresql-python
  3. 执行以下命令进入项目。
    cd start-fc-postgresql-python
  4. 编辑s.yaml文件。

    示例如下:

    edition: 1.0.0         
    name: fcDeployApp       
    access: "default"  
    
    services:
      fc-db-postgresql-python: 
        component: devsapp/fc  
        props: 
          region: cn-hangzhou
          service:
            name: fc-db-demo
            description: 'demo for fc visit db'
            internetAccess: true
            vpcConfig:
              vpcId: vpc-bp1hcg467ekqsv0zr**** # 数据库实例所在的VPC ID。
              securityGroupId: sg-bp1j6knvj40yjn0g**** # 安全组ID。
              vswitchIds:
                - vsw-bp1lgecrqfslgji9b**** # 请确保该vSwitch对应的网段已配置到数据库实例访问白名单中。
          function:
            name: postgresql
            description: visit postgresql
            runtime: python3
            codeUri: ./code
            handler: index.handler
            memorySize: 256
            timeout: 30
            environmentVariables:
              DATABASE: post**** # 数据库名称。
              HOST: pgm-bp1n6g63x0xdb7oy16****.pg.rds.aliyuncs.com # 数据库接入点。
              PORT: 19** # 数据库端口。
              USER: ni**** # 数据库用户名。
              PASSWORD: Hang**** # 数据库用户密码。
  5. 执行以下命令构建项目。
    s build --use-docker
  6. 执行以下命令部署项目。
    s deploy -y
  7. 执行以下命令调用函数。
    s invoke -e "{}"

    预期输出如下:

    [2021-09-23T11:03:17.792] [INFO ] [S-CLI] - Start ...
    ========= FC invoke Logs begin =========
    FC Invoke Start RequestId: 7e6657d4-504a-4faa-8f59-5464df73aa65
    FC Invoke End RequestId: 7e6657d4-504a-4faa-8f59-5464df73aa65
    
    Duration: 101.87 ms, Billed Duration: 102 ms, Memory Size: 256 MB, Max Memory Used: 35.08 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result:
    successfully
    
    
    End of method: invoke

示例代码

函数计算Python访问PostgreSQL数据库