函数计算支持为每个新创建的HTTP触发器分配子域名fcapp.run
,通过该域名可以访问您的RESTful应用。本文介绍如何在不修改代码的情况下,使用fcapp.run
访问您的RESTful应用。
背景信息
函数计算支持HTTP触发器,即支持使用HTTP协议进行函数调用。函数计算通过一个共享的API Server组件为您提供响应HTTP触发器调用的服务,需要依赖URL中的Path将客户流量路由到客户的函数容器内部。容器内收到的HTTP请求Path会带有函数计算的路由标识,如果您在函数计算部署了RESTful风格的应用,则会出现404报错。

最初,函数计算提供了原生的RESTful架构,将每个函数视为一个独立的资源,通常一个函数只负责一小块功能,也就是一个API。如果一个函数只对应一个API,那么在函数代码中也不必去实现一套路由逻辑去响应不同URL Path路径的请求。

函数计算现已引入Custom Runtime和Custom Container函数,您可以直接在函数计算中运行自己存量的应用,而不必按照函数计算推荐的架构去拆分自己的应用。社区内比较成熟的项目的开发习惯是在一个程序中开发大量的REST API,因此会存在进程内的路由逻辑,将不同路径的请求转发到不同的方法进行处理。

使用fcapp.run调用函数
为了解决以上问题,函数计算为每个新创建的HTTP触发器分配了一个独立的域名,格式为{random-string}.{region_id}.fcapp.run
,如下图所示。使用该域名访问函数计算时,函数计算会按照域名进行路由,将流量转发至函数容器内,避免了依赖Path进行路由而对客户代码造成的侵入性。

使用fcapp-test.run进行本地网页测试
函数计算的主域名aliyuncs.com
无法为客户提供网站类型的业务,所有的函数请求结果将在浏览器中以附件的方式下载,对于网站属性的函数,返回的HTML文本以及JavaScript代码无法正常显示。此时,您可以通过为函数绑定已备案的自定义域名来解决该问题。更多信息,请参见使用限制。
您也可以通过测试域名fcapp-test.run
以及添加本地的host解析的方式来解决以上问题,请求结果将不会以附件的方式下载,可以正常进行网页调试。示例脚本如下:
# 1. 从页面获取fcapp.run的域名
FC_DOMAIN='serviceName-functionName-vtnazzbxrr.cn-hangzhou.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}"
使用函数计算运行WordPress官方镜像
函数计算支持您在不修改任何业务代码的前提下迁移自己的RESTful应用。下面以迁移WordPress应用为例进行说明。
前提条件
- 函数计算
- 云数据库RDS
说明 您也可以使用已有RDS MySQL实例,并为WordPress服务初始化响应的账号以及数据库。
- 容器镜像服务
- 转存WordPress镜像到阿里云容器镜像。具体信息,请参见推送拉取镜像。
说明 支持个人版和企业版实例推送拉取镜像,本文以个人版实例为例进行说明。