• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用无服务器框架构建应用, AWS, 和大查询
    摘要

    最后修改: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控制台上:

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

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

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

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

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

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

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

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

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

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

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

    服务:aws-sample-applic在ion
    提供者:
      名称:aws
      运行时:nodejs12。X
    功能:
      你好:
        处理程序:处理程序。你好
    

    在继续部署应用程序之前,您必须在这里做一件重要的事情。 早一点 我们使用配置文件为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网关:

    优点:

    缺点:

    让我们继续创建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,我的梦想成真了! 我喜欢与家人度过闲暇时光, 我也喜欢摄影 旅行和快车。 我也喜欢读书(惊悚片, 小说), 我最喜欢的作家之一是詹姆斯·罗林斯。

    上一篇:建立视觉库:设计技巧和挑战
    下一篇:通过内容营销提升品牌权威性的7种技术
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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