自訂事件來源API Gateway

更新時間:
Copy as MD

本文介紹如何在事件匯流排EventBridge控制台添加API 网关類型的自訂事件來源。

前提條件

步驟一:建立後端服務

  1. 登入API Gateway控制台,在左側導覽列選擇API 管理 > 后端服务

  2. 後端服務列表頁面,單擊右上方的建立後端服務,在彈出的對話方塊中填寫後端服務名稱,类型選擇事件总线 EventBridge,然後單擊确定

  3. 在後端服務列表中找到您剛建立的後端服務,在右側的操作欄中單擊配置及關聯的API

  4. 後端服務定義頁面,單擊線上頁簽,然後在基本信息地區單擊创建

  5. 定義後端服務頁面,区域選擇建立好的自訂事件匯流排所在的地區,事件总线選擇建立好的自訂事件匯流排名稱,設定事件來源名稱和描述,單擊發布

步驟二:建立API分組

  1. 在左側導覽列,選擇API 管理 > 分組管理

  2. 分組列表頁面,單擊右上方的建立分組,選擇实例,設定分組名稱,然後單擊确定

    選擇執行個體類型為共用執行個體(VPC),設定BasePath/

    重要

    網關的分組需要和前提條件中建立好的自訂事件匯流排處於同一地區。

步驟三:建立API並對其授權

  1. 分組列表頁面找到步驟二中建立成功的API分組,單擊右側操作列的API管理

  2. API列表頁面,單擊创建API

    1. 基本信息設定精靈頁面,設定以下資訊,然後單擊下一步

      設定 分組(例如 test_EB)、API名稱(例如 testAPI)、安全認證(例如選擇 阿里雲APP)、AppCode認證(例如選擇 允許AppCode認證 (Header & Query))、簽名演算法(例如選擇 HMAC_SHA256)等參數,其中 API名稱安全認證AppCode認證為關鍵配置項。可按需勾選 API選項(防止重放攻擊、禁止公網訪問、允許上架雲市場)並填寫 描述,完成後單擊 下一步

    2. 定義API請求設定精靈頁面,配置以下資訊,然後單擊下一步

      協議 勾選 HTTP 和 HTTPS;請求Path 填寫 /test/eb/1,勾選 匹配所有子路徑HTTP Method 選擇 GET入參請求模式 選擇 入參透傳

      說明

      本環節是定義事件匯流排如何請求您的API,需要確定的內容包括請求類型、協議、請求Path、HTTP Method、入參請求模式和入參定義。

    3. 定義API後端服務設定精靈頁面,選擇後端服務類型后端服务,然後單擊下一步

      本樣本中,後端服務類型 選擇 EventBridge後端服務 選擇 test_eb後端逾時 保持預設值 10000 ms。

    4. (可選)定義返回結果設定精靈頁面,設定返回結果樣本和失敗返回結果樣本,用於產生API協助文檔,然後單擊创建

  3. API建立完成後,單擊其右側操作列的發布,將配置好的API發布至線上環境。

  4. API列表頁面,單擊目標API操作列的image表徵圖,然後單擊授权

  5. 授权面板,設定授權有效時間並添加需要授權的應用,然後單擊确定

    選擇授權環境(線上預發測試),在授權有效時間地區選取項目短期(指定到期日)或長期,在應用搜尋方塊中輸入關鍵詞後單擊搜尋,在結果清單中勾選目標應用並單擊對應行的+添加按鈕將其加入已選列表。

步驟五:調試API

  1. API列表頁面,找到步驟三:建立API並對其授權中建立的API,在其右側操作列,單擊調試

  2. 將調試環境選擇為線上验证方式選擇為使用AppCode,佈建要求參數,單擊發送請求

查看事件詳情

  1. 登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排

  2. 事件匯流排頁面,單擊目標自訂事件匯流排名稱。

  3. 在左側導覽列,單擊事件追踪,設定查詢方式為按事件範圍查詢或者按事件 ID 查询,單擊查询

  4. 單擊目標事件ID操作列的事件详情,即可查看事件的具體內容。

    查詢到的事件詳情如下所示:

    {
        "datacontenttype": "application/json",
        "aliyunaccountid": "1431999136******",
        "data": {
            "headers": {
                "Authorization": "APPCODE 0624849af6ab4020a272fe9f7b******",
                "Proxy-Uid": "X-Ca-e605e437-b65d-4e52-9f8c-515c55******",
                "X-Ca-Stage": "RELEASE",
                "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_172)",
                "Accept-Encoding": "gzip,deflate",
                "Content-Type": "text/html"
            },
            "path": "/test/eb/1",
            "pathParameters": {},
            "method": "GET",
            "queryParameters": {}
            "body": ""
        },
        "aliyunoriginalaccountid": "143199913******",
        "source": "time-source-ad2a0405-9a2a-4f86-87f1-c0ef89******",
        "type": "eventbridge:Events:ApiGateway",
        "aliyunpublishtime": "2024-11-14T07:11:33.287Z",
        "specversion": "1.0",
        "aliyuneventbusname": "ad2a0405-9a2a-4f86-87f1-c0ef89******",
        "id": "324213ab-cae5-4049-89a4-560ead******",
        "time": "2024-11-14T07:11:33.000Z",
        "aliyunregionid": "cn-hangzhou",
        "aliyunpublishaddr": "172.20.XX.XX"
    }

    CloudEvents規範中定義的參數解釋,請參見事件概述

    data欄位包含的參數解釋如下表所示:

    參數

    類型

    樣本值

    描述

    headers

    Map

    {
        "Authorization": "APPCODE b6e439f27045443ca58e9136ef20****",
        "X-Ca-Dashboard-Uid": "115964845466****",
        "X-Ca-Dashboard-Action": "DEBUG",
        "X-Ca-Stage": "RELEASE",
        "X-Ca-Dashboard-Role": "USER",
        "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_172)",
        "Accept-Encoding": "gzip,deflate",
        "Content-Type": "text/html; charset=utf-8"
    }

    HTTP要求標頭。

    path

    String

    /test/eb/1

    HTTP請求路徑。

    pathParameters

    Map

    路徑參數。

    body

    String/Map

    HTTP請求訊息本文。如果HTTP請求的Content-Type欄位取值為application/json,訊息本文將按照JSON進行解析,否則按照一般字元串解析。

    method

    String

    GET

    HTTP要求方法。

    queryParameters

    Map

    HTTP請求的query參數去除token的內容。