Azure Web Apps 用の Maven を使用して、コンテナー化された Spring Boot アプリを Azure にデプロイするUse Maven for Azure Web Apps to deploy a containerized Spring Boot app to Azure

この記事では、Azure Web Apps 用の Maven プラグインを使用して、Docker コンテナーの Spring Boot サンプル アプリケーションを Azure App Services にデプロイする方法について説明します。This article demonstrates using the Maven Plugin for Azure Web Apps to deploy a sample Spring Boot application in a Docker container to Azure App Services.


Apache Maven 用の Azure Web Apps 用 Maven プラグイン は、Maven プロジェクトに Azure App Service をシームレスに統合し、開発者が Web アプリを Azure App Service にデプロイするプロセスを効率化します。The Maven Plugin for Azure Web Apps for Apache Maven provides seamless integration of Azure App Service into Maven projects, and streamlines the process for developers to deploy web apps to Azure App Service.

Azure Web Apps の Maven プラグインは現在プレビューとして提供されています。The Maven Plugin for Azure Web Apps is currently available as a preview. 今後、機能が追加される予定ですが、現在は FTP 発行のみがサポートされています。For now, only FTP publishing is supported, although additional features are planned for the future.


このチュートリアルの手順を完了するには、次の前提条件を満たす必要があります。In order to complete the steps in this tutorial, you need to have the following prerequisites:


このチュートリアルには仮想化要件があるため、仮想マシンでこの記事の手順を実行することはできません。仮想化機能を有効にした物理コンピューターを使用する必要があります。Due to the virtualization requirements of this tutorial, you cannot follow the steps in this article on a virtual machine; you must use a physical computer with virtualization features enabled.

Docker Web アプリの Spring Boot サンプルの複製Clone the sample Spring Boot on Docker web app

このセクションでは、コンテナー化された Spring Boot アプリケーションを複製してローカルでテストします。In this section, you clone a containerized Spring Boot application and test it locally.

  1. コマンド プロンプトまたはターミナル ウィンドウを開き、Spring Boot アプリケーションを保持するためのローカル ディレクトリを作成して、次の例のようにそのディレクトリに移動します。Open a command prompt or terminal window and create a local directory to hold your Spring Boot application, and change to that directory; for example:

    md C:\SpringBoot
    cd C:\SpringBoot

    -- または ---- or --

    md /users/robert/SpringBoot
    cd /users/robert/SpringBoot
  2. Docker での Spring Boot の使用開始のサンプル プロジェクトを今作成したディレクトリに複製します。次に例を示します。Clone the Spring Boot on Docker Getting Started sample project into the directory you created; for example:

    git clone
  3. 完成したプロジェクトにディレクトリを変更します。次に例を示します。Change directory to the completed project; for example:

    cd gs-spring-boot-docker/complete
  4. Maven を使用して JAR ファイルを構築します。次に例を示します。Build the JAR file using Maven; for example:

    mvn clean package
  5. Web アプリを作成したら、次の例のように Maven を使って Web アプリを起動します。When the web app has been created, start the web app using Maven; for example:

    mvn spring-boot:run
  6. Web アプリのテストは、Web ブラウザーを使用してアプリをローカルで参照して行います。Test the web app by browsing to it locally using a web browser. たとえば、curl を使うことができる場合は次のようなコマンドを実行できます。For example, you could use the following command if you have curl available:

    curl http://localhost:8080
  7. 次のメッセージが表示されます。Hello Docker WorldYou should see the following message displayed: Hello Docker World

Azure サービス プリンシパルを作成するCreate an Azure service principal

このセクションでは、Azure にコンテナーをデプロイするときに、Maven プラグインが使用する Azure サービス プリンシパルを作成します。In this section, you create an Azure service principal that the Maven plugin uses when deploying your container to Azure.

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. Azure CLI を使って、Azure アカウントにサインインします。Sign into your Azure account by using the Azure CLI:

    az login

    指示に従って、サインインを完了します。Follow the instructions to complete the sign-in process.

  3. Azure サービス プリンシパルを作成します。Create an Azure service principal:

    az ad sp create-for-rbac --name "uuuuuuuu" --password "pppppppp"


    パラメーターParameter 説明Description
    uuuuuuuu サービス プリンシパルのユーザー名を指定します。Specifies the user name for the service principal.
    pppppppp サービス プリンシパルのパスワードを指定します。Specifies the password for the service principal.
  4. Azure が次の例に類似する JSON で応答します。Azure responds with JSON that resembles the following example:

       "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
       "displayName": "uuuuuuuu",
       "name": "http://uuuuuuuu",
       "password": "pppppppp",
       "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"


    Maven プラグインを構成して Azure にコンテナーをデプロイするときに、この JSON の応答にある値を使用します。You will use the values from this JSON response when you configure the Maven plugin to deploy your container to Azure. aaaaaaaa``uuuuuuuu``pppppppp``tttttttt はプレースホルダーの値であり、次のセクションで Maven の settings.xml ファイルを構成するときに、これらの値と値の各要素を簡単にマップできるよう使用されています。The aaaaaaaa, uuuuuuuu, pppppppp, and tttttttt are placeholder values, which are used in this example to make it easier to map these values to their respective elements when you configure your Maven settings.xml file in the next section.

Maven を構成して Azure サービス プリンシパルを使用するConfigure Maven to use your Azure service principal

このセクションでは、Azure サービス プリンシパルの値を使用して、コンテナーを Azure にデプロイするときに Maven が使用する認証を構成します。In this section, you use the values from your Azure service principal to configure the authentication that Maven will use when deploying your container to Azure.

  1. Maven の settings.xml ファイルをテキスト エディターで開くと、次の例のようにパスが記載されていることがあります。Open your Maven settings.xml file in a text editor; this file might be in a path like the following examples:

    • /etc/maven/settings.xml
    • %ProgramFiles%\apache-maven\3.5.0\conf\settings.xml
    • $HOME/.m2/settings.xml
  2. このチュートリアルの前のセクションで説明した Azure サービス プリンシパルの設定を、次の例のように settings.xml ファイルの <servers> コレクションに追加します。Add your Azure service principal settings from the previous section of this tutorial to the <servers> collection in the settings.xml file; for example:



    要素Element 説明Description
    <id> Web アプリを Azure にデプロイするとき、セキュリティ設定を検索するために Maven が使う一意の名前を指定します。Specifies a unique name which Maven uses to look up your security settings when you deploy your web app to Azure.
    <client> サービス プリンシパルの appId 値が含まれています。Contains the appId value from your service principal.
    <tenant> サービス プリンシパルの tenant 値が含まれています。Contains the tenant value from your service principal.
    <key> サービス プリンシパルの password 値が含まれています。Contains the password value from your service principal.
    <environment> ターゲットの Azure クラウド環境を定義します。この例では AZURE ですDefines the target Azure cloud environment, which is AZURE in this example. (環境の全リストは、「Azure Web Apps 用の Maven プラグイン」のドキュメントに記載しています)(A full list of environments is available in the Maven Plugin for Azure Web Apps documentation)
  3. settings.xml ファイルを保存して閉じます。Save and close the settings.xml file.

省略可能:ローカルの Docker ファイルを Docker Hub にデプロイしますOPTIONAL: Deploy your local Docker file to Docker Hub

Docker アカウントがあれば、Docker コンテナー イメージをローカルで構築して Docker Hub にプッシュできます。If you have a Docker account, you can build your Docker container image locally and push it to Docker Hub. そのためには、次の手順に従います。To do so, use the following steps.

  1. Spring Boot アプリケーションの pom.xml ファイルをテキスト エディターで開きます。Open the pom.xml file for your Spring Boot application in a text editor.

  2. <containerSettings> 要素の <imageName> 子要素を見つけます。Locate the <imageName> child element of the <containerSettings> element.

  3. ${docker.image.prefix} の値を Docker アカウント名に更新します。Update the ${docker.image.prefix} value with your Docker account name:

  4. 次のいずれかのデプロイ方法を選択してください。Choose one of the following deployment methods:

    • Maven でコンテナー イメージをローカルで構築し、Docker を使用してコンテナーを Docker Hub にプッシュします。Build your container image locally with Maven, and then use Docker to push your container to Docker Hub:

      mvn clean package docker:build
      docker push
    • Maven 用の Docker プラグインがインストールされていれば、-DpushImage パラメーターを使用してコンテナー イメージを自動で Docker Hub に構築できます。If you have the Docker plugin for Maven installed, you can automatically build and your container image to Docker Hub by using the -DpushImage parameter:

      mvn clean package docker:build -DpushImage

省略可能:コンテナーを Azure にデプロイする前に pom.xml をカスタマイズしますOPTIONAL: Customize your pom.xml before deploying your container to Azure

Spring Boot アプリケーションの pom.xml ファイルをテキスト エディターで開き、azure-webapp-maven-plugin<plugin> 要素を見つけます。Open the pom.xml file for your Spring Boot application in a text editor, and then locate the <plugin> element for azure-webapp-maven-plugin. この要素は次の例のようになっています。This element should resemble the following example:


Maven プラグイン用に変更できる値は複数あります。これらの要素に関する詳しい説明はそれぞれ「Azure Web Apps 用の Maven プラグイン」のドキュメントに記載されています。There are several values that you can modify for the Maven plugin, and a detailed description for each of these elements is available in the Maven Plugin for Azure Web Apps documentation. この記事でも、次のように重要な値については説明します。That being said, there are several values that are worth highlighting in this article:

要素Element 説明Description
<version> Azure Web Apps 用の Maven プラグインのバージョンを指定します。Specifies the version of the Maven Plugin for Azure Web Apps. 最新バージョンを使用していることを確認するために、Maven Central Respository で一覧表示されているバージョンを確認してください。You should check the version listed in the Maven Central Respository to ensure that you are using the latest version.
<authentication> Azure の認証情報を指定します。この例では azure-auth を含む <serverId> 要素が認証情報です。Maven はこの値を、この記事の前のセクションで定義した Maven のsettings.xml ファイル内にある Azure サービス プリンシパルを見つけるために使います。Specifies the authentication information for Azure, which in this example contains a <serverId> element that contains azure-auth; Maven uses that value to look up the Azure service principal values in your Maven settings.xml file, which you defined in an earlier section of this article.
<resourceGroup> ターゲット リソース グループを指定します。この例では maven-plugin です。Specifies the target resource group, which is maven-plugin in this example. リソース グループが存在しない場合は、デプロイ中に新しいリソース グループが作成されます。The resource group will be created during deployment if it does not already exist.
<appName> Web アプリのターゲット名を指定します。Specifies the target name for your web app. この例では、ターゲット名は maven-linux-app-${} です。混乱を避けるため、この例ではサフィックスの ${} を追加していますIn this example, the target name is maven-linux-app-${}, where the ${} suffix is appended in this example to avoid conflict. (タイムスタンプは省略可能です。アプリ名には一意の文字列を指定できます)。(The timestamp is optional; you can specify any unique string for the app name.)
<region> ターゲット リージョンを指定します。この例では westus ですSpecifies the target region, which in this example is westus. (全リストは、「Azure Web Apps 用の Maven プラグイン」のドキュメントに記載しています。)(A full list is in the Maven Plugin for Azure Web Apps documentation.)
<appSettings> Azure に Web アプリをデプロイするときに使用するために、Maven 用の一意の設定を指定します。Specifies any unique settings for Maven to use when deploying your web app to Azure. この例では、<property> 要素には、アプリのポートを指定する子要素の名前と値のペアが含まれています。In this example, a <property> element contains a name/value pair of child elements that specify the port for your app.


既定と異なるポートに変更する場合のみ、この例のポート番号を変更する設定が必要になります。The settings to change the port number in this example are only necessary when you are changing the port from the default.

Azure にコンテナーを構築してデプロイするBuild and deploy your container to Azure

この記事の前のセクションで説明した設定をすべて構成したら、次は Azure にコンテナーをデプロイします。Once you have configured all of the settings in the preceding sections of this article, you are ready to deploy your container to Azure. そのためには、次の手順を実行してください。To do so, use the following steps:

  1. pom.xml ファイルを変更する場合は、以前使っていたコマンド プロンプトまたはターミナル ウィンドウで、次の例のように Maven を使って JAR ファイルをリビルドします。From the command prompt or terminal window that you were using earlier, rebuild the JAR file using Maven if you made any changes to the pom.xml file; for example:

    mvn clean package
  2. Maven を使って次の例のように Azure に Web アプリをデプロイします。Deploy your web app to Azure by using Maven; for example:

    mvn azure-webapp:deploy

Maven が Web アプリを Azure にデプロイします。Web アプリが存在しない場合は新たに作成されます。Maven will deploy your web app to Azure; if the web app does not already exist, it will be created.


デプロイ開始時に、pom.xml ファイルの <region> 要素で指定したリージョンに十分な数の使用可能なサーバーがない場合は、次の例のようなエラーが表示されることがあります。If the region which you specify in the <region> element of your pom.xml file does not have enough servers available when you start your deployment, you might see an error similar to the following example:

[INFO] Start deploying to Web App maven-linux-app-20170804...
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 31.059 s
[INFO] Finished at: 2017-08-04T12:15:47-07:00
[INFO] Final Memory: 51M/279M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal (default-cli) on project gs-spring-boot-docker: null: MojoExecutionException: CloudException: OnError while emitting onNext value: retrofit2.Response.class

この場合、別のリージョンを指定し、Maven コマンドを再実行してアプリケーションをデプロイできます。If this happens, you can specify another region and re-run the Maven command to deploy your application.

Web アプリのデプロイが完了すると、Azure Portal を使用して Web アプリを管理できるようになります。When your web has been deployed, you will be able to manage it by using the Azure portal.

  • Web アプリは App Services に一覧表示されます。Your web app will be listed in App Services:

    Azure Portal の App Services に一覧表示される Web アプリ

  • Web アプリの URL は、Web アプリの [概要] に一覧表示されます。And the URL for your web app will be listed in the Overview for your web app:

    Web アプリの URL の決定

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.

その他のリソースAdditional Resources

この記事で説明しているさまざまなテクノロジの詳細については、次の記事をご覧ください。For more information about the various technologies discussed in this article, see the following articles:

Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。For more information about using Azure with Java, see the Azure for Java Developers and the Working with Azure DevOps and Java.