共计 2709 个字符,预计需要花费 7 分钟才能阅读完成。
简介:解锁客户不批改代码部署存量 REST、网页利用场景,解决客户函数调用返回 404 问题,反对规范的网关产品与开源组件集成函数计算。
作者 | 阿里云 Serverless 技术研发 落语
背景
阿里云函数计算产品在较早的时候反对了 HTTP 触发器能力,反对用户应用 HTTP 协定进行函数调用。函数计算后端通过一个共享的 APIServer 组件对所有客户提供响应 HTTP 触发器调用的服务,须要依赖 URL 中的 Path 将客户流量路由到客户的函数容器外部。容器内收到的 HTTP 申请 Path 会带有函数计算的路由标识,如果客户在函数计算部署 REST 格调的利用,那么就会遇见 404 问题。
在一开始,函数计算并不是为客户运行中小型规模利用而设计的。函数计算提供了原生的 REST 架构,将每个函数视为一个独立的资源,通常一个函数只负责一小块性能,也就是一个 API。如果一个函数只对应一个 API,那么在函数代码中也不用去实现一套路由逻辑去响应不同 URL Path 门路的申请了。
函数计算在近两年引入了 Custom Runtime/Custom Container Runtime 类型的函数,客户能够间接在函数计算上运行本人存量的利用,而不用依照函数计算举荐的架构去拆分本人的利用。客户以及社区内比拟成熟的我的项目的开发习惯是采纳 MVC 等架构,在一个程序中开发大量的 REST API,在过程内依照报文中的 HTTP Path 进行路由,将不同门路的申请“转发”至不同的办法或函数进行解决。
在这样的背景下,客户能够在函数计算运行存量的 REST 利用,但利用无奈失常对外提供服务。客户破费大量的精力对存量的利用进行革新,而且这个革新仅仅在函数计算是必须的,是一种典型的平台携裹用户的产品设计。
应用 fcapp.run 调用函数
为了解决上述的问题,并兼容存量的函数以及客户习惯,函数计算为每个新创建的 HTTP 触发器调配了一个独立的域名,例如{random-string}.cn-shanghai.fcapp.run
。应用该域名拜访函数计算,函数计算会依照域名进行路由,将流量转发至函数容器内,防止对客户代码造成侵入性。
应用 fcapp-test.run 进行本地网页测试
因为中国大陆政策的影响,函数计算主域名无奈在互联网为客户提供网站类型的业务,所有的函数申请后果将被转为下载行为。对于纯 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 函数性能
查看创立的触发器调配的域名,依照上述文档配置,应用 fcapp-test.run 域名进行测试。
上线你的函数
对外提供网站类型服务只能通过已备案域名来实现。函数计算用户能够通过配置自定义域名的性能,将域名与函数进行绑定,应用本人的域名对外提供服务。同时也能够应用任意规范的网关类型的云产品或者开源产品,应用 fcapp.run 的内网域名上线你的函数。
小结
作为 Serverless 技术的标志性产品之一,函数计算长久以来专一于晋升产品实用的场景。fcapp.run 域名以及相干产品个性的引入,标记着函数计算在 REST 场景以及 Web 场景的很大一步。客户从此能够将 REST 利用零革新地部署在函数计算上,研发测试的体验以及正式上线的计划都做到了优良。十分欢送同学们应用函数计算,并提出贵重的意见。
原文链接
本文为阿里云原创内容,未经容许不得转载。