Azure Web Apps 用の Maven プラグインを使用して Azure Container Registry の Spring Boot アプリを Azure App Service にデプロイする方法How to use the Maven Plugin for Azure Web Apps to deploy a Spring Boot app in Azure Container Registry to Azure App Service

この記事では、Spring Boot サンプル アプリケーションを Azure Container Registry にデプロイし、Azure Web Apps 用の Maven プラグインを使用して、アプリケーションを Azure App Service にデプロイする方法を説明します。This article demonstrates how to deploy a sample Spring Boot application to Azure Container Registry, and then use the Maven Plugin for Azure Web Apps to deploy your application to Azure App Service.

注意

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.

前提条件Prerequisites

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

  • Azure サブスクリプション。Azure サブスクリプションをまだお持ちでない場合は、MSDN サブスクライバーの特典を有効にするか、または無料の Azure アカウントにサインアップできます。An Azure subscription; if you don't already have an Azure subscription, you can activate your [MSDN subscriber benefits] or sign up for a [free Azure account].
  • Azure コマンド ライン インターフェイス (CLI)The [Azure Command-Line Interface (CLI)].
  • 最新の Java Development Kit (JDK) (バージョン 1.7 以降)。An up-to-date [Java Development Kit (JDK)], version 1.7 or later.
  • Apache の Maven 構築ツール (バージョン 3)。Apache's Maven build tool (Version 3).
  • Git クライアント。A Git client.
  • Docker クライアント。A Docker client.

注意

このチュートリアルには仮想化要件があるため、仮想マシンでこの記事の手順を実行することはできません。仮想化機能を有効にした物理コンピューターを使用する必要があります。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 -b private-registry https://github.com/Microsoft/gs-spring-boot-docker
    
  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

    サンプル アプリをローカルに参照する

注意

ローカルで Docker を使用していると、ポート 2375 で localhost に接続できないことを示すエラーが表示される場合があります。When you are using Docker locally, you may see an error which states that you cannot connect to localhost on port 2375. これが発生した場合は、TLS を使用せずにローカルでの Docker の使用を有効にすることが必要になる可能性があります。If this happens, you may need to enable using Docker locally without TLS. これを行うには、Docker の設定を開き、[Expose daemon on TCP://localhost:2375 without TLS](TLS を使用せずに TCP://localhost:2375 でデーモンを公開する) チェック ボックスをオンにします。To do so, open your Docker settings and check the option to Expose daemon on TCP://localhost:2375 without TLS.

ローカルの TCP ポート 2375 で Docker デーモンを公開する

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"
    

    各値の説明:Where:

    パラメーター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.

Azure CLI を使用して Azure Container Registry を作成するCreate an Azure Container Registry using the Azure CLI

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

  2. Azure アカウントにログインします。Log in to your Azure account:

    az login
    
  3. この記事で使用する Azure リソースのリソース グループを作成します。Create a resource group for the Azure resources you will use in this article:

    az group create --name=wingtiptoysresources --location=westus
    

    この例の wingtiptoysresources をご利用のリソース グループの一意の名前に置き換えます。Replace wingtiptoysresources in this example with a unique name for your resource group.

  4. リソース グループ内に、ご利用の Spring Boot アプリ用のプライベートな Azure コンテナー レジストリを作成します。Create a private Azure container registry in the resource group for your Spring Boot app:

    az acr create --admin-enabled --resource-group wingtiptoysresources --location westus --name wingtiptoysregistry --sku Basic
    

    この例の wingtiptoysregistry をコンテナー レジストリの一意の名前に置き換えます。Replace wingtiptoysregistry in this example with a unique name for your container registry.

  5. コンテナー レジストリのパスワードを取得します。Retrieve the password for your container registry:

    az acr credential show --name wingtiptoysregistry --query passwords[0]
    

    Azure が次の例のようにパスワードを返します。Azure will respond with your password; for example:

    {
       "name": "password",
       "value": "xxxxxxxxxx"
    }
    

Maven の設定に Azure コンテナー レジストリと Azure サービス プリンシパルを追加するAdd your Azure container registry and Azure service principal to your Maven settings

  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 Container Registry のアクセス設定を、次の例のように settings.xml ファイルの <servers> コレクションに追加します。Add your Azure Container Registry access settings from the previous section of this article to the <servers> collection in the settings.xml file; for example:

    <servers>
       <server>
          <id>wingtiptoysregistry</id>
          <username>wingtiptoysregistry</username>
          <password>xxxxxxxxxx</password>
       </server>
    </servers>
    

    各値の説明:Where:

    要素Element [説明]Description
    <id> プライベートな Azure コンテナー レジストリの名前が含まれています。Contains the name of your private Azure container registry.
    <username> プライベートな Azure コンテナー レジストリの名前が含まれています。Contains the name of your private Azure container registry.
    <password> この記事の前のセクションで取得したパスワードが含まれています。Contains the password you retrieved in the previous section of this article.
  3. この記事の前のセクションで説明した Azure サービス プリンシパル設定を、次の例のように settings.xml ファイルの <servers> コレクションに追加します。Add your Azure service principal settings from an earlier section of this article to the <servers> collection in the settings.xml file; for example:

    <servers>
       <server>
         <id>azure-auth</id>
          <configuration>
             <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
             <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
             <key>pppppppp</key>
             <environment>AZURE</environment>
          </configuration>
       </server>
    </servers>
    

    各値の説明:Where:

    要素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. (環境の全リストは、「Maven Plugin for Azure Web Apps (Azure Web Apps 用の Maven プラグイン)」のドキュメントに記載しています)(A full list of environments is available in the [Maven Plugin for Azure Web Apps] documentation)
  4. settings.xml ファイルを保存して閉じます。Save and close the settings.xml file.

Docker コンテナー イメージを構築し、Azure コンテナー レジストリにプッシュするBuild your Docker container image and push it to your Azure container registry

  1. Spring Boot アプリケーションの完了プロジェクトディレクトリ ("C:\SpringBoot\gs-spring-boot-docker\complete" や "/users/robert/SpringBoot/gs-spring-boot-docker/complete" など) に移動し、pom.xml ファイルをテキスト エディターで開きます。Navigate to the completed project directory for your Spring Boot application, (e.g. "C:\SpringBoot\gs-spring-boot-docker\complete" or "/users/robert/SpringBoot/gs-spring-boot-docker/complete"), and open the pom.xml file with a text editor.

  2. pom.xml ファイル内の <properties> コレクションを、このチュートリアルの前のセクションにあった Azure Container Registry のログイン サーバー値で更新します。次に例を示します。Update the <properties> collection in the pom.xml file with the login server value for your Azure Container Registry from the previous section of this tutorial; for example:

    <properties>
       <azure.containerRegistry>wingtiptoysregistry</azure.containerRegistry>
       <docker.image.prefix>${azure.containerRegistry}.azurecr.io</docker.image.prefix>
       <java.version>1.8</java.version>
       <maven.build.timestamp.format>yyyyMMddHHmmssSSS</maven.build.timestamp.format>
    </properties>
    

    各値の説明:Where:

    要素Element [説明]Description
    <azure.containerRegistry> プライベートな Azure コンテナー レジストリの名前を指定します。Specifies the name of your private Azure container registry.
    <docker.image.prefix> プライベートな Azure コンテナー レジストリの URL (プライベートなコンテナー レジストリの名前に ".azurecr.io" が追加されたもの) を指定します。Specifies the URL of your private Azure container registry, which is derived by appending ".azurecr.io" to the name of your private container registry.
  3. pom.xml ファイル内の Docker プラグインの <plugin> に、このチュートリアルの前の手順で説明したログイン サーバー アドレスとレジストリ名の正しいプロパティが含まれていることを確認します。Verify that <plugin> for the Docker plugin in your pom.xml file contains the correct properties for the login server address and registry name from the previous step in this tutorial. 例: For example:

    <plugin>
       <groupId>com.spotify</groupId>
       <artifactId>docker-maven-plugin</artifactId>
       <version>0.4.11</version>
       <configuration>
          <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
          <registryUrl>https://${docker.image.prefix}</registryUrl>
          <serverId>${azure.containerRegistry}</serverId>
          <dockerDirectory>src/main/docker</dockerDirectory>
          <resources>
             <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
             </resource>
          </resources>
       </configuration>
    </plugin>
    

    各値の説明:Where:

    要素Element [説明]Description
    <serverId> プライベートな Azure コンテナー レジストリの名前を含むプロパティを指定します。Specifies the property which contains name of your private Azure container registry.
    <registryUrl> プライベートな Azure コンテナー レジストリの URL を含むプロパティを指定します。Specifies the property which contains the URL of your private Azure container registry.
  4. Spring Boot アプリケーション用の完了プロジェクト ディレクトリに移動し、次のコマンドを実行してアプリケーションをリビルドし、コンテナーを Azure コンテナー レジストリにプッシュします。Navigate to the completed project directory for your Spring Boot application and run the following command to rebuild the application and push the container to your Azure container registry:

    mvn package docker:build -DpushImage 
    
  5. 省略可能: Azure Portal を参照して、コンテナー レジストリに gs-spring-boot-docker という名前の Docker コンテナー イメージがあることを確認します。OPTIONAL: Browse to the Azure portal and verify that there is Docker container image named gs-spring-boot-docker in your container registry.

    Azure Portal でコンテナーを確認

pom.xml をカスタマイズしてコンテナーを構築し Azure にデプロイするCustomize your pom.xml, then build and deploy 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:

<plugin>
   <groupId>com.microsoft.azure</groupId>
   <artifactId>azure-webapp-maven-plugin</artifactId>
   <version>0.1.3</version>
   <configuration>
      <authentication>
         <serverId>azure-auth</serverId>
      </authentication>
      <resourceGroup>wingtiptoysresources</resourceGroup>
      <appName>maven-linux-app-${maven.build.timestamp}</appName>
      <region>westus</region>
      <containerSettings>
         <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
         <registryUrl>https://${docker.image.prefix}</registryUrl>
         <serverId>${azure.containerRegistry}</serverId>
      </containerSettings>
      <appSettings>
         <property>
            <name>PORT</name>
            <value>8080</value>
         </property>
      </appSettings>
   </configuration>
</plugin>

Maven プラグイン用に変更できる値は複数あります。これらの要素に関する詳しい説明はそれぞれ「Maven Plugin for Azure Web Apps (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> Maven Plugin for Azure Web Apps (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> ターゲット リソース グループを指定します。この例では wingtiptoysresources です。Specifies the target resource group, which is wingtiptoysresources 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-${maven.build.timestamp} です。混乱を避けるため、この例ではサフィックスの ${maven.build.timestamp} を追加しています In this example, the target name is maven-linux-app-${maven.build.timestamp}, where the ${maven.build.timestamp} 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. (全リストは、「Maven Plugin for Azure Web Apps (Azure Web Apps 用の Maven プラグイン)」のドキュメントに記載しています。)(A full list is in the [Maven Plugin for Azure Web Apps] documentation.)
<containerSettings> コンテナーの名前を含むプロパティと URL を含むプロパティを指定します。Specifies the properties which contain the name and URL of your container.
<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.

  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] BUILD FAILURE
[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 com.microsoft.azure:azure-webapp-maven-plugin:0.1.3:deploy (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

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