叫用舊版程式碼

您想要將應用程式遷移至 App Engine,但系統發生問題:伺服器端程式碼連結至特定的作業系統,且無法輕易轉移。也許您使用的是舊的以 C++ 或 Visual Basic 編寫的 COM 物件,甚至是原始碼已不存在,只剩下可執行的二進位檔。

這個教學課程說明使用 App Engine、Compute Engine 和 Cloud Pub/Sub 叫用舊版程式碼的架構模式,並提供模式的範例實作。雖然範例實作的重點是放在 Windows 專用程式碼,您仍然可以重複使用這裡所介紹的舊版程式碼模式。

目標

  • 瞭解在 Google Cloud Platform (GCP) 上叫用舊版程式碼的簡單架構模式。
  • 下載並部署架構模式的範例實作。

叫用舊版程式碼的架構模式

下圖說明從 App Engine 應用程式叫用舊版程式碼的架構模式。

叫用舊版程式碼的架構模式
圖 1:叫用舊版程式碼的架構模式

架構的運作方式如下:

  1. 網路用戶端將要求傳送至 App Engine 應用程式,該應用程式會將要求寫入至 Cloud Pub/Sub 主題。

  2. 程式碼包裝函式從主題提取要求。

  3. 程式碼包裝函式叫用舊版程式碼。

  4. 舊版程式碼將結果傳回包裝函式,然後由包裝函式將結果傳回給 App Engine 應用程式,再從應用程式傳回網路用戶端。

模式的範例實作

您可以在 GitHub 找到上述模式的實作。這個範例應用程式使用字串做為輸入內容,透過模式中列出的元件來處理字串,並傳回全大寫字母的版本。應用程式的程式碼包含兩個主要元件:

  • App Engine 應用程式,將傳入要求發佈至 Cloud Pub/Sub 主題。
  • 程式碼包裝函式,用來訂閱 Cloud Pub/Sub 主題,並在收到要求後,將要求傳送到某些舊版 Windows 程式碼。

在本實作中,包裝函式是以 C# 編寫的 Windows 服務。包裝函式服務設定為在執行個體啟動時執行,且可以叫用任何能從 C# 叫用的指定碼或二進位檔。包裝函式服務和叫用的二進位檔會存放在執行 Windows Server 2012 R2 的 Compute Engine 執行個體中。

應用程式的使用者介面看起來與下列範例類似:

Shout 應用程式使用者介面
圖 2:Shout 應用程式使用介面

如果輸入「mars」(火星),然後按一下 [Submit] (提交),結果會如下所示:

Shout 應用程式結果
圖 3:Shout 應用程式結果

必備條件

這個範例應用程式假設:

取得原始碼

在這裡下載範例程式碼並解壓縮。如有需要,您可以執行下列指令,改為複製 GitHub 專案存放區:

C:\> git clone https://github.com/GoogleCloudPlatform/pubsub-shout-csharp.git

安裝依附元件

在指令列終端機中,前往 pubsub-shout-csharp 存放區中本機複本的 appengine-python-flask 資料夾,接著執行下列指令:

C:\> pip install -r requirements.txt -t lib

建立 Compute Engine 執行個體

建立執行程式碼包裝函式和舊版程式碼的 Compute Engine 執行個體:

  1. 在 GCP 主控台中,前往建立新執行個體頁面

  2. 在「開機磁碟」區段,按一下 [變更]

  3. 從預先設定映像檔清單,選取 [Windows Server 2012 R2 Datacenter Edition],然後按一下 [選取]

  4. 在「防火牆」區段,允許 HTTP 和 HTTPS 流量。

  5. 在「專案存取權」區段,允許專案中所有 GCP 服務擁有完整的 API 存取權。

  6. 如要顯示進階選項,請按一下 [管理]、[安全性]、[磁碟]、[網路]、[單獨租用],然後按一下 [網路] 分頁標籤。

  7. 在「網路標記」區段,新增 rdp-tag 標記。稍後在本教學課程中,您將建立防火牆規則,允許外部 RDP 存取所有有這個標記的執行個體。

  8. 如要開始建立新的執行個體,請按一下 [建立]

建立執行個體後,將預設的 Windows 使用者新增至執行個體:

  1. 前往 GCP 主控台的 VM 執行個體頁面

  2. 按一下新部署的執行個體名稱。

  3. 在執行個體頁面,按一下 [設定 Windows 密碼] 按鈕。

  4. 如要在執行個體上建立使用者帳戶,請在 [設定新的 Windows 密碼] 對話方塊中,新增您的使用者名稱,然後按一下 [設定]

  5. 記下提供的密碼,然後關閉對話方塊。

接下來,建立防火牆規則,讓 RDP 存取您的執行個體:

  1. 前往 GCP 主控台的「建立防火牆規則」頁面

  2. 依下方所示填寫表單:

    • 名稱rdp-rule
    • 來源 IP 範圍0.0.0.0/0
    • 允許的通訊協定和通訊埠tcp:3389
    • 目標標記rdp-tag
  3. 如要建立防火牆規則,請按一下「建立」

建構及部署程式碼包裝函式

如要建構程式碼包裝函式服務:

  1. 前往 GCP 主控台的「憑證」頁面

  2. 按一下 [新憑證],然後選取 [服務帳戶金鑰]

  3. 在「建立服務帳戶金鑰」頁面中,依下方所示填寫表單:

    • 服務帳戶:新服務帳戶
    • 名稱:您選擇的名稱。
    • 服務帳戶 ID:您選擇的 ID。
    • 金鑰類型:JSON
  4. 按一下 [建立]。幾秒鐘後,JSON 金鑰檔案就會下載到本機電腦中。

  5. 在本機電腦上,建立新的環境變數。這個變數稱為 GOOGLE_APPLICATION_CREDENTIALS。將它設定為 JSON 金鑰檔案的絕對路徑。

  6. 前往 pubsub-shout-csharp 存放區中本機複本的 windows-csharp 資料夾。

  7. 在 Visual Studio 2012 以上版本開啟 ShoutService.sln

  8. 編輯 ShoutLib/Constants.cs,將 ProjectId 變數設為您的 https://console.cloud.google.com/ 專案 ID,然後儲存。

  9. 在「建構」選單中,按一下 [建構解決方案] 來建構應用程式。

建構程式碼包裝函式服務後,將它複製到您的 Compute Engine 執行個體:

  1. 建立遠端桌面連線,連到稍早在教學課程中建立的執行個體。

  2. 在本機電腦的「Windows 檔案總管」中,前往 windows-csharp 資料夾底下的 ShoutService\bin 資料夾。

  3. 從 Windows 檔案總管複製 Release 資料夾,然後將它貼到遠端連線視窗中,以將資料夾複製到您的執行個體。Release 資料夾中包含包裝函式與 Shout 服務。

接下來,授予本機服務適當權限,允許 Windows 服務控制管理員啟動、停止以及與服務互動。這裡的本機服務是服務控制管理員所使用的預先定義的 Windows 使用者帳戶。

  1. 前往「Windows 檔案總管」的 Release 資料夾。

  2. 在資料夾上按滑鼠右鍵以開啟內容選單,然後按一下 [內容]

  3. 在「版本屬性」對話方塊,按一下 [安全性] 分頁。

  4. 按一下 [編輯]

  5. 在「版本權限」對話方塊,按一下 [新增]

  6. 在「選取使用者或群組」對話方塊中,在「輸入要選取的物件名稱」下,輸入「LOCAL SERVICE」,然後按一下 [確定]

  7. 在「版本權限」對話方塊中,按一下 [本機服務]

  8. 在「本機服務權限」下,請確認下列權限已啟用:

    • 讀取與執行
    • 列出資料夾內容
    • 讀取
  9. 按一下 [確定]

最後,安裝程式碼包裝函式服務:

  1. 在您的遠端電腦上,以系統管理員身分開啟指令列終端機,並前往 Release 資料夾。

  2. 安裝程式碼包裝函式服務:

    C:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe ShoutService.exe

部署 App Engine 應用程式

如要部署 App Engine 應用程式:

  1. 在本機電腦的指令列終端機上,前往 pubsub-shout-csharp 存放區本機複本中的 appengine-python-flask 資料夾。

  2. 部署應用程式。

    C:\> appcfg.py -A <your_project_id> -V 1 --oauth2 update .

  3. 在系統出現提示時,驗證應用程式。

  4. 啟用Cloud Pub/Sub API。

    啟用 API

  5. 如要初始化應用程式,請在網路瀏覽器中造訪下列網址:

    https://<your_project_id>.appspot.com/init

    當您造訪這個網址時,App Engine 應用程式會建立 Cloud Pub/Sub 主題,然後訂閱主題的程式碼包裝函式服務。

恭喜!您的應用程式現已上線。請前往 <your_project_id>.appspot.com 查看應用程式執行情形。

清理

完成「叫用舊版程式碼」教學課程後,您可以清除在 Google Cloud Platform 建立的資源,這樣日後就不需再為這些資源付費。下列各節將說明如何刪除或關閉這些資源。

刪除 GCP 專案

如要避免付費,最簡單的方法就是刪除您針對教學課程建立的專案。

刪除專案:

  1. 前往 GCP 主控台的「Projects」(專案) 頁面。

    前往專案頁面

  2. 在專案清單中選取要刪除的專案,然後按一下 [Delete] (刪除)
  3. 在對話方塊中輸入專案 ID,按一下 [Shut down] (關閉) 即可刪除專案。

刪除 Compute Engine 執行個體

刪除 Compute Engine 執行個體:

後續步驟

  • 歡迎親自試用其他 Google Cloud Platform 功能。請參考我們的教學課程
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
解決方案