1. 程式人生 > >函式計算搭建 Serverless Web 應用(三)- 三分鐘搭建 Web 應用

函式計算搭建 Serverless Web 應用(三)- 三分鐘搭建 Web 應用

摘要: 本文對使用自定義域名 + HTTP 觸發器搭建 Web 應用的步驟進行詳細介紹,手把手帶您三分鐘搭建穩定可靠的 Web 應用。

簡介

阿里雲 函式計算(Function Compute) 是事件驅動的全託管計算服務,是阿里雲的 Serverless 計算平臺。基於函式計算構建應用,您無需管理伺服器等基礎設施,而是專注於應用邏輯的開發,大幅提高開發效率。

函式計算搭建 Serverless Web 應用(一)- HTTP 觸發器 中闡述了 Web 應用(Serverless web backend) 是函式計算很重要的一個使用場景。相比於傳統的在伺服器上搭建 web 應用,函式計算無需您管理伺服器等基礎設施,只需編寫程式碼並上傳,函式計算會為您準備好計算資源,以 彈性

、 可靠 的方式執行您的程式碼,實現毫秒級別彈性伸縮,輕鬆應對峰值壓力。

函式計算搭建 Serverless Web 應用(二)- 自定義域名 中闡述了繫結自定義域名,通過自定義域名訪問函式,配合 HTTP 觸發器使用,為使用者使用函式計算搭建 Web 應用提供便利。

本文對使用自定義域名 + HTTP 觸發器搭建 Web 應用的步驟進行詳細介紹,手把手帶您三分鐘搭建穩定可靠的 Web 應用。

搭建步驟

場景:本示例基於 HTTP 觸發器搭建 Web 應用,有兩個函式 f1 和 f2,作為示例,函式的功能只是打印出 request 請求,當然,您可以在函式中編寫任意業務邏輯。

預期效果:通過自定義域名進行訪問可以觸發函式執行,得到預期結果。

前提:您有獨立的域名,且已經接入阿里雲備案(如果函式在非中國大陸節點的 region,無需備案)。

步驟一:建立配置 HTTP 觸發器的函式

  1. 新建服務,本示例的服務名稱為 web-server,開啟【高階配置】,配置日誌專案和日誌倉庫,角色建立方式為新建角色,系統授權模板選擇 AliyunLogFullAccess,點選 【授權】,點選【確定】。
  2. 在左側導航欄選擇服務,進入到新建的服務中。
  3. 單擊 【建立函式】,在建立函式頁面:

    1. 單擊 【選擇全部的語言】,在下拉選單中選擇 node8 或 python2.7(本示例程式碼會對兩種語言進行介紹)。
    2. 選擇 【空白函式】。
    3. 按如下圖示配置 HTTP 觸發器,單擊 【下一步】。

      • 認證方式選擇 anonymous,不需要身份驗證,支援匿名訪問。
      • 請求方式為此函式可以處理的 HTTP 請求方式。
    4. 建立函式並填寫所在服務、函式名稱、描述資訊和執行環境資訊。
    5. 單擊【下一步】。
    6. 核對資訊無誤後,單擊【建立】。

然後編寫函式程式碼

# -*- coding: utf-8 -*-
import json
HELLO_WORLD = b"Hello world!\n"

def handler(environ, start_response):
    
    request_uri = environ['fc.request_uri']
    response_body = {
      'uri':environ['fc.request_uri'],
      'method':environ['REQUEST_METHOD']
    }
    # do something here
    status = '200 OK'
    response_headers = [('Content-type', 'text/json')]
    start_response(status, response_headers)
    # Python2
    return [json.dumps(response_body)]
    
    # Python3 tips: When using Python3, the str and bytes types cannot be mixed.
    # Use str.encode() to go from str to bytes
    # return [json.dumps(response_body).encode()]

此處以 Python 為例,其他語言的程式碼請參考文章 建立函式和 HTTP 觸發器

步驟二:域名解析

為了保證您的自定義域名的請求可以到達函式計算,需要您在域名解析伺服器處設定域名的 CNAME 為您函式計算的 endpoint

endpoint 的格式為 <accountID>.<region>.fc.aliyuncs.com,您可以在函式計算控制檯右上角獲取當前 region 的 endpoint。

使用阿里云云解析 DNS 對域名進行解析請參考 域名解析

步驟三:繫結自定義域名

您需要在函式計算控制檯繫結自定義域名:

  1. 在控制檯首頁右側點選進入 自定義域名管理,即可繫結自定義域名並設定路由。

步驟四:測試

設定成功後,訪問自定義域名進行測試,示例演示通過命令列 curl url 進行測試,您也可以通過瀏覽器測試。

  ~ curl api.app.com
{
    "path": "/",
    "queries": {},
    "headers": {
        "accept": "*/*",
        "user-agent": "curl/7.58.0"
    },
    "method": "GET",
    "requestURI": "/",
    "clientIP": "42.120.75.144",
    "serviceName": "serviceA",
    "functionName": "functionA",
    "body": ""
}%
 ~ curl api.app.com/b
{
    "path": "/b",
    "queries": {},
    "headers": {
        "accept": "*/*",
        "user-agent": "curl/7.58.0"
    },
    "method": "GET",
    "requestURI": "/b",
    "clientIP": "42.120.75.144",
    "serviceName": "serviceA",
    "functionName": "functionB",
    "body": ""
}%
 ~ curl api.app.com/a
{
    "path": "/a",
    "queries": {},
    "headers": {
        "accept": "*/*",
        "user-agent": "curl/7.58.0"
    },
    "method": "GET",
    "requestURI": "/a",
    "clientIP": "42.120.75.144",
    "serviceName": "serviceB",
    "functionName": "functionC",
    "body": ""
}%
  ~ curl api.app.com/a/b
{
    "path": "/a/b",
    "queries": {},
    "headers": {
        "accept": "*/*",
        "user-agent": "curl/7.58.0"
    },
    "method": "GET",
    "requestURI": "/a/b",
    "clientIP": "42.120.75.144",
    "serviceName": "serviceB",
    "functionName": "functionD",
    "body": ""
}%

總結

繫結自定義域名可以允許使用者通過自定義域名訪問 FC 的函式,配合 HTTP 觸發器使用,可以快速搭建效能穩定彈性可擴容的 Web 應用,可以說是十分方便了。

您在使用過程中遇到任何問題都可以隨時 聯絡我們,函式計算團隊所有工程師都會在群裡實時進行答疑,沒錯,所有工程師,任何問題,隨時聯絡。

期待您的使用~~

原文連結