Serverless入门

Serverless顾名思义就是无服务器,但并不是不再需要用到服务器,而是依赖第三方应用程序或服务来管理业务应用程序。

在云服务商出现之前,创业公司想在互联网上发布自己的产品,需要经历以下内容:

  1. 编写业务程序
  2. 购买硬件设备
  3. 安装相关系统
  4. 搭建运行环境
  5. 接入专用宽带

云服务商出现后,我们可以在网上租赁服务器,不再需要考虑硬件设备、接入宽带的问题;而serverless的到来,解决了运行环境的问题,使得我们只需专注于自身的业务,不再需要考虑运行环境等问题,大大降低了各种成本。

传统架构

传统架构模式下,负载均衡、服务环境、业务逻辑等,都需要有专门的人员来负责。

Serverless架构

Faas(Function as a service):开发者不需要了解服务环境,只需要会写业务逻辑,并且把这些业务逻辑写成一个个function即可。

Baas(Backend as a service):当我们不能让所有的东西都以function的方式去运作的时候,使用第三方的后端套件,如直播服务、人脸识别等。

Hello world!

接下来将使用laravel编写一个hello world的例子,放到腾讯云的云函数上。

创建laravel项目

composer create-project --prefer-dist laravel/laravel serverless-laravel

routes/web.php中添加一条路由:

Route::get('hello', function () {
    return view('hello');
});

resources/views下新建一个hello.blade.php文件,并输出内容:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1>Hello world!</h1>
</body>
</html>

确认能够看到输出的内容:http://localhost/serverless-laravel/public/hello

配置项目

由于云函数在执行时,只有/tmp是可读写的,所以我们需要将laravel框架运行时的storage目录写到该目录下,为此需要修改bootstrap/app.php文件,在$app = new Illuminate\Foundation\Application后添加:

$app->useStoragePath($_ENV['APP_STORAGE'] ?? $app->storagePath());

然后在根目录下的.env文件中新增如下配置:

# 视图文件编译路径
VIEW_COMPILED_PATH=/tmp/storage/framework/views

# 由于是无服务函数,所以没法存储 session 在硬盘上,如果不需要 sessions,可以使用 array
# 如果需要您可以将 session 存储到 cookie 或者数据库中
SESSION_DRIVER=array

# 建议将错误日志输出到控制台,方便云端去查看
LOG_CHANNEL=stderr

# 应用的 storage 目录必须为 /tmp
APP_STORAGE=/tmp

注意:以上配置仅在部署项目时用到,本地开发时需要注释掉。

部署项目

安装serverless-cli:

npm install -g serverless

在项目根目录创建serverless.yml文件:

MyComponent:
  component: "@serverless/tencent-laravel"
  inputs:
    region: ap-guangzhou 
    functionName: serverless-laravel
    code: ./
    functionConf:
      timeout: 10
      memorySize: 128
      environment:
        variables:
          TEST: vale
      vpcConfig:
        subnetId: ''
        vpcId: ''
    apigatewayConf:
      protocol: https
      environment: release

执行sls命令部署,添加--debug参数可以查看部署过程中的信息:

sls --debug

这样就部署成功了,可以访问线上地址看到效果。
查看上传的项目信息:https://console.cloud.tencent.com/scf/list?rid=1&ns=default
查看&配置网关服务:https://console.cloud.tencent.com/apigateway/service?rid=1

测试项目

如果只是想测试线上环境,不想直接发布项目,可以把serverless.yml最后的environment: release改为test(测试)或prepub(预发布),默认情况下在域名后面加上/test/prepub来看到测试效果。

删除项目

sls remove --debug

自定义域名

现在项目已经能够通过外网访问了,但是默认提供的域名略长,不利于做宣传,我们可以使用自己的域名进行替换,但必须是已备案过的域名。

首先去到域名解析页面,添加一条记录:

记录类型选择CNAME,记录值填API网关默认域名(不需要填协议、协议和端口)。除此之外,还需要去到API网关进行配置:

协议可以根据自己需要选择。默认路径映射的发布环境要在域名后面加上/release才能访问,因此选择自定义路径映射会更好一些。

加入对话

2条评论

留下评论

邮箱地址不会被公开。 必填项已用*标注

给博主打赏

2元 5元 10元