引言
Serverless 架构已经成为了云计算领域的热门话题,作为一种新型的应用架构模式,它通过将应用程序的开发、部署和运行过程从基础设施中抽象出来,进一步降低了应用程序的开发和运维成本。在这个领域,Serverless Framework 作为一个开源的项目,已经在国内外的开发者中广泛应用。本文将会介绍如何使用 Serverless Framework 在 Azure 上构建无服务器应用,包括使用 Azure Functions 和 Azure Storage 创建无服务器函数、使用 Azure Active Directory 进行身份验证、以及构建简单的 RESTful API 等。
准备工作
在开始构建我们的无服务器应用之前,我们需要先进行准备工作,包括:
- 安装 Node.js
- 在 Azure 上创建一个资源组,并创建以下资源:
- Azure Functions 应用程序
- Azure Storage 账户
- Azure Active Directory 应用程序
创建无服务器函数
Azure Functions 是一个无服务器计算平台,它可以让开发者使用多种语言(包括 C#、JavaScript、Python 等)来创建和部署无服务器函数。下面我们将用 Serverless Framework 和 JavaScript 语言来创建一个简单的无服务器函数。
步骤一:安装 Serverless Framework
运行以下命令安装 Serverless Framework:
npm install -g serverless
步骤二:创建 Serverless 应用程序
运行以下命令创建一个新的 Serverless 应用程序:
serverless create --template azure-nodejs --path my-app
步骤三:配置 Azure 账户
运行以下命令配置 Azure 账户信息:
cd my-app serverless config credentials --provider azure --subscriptionId <subscriptionId> --tenantId <tenantId> --clientId <clientId> --clientSecret <clientSecret>
其中,subscriptionId
、tenantId
、clientId
和 clientSecret
是 Azure Active Directory 应用程序的相关信息。
步骤四:配置 Serverless 应用程序
打开 serverless.yml
文件,将以下代码添加到文件末尾:
-- -------------------- ---- ------- ---------- ------ -------- ------------- ------- - ----- ---- ----------------- -------- - --- - ---- ---------- ---------
该代码定义了一个名为 hello
的 Azure Function,该 Function 的入口函数是 handler.hello
,并可以通过 HTTP GET 或 POST 请求来触发。
步骤五:部署无服务器函数
运行以下命令将无服务器函数部署到 Azure Functions:
serverless deploy
部署完成后,您可以在 Azure Portal 中找到您创建的函数应用程序,并测试您的函数是否能够正常运行。
使用 Azure Active Directory 进行身份验证
在实际的应用中,我们通常需要使用身份验证来保护我们的资源免受未经授权的访问。Azure Active Directory 是 Azure 的一种身份认证服务,它可以帮助我们实现一些常见的身份认证和授权方案。下面我们将介绍如何使用 Serverless Framework 和 Azure Active Directory 在我们的函数应用程序中添加身份验证。
步骤一:创建一个 Azure Active Directory 应用程序
打开 Azure Portal,进入 Azure Active Directory 服务,创建一个新的 App registration。在 App registration 中创建一个新的 Web 应用程序,并记录下其 Application ID 和 Client secret。
步骤二:安装依赖包
运行以下命令安装依赖包:
npm install --save @azure/ms-rest-nodeauth
步骤三:配置函数应用程序
打开 serverless.yml
文件,将以下代码添加到 hello
Function 中:
-- -------------------- ---- ------- ---------- ------ -------- ------------- ------- - ----- ---- ----------------- -------- - --- - ---- ---------- --------- ------ ----- ----------------- ----- ----- --- --------- ---------- ------------- -------------- --------- ---------- --------- ----------
其中,<clientId>
、<clientSecret>
和 <tenantId>
为您在步骤一中创建的 Azure Active Directory 应用程序的相关信息,而 <audience>
为您创建的 Web API 的域名或者 IP 地址。
步骤四:在函数代码中添加认证
打开 handler.js
文件,在 context.res
前添加以下代码:
-- -------------------- ---- ------- ----- -------------- - ----------------------------------- ----- -------- --------------------- - ----- -------- - ------------------------------------------- ----- ------- - ----- ----------------------------------------------- ---------------------------------------- -------------------------------------------- --------------------------------------- -- ----- ----- - --- -------------------------------------- -------- ---------------------------------------- -------- -- ------ ------- ------- ------------------- - -------------- - - ----- -------------- - ----- ----- - ----- ---------------------- ----------- - - ------- ---- -------- - -------------- ----- -- ----- - -------- ------ ------- - -- - --
当请求进入 hello
Function 时,我们调用 authenticate
函数来获取 Azure Active Directory 中的令牌,将其添加到请求头中并返回结果。
步骤五:重新部署函数应用程序
运行以下命令重新部署函数应用程序:
serverless deploy function -f hello
构建一个简单的 RESTful API
Serverless Framework 可以帮助我们轻松构建基于 API 的应用程序。下面我们将展示如何使用 Serverless Framework 和 Azure Functions 来构建一个简单的 RESTful API。
步骤一:创建一个新的 Function
运行以下命令创建一个新的 Function:
serverless create function --template azure-nodejs --name example --path api/example
步骤二:在 Function 中添加路由
打开 serverless.yml
文件,添加以下代码到您创建的 Function 下:
-- -------------------- ---- ------- ---------- -------- -------- ------------------------- ------- - ----- ----- --- ------ ----------- - ----- ----- --- ------ ----------------
该代码添加了两个 HTTP GET 请求路由,分别对应 /api/example
和 /api/example/{id}
。其中,{id}
是一个动态路由参数,我们将在实现 GET 请求时使用该参数。
步骤三:在 Function 中实现 API
打开 api/example/index.js
文件,编写以下代码:
-- -------------------- ---- ------- -------------- - - ----- ---------------- - ----- - -- - - -------------------- --- ----- -- ---- - ---- - - --- -------- ------ ------- -- - ---- - ---- - -- --- -- -------- ------ ------- --- - ----------- - - ------- ---- ----- ---- -- - --
在该代码中,我们返回了一些示例数据,如果 URL 中带有 {id}
参数,我们将返回对应的数据。否则,我们将返回所有数据。
步骤四:测试 API
运行以下命令部署和测试您的 API:
serverless deploy
在部署完成之后,您可以使用任何 HTTP 客户端工具,例如 Postman 或 cURL 来测试您的 API。
总结
本文介绍了如何使用 Serverless Framework 在 Azure 上构建无服务器应用。通过该文章的学习,您已经掌握了如何使用 Azure Functions 和 Azure Storage 创建无服务器函数、使用 Azure Active Directory 进行身份验证以及构建简单的 RESTful API 等。当然,Serverless 架构是一种新型应用架构模式,仍然存在很多问题和挑战,但我们相信,通过不断探索和尝试,我们能够将它应用到更多场景中,极大地提高我们的开发效率和应用的可用性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649b975248841e989485a74d