Ruby 在阿里云函数计算上部署 Sinatra

wangjianxing · September 08, 2023 · 1195 hits

阿里云的函数计算是什么

  • 阿里云的函数计算类似于 aws 上的 lambda,按 CPU、内存、调用次数等等的使用量付费
  • 支持的部署方式:控制台、Serverless Devs、SDK
  • ruby 的话目前的话是通过 Custom Runtime 来支持,内置的 ruby 版本是 2.7

部署步骤(控制台方式)

  1. 阿里云函数计算 FC 控制台->服务及函数->创建服务
  2. 创建成功点击进入服务,开始创建函数

    选择 使用自定义运行时创建,

    请求处理程序类型选择 处理 HTTP 请求,

    运行环境选择 Ruby 自定义运行时 Debian 9,

    代码上传方式选择 使用示例代码,

    启动命令留空,我们用 bootstrap 启动,端口写 4567,

    这样点击创建后,就跳转到函数的 web IDE(像 vscode) 里了

  3. Terminal 菜单上 new terminal

  4. 代码部分

bundle init 生成个 Gemfile

Gemfile 加上 sinatra,我试图用 gem sources 添加 ruby-china 的源,但 bundle install 没有成功,原因不明,所以直接把 Gemfile 里的 source 改了。

  # Gemfile
  # frozen_string_literal: true

source "https://gems.ruby-china.com"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

ruby "2.7.0"

# gem "rails"
gem 'sinatra'
# gem 'puma'

接着开始 bundle install,非常重要,这里必须将用到的依赖库 gem 也一并打包了 (另一个方法就创建层,这样可以使用公用 gem,我没试过,这里就不说了)

bundle install --path vendor/bundle

安装完成后再建个 bootstrap 文件(注意:没有后缀名)用于启动,执行 chmod 755 bootstrap、chmod 777 bootstrap 或 chmod +x bootstrap 赋予文件的可执行权限。

# bootstrap
#!/bin/bash

bundle exec ruby server.rb -o 0.0.0.0 -e production

建完后,修改权限

chmod 755 bootstrap

再把 server.rb 文件改改

# server.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

然后点击按钮 部署代码 就可以成功部署了

5、访问验证

最后再检查下函数的 触发器管理 有没有创建了 HTTP 类型的触发器,看看设置是否没问题。 这样就可以 访问触发器的公网访问地址,看看是否返回 hello world

curl https://sendxxx-service-fkhamynmsx.cn-guangzhou.fcapp.run

这样整个部署过程就完成了,一个 hello world 小服务就可以访问了。

注意要点

  • HTTP 触发器认证方式选择 无需认证
  • 如果要使用 HTTP 触发器的其他认证方式,签名验证没有官方 sdk,使用 JWT(gem 'jwt')会比较简单
  • 其他 ruby 版本目前我也不知道怎么弄
  • gem sources 设置无效,选择在 Gemfile 把源 直接 改成 gems.ruby-china.com
  • bootstrap 里记得加 -o 0.0.0.0 如果 host 不设置 0.0.0.0 的话,请求会超时,port 设置里也有说明;并且记得执行 chmod 755 bootstrap 赋予文件的可执行权限,否则会有权限问题
  • 每个函数是可以设置环境变量的

参考

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.