叫用舊版程式碼

您想要將應用程式遷移至 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 應用程式結果

本教學課程使用下列 Google Cloud Platform 計費元件:

  • 具有 Windows Server 2012 授權的 Compute Engine 執行個體
  • Cloud Pub/Sub 服務

您可以使用 Pricing Calculator,根據您的預測使用量來產生預估費用。 初次使用 GCP 的使用者可能符合申請免費試用的資格。

必備條件

這個範例應用程式假設:

取得原始碼

在這裡下載範例程式碼並解壓縮。如有需要,您可以執行下列指令,改為複製 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 主控台中,前往「Create a new instance」(建立新執行個體) 頁面

  2. 在「Boot disk」(開機磁碟) 區段,按一下 [Change] (變更)

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

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

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

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

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

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

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

  1. 在 GCP 主控台中,前往「VM instances」(VM 執行個體) 頁面

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

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

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

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

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

  1. 在 GCP 主控台中,前往「Create a firewall rule」(建立防火牆規則) 頁面

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

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

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

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

  1. 在 GCP 主控台中,前往「Credentials」(憑證) 頁面

  2. 按一下 [New credentials] (新憑證),然後選取 [Service account key] (服務帳戶金鑰)

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

    • 服務帳戶:新服務帳戶
    • 名稱:您選擇的名稱。
    • 服務帳戶 ID:您選擇的 ID。
    • 金鑰類型:JSON
  4. 按一下 [Create] (建立)。幾秒鐘後,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. 在「Build」(建構) 選單中,按一下 [Build Solution] (建構方案) 來建構應用程式。

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

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

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

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

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

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

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

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

  4. 按一下 [編輯]

  5. 在「Permissions for Release」(版本權限) 對話方塊,按一下 [Add] (新增)

  6. 在「Select Users or Groups」(選取使用者或群組) 對話方塊中,在「Enger the object names to select」(輸入要選取的物件名稱) 下,輸入 LOCAL SERVICE,然後按一下 [OK] (確定)

  7. 在「Permissions for Release」(版本權限) 對話方塊中,按一下 [LOCAL SERVICE] (本機服務)

  8. 在「Permissions for LOCAL SERVICE」(本機服務權限) 下,請確認下列權限已啟用:

    • 讀取與執行
    • 列出資料夾內容
    • 讀取
  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 查看應用程式執行情形。

清除

完成叫用舊版程式碼的教學課程後,您可以清除在 GCP 上建立的資源,這樣資源就不會占用配額,您日後也無須為其付費。下列各節將說明如何刪除或停用這些資源。

刪除 GCP 專案

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

如要刪除專案,請執行以下操作:

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

    前往「Projects」(專案) 頁面

  2. 在專案清單中,找到您要刪除的專案並按一下「刪除」圖示 delete
  3. 在對話方塊中輸入專案 ID,按一下 [Shut down] (關閉) 即可刪除專案。

刪除 Compute Engine 執行個體

如何刪除 Compute Engine 執行個體:

  1. 前往 GCP 主控台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體頁面

  2. 找到您要刪除的執行個體,然後按一下旁邊的核取方塊。
  3. 按一下頁面頂端的「刪除」圖示 delete,即可刪除執行個體。

後續步驟

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

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

這個網頁
解決方案