简介
阿里云 函数计算(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 服务迁移至函数计算,并且不影响外部服务,也就是对外提供服务的链接不变,那么您可以为您的应用绑定自定义域名。
流程对比:
流程 | 自定义域名绑定前 | 自定义域名绑定后 |
---|---|---|
部署阶段 | 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 访问用户服务器的服务 |
1.访问 api.app.com/login 2.DNS 解析到 FC 地址 3. api.app.com/login 访问部署在 FC 的函数 |
使用流程
-
创建 HTTP 触发器并且编写函数 ;
- 搭建过程请参考 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 | s1 | f1 | / |
api.app.com/user | s2 | f2 | /* |
api.app.com/login | s3 | f3 | /login |
api.app.com/login/a | s4 | f4 | /login/a |
api.app.com/login/a/b | s5 | f5 | /login/* |
api.app.com/login/b | s5 | f5 | /login/* |
总结
绑定自定义域名可以允许用户通过自定义域名访问 FC 的函数,配合 HTTP 触发器使用,可以快速搭建性能稳定弹性可扩容的 Web 应用,可以说是十分方便了。
您在使用过程中遇到任何问题都可以随时 联系我们,函数计算团队所有工程师都会在群里实时进行答疑,没错,所有工程师,任何问题,随时联系。
期待您的使用~~