App Service on Linux で Spring と Cosmos DB を使用する方法How to use Spring and Cosmos DB with App Service on Linux

概要Overview

この記事では、Azure App Service on Linux で Java Web アプリを構築、構成、デプロイ、トラブルシューティング、およびスケーリングするプロセスを、順を追って説明します。This article will walk you through the process of building, configuring, deploying, troubleshooting, and scaling Java Web apps in Azure App Service on Linux.

次のコンポーネントの使用方法を説明します。It will demonstrate the usage of the following components:

前提条件Prerequisites

この記事の手順に従うには、次の前提条件が必要です。The following prerequisites are required in order to follow the steps in this article:

サンプル Java Web アプリ リポジトリを複製するClone the Sample Java Web App Repository

この演習では、Spring BootCosmos DB 用の Spring Data、および Azure Cosmos DB を使用して構築された Java アプリケーションである Spring Todo アプリを使用します。For this exercise you'll be using the Spring Todo app, which is a Java application built using Spring Boot, Spring Data for Cosmos DB and Azure Cosmos DB.

  1. Spring Todo アプリを複製し、 .prep フォルダーの内容をコピーしてプロジェクトを初期化します。Clone the Spring Todo app and copy the contents of the .prep folder to initialize the project:

    bash の場合:For bash:

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

    Windows の場合:For Windows:

    git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
    cd e2e-java-experience-in-app-service-linux-part-2
    xcopy .prep /f /s /e /y
    
  2. ディレクトリを、複製したリポジトリの以下のフォルダーに変更します。Change the directory to the following folder in the cloned repo:

    cd initial\spring-todo-app
    

Azure CLI から Azure Cosmos DB を作成するCreate an Azure Cosmos DB from Azure CLI

  1. Azure CLI にログインし、サブスクリプション ID を設定します。Login to your Azure CLI, and set your subscription id.

    az login
    
  2. 必要に応じて、サブスクリプション ID を設定します。Set the subscription id if needed.

    az account set -s <your-subscription-id>
    
  3. Azure リソース グループを作成し、後で使用するためにそのリソース グループの名前をメモします。Create an Azure resource group, and write down the resource group name for later use.

    az group create -n <your-azure-group-name> \
    -l <your-resource-group-region>
    
  4. Cosmos DB を作成し、タイプとして GlobalDocumentDB を指定します。Create the Cosmos DB and specify the type as GlobalDocumentDB. Cosmos DB の名前には小文字のみを使用する必要があります。The name of the Cosmos DB must use only lower case letters. 必ず応答内の documentEndpoint フィールドをメモしてください。Make sure to note the documentEndpoint field in the response. これは後で必要になります。You'll need this later.

    az cosmosdb create --kind GlobalDocumentDB \
        -g <your-azure-group-name> \
        -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
    
  5. Azure Cosmos DB キーを取得し、後で使用するために primaryMasterKey 値を記録します。Get your Azure Cosmos DB keys, record the primaryMasterKey value for later use.

    az cosmosdb list-keys -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
    

ローカルでアプリをビルドおよび実行するBuild and Run the App Locally

  1. 選択したコンソール内で、この記事で前に収集した Azure と Cosmos DB の接続情報を使用して、次のコード セクションに示された環境変数を構成します。Within your console of choice configure the environment variables shown in the following code sections with the Azure and Cosmos DB connection information you gathered previously in this article. WEBAPP_NAME に一意の名前を指定し、REGION 変数に値を指定する必要があります。You'll need to provide a unique name for WEBAPP_NAME and value for the REGION variables.

Linux (Bash) の場合:For Linux (Bash):

export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>

Windows (コマンド プロンプト) の場合:For Windows (Command Prompt):

set COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
set COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
set COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
set RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
set WEBAPP_NAME=<put-your-Webapp-name-here>
set REGION=<put-your-REGION-here>

注意

スクリプトを使ってこれらの変数をプロビジョニングしたい場合は、.prep ディレクトリに Bash 用のテンプレートがあるため、それをコピーして出発点として使用することができます。If you'd like to provision these variables with a script, there is a template for Bash in the .prep directory that you can copy and use as a starting point.

  1. ディレクトリを次のように変更します。Change the directory to the following:

    cd initial/spring-todo-app
    
  2. 次のコマンドを使用して、Spring Todo アプリをローカルで実行します。Run the Spring Todo app locally with the following command:

    mvn package spring-boot:run
    
  3. アプリケーションが起動したら、こちら (http://localhost:8080/) から Spring Todo アプリにアクセスしてデプロイを検証できます。Once the application has started,you can validate the deployment by accessing the Spring Todo app here: http://localhost:8080/.

ローカルで実行されている Spring アプリ

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

  1. リポジトリの initial/spring-todo-app ディレクトリに以前にコピーした pom.xml ファイルを開きます。Open the pom.xml file that you previously copied to the initial/spring-todo-app directory of the repository. 以下の pom.xml ファイルに示されているように、Azure App Service 用の Maven プラグインが含まれていることを確認してください。Ensure that the Maven Plugin for Azure App Service is included as seen in the pom.xml file below. そのバージョンが 1.6.0 に設定されていない場合は、値を更新してください。If the version is not set to 1.6.0 then update the value.
<plugins> 

    <!--*************************************************-->
    <!-- Deploy to Java SE in App Service Linux           -->
    <!--*************************************************-->
       
    <plugin>
        <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-webapp-maven-plugin</artifactId>
            <version>1.6.0</version>
            <configuration>
            <deploymentType>jar</deploymentType>
            
            <!-- Web App information -->
            <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
            <appName>${WEBAPP_NAME}</appName>
            <region>${REGION}</region>
            
            <!-- Java Runtime Stack for Web App on Linux-->
            <linuxRuntime>jre8</linuxRuntime>
            
            <appSettings>
                <property>
                    <name>COSMOSDB_URI</name>
                    <value>${COSMOSDB_URI}</value>
                </property>
                <property>
                    <name>COSMOSDB_KEY</name>
                    <value>${COSMOSDB_KEY}</value>
                </property>
                <property>
                    <name>COSMOSDB_DBNAME</name>
                    <value>${COSMOSDB_DBNAME}</value>
                </property>
                <property>
                    <name>JAVA_OPTS</name>
                    <value>-Dserver.port=80</value>
                </property>
            </appSettings>
            
        </configuration>
    </plugin>            
    ...
</plugins>
  1. App Service Linux の Java SE にデプロイするDeploy to Java SE in App Service Linux

    mvn azure-webapp:deploy
    
// Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- azure-webapp-maven-plugin:1.6.0:deploy (default-cli) @ spring-todo-app ---
[INFO] Authenticate with Azure CLI 2.0
[INFO] Target Web App doesnt exist. Creating a new one...
[INFO] Creating App Service Plan 'ServicePlan11111111-1111-1111'...
[INFO] Successfully created App Service Plan.
[INFO] Successfully created Web App.
[INFO] Trying to deploy artifact to spring-todo-app...
[INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:19 min
[INFO] Finished at: 2018-10-28T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------
  1. App Service Linux の Java SE で実行されている Web アプリを参照します。Browse to your web app running on Java SE in App Service Linux:

    https://<WEBAPP_NAME>.azurewebsites.net
    

App Service on Linux で実行されている Spring アプリ

ログを表示して Azure の Spring Todo アプリをトラブルシューティングするTroubleshoot Spring Todo App on Azure by Viewing Logs

  1. Linux の Azure App Service にデプロイされた Java Web アプリのログを構成します。Configure logs for the deployed Java Web app in Azure App Service in Linux:

    az webapp log config --name ${WEBAPP_NAME} \
     --resource-group ${RESOURCEGROUP_NAME} \
     --web-server-logging filesystem
    
  2. ローカル マシンから Java Web アプリのリモート ログ ストリームを開きます。Open Java Web app remote log stream from a local machine:

    az webapp log tail --name ${WEBAPP_NAME} \
     --resource-group ${RESOURCEGROUP_NAME}
    
bash-3.2$ az webapp log tail --name ${WEBAPP_NAME}  --resource-group ${RESOURCEGROUP_NAME}
2018-10-28T22:50:17  Welcome, you are now connected to log-streaming service.
2018-10-28T22:44:56.265890407Z   _____                               
2018-10-28T22:44:56.265930308Z   /  _  \ __________ _________   ____  
2018-10-28T22:44:56.265936008Z  /  /_\  \___   /  |  \_  __ \_/ __ \ 
2018-10-28T22:44:56.265940308Z /    |    \/    /|  |  /|  | \/\  ___/ 
2018-10-28T22:44:56.265944408Z \____|__  /_____ \____/ |__|    \___  >
2018-10-28T22:44:56.265948508Z         \/      \/                  \/ 
2018-10-28T22:44:56.265952508Z A P P   S E R V I C E   O N   L I N U X
2018-10-28T22:44:56.265956408Z Documentation: http://aka.ms/webapp-linux
2018-10-28T22:44:56.266260910Z Setup openrc ...
2018-10-28T22:44:57.396926506Z Service `hwdrivers needs non existent service dev
2018-10-28T22:44:57.397294409Z  * Caching service dependencies ... [ ok ]
2018-10-28T22:44:57.474152273Z Starting ssh service...
...
...
2018-10-28T22:46:13.432160734Z [INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
2018-10-28T22:46:13.744859424Z [INFO] TomcatWebServer - Tomcat started on port(s): 80 (http) with context path ''
2018-10-28T22:46:13.783230205Z [INFO] TodoApplication - Started TodoApplication in 57.209 seconds (JVM running for 70.815)
2018-10-28T22:46:14.887366993Z 2018-10-28 22:46:14.887  INFO 198 --- [p-nio-80-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-10-28T22:46:14.887637695Z [INFO] DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization started
2018-10-28T22:46:14.998479907Z [INFO] DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 111 ms

2018-10-28T22:49:20.572059062Z Sun Oct 28 22:49:20 GMT 2018 GET ======= /api/todolist =======
2018-10-28T22:49:25.850543080Z Sun Oct 28 22:49:25 GMT 2018 DELETE ======= /api/todolist/{4f41ab03-1b12-4131-a920-fe5dfec106ca} ======= 
2018-10-28T22:49:26.047126614Z Sun Oct 28 22:49:26 GMT 2018 GET ======= /api/todolist =======
2018-10-28T22:49:30.201740227Z Sun Oct 28 22:49:30 GMT 2018 POST ======= /api/todolist ======= Milk
2018-10-28T22:49:30.413468872Z Sun Oct 28 22:49:30 GMT 2018 GET ======= /api/todolist =======


  1. 終了したら、結果を e2e-java-experience-in-app-service-linux-part-2/complete のコードと比較できます。When you are finished, you can check your results against the code in e2e-java-experience-in-app-service-linux-part-2/complete.

Spring Todo アプリをスケールアウトするScale out the Spring Todo App

  1. Azure CLI を使用して Java Web アプリをスケールアウトします。Scale out Java Web app using Azure CLI:

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

次の手順Next steps

その他のリソースAdditional Resources

Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。For more information about using Spring Boot applications on Azure, 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.

Spring Framework は Java 開発者のエンタープライズ レベルのアプリケーション作成を支援するオープンソース ソリューションです。The Spring Framework is an open-source solution that helps Java developers create enterprise-level applications. このプラットフォームで構築される特に知られたプロジェクトの 1 つが Spring Boot です。これによって、スタンドアロンの Java アプリケーションの作成方法が簡略化されます。One of the more-popular projects that is built on top of that platform is Spring Boot, which provides a simplified approach for creating stand-alone Java applications. Spring Boot を使い始めた開発者を支援するために、https://github.com/spring-guides/ では、サンプルの Spring Boot パッケージがいくつか用意されています。To help developers get started with Spring Boot, several sample Spring Boot packages are available at https://github.com/spring-guides/. 基本的な Spring Boot プロジェクトの一覧から選択するだけでなく、 Spring Initializr は、開発者がカスタム Spring Boot アプリケーションの作成を開始できるように支援します。In addition to choosing from the list of basic Spring Boot projects, the Spring Initializr helps developers get started with creating custom Spring Boot applications.