Azure App Service
このチュートリアルでは、Ktor アプリケーションのビルド、設定、および Azure App Service へのデプロイ方法について説明します。
前提条件
このチュートリアルを開始する前に、以下が必要です。
サンプルアプリケーションの作成
Ktor プロジェクトの作成、オープン、および実行の説明に従って、サンプルアプリケーションを作成します。この例では、embedded-server および engine-main のプロジェクトに基づいたコードとコマンドを示します。
上記のチュートリアルでは、アプリケーションを設定する 2 つの方法が示されています。コード内で値を直接指定する方法と、設定ファイルを使用する方法です。どちらの場合も、重要な設定はサーバーが受信リクエストをリッスンするポートです。
アプリケーションのセットアップ
ステップ 1: ポートの設定
Azure App Service では、環境変数 PORT に受信リクエスト用に開放されているポート番号が含まれています。Ktor サーバーの設定でアプリケーションをどのように作成したかに応じて、次の 2 つの場所のいずれかでこの環境変数を読み込むようにコードを更新する必要があります。
ポート設定をコード内で行う例を使用した場合は、
PORT環境変数はSystem.getenv()で読み込み、.toIntOrNull()で整数にパースできます。Application.ktファイルを開き、以下のようにポート番号を変更します。kotlinfun runBasicServer() { val port = System.getenv("PORT")?.toIntOrNull() ?: 8080 embeddedServer(Netty, port = port) { // ... }.start(wait = true) }サーバー設定が設定ファイル
application.confで定義されている場合は、次の例のようにPORT環境変数を読み込むように更新します。ktor { deployment { port = ${PORT:8080} } }
ステップ 2: プラグインの追加
build.gradle.kts ファイルを開き、plugins セクションに以下の行を追加します。
plugins {
application
kotlin("jvm")
id("io.ktor.plugin") version "3.3.3" // 追加
id("com.microsoft.azure.azurewebapp") version "1.10.0" // 追加
}io.ktor.plugin はファット JAR (fat JAR) を作成するためのタスクを提供し、Azure WebApp Plugin for Gradle は Azure で必要なすべてのリソースを簡単に作成するために使用されます。
ファット JAR に明確なエントリポイントが定義されるように、application セクションに mainClass が定義されていることを確認してください。
application {
mainClass.set("com.example.ApplicationKt")
}engine-main テンプレートを使用してプロジェクトを作成した場合、メインクラスは次のようになります。
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}ステップ 3: 設定
デプロイ先となる Java Web アプリを App Service にすでに作成済みの場合は、このステップをスキップできます。
そうでない場合は、Azure Webapp プラグインが自動的に作成するように、build.gradle.kts ファイルの末尾に以下のエントリを追加します。
// デプロイタスクが想定する名前にファット JAR の名前を変更します
ktor {
fatJar {
archiveFileName.set("embedded-server.jar")
}
}
// 通常 Azure プラグインが実行する `jar` タスクを無効にし、
// 代わりに `fatJar` タスクによって作成されたアーカイブをデプロイするようにします
tasks.named("jar") {
enabled = false
}
// デプロイタスクが最初にファット JAR をビルドするようにします
tasks.named("azureWebAppDeploy") {
dependsOn("buildFatJar")
}
// Azure Webapp プラグインの設定
azurewebapp {
subscription = "YOUR-SUBSCRIPTION-ID"
resourceGroup = "RESOURCE-GROUP-NAME"
appName = "WEBAPP-NAME"
pricingTier = "YOUR-PLAN" // 例: "F1", "B1", "P0v3" など
region = "YOUR-REGION" // 例: "westus2"
setRuntime(closureOf<com.microsoft.azure.gradle.configuration.GradleRuntimeConfig> {
os("Linux") // または "Windows"
webContainer("Java SE")
javaVersion("Java 21")
})
setAuth(closureOf<com.microsoft.azure.gradle.auth.GradleAuthConfig> {
type = "azure_cli"
})
}利用可能な設定プロパティの詳細な説明については、Webapp 設定のドキュメントを参照してください。
pricingTier(サービスプラン)の値は、Linux 用および Windows 用で確認できます。regionの値のリストは、次の Azure CLI コマンド:az account list-locations --query "[].name" --output tsvを実行するか、製品の可用性表で "App Service" を検索することで取得できます。
アプリケーションのデプロイ
新しい Web アプリへのデプロイ
Azure Web App Deploy プラグインで使用される認証方法には Azure CLI が使用されます。まだ行っていない場合は、az login で一度ログインし、指示に従ってください。
最後に、azureWebAppDeploy タスクを実行してアプリケーションをデプロイします。このタスクは、最初にファット JAR をビルドしてからデプロイするように設定されています。
このタスクは、リソースグループ、プラン、および Web アプリを作成し、ファット JAR をデプロイします。デプロイが成功すると、次のような出力が表示されるはずです。
> Task: :embedded-server:azureWebAppDeploy
Auth type: AZURE_CLI
Username: [email protected]
Subscription: Some Subscription(13936cf1-cc18-40be-a0d4-177fe532b3dd)
Start creation Resource Group(resource-group) in region (Some Region)
Resource Group (resource-group) is successfully created.
Start creating App Service plan (asp-your-webapp-name)...
App Service plan (asp-your-webapp-name) is successfully created
Start creating Web App(your-webapp-name)...
Web App(your-webapp-name) is successfully created
Trying to deploy artifact to your-webapp-name...
Deploying (C:\docs\ktor-documentation\codeSnippets\snippets\embedded-server\build\libs\embedded-server.jar)[jar] ...
Application url: https://your-webapp-name.azurewebsites.netデプロイが完了すると、上記の URL で新しい Web アプリが実行されていることを確認できるはずです。
既存の Web アプリへのデプロイ
Azure App Service に既存の Java Web アプリがすでにある場合は、まず Ktor プラグインによって提供される buildFatJar タスクを実行して、ファット JAR をビルドします。
次に、Azure CLI の次のコマンドを使用して、先ほど作成したファット JAR をデプロイします。
az webapp deploy -g RESOURCE-GROUP-NAME -n WEBAPP-NAME --src-path ./path/to/embedded-server.jar --restart trueこのコマンドは JAR ファイルをアップロードし、Web アプリを再起動します。しばらくすると、デプロイの結果が表示されるはずです。
Deployment type: jar. To override deployment type, please specify the --type parameter. Possible values: war, jar, ear, zip, startup, script, static
Initiating deployment
Deploying from local path: ./snippets/embedded-server/build/libs/embedded-server.jar
Warming up Kudu before deployment.
Warmed up Kudu instance successfully.
Polling the status of sync deployment. Start Time: 2025-09-07 00:07:14.729383+00:00 UTC
Status: Build successful. Time: 5(s)
Status: Starting the site... Time: 23(s)
Status: Starting the site... Time: 41(s)
Status: Site started successfully. Time: 44(s)
Deployment has completed successfully
You can visit your app at: http://your-app-name.some-region.azurewebsites.net