Azure App Service
このチュートリアルでは、Ktorアプリケーションをビルド、設定、デプロイする方法をAzure App Serviceに示します。
前提条件
このチュートリアルを開始する前に、以下が必要です。
サンプルアプリケーションを作成する
新しいKtorプロジェクトの作成、オープン、実行で説明されているように、サンプルアプリケーションを作成します。この例では、以下のプロジェクトに基づいたコードとコマンドを示しています。embedded-serverとengine-main。
上記のチュートリアルでは、アプリケーションを設定する2つの方法を提供しています。値をコードで直接指定するか、設定ファイルを使用するかのいずれかです。どちらの場合でも、重要な設定はサーバーが受信リクエストをリッスンするポートです。
アプリケーションを設定する
ステップ1: ポートを設定する
Azure App Serviceでは、環境変数 PORT に受信リクエスト用に開かれているポート番号が含まれています。Ktorサーバーの構成でアプリを作成した方法に応じて、この環境変数を読み取るためにコードを次のいずれかの場所で更新する必要があります。
ポート設定をコード内で行う例を使用した場合は、環境変数
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.2" // ADDED
id("com.microsoft.azure.azurewebapp") version "1.10.0" // ADDED
}io.ktor.plugin は、fat JARを作成するために使用されるタスクを提供します。そして、Azure WebApp Plugin for Gradleは、Azureで必要なすべてのリソースを簡単に作成するために使用されます。
application セクションに mainClass が定義されていることを確認してください。これにより、fat JARの明確なエントリポイントが確保されます。
application {
mainClass.set("com.example.ApplicationKt")
}engine-main テンプレートでプロジェクトを作成した場合、メインクラスは以下のようになります。
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}ステップ3: 設定
App Serviceに既にデプロイしたいJavaウェブアプリを作成している場合は、このステップをスキップできます。
それ以外の場合は、Azure Webapp Pluginがウェブアプリを作成するように、ファイルの末尾に build.gradle.kts に以下のエントリを追加します。
// fat JARをデプロイタスクが期待する名前に変更します
ktor {
fatJar {
archiveFileName.set("embedded-server.jar")
}
}
// Azure Pluginが通常実行する `jar` タスクを無効にし、
// 代わりに `fatJar` タスクによって作成されたアーカイブをデプロイします
tasks.named("jar") {
enabled = false
}
// デプロイタスクが最初にfat JARをビルドすることを保証します
tasks.named("azureWebAppDeploy") {
dependsOn("buildFatJar")
}
// Azure Webapp Pluginの設定
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"
})
}利用可能な設定プロパティの詳細については、Webアプリ設定のドキュメントを参照してください。
pricingTier(サービスプラン) の値は、Linux用とWindows用に記載されています。regionの値のリストは、以下のAzure CLIコマンド:az account list-locations --query "[].name" --output tsvで取得できます。または製品の提供状況テーブルで「App Service」を検索することによって取得できます。
アプリケーションをデプロイする
新しいウェブアプリへ
Azure Web App Deployプラグインが使用する認証方法は、Azure CLIを使用します。まだログインしていない場合は、一度 az login でログインし、指示に従ってください。
最後に、azureWebAppDeploy タスクを実行してアプリケーションをデプロイします。このタスクは、最初にfat JARをビルドしてからデプロイするように設定されています。
このタスクは、リソースグループ、プラン、ウェブアプリを作成し、その後fat JARをデプロイします。デプロイが成功すると、以下のような出力が表示されます。
> タスク: :embedded-server:azureWebAppDeploy
認証タイプ: AZURE_CLI
ユーザー名: [email protected]
サブスクリプション: Some Subscription(13936cf1-cc18-40be-a0d4-177fe532b3dd)
リソースグループ(resource-group)の作成を地域(Some Region)で開始します
リソースグループ(resource-group)が正常に作成されました。
App Serviceプラン(asp-your-webapp-name)の作成を開始します...
App Serviceプラン(asp-your-webapp-name)が正常に作成されました
ウェブアプリ(your-webapp-name)の作成を開始します...
ウェブアプリ(your-webapp-name)が正常に作成されました
アーティファクトを your-webapp-name にデプロイしようとしています...
(C:\docs\ktor-documentation\codeSnippets\snippets\embedded-server\build\libs\embedded-server.jar) [jar] をデプロイ中...
アプリケーションURL: https://your-webapp-name.azurewebsites.netデプロイが完了すると、上記に示されたURLで新しいウェブアプリが動作しているのを確認できます。
既存のウェブアプリへ
Azure App Serviceに既存のJavaウェブアプリがある場合、まず、Ktorプラグインによって提供される buildFatJar タスクを実行してfat JARをビルドします。
次に、Azure CLIの以下のコマンドを使用して、以前に作成したfat JARをデプロイします。
az webapp deploy -g RESOURCE-GROUP-NAME -n WEBAPP-NAME --src-path ./path/to/embedded-server.jar --restart trueこのコマンドはJARファイルをアップロードし、ウェブアプリを再起動します。しばらくすると、デプロイの結果が表示されます。
デプロイタイプ: jar。デプロイタイプを上書きするには、--type パラメーターを指定してください。可能な値: war, jar, ear, zip, startup, script, static
デプロイを開始しています
ローカルパスからデプロイ中: ./snippets/embedded-server/build/libs/embedded-server.jar
デプロイ前にKuduをウォームアップ中。
Kuduインスタンスのウォームアップに成功しました。
同期デプロイのステータスをポーリング中。開始時刻: 2025-09-07 00:07:14.729383+00:00 UTC
ステータス: ビルド成功。時間: 5(秒)
ステータス: サイトを開始しています... 時間: 23(秒)
ステータス: サイトを開始しています... 時間: 41(秒)
ステータス: サイトが正常に開始されました。時間: 44(秒)
デプロイが正常に完了しました
アプリは以下でアクセスできます: http://your-app-name.some-region.azurewebsites.net