共计 2940 个字符,预计需要花费 8 分钟才能阅读完成。
作者:落语|阿里云 Serverless 技术研发
背景
阿里云函数计算产品 [ 1] 在较早的时候反对了 HTTP 触发器 [2 ] 能力,反对用户应用 HTTP 协定进行函数调用。函数计算后端通过一个共享的 APIServer 组件对所有客户提供响应 HTTP 触发器调用的服务,须要依赖 URL 中的 Path 将客户流量路由到客户的函数容器外部。容器内收到的 HTTP 申请 Path 会带有函数计算的路由标识,如果客户在函数计算部署 REST 格调的利用,那么就会遇见 404 问题。
在一开始,函数计算并不是为客户运行中小型规模利用而设计的。函数计算提供了原生的 REST 架构,将每个函数视为一个独立的资源,通常一个函数只负责一小块性能,也就是一个 API。如果一个函数只对应一个 API,那么在函数代码中也不用去实现一套路由逻辑去响应不同 URL Path 门路的申请了。
函数计算在近两年引入了 Custom Runtime/Custom Container Runtime [3 ] 类型的函数,客户能够间接在函数计算上运行本人存量的利用,而不用依照函数计算举荐的架构去拆分本人的利用。客户以及社区内比拟成熟的我的项目的开发习惯是采纳 MVC 等架构,在一个程序中开发大量的 REST API,在过程内依照报文中的 HTTP Path 进行路由,将不同门路的申请“转发”至不同的办法或函数进行解决。
在这样的背景下,客户能够在函数计算运行存量的 REST 利用,但利用无奈失常对外提供服务。客户破费大量的精力对存量的利用进行革新,而且这个革新仅仅在函数计算是必须的,是一种典型的平台携裹用户的产品设计。
应用 fcapp.run 调用函数
为了解决上述的问题,并兼容存量的函数以及客户习惯,函数计算为每个新创建的 HTTP 触发器调配了一个独立的域名,例如{random-string}.cn-shanghai.fcapp.run
。应用该域名拜访函数计算,函数计算会依照域名进行路由,将流量转发至函数容器内,防止对客户代码造成侵入性。
应用 fcapp-test.run 进行本地网页测试
因为中国大陆政策的影响,函数计算主域名无奈在互联网为客户提供网站类型的业务,所有的函数申请后果将被转为下载行为 [4 ]。对于纯 API 类型的函数,咱们认为将申请后果转为下载是没有影响的。但对于网站属性的函数,返回的 HTML 文本以及 JavaScript 代码强依赖浏览器的解释器能力失常展现。咱们判断让开发者可能实时看到函数返回的页面是一个强诉求。
在生产场景,咱们举荐客户为函数绑定已备案的域名来解决这个问题,而在测试环境有更加简洁的计划。在测试阶段能够长期通过测试域名 fcapp-test.run 以及增加本地的 host 解析绕过这个问题,申请后果将不会被转为下载行为,能够失常进行网页调试。
# 1. 从页面获取 fcapp.run 的域名
FC_DOMAIN='wordpress-xxxxx-serverlordpress-ydziwvakfn.cn-shenzhen.fcapp.run'
FC_TEST_DOMAIN=`echo ${FC_DOMAIN} | sed 's/fcapp.run/fcapp-test.run/g'`
echo "FC 域名: ${FC_DOMAIN}"
echo "FC 测试域名: ${FC_TEST_DOMAIN}"
# 2. 查问域名解析的 IP
FC_IP=`ping ${FC_DOMAIN} -c 1 | HEAD -1 | awk '{print $3}' | sed 's/[():]//g'`
echo "FC IP: ${FC_IP}"
# 3. 批改 host 文件,将测试域名的本地解析指向 fcapp.run 的解析
# 如果没有权限须要手动加
sudo -- sh -c "printf'\n${FC_IP} ${FC_TEST_DOMAIN}\n'>> /etc/hosts"
cat /etc/hosts
# 4. 应用测试域名在浏览器拜访函数
curl -v "${FC_TEST_DOMAIN}"
理解 TCP 协定以及 HTTP 协定的同学能够很容易地了解背地的技术细节。客户端在发动 HTTP 申请时,首先会通过域名解析查问到域名对应的 IP 地址,并发动 TCP 连贯。接下来会通过建设的 TCP 连贯,将 HTTP Request 报文发送至 Server 端。如果客户端间接向函数计算的 Server 发动 TCP 连贯,并将能够与函数关联的域名发送至函数计算,那么函数计算就能够返回客户冀望的内容。
函数计算在后端进行了解决,兼容了 fcapp-test.run 域名的拜访,但并不提供权威 DNS 解析。客户只须要在本地进行 Host 配置或者应用自建的 DNS 服务器,将 fcapp-test.run 的域名解析至函数计算 Server,就可能失常测试函数。该计划既满足了中国大陆法律法规的要求,又以极低的老本满足了客户调试页面的需要,极大地优化了客户在函数计算的研发体验。
应用函数计算运行 wordpress 官网镜像
通过以上的计划,函数计算反对客户在 不批改任何业务 代码的前提下迁徙本人的 REST 利用。上面应用 wordpress 官网镜像进行阐明。
前置条件
- 开明函数计算账号。
- 将 wordpress 镜像转存到阿里云容器镜像服务中。
- 创立或应用已有的 mysql 实例,并为 wordpress 服务初始化相应的账号以及数据库。如果应用阿里云 RDS 实例,请确保函数服务的 VPC 配置与 RDS 实例的 VPC 配置统一,且白名单配置正确。
创立相应的函数以及服务
应用 wordpress 官网镜像创立函数,并设置容器内监听端口为 80。
注入数据库配置
批改函数配置,将 mysql 的数据库配置以环境变量的形式注入函数容器内。
无需备案,测试 wordpress 函数性能
查看创立的触发器调配的域名 [5 ],依照上述文档配置,应用 fcapp-test.run 域名进行测试。
上线你的函数
对外提供网站类型服务只能通过已备案域名来实现。函数计算用户能够通过配置自定义域名 [6 ] 的性能,将域名与函数进行绑定,应用本人的域名对外提供服务。同时也能够应用任意规范的网关类型的云产品或者开源产品,应用 fcapp.run 的内网域名上线你的函数。
小结
作为 Serverless 技术的标志性产品之一,函数计算长久以来专一于晋升产品实用的场景。fcapp.run 域名以及相干产品个性的引入,标记着函数计算在 REST 场景以及 Web 场景的很大一步。客户从此能够将 REST 利用零革新地部署在函数计算上,研发测试的体验以及正式上线的计划都做到了优良。十分欢送同学们应用函数计算,并提出贵重的意见。
相干链接
[1] 函数计算产品
https://fcnext.console.aliyun…
[2] HTTP 触发器
https://help.aliyun.com/docum…
[3] Custom Runtime/Custom Container Runtime
https://help.aliyun.com/docum…
[4] 下载行为
https://help.aliyun.com/docum…
[5] 调配的域名
https://help.aliyun.com/docum…
[6] 自定义域名
https://help.aliyun.com/docum…
点击 此处,返回函数计算官网查看更多!