在两分钟内部署Twilio免备案高仿服务器服务器功能

 高防服务器     |      2019-09-28 10:20:29

 

  如果您习惯使用免备案高仿服务器框架,则无需学习新的API。您可以继续使用免备案高仿服务器框架来控制Twilio通信!

  在两分钟内部署Twilio免备案高仿服务器功能

  从免备案高仿服务器CLI开始v1.50.0,您可以使用单个命令来引导Twilio Runtime项目。在这篇文章中,您将学习如何做。

  确保已全局安装了免备案高仿服务器CLI,并serverless create与Twilio Node.js模板一起运行。

  serverless create -t twilio-nodejs -p my-twilio-project

  导航到新目录my-twilio-project并运行npm install。在部署新的免备案高仿服务器服务之前,需要进行身份验证。转到您的Twilio控制台并复制您的帐户凭据(帐户SID和Auth令牌)。

  将两个身份验证值定义为环境变量,并使用部署新项目serverless deploy。

  cd my-twilio-project

  npm install

  TWILIO_ACCOUNT_SID=AC... TWILIO_AUTH_TOKEN=a4... serverless deploy

  命令输出应如下所示。

  Serverless: Packaging service...

  Serverless: Excluding development dependencies...

  Serverless: twilio-runtime: Creating Service

  Serverless: twilio-runtime: Configuring "dev" environment

  Serverless: twilio-runtime: Creating 1 Functions

  Serverless: twilio-runtime: Uploading 1 Functions

  Serverless: twilio-runtime: Creating 1 Assets

  Serverless: twilio-runtime: Uploading 1 Assets

  Serverless: twilio-runtime: Waiting for deployment.

  Serverless: twilio-runtime: Waiting for deployment. Current status: building

  Serverless: twilio-runtime: Waiting for deployment. Current status: building

  Serverless: twilio-runtime: Waiting for deployment. Current status: building

  Serverless: twilio-runtime: Waiting for deployment. Current status: building

  Serverless: twilio-runtime: Setting environment variables

  Serverless: twilio-runtime: Activating deployment

  Serverless: twilio-runtime: Function available at: my-twilio-project-7724-dev.twil.io/hello/world

  Serverless: twilio-runtime: Asset available at: my-twilio-project-7724-dev.twil.io/assets/foo/example.jpg

  恭喜!just您刚刚部署了第一个Twilio Runtime服务,该服务能够使用免备案高仿服务器CLI来提供功能和资产。现在,公开显示在部署日志中的URL。

  Twilio运行时页面

  这是如何运作的?以及如何调整Twilio的功能以满足您的需求?让我们找出答案!

  免备案高仿服务器Twilio项目的文件结构

  该create命令创建了您需要的所有文件-准备部署。它包括以下内容:

  .rw-r--r-- .gitignore

  .rw-r--r-- example.jpg

  .rw-r--r-- handler.js

  drwxr-xr-x node_modules

  .rw-r--r-- package-lock.json

  .rw-r--r-- package.json

  .rw-r--r-- serverless.yml

  您会看到熟悉的serverless.yml配置文件,package.json和和package-lock.json,函数(handler.js)和资产文件(example.jpg)。

  该项目只有一个内部定义的NPM的依赖package.json:@ twilio-实验室/免备案高仿服务器-twilio运行时。您已经安装了此依赖项,如果现在查看serverless.yml,您会看到它定义@twilio-labs/serverless-twilio-runtime为插件。

  # serverless.yml

  plugins:

  - '@twilio-labs/serverless-twilio-runtime'

  该插件定义使得可以部署到Twilio运行时。

  但是,serverless.yml与插件定义相比,它们拥有更多的配置。它还配置运行时,并提供一种定义和部署免备案高仿服务器功能和资产的快速方法。

  常规配置

  免备案高仿服务器服务的主要配置在provider属性内部进行。在这种情况下,Twilio是提供者。

  您具有以下配置选项:

  身份验证(必填)

  依赖

  部署环境的名称

  在函数内部可访问的环境变量

  让我们一一介绍这些选项。

  使用Twilio对免备案高仿服务器服务进行身份验证

  要将功能部署到Twilio运行时,您必须定义accountSid和authToken。您可能会在自己中serverless.yml对这些值进行硬编码,但建议通过环境变量(${env:TWILIO_ACCOUNT_SID}和${env:TWILIO_AUTH_TOKEN})传递这些值。这样,您就不必冒险将明智的凭据推送到GitHub。

  # serverless.yml

  provider:

  name: twilio

  # Auth credentials which you'll find at twilio.com/console

  config:

  accountSid: ${env:TWILIO_ACCOUNT_SID}

  authToken: ${env:TWILIO_AUTH_TOKEN}

  上面的配置是该命令TWILIO_ACCOUNT_SID=AC… TWILIO_AUTH_TOKEN=a8… serverless deploy起作用的原因。该serverless命令选择环境变量并将其传递给Twilio Runtime插件。

  定义所需的npm依赖项

  如果您有使用Serverless Framework的经验,则可能会习惯于将依赖项打包到一个捆绑包中。Twilio运行时以不同的方式处理依赖关系。

  该deploy命令不需要将所有本地依赖项打包到单个程序包中进行上传。Twilio运行时允许您定义依赖关系,而您只需要上载函数和资产文件。其余的一切正常!

  看一下serverless.yml,您会看到bootstrap项目具有一个依赖项– asciiart-logo。package.json依赖项的定义与依赖项定义相似。

  # serverless.yml

  provider:

  # Twilio runtime as your preferred provider

  name: twilio

  # Dependency definitions similar

  # to dependencies in a package.json

  # -> these dependencies will be available in the

  # Twilio Node.js runtime

  dependencies:

  asciiart-logo: '*'

  现在const logo = require('asciiart-logo');,您可以在函数文件中包括该依赖项。

  定义您的环境

  如果您严重依赖免备案高仿服务器功能,则会发现自己迅速面临越来越复杂的问题。为了解决这种复杂性,您可以在生产之前安全地部署质量保证和过渡环境以测试您的功能。

  该environment属性使您可以将不同的环境部署到Twilio运行时。

  provider:

  # Twilio runtime as your preferred provider

  name: twilio

  # Twilio runtime supports several domains

  # your functions and assets will be available under

  # -> defaulting to 'dev'

  environment: ${env:TWILIO_RUNTIME_ENV, 'dev'}

  该environment属性也是默认值dev,您可以通过环境变量进行更改TWILIO_RUNTIME_ENV。

  部署的Twilio函数URL由服务名称,随机散列和定义的环境组成。端点URL my-twilio-project-7724-dev.twil.io/hello/world告诉您您正在服务中dev包含的环境中查看功能my-twilio-project。

  定义可访问的环境变量

  在将功能部署到Twilio运行时时,您可能还需要一种方法来定义在功能上下文中可用的变量。这些环境变量可以方便地存储其他服务的身份验证令牌,定义使用的端点或任何动态值。

  该environmentVars属性使您可以定义这些值。context当您执行函数时,它们将在属性中可用。

  # serverless.yml

  provider:

  # Twilio runtime as your preferred provider

  name: twilio

  # Environment variables passed to your functions

  # available via process.env

  environmentVars:

  MY_MESSAGE: 'This is cool stuff'

  以上provider属性是您根据用例定制功能部署所需的所有配置!但是功能定义在哪里以及如何部署资产?

  定义你的功能

  您可以通过在中编辑functions属性来定义和配置功能serverless.yml。当您查看它时,已经定义了一个功能。

  每个函数定义必须导出a handler,如下所示:

  exports.handler = function(context, event, callback) { /* … */ };

  该function属性告诉Serverless使用handlers.js,使其可用于/hello/world并使其可公开访问。

  # serverless.yml

  functions:

  hello-world:

  # Path to the JS handler function in the project (without file extension '.js')

  handler: handler

  # URL path of the function after deployment

  path: /hello/world

  # visibility of the function (can be "public" or "protected")

  access: public

  您可以在docs中阅读有关Twilio函数的更多信息。

  定义您的资产

  Twilio运行时允许您通过assets属性上载资产。您可以在部署的功能内部访问这些资产。如果您想播放音频文件或想对带有特定图像的消息进行响应,则资产和功能的组合会变得很方便。

  resources:

  assets:

  # Asset name

  example-image:

  # path to the asset in the project

  filePath: example.jpg

  # URL path to the asset after deployment

  path: /assets/foo/example.jpg

  # visibility of the asset

  access: public

  要了解有关如何在函数中使用资产的更多信息,请查看docs。

  使用这些功能和资产定义,您可以在短短几分钟内部署新服务。