MySQL を使用して Spring アプリを App Service にデプロイするDeploy a Spring app to App Service with MySQL

このチュートリアルでは、App Service Linux で Java Web アプリをビルド、構成、デプロイ、トラブルシューティング、およびスケールするプロセスについて説明します。This tutorial walks you through the process of building, configuring, deploying, troubleshooting and scaling Java web apps in App Service Linux.

このチュートリアルは、一般的な Spring PetClinic サンプル アプリに基づいています。This tutorial builds on the popular Spring PetClinic sample app. このトピックでは、HSQLDB バージョンのアプリをローカルでテストし、Azure App Service にデプロイします。In this topic, you will test an HSQLDB version of the app locally, then deploy it to Azure App Service. その後、Azure Database for MySQL を使用するバージョンを構成して展開します。After that, you will configure and deploy a version that uses Azure Database for MySQL. 最後に、アプリのログにアクセスし、アプリを実行するワーカーの数を増増やしてスケールアウトする方法について説明します。Finally, you will learn how to access the app logs and scale out by increasing the number of workers running your app.

前提条件Prerequisites

サンプルを入手するGet the sample

サンプル アプリを使い始める場合は、次のコマンドを使用してソース リポジトリを複製し、準備します。To get started with the sample app, clone and prepare the source repo using the following commands.

git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux.git
cd e2e-java-experience-in-app-service-linux
yes | cp -rf .prep/* .

HSQLDB サンプルをローカルでビルドして実行するBuild and run the HSQLDB sample locally

まず HSQLDB をデータベースとして使用して、サンプルをローカルでテストします。First, we'll test the sample locally using using HSQLDB as the database.

HSQLDB バージョンのサンプルに移動し、ビルドします。Navigate to the HSQLDB version of the sample and then build it.

cd initial-hsqldb/spring-framework-petclinic
mvn package

次に、TOMCAT_HOME 環境変数を Tomcat のインストール場所に設定します。Next, set the TOMCAT_HOME environment variable to the location of your Tomcat installation.

export TOMCAT_HOME=<Tomcat install directory>

次に、pom.xml ファイルを更新して、Tomcat WAR ファイルのデプロイ用に Maven を構成します。Then, update the pom.xml file to configure Maven for a Tomcat WAR file deployment. 次の XML を既存の <plugins> 要素の子として追加します。Add the following XML as a child of the existing <plugins> element. 必要に応じて、1.7.7Cargo Maven 2 プラグインの最新バージョンに変更します。If necessary, change 1.7.7 to the current version of the Cargo Maven 2 Plugin.

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.7.7</version>
    <configuration>
        <container>
            <containerId>tomcat8x</containerId>
            <type>installed</type>
            <home>${TOMCAT_HOME}</home>
        </container>
        <configuration>
            <type>existing</type>
            <home>${TOMCAT_HOME}</home>
        </configuration>
        <deployables>
            <deployable>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <type>war</type>
                <properties>
                    <context>/</context>
                </properties>
            </deployable>
        </deployables>
    </configuration>
</plugin>

この構成を使用すると、ローカルでアプリを Tomcat に展開できます。With this configuration in place, you can deploy the app locally to Tomcat.

mvn cargo:deploy

次に、Tomcat を起動します。Then, launch Tomcat.

${TOMCAT_HOME}/bin/catalina.sh run

これで、ブラウザーで http://localhost:8080 に移動して実行中のアプリを表示し、動作を確認できるようになりました。You can now navigate your browser to http://localhost:8080 to see the running app and get a feel for how it works. 完了したら、Bash プロンプトで Ctrl + C キーを押して Tomcat を停止します。When you are finished, select Ctrl+C at the Bash prompt to stop Tomcat.

Azure App Service にデプロイするDeploy to Azure App Service

ローカルで動作することを確認したので、次はアプリを Azure にデプロイします。Now that you've seen it running locally, we'll deploy the app to Azure.

まず、次の環境変数を設定します。First, set the following environment variables.

export RESOURCEGROUP_NAME=<resource group>
export WEBAPP_NAME=<web app>
export WEBAPP_PLAN_NAME=${WEBAPP_NAME}-appservice-plan
export REGION=<region>

Maven では、指定した名前で Azure リソースを作成するためにこれらの値が使用されます。Maven will use these values to create the Azure resources with the names you provide. 環境変数を使用すると、プロジェクト ファイルのアカウントのシークレットを保持することができます。By using environment variables, you can keep your account secrets out of your project files.

次に、pom.xml ファイルを更新して、Azure へのデプロイ用に Maven を構成します。Next, update the pom.xml file to configure Maven for an Azure deployment. 以前に追加した <plugin> 要素の後に、次の XML を追加します。Add the following XML after the <plugin> element you added previously. 必要に応じて、1.7.0Azure App Service 用 Maven プラグインの最新バージョンに変更します。If necessary, change 1.7.0 to the current version of the Maven Plugin for Azure App Service.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-webapp-maven-plugin</artifactId>
    <version>1.8.0</version>
    <configuration>
        <schemaVersion>v2</schemaVersion>
        <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
        <appServicePlanName>${WEBAPP_PLAN_NAME}</appServicePlanName>
        <appName>${WEBAPP_NAME}</appName>
        <region>${REGION}</region>
        <runtime>
            <os>linux</os>
            <javaVersion>jre8</javaVersion>            
            <webContainer>TOMCAT 8.5</webContainer>
        </runtime>
    </configuration>
</plugin>

次に、Azure にサインインします。Next, sign in to Azure.

az login

次に、アプリを App Service Linux にデプロイします。Then deploy the app to App Service Linux.

mvn azure-webapp:deploy

これで、(https://<app-name>.azurewebsites.net を置換した後に) <app-name> に移動して実行中のアプリを表示できるようになりました。You can now navigate to https://<app-name>.azurewebsites.net (after replacing <app-name>) to see the running app.

Azure Database for MySQL の設定Set up Azure Database for MySQL

次に、HSQLDB ではなく MySQL を使用するように切り替えます。Next, we'll switch to using MySQL instead of HSQLDB. Azure 上で MySQL サーバー インスタンスを作成し、データベースを追加した後、新しいデータベース接続情報を使用してアプリの構成を更新します。We'll create a MySQL server instance on Azure and add a database, then we'll update the app configuration with the new database connection info.

まず、後の手順で使用するために、次の環境変数を設定します。First, set the following environment variables for use in later steps.

export MYSQL_SERVER_NAME=<server>
export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
export MYSQL_SERVER_ADMIN_LOGIN_NAME=<admin>
export MYSQL_SERVER_ADMIN_PASSWORD=<password>
export MYSQL_DATABASE_NAME=<database>
export DOLLAR=\$

次に、データベース サーバーを作成して初期化します。Next, create and initialize the database server. 初期構成には az mysql up を使用します。Use az mysql up for the initial configuration. 次に、az mysql server configuration set を使用して接続タイムアウトを増やし、サーバーのタイムゾーンを設定します。Then use az mysql server configuration set to increase the connection timeout and set the server timezone.

az mysql up \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server-name ${MYSQL_SERVER_NAME} \
    --database-name ${MYSQL_DATABASE_NAME} \
    --admin-user ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
    --admin-password ${MYSQL_SERVER_ADMIN_PASSWORD}

az mysql server configuration set --name wait_timeout \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server ${MYSQL_SERVER_NAME} --value 2147483

az mysql server configuration set --name time_zone \
    --resource-group ${RESOURCEGROUP_NAME} \
    --server ${MYSQL_SERVER_NAME} --value -8:00

次に、MySQL CLI を使用してデータベースを作成します。Then, use the MySQL CLI to create the database.

mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
 -h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p

MySQL CLI プロンプトで次のコマンドを実行します。<database name> は、MYSQL_DATABASE_NAME 環境変数に以前に指定したものと同じ値に置き換えます。At the MySQL CLI prompt, run the following command, replacing <database name> with same value you specified earlier for the MYSQL_DATABASE_NAME environment variable.

CREATE DATABASE <database name>;

これで MySQL を使用する準備ができました。MySQL is now ready for use.

MySQL 用にアプリを構成するConfigure the app for MySQL

次に、MySQL バージョンのアプリに接続情報を追加し、App Service にデプロイします。Next, we'll add the connection info to the MySQL version of the app, then deploy it to App Service.

まず、Bash プロンプトで正しいフォルダーに移動します。First, navigate to the correct folder at the Bash prompt.

cd ../../initial-mysql/spring-framework-petclinic

次に、pom.xml ファイルを更新して、MySQL をアクティブな構成にします。Then, update the pom.xml file to make MySQL the active configuration. 次に示すように、HSQLDB プロファイルから <activation> 要素を削除し、代わりに MySQL プロファイルに配置します。Remove the <activation> element from the HSQLDB profile and put it in the MySQL profile instead, as shown here. スニペットの残りの部分は、既存の構成を示しています。The rest of the snippet shows the existing configuration. 以前に設定した環境変数が、Maven によって MySQL アクセスの構成にどのように使用されているかに注目してください。Note how the environment variables you set previously are used by Maven to configure your MySQL access.

<profile>
    <id>MySQL</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <db.script>mysql</db.script>
        <jpa.database>MYSQL</jpa.database>
        <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
        <jdbc.url>jdbc:mysql://${DOLLAR}{MYSQL_SERVER_FULL_NAME}:3306/${DOLLAR}{MYSQL_DATABASE_NAME}?useUnicode=true</jdbc.url>
        <jdbc.username>${DOLLAR}{MYSQL_SERVER_ADMIN_LOGIN_NAME}</jdbc.username>
        <jdbc.password>${DOLLAR}{MYSQL_SERVER_ADMIN_PASSWORD}</jdbc.password>
    </properties>
    ...
</profile>

次に、pom.xml ファイルを構成して、Azure のデプロイと MySQL の使用のために Maven を構成します。Next, update the pom.xml file to configure Maven for an Azure deployment and for MySQL use. 以前に追加した <plugin> 要素の後に、次の XML を追加します。Add the following XML after the <plugin> element you added previously. 必要に応じて、1.7.0Azure App Service 用 Maven プラグインの最新バージョンに変更します。If necessary, change 1.7.0 to the current version of the Maven Plugin for Azure App Service.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-webapp-maven-plugin</artifactId>
    <version>1.7.0</version>
    <configuration>

        <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
        <appServicePlanName>${WEBAPP_PLAN_NAME}</appServicePlanName>
        <appName>${WEBAPP_NAME}</appName>
        <region>${REGION}</region>

        <linuxRuntime>tomcat 8.5-jre8</linuxRuntime>

        <appSettings>
            <property>
                <name>MYSQL_SERVER_FULL_NAME</name>
                <value>${MYSQL_SERVER_FULL_NAME}</value>
            </property>
            <property>
                <name>MYSQL_SERVER_ADMIN_LOGIN_NAME</name>
                <value>${MYSQL_SERVER_ADMIN_LOGIN_NAME}</value>
            </property>
            <property>
                <name>MYSQL_SERVER_ADMIN_PASSWORD</name>
                <value>${MYSQL_SERVER_ADMIN_PASSWORD}</value>
            </property>
            <property>
                <name>MYSQL_DATABASE_NAME</name>
                <value>${MYSQL_DATABASE_NAME}</value>
            </property>
        </appSettings>

    </configuration>
</plugin>

次に、アプリをビルドし、ローカルで展開し、Tomcat で実行してテストします。Next, build the app, then test it locally by deploying and running it with Tomcat.

mvn package
mvn cargo:deploy
${TOMCAT_HOME}/bin/catalina.sh run

これで、http://localhost:8080 のローカルでアプリを表示できるようになりました。You can now view the app locally at http://localhost:8080. アプリは前と同様に動作しますが、HSQLDB ではなく Azure Database for MySQL を使用します。The app will look and behave the same as before, but using Azure Database for MySQL instead of HSQLDB. 完了したら、Bash プロンプトで Ctrl + C キーを押して Tomcat を停止します。When you are finished, select Ctrl+C at the Bash prompt to stop Tomcat.

最後に、アプリを App Service にデプロイします。Finally, deploy the app to App Service.

mvn azure-webapp:deploy

これで、https://<app-name>.azurewebsites.net に移動し、App Service と Azure Database for MySQL を使用して実行中のアプリを表示できるようになりました。You can now navigate to https://<app-name>.azurewebsites.net to see the running app using App Service and Azure Database for MySQL.

アプリのログにアクセスするAccess the app logs

トラブルシューティングが必要な場合は、アプリのログを確認できます。If you need to troubleshoot, you can look at the app logs. ローカル コンピューター上でリモート ログ ストリームを開くには、次のコマンドを使用します。To open the remote log stream on your local machine, use the following command.

az webapp log tail --name ${WEBAPP_NAME} \
    --resource-group ${RESOURCEGROUP_NAME}

ログの表示が終了したら、Ctrl + C キーを押してストリームを停止します。When you are finished viewing the logs, select Ctrl+C to halt the stream.

ログ ストリームは、https://<app-name>.scm.azurewebsites.net/api/logstream でも使用できます。The log stream is also available at https://<app-name>.scm.azurewebsites.net/api/logstream.

スケールアウトScale out

アプリへのトラフィックの増加をサポートするために、次のコマンドを使用して複数のインスタンスにスケールアウトできます。To support increased traffic to your app, you can scale out to multiple instances using the following command.

az appservice plan update --number-of-workers 2 \
    --name ${WEBAPP_PLAN_NAME} \
    --resource-group ${RESOURCEGROUP_NAME}

お疲れさまでした。Congratulations! Spring Framework、JSP、Spring Data、Hibernate、JDBC、App Service Linux、および Azure Database for MySQL を使用して Java Web アプリをビルドし、スケールアウトしました。You built and scaled out a Java Web app using Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service Linux and Azure Database for MySQL.

リソースのクリーンアップClean up resources

前のセクションでは、リソース グループに Azure リソースを作成しました。In the preceding sections, you created Azure resources in a resource group. これらのリソースを今後使用する予定がない場合は、次のコマンドを実行してリソース グループを削除します。If you don't expect to use these resources in the future, delete the resource group by running the following command.

az group delete --name ${RESOURCEGROUP_NAME}

次の手順Next steps

次は、App Service で Java に使用できるその他の構成オプションと CI/CD オプションを確認します。Next, check out the other configuration and CI/CD options available for Java with App Service.