用於資料擷取及分析的無伺服器 Web 應用程式及事件
本指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。
在本指導教學中,您將建立一個應用程式,用於自動收集儲存庫的 GitHub 資料流量統計資料,並為資料流量分析奠定基礎。 GitHub 僅提供對最近 14 天的資料流量的存取。 如果要分析更長時間段內的統計資料,您需要自行下載並儲存這些資料。 在本指導教學中,您將在 IBM Cloud Code Engine 專案中部署無伺服器應用程式。 應用程式會管理 GitHub 儲存庫的 meta 資料,並可讓您存取統計資料以進行資料分析。 資料流量資料是在應用程式中隨需應變或由 Code Engine 事件觸發時 (例如每日) 從 GitHub 收集。 本指導教學中討論的應用程式會實作多租戶備妥解決方案,其中包含支援單一租戶模式的起始特性集。

目標
- 部署具備多租戶支援與安全存取的容器化 Python 資料庫應用程式
- 將 App ID 整合為以 OpenID Connect 為基礎的鑑別服務提供者
- 設定 GitHub 資料流量統計資料的自動無伺服器收集
開始之前
本指導教學需要:
- IBM Cloud CLI,
- IBM Cloud Code Engine 外掛程式,
- IBM Cloud® Container Registry 外掛程式,
- GitHub 帳戶。
您可以在 IBM® Cloud Shell 中執行需要 Shell 的區段。
您將在 指導教學入門 手冊中找到針對您的作業環境下載及安裝這些工具的指示。
服務和環境設定 (Shell)
在此區段中,您將設定所需的服務並準備環境。 所有這些都可以在 shell 環境 (終端機) 中完成。
-
如果您尚未登入,請使用
ibmcloud login
或ibmcloud login --sso
以互動方式登入。 -
透過執行
ibmcloud target
指令,建立資源群組及地區。RESOURCE_GROUP_NAME=Default REGION=us-south ibmcloud target -r $REGION -g $RESOURCE_GROUP_NAME
-
使用免費 (lite) 計劃建立 IBM Db2 SaaS 實例,並將其命名為 ghstatsDB。
ibmcloud resource service-instance-create ghstatsDB dashdb-for-transactions free $REGION
-
建立 App ID 服務實例。 使用 ghstatsAppID 作為名稱,並使用累進層級方案。
ibmcloud resource service-instance-create ghstatsAppID appid graduated-tier $REGION
-
將新的名稱空間 ghstats 新增至 IBM Cloud® Container Registry。 您將使用它來參照容器映像檔。 有一個全球登記冊和區域登記冊。 使用廣域登錄。
ibmcloud cr region-set global NAMESPACE=ghstatsYourInitials ibmcloud cr namespace-add $NAMESPACE
Code Engine 準備 (Shell)
佈建服務並完成一般設定之後,接下來是建立 Code Engine 專案,建立應用程式的容器映像檔並部署它。
- 建立名為 ghstats 的 Code Engine 專案。 指令會自動將它設為現行 Code Engine 環境定義。
ibmcloud ce project create --name ghstats
- 建立 Code Engine 建置配置,亦即,設定專案為您建置容器映像檔。 它會從 GitHub 儲存庫中取得本指導教學的程式碼,並使用已登錄使用者資訊將映像檔儲存在先前建立之名稱空間的登錄中。
ibmcloud ce build create --name ghstats-build --source https://github.com/IBM-Cloud/github-traffic-stats --context-dir /backend --commit master --image private.icr.io/$NAMESPACE/codeengine-ghstats
- 請注意,建置建立指令具有建立登錄存取密鑰的負面影響,該密鑰將容許專案寫入及讀取 IBM Cloud® Container Registry。
ibmcloud ce registry list
- 接下來,執行實際建置程序。
輸出指出要執行更多指令,以遵循建置進行時的狀態日誌。 類似下列的內容:ibmcloud ce buildrun submit --build ghstats-build
ibmcloud ce buildrun logs -f -n ghstats-build-run-123456-123456789
部署應用程式 (Shell)
建置備妥之後,您可以使用容器映像檔來部署應用程式,然後連結先前佈建的服務。
-
若要將應用程式部署至名為 ghstats-應用程式的 建立 Code Engine 應用程式。 它會從給定的登錄及名稱空間取回映像檔。
ibmcloud ce app create --name ghstats-app --image private.icr.io/$NAMESPACE/codeengine-ghstats:latest --registry-secret ce-auto-icr-private-global
應用程式部署完成後,您可以檢查輸出中顯示的 URL 是否可用。 應用程式未配置,因此尚無法使用。 您可以使用
ibmcloud ce app list
來檢查部署狀態,或執行ibmcloud ce app get --name ghstats-app
來取得詳細資料。預設情況下,最小縮放為零 (0)。 這表示如果應用程式沒有工作量,Code Engine 會將執行中實例減少至零。 這會節省成本,但在從零重新擴增時需要短暫重新啟動應用程式。 您可以在建立或更新應用程式時使用參數
--min 1
來避免此情況。 -
若要使用佈建的服務,您必須將它們連結至應用程式。 首先,連結 IBM Db2 SaaS,然後 App ID:
ibmcloud ce application bind --name ghstats-app --service-instance ghstatsDB
ibmcloud ce application bind --name ghstats-app --service-instance ghstatsAppID
每一個
application bind
都會建立下列資源及關係:- IAM Service ID。
- IAM API 金鑰建立在 IAM Service ID 中。
- 資源服務金鑰。 這些在 IBM Cloud 主控台中稱為 (服務認證 )。 嘗試下列指令以顯示 App ID 項目:
ibmcloud resource service-keys --instance-name ghstatsAppID
您也可以 使用密碼 或 configmap,而不是將服務連結至應用程式。 它們可以從儲存在檔案中或以文字傳入的值移入。 密鑰及相關指示的範例檔位於 本指導教學的 GitHub 儲存庫中。
App ID 和 GitHub 配置(瀏覽器)
下列步驟全部使用網際網路瀏覽器執行。 首先,您設定 App ID 以使用 Cloud Directory 並與應用程式一起運作。 然後,建立 GitHub 存取記號。 應用程式需要它來擷取流量資料。
-
在 IBM Cloud® 資源清單中,開啟您的服務概觀。 在服務區段中,找到 App ID 服務實例。 按一下其項目以開啟詳細資料。
-
在服務儀表板中,按一下左端功能表中的管理鑑別。 這將顯示可用身分提供者的清單,例如 Facebook、Google、SAML 2.0 Federation 和 Cloud Directory。 將 Cloud Directory 切換為已啟用,並將其他所有提供者都切換為已停用。
您可能需要配置多因子鑑別 (MFA) 和進階密碼規則。 但這些內容不在本指導教學中討論。
-
按一下相同對話框中的鑑別設定標籤。 在新增網頁重定向 URL 中輸入應用程式的 URL +
/redirect_uri
,例如https://ghstats-app.56ab78cd90ef.us-south.codeengine.appdomain.cloud/redirect_uri
。若要在本機測試應用程式,重定向 URL 為
http://127.0.0.1:5000/redirect_uri
。 可以配置多個重新導向 URL。 為了在本機測試應用程式,請將 . env.local.template 製到 .env,調整後使用python3 ghstats.py
啟動應用程式。 -
在左側的功能表中,展開 Cloud Directory,然後按一下使用者。 這將開啟 Cloud Directory 中的使用者清單。 按一下建立使用者按鈕,將您自己新增為第一個使用者。 現在,您已完成配置 App ID 服務。
-
在瀏覽器中,造訪 Github.com,前往設定 -> 開發者設定 -> 個人存取權限。 按一下按鈕 Generate new token (經典)。 輸入 附註的 GHStats 指導教學。 然後,啟用 repo 種類下的 public_repo,以及 admin:org 下的 read:org。 現在,在該頁面的底端,按一下 Generate token。 新存取記號會顯示在下一頁中。 您在下列應用程式設定時需要它。
GitHub訪問令牌
配置並測試 Python 應用程式
準備工作完成後,可以配置並測試應用程式。 此應用程式使用 Python,並使用流行的 Flask 微型框架。 您可以新增儲存庫以進行統計資料收集,或移除它們。 您可以用表狀視圖或折線圖來存取交通資料。
-
在瀏覽器中,開啟已部署應用程式的 URI。 您應該會看到歡迎頁面。
歡迎使用畫面 -
在瀏覽器中,將
/admin/initialize-app
新增到 URI 並存取該頁面。 該頁面用於起始設定應用程式及其資料。 按一下 Start initialization 按鈕。 這將使您前往受密碼保護的配置頁面。 您用於登入的電子郵件位址會被視為系統管理者的識別。 請使用您先前配置的電子郵件位址和密碼。 -
在配置頁面中,輸入姓名(用於問候語)、GitHub 使用者名稱和先前產生的存取記號。 按一下 Initialize。 這將建立資料庫表格,並插入一些配置值。 最後,它會為系統管理員和一位租戶建立資料庫記錄。
第一個步驟 -
完成後,您將前往受管理儲存庫的清單。 現在,可以透過提供 GitHub 帳戶或組織的名稱以及儲存庫的名稱來新增儲存庫。 輸入資料後,按一下新增儲存庫。 儲存庫以及新指派的 ID 應該會顯示在表格中。 您可以輸入資源庫的 ID 並按一下刪除資源庫,從系統中移除資源庫。
儲存庫清單 -
若要測試,請按一下 管理,然後按一下 收集統計資料。 它會隨需應變擷取交通資料。 然後,按一下 儲存庫 及 每日資料流量。 它應該會顯示收集的資料。
交通資料
設定每日資料擷取 (Shell)
在應用程式就緒且已配置的情況下,最後一個部分是起始每日擷取 GitHub 資料流量資料。 您將 建立 Cron 訂閱。 與 cron 工作類似,應用程式會根據指定的排程 (事件) 訂閱事件。
-
建立 cron 訂閱 ghstats-日報每日時間表為世界標準時間 (UTC) 上午 6 點,路徑上有 POST 事件 /collectStats。 將 SECRET_TOKEN_AS_IDENTIFIER 取代為您選擇的密鑰值。 它用來識別應用程式的事件提供程式。
ibmcloud ce subscription cron create --name ghstats-daily --destination ghstats-app --path /collectStats --schedule '0 6 * * *' --data '{"token":"SECRET_TOKEN_AS_IDENTIFIER"}' --content-type application/json
-
若要讓密碼記號知道應用程式,請 更新應用程式。 將 SECRET_TOKEN_AS_IDENTIFIER 取代為您在前一個步驟中挑選的值。
ibmcloud ce app update --name ghstats-app --registry-secret usicr --env EVENT_TOKEN=SECRET_TOKEN_AS_IDENTIFIER
這會建立新的應用程式修訂。 在應用程式中導覽至 管理時,您可以檢查應用程式是否已接收並處理事件,然後再檢查 系統日誌。
上述指令會建立每日世界標準時間上午 6 點的排程。 若要直接檢查事件是否運作,請選擇現行時間 (轉換為 UTC) 數分鐘之後的時間。
結論
在本指導教學中,您已在 IBM Cloud Code Engine中部署無伺服器應用程式。 應用程式來源取自 GitHub 儲存庫。 您已指示 Code Engine 建置容器映像檔,並將它儲存在 IBM Cloud® Container Registry中。 接下來,它被從那裡拉出並部署為儲存器。 應用程式已連結至 IBM Cloud 服務。
應用程式及相關聯的事件容許自動擷取 GitHub 儲存庫的資料流量資料。 這些儲存庫的相關資訊(包括承租戶特定的存取記號)儲存在 SQL 資料庫 (IBM Db2 Warehouse SaaS) 中。 Python 應用程式會使用該資料庫來管理使用者、儲存庫及呈現資料流量統計資料。 使用者可以在可搜尋的表格中看到流量統計,或以簡單的線條圖直觀顯示(見下圖)。 還可以將儲存庫清單和資料流量資料下載為 CSV 檔案。

安全:替換服務認證
如果在正式作業中使用此解決方案,則應定期輪換服務認證。 許多安全原則會要求每 90 天或依類似頻率變更密碼及認證。
您可以透過解除綁定,然後再綁定服務的方式,重新建立與應用程式綁定的服務憑證,進而輪換這些憑證。 使用密鑰而非服務連結時,您甚至可以透過先重建服務金鑰,然後更新密鑰並作為更新應用程式的最後一個步驟,來提供更多選項。
移除資源
若要清除用於本指導教學的資源,您可以刪除相關專案及服務。
- 取消連結已佈建的服務。 首先顯示連結,然後依 服務連結名稱 刪除它們 (下面的 FIRST 和 SECOND 來自取得輸出)
ibmcloud ce application get --name ghstats-app
ibmcloud ce application unbind --name ghstats-app --binding ghstats-app-ce-service-binding-FIRST
ibmcloud ce application unbind --name ghstats-app --binding ghstats-app-ce-service-binding-SECOND
- 刪除專案及其元件。
ibmcloud ce project delete --name ghstats --hard -f
- 刪除服務:
ibmcloud resource service-instance-delete -f ghstatsDB
ibmcloud resource service-instance-delete -f ghstatsAppID
- 刪除 Container Registry 命名空間
ibmcloud cr namespace-rm $NAMESPACE -f
- 刪除 Github.com 記號
視資源而定,它可能不會立即刪除,但會保留 (依預設會保留 7 天)。 您可以透過永久刪除資源或在保留期間內還原資源來收回資源。 請參閱本文件,以瞭解如何 使用資源收回。
擴展指導教學
想要新增或變更此指導教學? 以下是一些構想:
- 擴展應用程式以實現多方承租戶支援。
- 使用社交身分提供者。
- 將日期選取器新增到統計資料頁面以過濾顯示的資料。
- 將自訂登入頁面用於 App ID。
相關內容
以下是本指導教學所涵蓋主題的其他資訊鏈結。 應用程式本身位於此 GitHub 儲存庫中。
文件: