函數計算進階-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/

命令執行結果以下所示:

在這裏插入圖片描述

相關文章
相關標籤/搜索