主页 > 知识库 > 使用无服务器框架构建应用, AWS, 和大查询

使用无服务器框架构建应用, AWS, 和大查询

热门标签:购电话机器人注意事项 阳泉外呼系统开发票内容写什么 通州区地图标注app 美团快捷酒店地图标注 哪里有电销外呼系统 土巴兔智能外呼系统 常州电销外呼系统产品介绍 办理400电话哪家质量好 能插电话线的电销机器人
摘要

最后修改:2个个7/01/2021阅读时间:无服务器是指由云提供商管理和分配服务器和资源的应用程序。这意味着云提供商将动态分配资源。该应用程序在可以由事件触发的无状态容器中运行。上面的一个示例以及我们将在本文中使用的示例都是关于AWS拉姆达。简而言之,我们可以将“无服务器应用程序”确

最后修改: 2个个7/01/2021 阅读时间:

无服务器是指由云提供商管理和分配服务器和资源的应用程序。 这意味着云提供商将动态分配资源。 该应用程序在可以由事件触发的无状态容器中运行。 上面的一个示例以及我们将在本文中使用的示例都是关于 AWS 拉姆达

简而言之, 我们可以将“无服务器应用程序”确定为基于事件的基于云的系统的应用程序。 该应用程序依赖第三方服务, 客户端逻辑, 和远程呼叫(直接调用它 服务功能)。

无服务器框架是一个开放源代码框架。 它由命令行界面或CLI和托管的仪表板组成, 为我们提供了一个完全无服务器的应用程序管理系统。 使用框架可确保更少的开销和成本, 快速开发和部署, 并保护无服务器应用程序。

在继续安装无服务器框架之前, 您必须先设置节点JS。 在大多数操作系统上,该操作非常容易-您只需访问节点JS官方网站即可下载并安装。 请记住选择高于6的版本。0。0。

安装后, 您可以通过在控制台中运行来确认NodeJS可用。 它应该返回您已安装的节点版本:

您现在可以出发了, 因此,继续安装无服务器框架。

为了做到这一点, 请按照文档设置和配置框架。 如果你比较喜欢, 您只能为一个项目安装它, 但是在DevriX, 我们通常在全球范围内安装框架:

等待该过程完成,并通过运行以下命令来确保Serverless已成功安装:

在继续创建示例应用程序之前, 您应该在中创建一个帐户 亚马逊AWS。 如果您还没有, 就像去Amazon AWS并单击 “创建一个AWS账户” 在右上角,然后按照以下步骤创建帐户。

亚马逊要求您输入信用卡, 因此,您必须输入相应的信息才能继续操作。 成功注册和登录后,您应该看到AWS管理控制台:

伟大的! 现在开始创建您的应用程序。

在这一步中 我们必须使用AWS提供程序配置无服务器框架。 某些服务(例如AWS 拉姆达)在访问凭据时需要凭据,以确保您拥有该服务拥有的资源的权限。 AWS建议使用AWS Identity 和 Access M一个ager(我是)来完成此任务。

所以, 首先也是最重要的是创建一个 我是 用户AWS 在我们的应用程序中使用它:

在AWS控制台上:

  • 类型 IAM 在里面 “查找服务” 场地。
  • 点击 “我是”
  • “用户”
  • 点击 “添加用户”

为了 “用户名” 使用任何您想要的。 例如, 我们正在使用 无服务器管理员。 为了 ”访问类型” 查看 “程序访问” 然后点击 “下一个权限”。

在那之后, 我们必须为用户附加权限, 点击 “直接附加现有政策,” 搜索 “管理员访问权限” 然后单击它。 继续点击 “下一个标签”

标签是可选的, 因此您可以点击 “下次点评”“创建用户”。 完成并加载后, 页面上会显示一条成功消息,其中包含我们所需的凭据。

现在我们必须运行以下命令:

代替 钥匙秘密 与上面提供的一个。 您的AWS凭证已创建为配置文件。 您可以通过打开 ?/。AWS /凭证 文件。 它应包含AWS配置文件。 目前, 在下面的示例中, 这只是我们创建的一个:

到目前为止做得好! 您可以继续使用以下方法创建一个示例应用程序 NodeJS 以及内置的启动模板。

笔记: 此外, 在文章中 我们正在使用命令, 这是的缩写。
创建一个空目录并输入。 运行命令

使用 创建–模板 命令指定可用模板之一, 在这种情况下, aws-nodejs, 这是一个 NodeJS “ Hello world”模板应用程序。

完成后, 您的目录应包含以下内容, 看起来像这样:

我们已经创建了新文件 处理程序。js无服务器。yml

处理程序。js 文件存储您的功能, 和 无服务器。yml 存储您稍后将更改的配置属性。 如果您想知道 。yml 文件是 简而言之, 它是一个 可读数据序列化语言。 熟悉它是一件好事, 因为在插入任何配置参数时使用它。 但是,让我们看一下我们所拥有的 无服务器。yml 立即提交:

服务:aws-sample-applic在ion
提供者:
  名称:aws
  运行时:nodejs12。X
功能:
  你好:
    处理程序:处理程序。你好
  • 服务: –我们的服务名称。
  • 提供者: –包含提供程序属性的对象, 正如我们在这里看到的 我们的提供商是AWS, 并且我们正在使用NodeJS运行时。
  • 功能: –该对象包含可部署到拉姆达的所有功能。 在这个例子中 我们只有一个命名为 你好 指向 处理程序。js 你好函数。

在继续部署应用程序之前,您必须在这里做一件重要的事情。 早一点 我们使用配置文件为AWS设置凭证(我们将其命名为 无服务器管理员)。 现在您要做的就是告诉 无服务器 配置以使用该配置文件和您所在的区域。 打开 无服务器。yml 并在 提供者 在运行时下面的属性中输入以下内容:

概要文件:serverless-admin
地区:us-east-2

到底, 我们应该有这个:

提供者:
  名称:aws
  运行时:nodejs12。X
  概要文件:serverless-admin
  地区:us-east-2

笔记: 要获得该地区, 一种简单的方法是登录到控制台后查找URL:示例:

现在,我们有了有关生成的模板的必要信息。 让我们检查一下如何在本地调用该函数并将其部署到AWS Lambda。
我们可以通过在本地调用该函数立即测试该应用程序:

它调用函数(但仅在本地!), 并将输出返回到控制台:

现在, 如果一切顺利, 您可以尝试将功能部署到 AWS Lambda

所以, 这么复杂吗? 不, 不是! 非常感谢 无服务器框架 这只是一个单行代码:

等待一切完成, 可能要花几分钟 如果一切正常,您应该以以下内容结束:

现在,让我们检查一下AWS中发生了什么。 转到Lambda(在“查找服务“ 类型 Lambda), 你应该看到你的 Lambda 函数已创建。

现在,您可以尝试从AWS Lambda调用您的函数。 在终端类型

它应该返回与先前(当我们在本地测试时)相同的输出:

您可以通过在 AWS Lambda 然后转到“监控方式”标签,然后点击“在CloudWatch中查看日志。”。

您应该在那里有一个日志。

现在, 您的应用程序中仍然缺少一件事, 但是这是什么。。。? 出色地, 您没有端点可以访问您的应用, 因此,我们使用 AWS API网关。

你必须打开 无服务器。yml 归档并首先清除注释。 您需要添加一个 大事记 在我们的职能范围内 http 财产。 这说明了 无服务器框架 在部署应用程序时创建一个API网关并将其附加到我们的Lambda函数。 我们的配置文件应以以下结尾:

服务:aws-sample-application
提供者:
  名称:aws
  运行时:nodejs12。X
  概要文件:serverless-admin
  地区:us-east-2
功能:
  你好:
    处理程序:处理程序。你好
    事件:
      -http:
          路径:/ 你好
          方法:获取

http 我们指定路径和HTTP方法。
而已, 让我们通过运行再次部署我们的应用程序

完成后, 一个新的东西应该出现在输出终端中, 这就是已经创建的端点:

让我们打开端点:

您应该看到您的函数正在执行, 返回输出, 以及有关请求的一些信息。 让我们检查一下Lambda函数中发生了什么变化。

打开 AWS Lambda, 然后点击您的功能。

我们在“设计师”我们拥有的标签 API网关 附加到我们的Lambda和API端点。

伟大的! 您已经创建了一个超级简单的无服务器应用程序, 将其部署到AWS Lambda, 并测试了其功能。 还, 我们使用 AWS API网关

迄今为止, 我们知道我们可以在本地调用函数, 但是也, 我们可以使用serverless-offline插件离线运行整个应用程序。

该插件可在本地/开发计算机上模拟AWS Lambda和API网关。 它启动一个HTTP服务器,该服务器处理请求并调用您的处理程序。

要安装插件,请在应用目录中运行以下命令

然后在项目的 无服务器。yml 打开文件并添加 外挂程式 财产:

插件:
  -无服务器离线

配置应如下所示:

服务:aws-sample-application
提供者:
  名称:aws
  运行时:nodejs12。X
  概要文件:serverless-admin
  地区:us-east-2
功能:
  你好:
    处理程序:处理程序。你好
    事件:
      -http:
          路径:/ 你好
          方法:获取
插件:
  -无服务器离线

要检查我们是否已成功安装和配置插件运行

您应该看到以下内容:

现在,在您项目的根目录中, 运行命令

如你看到的, an HTTP 服务器正在监听端口3000, 您可以访问您的功能, 例如, 在这里,我们的hello函数具有http:// localhost:3000 / dev / hello。 首先,我们的回应与 API网关, 我们之前创建的。

到目前为止,您做得很好! 您使用Serverless拥有一个可以正常运行的应用程序。 让我们扩展我们的应用程序并添加 大查询 与其集成,以查看其工作方式以及集成方式。

大查询是一种无服务器的软件即服务(SaaS), 这是一种支持查询的经济高效且快速的数据仓库。 在我们继续将其与NodeJS应用集成之前, 我们必须创建一个帐户, 因此,让我们继续。

转到https:// cloud。谷歌。com并使用您的帐户登录, 如果您还没有,请创建一个帐户并继续。

当您登录到Google Cloud Console时, 您必须创建一个新项目。 点击徽标旁边的三个点,它将打开一个模式窗口,您可以在其中选择“新项目。

输入项目的名称。 我们将使用 big询问-eXample。 建立专案后, 导航 大查询 使用抽屉:

当大查询载入时, 在左侧, 您将看到该项目的数据, 您可以访问的 以及公共数据集。 在此示例中,我们使用了公共数据集。 它被命名 covid19_ecdc

播放数据集和可用表。 预览其中的数据。 这是一个每小时更新一次的公共数据集,其中包含有关 新冠肺炎 全球数据。

我们必须创建一个IAM用户-> 服务帐户才能访问数据。 所以, 在菜单中 点击 “ IAM和管理员,” 然后 “服务帐户。”

点击 “创建服务帐户” 按钮, 输入服务帐户名称,然后单击 “创建。” 下一个, 去 ”服务帐户权限”, 搜索并选择, “ 大查询 Admin”

点击 ”继续,”这是最后一步, 在这里,您需要您的钥匙, 因此,请点击“按键并导出为 JSON格式。 将其安全地保存在某个地方, 我们稍后将需要它。 点击 完毕 完成服务帐户的创建。

现在, 我们将使用此处生成的凭据连接NodeJS BigQuery库。

您需要安装 BigQuery NodeJS库可在您刚刚创建的项目中使用它。 在app目录中运行以下命令:

第一的, 通过运行初始化npm

填写所有问题,然后继续安装 BigQuery 图书馆:

在继续更改函数处理程序之前, 我们必须携带先前创建的JSON文件中的私钥。 我们将要使用 无服务器环境 变量来做到这一点。 您可以在此处获取更多信息。

打开 无服务器。yml, 和在 提供者 属性添加 环境 像这样的属性:

环境:
PROJECT_ID:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / 配置 / bigquery-config。json):project_id}
CLIENT_EMAIL:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):client_email}
PRIVATE_KEY:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):private_key}

创建 PROJECT_ID, PRIVATE_KEY, 和 CLIENT_EMAIL 环境变量, 它具有与我们生成的JSON文件相同的属性(小写)。 我们已将其放置在 config 文件夹并命名 bigquery-config。json

现在, 您应该最终得到无服务器的支持。yml文件如下所示:

服务:aws-sample-application
提供者:
  名称:aws
  运行时:nodejs12。x
  概要文件:serverless-admin
  地区:us-east-2
  环境:
    PROJECT_ID:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):project_id}
    CLIENT_EMAIL:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):client_email}
    PRIVATE_KEY:${file(https:// devrix。com / tutorial / build-application-serverless-framework-aws-bigquery / config / bigquery-config。json):private_key}
功能:
  你好:
    处理程序:处理程序。hello
    事件:
      -http:
          路径:/ hello
          方法:获取
插件:
  -无服务器离线

现在打开 处理程序。js 并导入BigQuery库, 在文件的“使用严格”下方,添加以下行:

现在,我们必须告诉BigQuery库该凭据。 以此目的, 创建一个实例化的新常量 BigQuery 具有凭据:

const bigQueryClient = new BigQuery({
    projectId:进程。环境PROJECT_ID,
    credentials: {
        client_email:进程。环境CLIENT_EMAIL,
        private_key:进程。环境PRIVATE_KEY
    }
});

下一个, 让我们创建我们的BigQuery SQL查询。 我们想检索有关的最新信息 新冠肺炎 保加利亚的案例。 在继续之前,我们正在使用BigQuery查询编辑器对其进行测试, 因此,我们创建了一个自定义查询:

SELECT * FROM`bigquery-public-data。covid19_ecdc。covid_19_geographic_distribution_worldwide` WHERE geo_id ='BG'ORDER BY date DESC LIMIT 1

好的! 现在,在我们的NodeJS应用中实现它。
打开 处理程序。js 并粘贴下面的代码

const query ='SELECT * FROM`bigquery-public-data。covid19_ecdc。covid_19_geographic_distribution_worldwide` WHERE geo_id=\'BG' ORDER BY date DESC LIMIT 1';
const 选项 ={
    查询:查询
}

const [job]=await bigQueryClient。createQueryJob(options);
const [行数]=await job。getQueryResults();

我们已经创建了 queryoptions 常数。 然后,我们将查询作为作业运行,并从中检索结果。

我们还更改返回处理程序,以返回查询生成的行:

return {
    statusCode:200,
    正文:JSON。串化(
        {
            行数
        },
        空值,
        2
    ),
};

让我们看看完整的 处理程序。js

“使用严格”;

const {BigQuery}=require('@google-cloud/bigquery');
const bigQueryClient = new BigQuery({
    projectId:进程。环境PROJECT_ID,
    credentials: {
        client_email:进程。环境CLIENT_EMAIL,
        private_key:进程。环境PRIVATE_KEY
    }
});

模块。出口。你好=异步事件=> {
    const query ='SELECT * FROM`bigquery-public-data。covid19_ecdc。covid_19_geographic_distribution_worldwide` WHERE geo_id=\'BG' ORDER BY date DESC LIMIT 1';
    const options ={
        查询:查询
    }

    const [job]=await bigQueryClient.createQueryJob(options);
    const [rows]=await job.getQueryResults();

    return {
        statusCode:200,
        正文:JSON。串化(
            {
                rows
            },
            空值,
            2
        ),
    };
};

好的! 让我们在本地测试我们的功能:

我们应该看到输出:

继续部署应用程序以通过HTTP端点对其进行测试,因此运行

等待它完成并打开端点。 结果如下:

做得好! 现在,我们有了一个应用程序,可以从BigQuery检索数据并返回响应! 最后,让我们检查一下它是否可以离线运行。 跑

并加载本地端点:

做得好。 我们几乎快要结束了。 最后一步是稍微更改应用程序和行为。 代替 AWS API网关, 我们要使用 应用程序负载均衡器. 让我们在下一章中了解如何实现这一目标。

我们使用 AWS API网关。 在这一章当中, 我们将介绍如何用替换API网关 应用程序负载平衡器(阿尔巴)。

第一的, 让我们来看看与API网关相比,应用程序负载平衡器的工作原理:

在应用程序负载均衡器中, 我们会映射特定的路径(例如G。,/你好/)到目标组–一组资源, 就我们而言 这 Lambda 功能。

目标组只能具有一个与其关联的Lambda函数。 每当目标群体需要回应时, 应用程序负载平衡器向Lambda发送请求, 并且该功能必须使用响应对象进行响应。 像API网关一样, 这 ALB 处理所有HTTP请求。

ALB和 API网关. 主要区别在于API网关仅支持HTTPS(SSL), 而ALB同时支持HTTP和HTTPS。

但, 让我们来看看API网关的优缺点:

API网关:

优点:

  • 出色的安全性。
  • 实施起来很简单。
  • 部署迅速,一分钟内即可完成。
  • 可扩展性和可用性。

缺点:

  • 面对高流量时,它可能会变得非常昂贵。
  • 需要更多的编排, 这给开发人员增加了一定的难度。
  • 性能下降 由于API场景, 可能会影响应用程序的速度和可靠性。

让我们继续创建ALB并切换到它,而不是使用API网关:

应用程序负载平衡器允许开发人员配置和路由传入的流量。 这是“弹性负载平衡。” 它是客户的单一联系点, 将传入的应用程序流量分布在多个目标上, 例如多个区域中的EC2实例。

让我们通过Amazon AWS中的UI创建应用程序负载平衡器(ALB)。 登录到“ AWS控制台”中的“查找服务。“ 类型 ”EC2”,然后找到“负载均衡器。

点击 ”创建负载均衡器,“ 在下面 ”应用程序负载均衡器,“ 选择 ”创建.”。 为了一个名字, 输入您的选择, 我们使用了“样本相册“选择方案”面向互联网,” IP地址类型 ipv4。

在 ”听众”, 保留原样– HTTP和端口80。 可以为HTTPS进行配置, 尽管您必须先拥有一个域并进行确认,然后才能使用HTTPS。

可用区–适用 VPC 从下拉列表中选择一个,然后将所有标记为“可用区”:

点击 ”下一步配置安全设置”,提示您改善负载均衡器的安全性。 点击下一步。

在 ”第三步配置安全组“, at 分配安全组 选择“创建新的安全组。”接下来,点击“下一步:配置路由。”。 在第4步中,如上面的屏幕截图所示配置它:

点击 下一个下一个, 和 创建.

回到负载均衡器并复制ARN,如屏幕截图所示:

现在,我们必须更改无服务器。yml并删除API Gateway http属性。 在事件属性下, 删除http属性并添加alb属性。 函数对象应如下所示结束:

你好:
  处理程序:处理程序。hello
  事件:
    -白:
        listenerArn:arn:aws:elasticloadbalancing:us-east-2:115129174008:listener / app / sample-alb / ae6e398a898c48e6 / 67ce6bf319d0513d
        优先级:1
        情况:
          路径:/ hello

保存文件并运行用于部署应用程序的命令

成功部署后,返回到AWS Load Balancers并找到您的DNS名称,如屏幕截图所示:

复制DNS名称并输入路径 /你好.

它应该可以工作,并最终为您提供下载内容的选项:)。 迄今为止, 应用程序负载平衡器运行良好, 但是应用程序需要为我们的最终用户返回正确的响应。 去做这个, 打开 处理程序。js 并将return语句替换为以下语句:

return {
    statusCode:200,
    状态描述:“ 200 OK”,
    headers: {
        “ Content-Type”:“ application / json”
    },
    isBase64Encoded:否,
    正文:JSON。串化(行)
}

ALB的区别在于响应必须包含容器statusDescription, 标头 和isBase64Encoded。 请保存文件, 并再次部署, 但是这次不是整个应用程序, 但反而, 只有我们已更改的功能。 运行以下命令:

这条路, 我们只定义功能 hello 部署。 成功部署后, 再次访问带有路径的DNS名称, 您应该有适当的回应!

伟大的! 现在,我们已用Application Load Balancer替换了API网关。 应用程序负载平衡器比API网关便宜, 现在我们可以扩展我们的应用程序以满足我们的需求, 特别是如果我们希望流量会更高。

我们使用 无服务器框架, AWS, and BigQuery, 并涵盖了其主要用法。 无服务器是未来, 而且使用它来处理应用程序也毫不费力。 继续学习并深入研究无服务器框架,以探索其所有功能和秘密。 这也是一个非常简单易用的工具。

根据您的技术规范构建定制的解决方案。 提交您的提案或请求一个完整的发现会话,以确定您的要求并评估您的业务需求。

让我们一起开始一个新项目
浏览更多:询问您的代理商发展教程

后端开发人员
你好! 我是Dimitar Dimitrov,并且是DevriX后端开发团队的成员。 我在销售和产品管理方面有经验, 但是成为开发人员一直是我儿时的梦想。 所以, 在DevriX,我的梦想成真了! 我喜欢与家人度过闲暇时光, 我也喜欢摄影 旅行和快车。 我也喜欢读书(惊悚片, 小说), 我最喜欢的作家之一是詹姆斯·罗林斯。

标签:晋城 河池 驻马店 承德 三亚 恩施 石家庄 普洱

巨人网络通讯声明:本文标题《使用无服务器框架构建应用, AWS, 和大查询》,本文关键词  使用,无,服务器,框架,构建,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《使用无服务器框架构建应用, AWS, 和大查询》相关的同类信息!
  • 本页收集关于使用无服务器框架构建应用, AWS, 和大查询的相关信息资讯供网民参考!
  • 推荐文章