Skip to content

AWS Elastic Beanstalk

初始项目: embedded-serverengine-main

最终项目: aws-elastic-beanstalk

在本教程中,我们将向你展示如何准备 Ktor 应用程序并将其部署到 AWS Elastic Beanstalk。你可以根据创建 Ktor 服务器的方式,使用以下初始项目之一:

关于部署 Java 应用程序的更多信息,请参阅 Elastic Beanstalk 文档

先决条件

在开始本教程之前,你需要创建一个 AWS 账户。

克隆示例应用程序

要打开示例应用程序,请按照以下步骤操作:

  1. 克隆 Ktor 文档版本库,然后打开 codeSnippets 项目。
  2. 打开 embedded-serverengine-main 示例。这些示例演示了创建和配置 Ktor 服务器的不同方法:在代码中配置或使用配置文件。部署这些项目的唯一区别在于如何指定用于监听传入请求的端口

准备应用程序

步骤 1:配置端口

首先,你需要指定一个用于监听传入请求的端口。Elastic Beanstalk 会将请求转发到你应用程序的 5000 端口。可选地,你可以通过设置 PORT 环境变量来覆盖默认端口。根据配置 Ktor 服务器的方式,你可以通过以下方式之一配置端口:

  • 如果你选择了服务器配置在代码中指定的 embedded-server 示例,你可以使用 System.getenv 获取环境变量值,或者在未指定环境变量的情况下使用默认值 5000。打开位于 src/main/kotlin/com/example 文件夹中的 Application.kt 文件,并按如下所示更改 embeddedServer 函数的 port 参数值:

    kotlin
    fun 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 代码块中:

groovy
plugins {
    id("io.ktor.plugin") version "3.2.3"
}

然后,确保已配置主应用程序类

kotlin
application {
    mainClass.set("io.ktor.server.netty.EngineMain")
}

构建 Fat JAR

要构建 Fat JAR,请打开终端并执行由 Ktor 插件提供的 buildFatJar 任务:

此构建完成后,你会在 build/libs 目录中看到 aws-elastic-beanstalk-all.jar 文件。

部署应用程序

要部署应用程序,请登录 AWS Management Console 并按照以下步骤操作:

  1. AWS 服务组中打开 Elastic Beanstalk 服务。
  2. 在打开的页面上,点击创建应用程序
  3. 指定以下应用程序设置:
    • 应用程序名称:指定应用程序名称(例如,Sample Ktor app)。
    • 平台:从列表中选择 Java
    • 平台分支:选择 Corretto 11 running on 64bit Amazon Linux 2
    • 应用程序代码:选择 上传你的代码
    • 源代码来源:选择 本地文件。然后,点击选择文件按钮,选择在上一步中生成的 Fat JAR。等待文件上传完成。
  4. 点击创建应用程序按钮,等待几分钟,直到 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