天天看点

函数计算搭建 Serverless Web 应用(二)- 自定义域名

简介

阿里云

函数计算(Function Compute)

是事件驱动的全托管计算服务,是阿里云的 Serverless 计算平台。基于函数计算构建应用,您无需管理服务器等基础设施,而是专注于应用逻辑的开发,大幅提高开发效率。

文章

函数计算搭建 Serverless Web 应用(一)- HTTP 触发器

中阐述了 Web 应用(Serverless web backend) 是函数计算很重要的一个使用场景。相比于传统的在服务器上搭建 web 应用,函数计算无需您管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,以 弹性、 可靠 的方式运行您的代码,实现毫秒级别弹性伸缩,轻松应对峰值压力。

HTTP 触发器为用户提供一个形如

<account_id>.<region>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries]

的默认的 endpoint,但是用户希望可以通过自定义域名对外提供服务,原有的 Web 应用可以通过自定义域名进行访问,迁移到函数计算后,只能通过默认 endpoint 访问,实在强人所难。

因此函数计算在 HTTP 触发器后推出自定义域名的功能。

自定义域名

绑定自定义域名可以允许用户通过自定义域名访问 FC 的函数,配合 HTTP 触发器使用,为使用函数计算搭建 Web 应用提供便利。

您可以在函数计算上绑定自定义域名,并设置不同路径到不同服务的不同函数,然后就可以通过自定义域名访问不同的函数了,您的 HTTP Request 会原封不动地传递给函数,FC 不会对您的 HTTP Request 进行任何处理。

例如,您拥有一个域名为 api.app.com 的网站,从成本和弹性扩容角度考虑,您希望将 Web 服务迁移至函数计算,并且不影响外部服务,也就是对外提供服务的链接不变,那么您可以为您的应用绑定自定义域名。

函数计算搭建 Serverless Web 应用(二)- 自定义域名

流程对比:

流程 自定义域名绑定前 自定义域名绑定后
部署阶段

1.编写应用代码并部署到用户服务器

2.为域名备案

3.设置 DNS 解析到用户服务器 IP

4.利用 web 框架设置路径和服务的对应关系

1.在函数计算为应用编写函数并设置 HTTP 触发器

2.域名在阿里云备案或接入阿里云备案

3.DNS 解析到 FC 地址:

<accountID>.<region>.fc.aliyuncs.com

4. 在 FC 绑定域名,并设置路径与函数的对应关系
访问阶段 1.访问

api.app.com/login

2.DNS 解析到用户服务器 IP

3.

api.app.com/login

访问用户服务器的服务

api.app.com/login

2.DNS 解析到 FC 地址

api.app.com/login

访问部署在 FC 的函数

使用流程

  • 创建 HTTP 触发器并且编写函数 ;
  • 绑定自定义域名
    • 步骤一: 域名需要在阿里云备案或接入阿里云备案;
    • 步骤二:域名需要解析到您的 endpoint 上,即需要设置域名的 CNAME 到您对应区域的 endpoint,先设置 CNAME 再到函数计算进行绑定;
      • 域名解析请参考文章 设置域名解析
      • 例如:您的域名为

        app.com

        ,您的 accountID 为 12345,区域为上海,需要设置

        app.com

        的 CNAME 为

        12345.cn-shanghai.fc.aliyuncs.com

    • 步骤三:在函数计算绑定自定义域名,并设置不同的路径到不同函数。
      • 同一域名绑定的函数必须在同一区域,可以属于不同服务;
      • 例如,您可以设置路径

        “/a”

        的请求到

        service1

        function1

        执行,设置路径

        “/b”

        service2

        function2

        执行;
      • 只有设置了 HTTP 触发器 的函数才可以通过自定义域名的请求触发执行。

路由匹配规则

您需要在自定义域名处设置路径和函数的对应关系,即请求的路径不同可以触发不同函数执行。函数计算支持精确匹配和模糊匹配,具体规则如下:

  • 支持精确匹配和模糊匹配。
    • 精确匹配是设置的路径和到来的请求完全一致才可以匹配,例如

      /a

      触发服务 s1 下的 f1(以下统一简写成 s1/f1),那么路径为

      /a/

      的请求无法触发 f1 的执行。
    • 支持通配符

      *

      ,且只能放到路径的最后,比如

      /login/*

      表示路径前缀为

      /login/

      的请求,

      /login/*

      对应 s2/f2,那么

      /login/a

      /login/b/c/d

      都会触发 f2 的执行。
  • 匹配顺序为:精确匹配 -> 模糊匹配
  • 匹配优先级为:最长前缀匹配

示例:

域名为

api.app.com

,设置的路由匹配规则如下:

Path ServiceName FunctionName

/

s1 f1

/*

s2 f2

/login

s3 f3

/login/a

s4 f4

/login/*

s5 f5

最终的匹配结果:

RequestURI MatchedServiceName MatchedFunctionName MatchedPath
api.app.com

/

api.app.com/user

/*

api.app.com/login

/login

api.app.com/login/a

/login/a

api.app.com/login/a/b

/login/*

api.app.com/login/b

/login/*

总结

绑定自定义域名可以允许用户通过自定义域名访问 FC 的函数,配合 HTTP 触发器使用,可以快速搭建性能稳定弹性可扩容的 Web 应用,可以说是十分方便了。

您在使用过程中遇到任何问题都可以随时

联系我们

,函数计算团队所有工程师都会在群里实时进行答疑,没错,所有工程师,任何问题,随时联系。

期待您的使用~~

参考文档

绑定自定义域名示例

继续阅读