函数计算进阶-IP查询工具开发

场景介绍

场景介绍如何使用函数计算服务开发一个IP查询工具。html

背景知识

什么是Serverlessnode

自2006年8月9日,Google首席执行官埃里克·施密特(Eric Schmidt)在搜索引擎大会(SESSanJose2006)首次提出“云计算”(Cloud Computing)的概念以后,云计算的发展能够用突飞猛进这个词来形容。那么究竟什么才是Serverless呢?数据库

简单来讲,Serverless能够说是一种架构,一种云计算发展的产物,至于具体说什么是Serverless,可能没有谁能给他一个明确的概念,若是非要说一个能够稍微容易理解一些的概念,那或许能够参考Martin Fowler在《Serverless Architectures》中对Serverless这样定义:Serverless=BaaS + FaaS
在这里插入图片描述
Serverless架构和传统的项目的区别npm

首先,咱们以一个常见的Web服务为例:vim

在这里插入图片描述
在这个图中,服务器中可能涉及路由规则、鉴权逻辑以及其余各种复杂的业务代码。同时,开发团队要付出很大的精力在这个服务器的运维上面,例如要时刻关注如下问题:后端

客户量忽然增多时是否须要扩容服务器。
服务器上的脚本和业务代码等是否还在健康运行。
是否有黑客在不断地对服务器发起攻击。
当咱们把这个思路切换到Serverless的逻辑以后,变成了这样:
在这里插入图片描述
能够认为,当客户端和数据库未发生变化的前提下,服务器变化巨大。安全

以前须要开发团队维护的路由模块以及鉴权模块都将接入服务商提供的API网关系统以及鉴权系统,开发团队无须再维护这两部分的业务代码,只须要持续维护相关规则便可。
在这个结构下,业务代码也被拆分红了函数粒度,不一样函数表示不一样的功能。
咱们已经看不到服务器的存在,是由于Serverless的目的是让使用者只关注本身的业务逻辑便可,因此一部分安全问题、资源调度问题(例如用户量暴增、如何实现自动扩容等)全都交给云厂商负责。
相对于传统项目而言,传统项目不管是否有用户访问,服务都在运行中,都是有成本支出,而Serverless而言,只有在用去发起请求时,函数才会被激活而且执行,而且会按量收费,相对来讲能够在有流量的时候才有支持,没有流量的时候就没有支出,相对来讲,成本会进一步下降。
经过以上分析和描述,不难看出Serverless架构相对于传统的开发模式的区别,也逐渐的发现了它的优点。可是问题来了,不少工做都交给了云厂商来作,那咱们作什么呢?
在这里插入图片描述
使用Serverless架构后:bash

开发团队不须要再本身维护服务器,也不须要本身操心服务器的各类性能指标和资源利用率,而是可让开发团队付出更多的时间和精力去关注应用程序自己的状态和逻辑。
Serverless应用的部署将变得十分容易。咱们只要上传基本的代码,例如Python程序只须要上传其逻辑与依赖包,C/C++、Go等语言只需上传其二进制文件,Java只须要上传其Jar包等便可,同时不需使用Puppet、Chef、Ansible或Docker来进行配置管理,大大下降了运维成本。
Serverless架构也再也不须要监控底层的数据,例如再也不须要监控磁盘使用量、CPU使用率等,能够更加专一的将监控目光放到监控应用程序自己的度量。同时在Serverless架构上,运维人员的工做角色会有所转变,部署将变得更加自动化,监控将更加面向应用程序自己。
使用Serverless架构的优点服务器

从上文中咱们不难看出,相对于传统项目,Serverless具有的如下优点:架构

您无需采购和管理服务器等基础设施,运维成本低。
您只需专一业务逻辑的开发,使用函数计算支持的开发语言设计、优化、测试、审核以及上传本身的应用代码。
以事件驱动的方式触发应用响应用户请求。与阿里云对象存储OSS、API网关、日志服务和表格存储等服务无缝对接,帮助您快速构建应用。例如,经过OSS解决图片和视频的存储问题,当有新数据写入您的OSS资源时,自动触发函数处理数据。
提供日志查询、性能监控和报警等功能快速排查故障。
毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力。
按需付费,支持百毫秒级别收费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景。
总而言之,Serverless是在传统容器技术和服务网格上发展起来,更多指的是后端服务与函数服务的结合。对于开发者而言,可以将更多的精力关注在函数服务上,更侧重让使用者只关注本身的业务逻辑便可。

同时,Serverless也是云计算发展到必定阶段的必然产物。做为普惠科技,云计算发展的目标必定是绿色科技和大众科技的产品——而Serverless可以很好的诠释这些:最大程度利用资源、减小空闲资源浪费;同时下降学习成本和使用成本。

Serverless架构被称为是“真正实现了当初云计算的目标”,这种说法虽然有些夸张,可是也从另外一方面表现出了你们对Serverless架构的期盼和信心。自2012年被提出至今,Serverless架构也是经历了7年时间,正在逐渐的走向成熟。

步骤一:链接ECS服务器

阿里云云产品资源体验地址:https://developer.aliyun.com/...

场景将提供一台配置了CentOS 7.7的ECS实例(云服务器)。经过本教程的操做,您能够基于已有的环境开发一个基于函数计算的IP查询工具。

步骤二:开通函数计算服务

在使用函数计算前,须要开通函数计算服务。

说明: 本场景中提供的阿里云子帐号无函数计算服务操做权限,请使用您本身的阿里云帐号操做。您无需担忧扣费问题,由于函数计算服务有必定的免费额度,请参见计费方式。

1.使用您本身的阿里云帐号登陆阿里云控制台,而后进入函数计算产品详情页。

2.单击【免费开通】。
在这里插入图片描述

  1. 阅读《函数计算服务协议》勾选赞成服务协议,最后单击 【当即开通】 。

在这里插入图片描述
4.单击【管理控制台】进入函数计算控制台。
在这里插入图片描述

步骤三:安装Funcraft工具

Fun 是一个用于支持Serverless应用部署的工具,能帮助您便捷地管理函数计算、API 网关和日志服务等资源。它经过一个资源配置文件
(template.yml),协助您进行开发、构建和部署操做。

本步骤将在ECS服务器上安装Funcraft工具。

1.执行如下命令安装NodeJS。

curl -sL https://rpm.nodesource.com/setup_10.x | bash - && yum install -y nodejs

2.执行如下命令安装Funcraft。

npm install request @alicloud/fun -g

3.执行fun config命令进行本地配置。

fun config

请参考如下信息输入您的阿里云帐号ID、AccessKeyID和AccessKey密钥等信息。

Aliyun Account ID:请在帐号安全设置页面查看您的帐号ID。

在这里插入图片描述
Aliyun Access Key ID和Aliyun Access Key Secret:请在 安全信息管理 页面查看您帐号的AK ID和AK Secret。

若是您使用的是阿里云主帐号,请在安全信息管理页面的安全提示弹框中单击继续使用AccessKey。

在这里插入图片描述

Default region name:请选择开通的函数计算服务所在地域。

在这里插入图片描述
正确设置以下所示:

在这里插入图片描述

步骤四:运行模板示例

1.执行如下命令新建工做空间。

mkdir search_ip && cd search_ip

2.执行fun init命令新建一个HTTP函数触发器。

fun init http-trigger-nodejs10

命令执行结果以下所示:

在这里插入图片描述
其中index.js 文件为生成的HelloWorld函数模板,template.yml 文件中包含了HelloWorld函数和HTTP触发器的默认配置信息。

3.执行fun deploy -y命令部署应用到函数计算服务。

fun deploy -y

命令执行结果以下所示:
在这里插入图片描述
4.使用curl命令访问HTTP触发器。请将下面命令中的11905929798*替换为您的阿里云帐号ID。

curl https://11905929********.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/search_ip/search_ip/

命令执行结果以下所示:
在这里插入图片描述
在返回结果中能够看到,在使用HTTP触发器的时候,能够默认传递一些参数,包括Path,Queries以及Headers,Method等,其中有一个参数是clientIP,该字段的值就是客户端的IP地址,咱们能够经过该地址来肯定客户端的IP地址。
接下来咱们将利用clientIP字段开发IP查询工具。

步骤五:开发IP查询工具

1.参考如下步骤修改 index.js 文件内容。

a.  将 index.js 文件内容清空。
cat /dev/null > index.js
b.  使用vim打开 index.js 文件。
vim index.js
c.  按下 i 键进入vim的编辑模式,在文件中新增如下内容。
var getRawBody = require('raw-body')
module.exports.handler = function (request, response, context) {
    getRawBody(request, function (err, data) {
        var respBody = new Buffer.from("您的IP是:" + request.clientIP);
        response.setStatusCode(200)
        response.setHeader('content-type', 'text/html')
        response.send(respBody)
    })
};
d.  按下 esc 键进入命令模式,输入 :wq 保存并退出vim。

2.执行 fun deploy -y 命令从新部署应用到函数计算服务。

fun deploy -y

命令执行结果以下所示:

在这里插入图片描述
3.使用 curl 命令访问HTTP触发器。请将下面命令中的11905929798*替换为您的阿里云帐号ID。

curl https://11905929798*****.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/search_ip/search_ip/

命令执行结果以下所示:

在这里插入图片描述

相关文章
相关标签/搜索