Serverless Cloud Function 开发实践

2020-06-15 02:58:21 浏览数 (1)

本文将讲述如何使用 Serverless Cloud Function 开发语言翻译工具。


SCF简述

腾讯云云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。

备注:已注册腾讯云账户。若未注册腾讯云账户,可 点此 进入注册页面。

申请腾讯云“机器翻译”

在腾讯云官网“云产品”列表中点击选择“自然语言处理”的“机器翻译”,点击选择“免费试用”,如下图所示:

“机器翻译”界面“机器翻译”界面

获取 SecretId 和 SecretKey

点击控制台界面右上角“头像”的“账号信息”,进入账号中心界面后,点击“访问管理”进入访问管理界面。

查看“访问密钥”便签下的“API密钥管理”界面,若没有生成过 API 密钥,则点击“新建密钥”按钮生成密钥。

“API密钥管理”界面“API密钥管理”界面

机器翻译 API 的调用

代码如下:

代码语言:txt复制
const tencentcloud = require("tencentcloud-sdk-nodejs");
const TmtClient = tencentcloud.tmt.v20180321.Client;
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;
// 此处填写上面获取到的 SecretId 和 SecretKey
const SecretId = 'XXXXXXXX';
const SecretKey = 'XXXXXXXX';

let cred = new Credential(SecretId, SecretKey);
let httpProfile = new HttpProfile();
httpProfile.endpoint = "tmt.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new TmtClient(cred, "ap-guangzhou", clientProfile);

client.TextTranslate({
    SourceText: 'hello, world.',
    Source: 'en',
    Target: 'zh',
    ProjectId: 0,
}, function (errMsg, response) {
    if (errMsg) {
        console.error(errMsg);
    } else {
        console.log(response);
    }
});

申请腾讯云云函数

在腾讯云官网“云产品”列表中点击选择“Serverless”的“云函数”

“云函数”界面“云函数”界面

创建函数服务

点击“函数服务”进入函数服务界面,如下图所示:

“函数服务”界面“函数服务”界面

基本信息填写页面

点击“新建”按钮,选择“Nodejs”运行环境,创建“空白函数”,如下图所示:

“函数服务 - 基本信息”“函数服务 - 基本信息”

函数配置填写页面

点击“下一步”按钮,进入“函数配置”界面,如下图所示:

“函数服务 - 函数配置”“函数服务 - 函数配置”
配置 package.json 文件

在“Cloud Studio”编辑界面的文件目录单击“右键”选择“新建文件”按钮生成“package.json”文件(点击Enter键生成)

配置 package.json 文件配置 package.json 文件

输入如下代码:

代码语言:txt复制
{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "tencentcloud-sdk-nodejs": "^3.0.187"
  }
}
配置 index.js 文件

删除 index.js 原有的代码,将下面代码复制上去。

注意: 需要填写上面获取到的 SecretId 和 SecretKey,“机器翻译” API 调用需要用到。

代码语言:txt复制
'use strict'
const tencentcloud = require("tencentcloud-sdk-nodejs");
const fs = require('fs')
const path = require('path')

const TmtClient = tencentcloud.tmt.v20180321.Client;
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;

const SecretId = 'XXXXXXXXXX';
const SecretKey = 'XXXXXXXXXX';

let cred = new Credential(SecretId, SecretKey);
let httpProfile = new HttpProfile();
httpProfile.endpoint = "tmt.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new TmtClient(cred, "ap-guangzhou", clientProfile);

const textTranslate = (params) => {
    return new Promise((resolve, reject) => {
        client.TextTranslate(params, function (errMsg, response) {
            if (errMsg) {
                reject(errMsg);
            } else {
                resolve(response);
            }
        });
    });
}
const render = (tpl, variables) => {
    for (let key in variables) {
        const reg = new RegExp('\$\{'   key   '\}', 'g')
        tpl = tpl.replace(reg, variables[key])
    }
    return tpl;
};

exports.main_handler = async (event, context, callback) => {
    const query = event.queryString || {};
    const sourceText = query.q;

    let res = await textTranslate({
        SourceText: sourceText,
        Source: 'en',
        Target: 'zh',
        ProjectId: 0,
    });
    res.SourceText = sourceText;

    let html = fs.readFileSync(path.resolve(__dirname, './index.html'), {
        encoding: 'utf-8'
    });
    html = render(html, res);

    return {
        isBase64Encoded: false,
        statusCode: 200,
        headers: { 'Content-Type': 'text/html' },
        body: html
    }
}
配置 index.html 文件

在“Cloud Studio”编辑界面的文件目录单击“右键”选择“新建文件”按钮生成“index.html”文件(点击Enter键生成)

配置 index.html 文件配置 index.html 文件

输入如下代码:

代码语言:txt复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>腾讯云-机器翻译</title>
  <style>
    table{
      width: 100%;
      text-align: center;
    }
  </style>
</head>
<body>
  <table border="1">
    <tr>
      <th>语言种类</th>
      <th>文字信息</th>
    </tr>
    <tr>
      <td>${Source}</td>
      <td>${SourceText}</td>
    </tr>
    <tr>
      <td>${Target}</td>
      <td>${TargetText}</td>
    </tr>
  </table>
</body>
</html>

上传方式选择“在线安装依赖”,点击“完成”按钮。

函数服务函数服务

至此,我们就创建好了云函数的函数服务。

使用 API 访问

点击“触发管理”进入触发管理界面,点击“创建触发器”按钮,如下图所示:

“触发管理”界面“触发管理”界面

触发方式选择“API网关触发器”,勾选“启用集成响应”。点击“提交”按钮,即生成“API网关触发器”。

“触发管理 - API网关触发器”“触发管理 - API网关触发器”

如上图所示的“访问路径”即接口地址。

访问云函数的语言翻译 API

访问接口查询“hello, world.”的翻译:

https://service-2fihgccs-1253513412.gz.apigw.tencentcs.com/release/hello-world?q=hello, world.

hello, world.hello, world.

访问接口查询“Life is short and you deserve to be happy.”的翻译:

http://service-2fihgccs-1253513412.gz.apigw.tencentcs.com/release/hello-world?q=Life is short and you deserve to be happy。

Life is short and you deserve to be happy.Life is short and you deserve to be happy.

参考资料

  • 腾讯云-云函数文档
  • 腾讯云-机器翻译文档

0 人点赞