閱讀576 返回首頁    go 阿裏雲 go 技術社區[雲棲]


實踐篇:搭建無服務器應用--函數計算+AIP網關+雲市場(提供手機號歸屬地查詢服務)

6月5日,阿裏雲的AIP網關上線了一個新功能,用戶定義API後端服務時可以選擇使用Function Compute,這樣API網關的用戶直接使用函數計算的技術能力,這也使得AIP網關具備可擴展的後端應用,與此同時函數計算也享受到AIP網關帶來的諸多的好處,例如API的請求流量管控、安全鑒權、訪問監控、統計等等。

下麵我做一個簡單的例子,把函數計算+API網關+雲市場三者結合起來,提供一個能查詢手機號歸屬地的服務,在這個框架裏不需要配置WEB容器、不需要搭建運行環境、不需要購買負載均衡,通過配置和一段代碼就能完成一個高擴容無服務器的應用服務提供出去。
AIP網關+函數計算+雲市場的結合架構圖
37c3c264876fd86ce8b9ba9465856ef072aef061

整個這個架構搭建分三部分設置,雲市場服務購買(免費),編寫函數代碼,設置API網關,調試成功就可以開放API地址了。


進入雲市場選擇手機號歸屬地查詢(免費)服務,開通該服務,獲取到服務的APPCode,填寫到對應的代碼中。


第一步:創建一個服務

直接在函數控製台上創建一個服務,填寫名稱和備注,或者選擇已有的服務,直接略過這步。

第二步:創建空白函數,選用Python2.7編譯環境,設置執行時間:1500ms,執行的內存128MB,因為是調用雲市場的接口來取到內容,該接口平均響應時間在1200ms左右。

其中函數代碼塊:
import logging  
import urllib, urllib2, sys
import ssl
import json

def handler(event, context):
  ct = json.loads(event)
  mob = ct['queryParameters']['mob']
  #return ct
  host = 'https://jshmgsdmfb.market.alicloudapi.com' #market aliyun provider
  path = '/shouji/query'
  method = 'GET'
  appcode = 'your appcode' 
  querys = "shouji="+ mob
  bodys = {}
  url = host + path + '?' + querys

  request = urllib2.Request(url)
  request.add_header('Authorization', 'APPCODE ' + appcode)
  response = urllib2.urlopen(request)
  content = response.read()

  rep = {
    "isBase64Encoded": "false",
    "statusCode": "200",
    "headers": {
        "x-custom-header": "no"
    },
    "body": content
}  
  return json.dumps(rep)

第三步:通過控製台調試程序:

如果想在控製台進行對程序調試,可以在執行頁麵的觸發事件中加入模擬API網關invoke函數請求串:

{
    "body": "",
    "headers": {
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Ca-Api-Gateway": "48351B11-52DB-44EE-8051-CE22A2F69A1C",
        "X-Forwarded-For": "100.68.30.243"
    },
    "httpMethod": "GET",
    "isBase64Encoded": false,
    "path": "/getinfo",
    "pathParameters": {},
    "queryParameters": {
        "mob": "13622439310"
    }
}

第一步:建立分組:如果沒有分組,創建一個分組,如果有,直接略過,看下一步,創建API

第二步:建立API通過引導頁麵,完成4步操作,填寫基本信息的時候,這個地方為了演示效果,選著不認證,一般對外的分組建議都選用阿裏雲APP認證,確保API請求安全和計量統計。

定義API請求:請求的Path就是你最終暴露給客戶的路徑,另外入參定義裏,需要填寫一個入參名,本例中設置mob,傳入一個手機號,見下圖:

d2b55aa1cd6781435a7ffd125133cb7c9eda114a

定義API後端服務的時候,需要選擇FunctionCompute的類型,填寫的Serivce和Function都是事先在函數計算中設置好,這個地方填寫進去即可,

1、你API網關所在的區域跟函數計算的區域同一個,避免走公網響應時間變長

2、在API網關上設置的超時時間不小於你函數執行的時間,避免API網關提前終止請求響應。

84a8acd8a2a80008fd7d11597cc91c7ace7a4ee0

第三步:返回結果示例:

參考手機號歸屬地提供商的返回值,填寫到API網關中,代碼如下:

{
  "status": "0",
  "msg": "ok",
  "result": {
    "province": "浙江",
    "city": "杭州",
    "company": "中國移動",
    "cardtype": "GSM"
  }
}

第四步:測試執行效果

點擊調試API頁麵,在請求串裏填寫手機號,執行後,即可看到手機號歸屬地的返回。
05cbb814086b25eecbef8403f45d87463c83a780

通過URL地址發請求效果:

在API網關中,如果自己有域名,在分組中設置自己的域名,也可以通過係統提供的二級域名來簡單試驗一下,看下圖,把地址拚接完整的請求地址,可以通過瀏覽器試驗一下效果如何。

在分組詳情中可以查到二級域名:

51cf6d0dd706cad60ba613d2a05bab2284fc866c

在瀏覽器請求的演示效果:

667dea8f5be674bcc0a9ab8279b50dcb1303ae11




最後更新:2017-08-13 22:27:45

  上一篇:go  怡海軟件:關於雲計算,未來的三個預測
  下一篇:go  萬億級數據洪峰下的分布式消息引擎