AWS Elastic Beanstalk
初始專案:embedded-server 或 engine-main
在本教學中,我們將向您展示如何準備 Ktor 應用程式並將其部署到 AWS Elastic Beanstalk。根據建立 Ktor 伺服器的方式,您可以使用以下其中一個初始專案:
若要進一步了解如何部署 Java 應用程式,請參閱 Elastic Beanstalk 文件。
先決條件
在開始本教學之前,您需要建立一個 AWS 帳戶。
複製範例應用程式
若要開啟範例應用程式,請按照以下步驟操作:
- 複製 Ktor 文件存放庫並開啟 codeSnippets 專案。
- 開啟 embedded-server 或 engine-main 範例。這些範例示範了建立與配置 Ktor 伺服器的不同方法:在程式碼中或使用配置檔案。部署這些專案的唯一區別在於如何指定用於監聽傳入請求的連接埠。
準備應用程式
步驟 1:配置連接埠
首先,您需要指定用於監聽傳入請求的連接埠。Elastic Beanstalk 會透過 5000 連接埠將請求轉發到您的應用程式。您可以選擇性地透過設定 PORT 環境變數來覆蓋預設連接埠。根據配置 Ktor 伺服器的方式,您可以使用以下其中一種方式來配置連接埠:
如果您選擇了在程式碼中指定伺服器配置的 embedded-server 範例,您可以使用
System.getenv獲取環境變數值,或者在未指定環境變數的情況下使用預設值 5000。開啟位於src/main/kotlin/com/example資料夾中的Application.kt檔案,並按如下所示變更embeddedServer函式的port參數值:kotlinfun main() { embeddedServer(Netty, port = (System.getenv("PORT")?:"5000").toInt()) { // ... }.start(wait = true) }如果您選擇了在
application.conf檔案中指定伺服器配置的 engine-main 範例,您可以使用${ENV}語法將環境變數指派給port參數。開啟位於src/main/resources中的application.conf檔案並按如下方式更新:ktor { deployment { port = 5000 port = ${?PORT} } }
步驟 2:套用 Ktor 外掛程式
本教學展示如何使用 Fat JAR 將應用程式部署到 Elastic Beanstalk。要產生 Fat JAR,您需要套用 Ktor 外掛程式。開啟 build.gradle.kts 檔案並將外掛程式新增至 plugins 區塊:
plugins {
id("io.ktor.plugin") version "3.4.3"
}接著,確保已配置應用程式主類別:
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}組建 Fat JAR
要組建 Fat JAR,請開啟終端並執行 Ktor 外掛程式提供的 buildFatJar 任務:
當此組建完成後,您應該會在 build/libs 目錄中看到 aws-elastic-beanstalk-all.jar 檔案。
部署應用程式
要部署應用程式,請登入 AWS 管理主控台並按照以下步驟操作:
- 在 AWS 服務群組中開啟 Elastic Beanstalk 服務。
- 在開啟的頁面上,點擊 Create Application。
- 指定以下應用程式設定:
- Application name:指定應用程式名稱(例如,Sample Ktor app)。
- Platform:從列表中選擇 Java。
- Platform branch:選擇 Corretto 11 running on 64bit Amazon Linux 2。
- Application code:選擇 Upload your code。
- Source code origin:選擇 Local file。然後,點擊 Choose file 按鈕並選擇在前一個步驟中產生的 Fat JAR。等待檔案上傳完成。
- 點擊 Create application 按鈕,並等待幾分鐘直到 Beanstalk 建立環境並發佈應用程式:
INFO Instance deployment completed successfully. INFO Application available at Samplektorapp-env.eba-bnye2kpu.us-east-2.elasticbeanstalk.com. INFO Successfully launched environment: Samplektorapp-env
