次の方法で共有


Azure Cosmos DB for Apache Cassandra API で Spring Data を使用する

この記事では、Azure App Service on Linux で Java Web アプリを構築、構成、デプロイ、トラブルシューティング、スケーリングするプロセスについて説明します。

次のコンポーネントの使用方法を示します。

前提 条件

この記事の手順に従うには、次の前提条件が必要です。

重要

この記事の手順を完了するには、Spring Boot バージョン 2.5 以降が必要です。

サンプル Java Web アプリ リポジトリを複製する

この演習では、Spring Todo アプリを使用します。Spring Todo アプリは、Spring BootSpring Data for Azure Cosmos DB、Azure Cosmos DBを使用して構築された Java アプリケーションです。

  1. Spring Todo アプリを複製し、.prep フォルダーの内容をコピーしてプロジェクトを初期化します。

    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 の場合:

    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. 複製されたリポジトリ内の次のフォルダーにディレクトリを変更します。

    cd initial\spring-todo-app
    

Azure CLI から Azure Cosmos DB を作成する

次の手順では、CLI を使用して Azure Cosmos DB データベースを作成します。

  1. Azure CLI にサインインし、サブスクリプション ID を設定します。

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

    az account set -s <your-subscription-id>
    
  3. Azure リソース グループを作成し、後で使用するためにリソース グループ名を保存します。

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Azure Cosmos DB を作成し、種類として GlobalDocumentDB を指定します。 Azure Cosmos DB の名前には、小文字のみを使用する必要があります。 応答の documentEndpoint フィールドを必ず書き留めます。 この値は後で必要になります。

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Azure Cosmos DB キーを取得し、後で使用するために primaryMasterKey 値を記録します。

    az cosmosdb keys list \
        --resource-group <your-azure-group-name> \
        --name <your-azure-COSMOSDB-name>
    

アプリをローカルでビルドして実行する

次の手順では、開発用コンピューターでアプリケーションを実行します。

  1. 選択したコンソール内で、この記事で前に収集した Azure と Azure Cosmos DB の接続情報を使用して、次のコード セクションに示す環境変数を構成します。 REGION 変数の WEBAPP_NAME と値に一意の名前を指定する必要があります。

    Linux (Bash) の場合:

    export COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
    export COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
    export COSMOS_DATABASE=<put-your-COSMOS-DATABASE-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>
    export SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
    

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

    set COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
    set COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
    set COSMOS_DATABASE=<put-your-COSMOS-DATABASE-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>
    set SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
    

    手記

    スクリプトを使用してこれらの変数をプロビジョニングする場合は、コピーして開始点として使用できる Bash 用のテンプレートが .prep ディレクトリにあります。

  2. 次のコマンドを使用してディレクトリを変更します。

    cd initial/spring-todo-app
    
  3. 次のコマンドを使用して、Spring Todo アプリをローカルで実行します。

    mvn package spring-boot:run
    
  4. アプリケーションが起動したら、Spring Todo アプリにアクセスしてデプロイを検証できます。http://localhost:8080/

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

App Service Linux へのデプロイ

次の手順では、アプリケーションを Azure 上の Linux にデプロイします。

  1. リポジトリの initial/spring-todo-app ディレクトリに以前にコピーした pom.xml ファイルを開きます。 次の pom.xml ファイルに示すように、Azure App Service 用の Maven プラグインが含まれていることを確認します。 バージョンが 1.14.0に設定されていない場合は、値を更新します。

    <plugins> 
    
        <!--*************************************************-->
        <!-- Deploy to Java SE in App Service Linux           -->
        <!--*************************************************-->
    
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-webapp-maven-plugin</artifactId>
            <version>1.14.0</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
                <!-- Web App information -->
                <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
                <appName>${WEBAPP_NAME}</appName>
                <region>${REGION}</region>
                <pricingTier>P1v2</pricingTier>
                <!-- Java Runtime Stack for Web App on Linux-->
                <runtime>
                    <os>Linux</os>
                    <javaVersion>Java 8</javaVersion>
                    <webContainer>Java SE</webContainer>
                </runtime>
                <deployment>
                    <resources>
                        <resource>
                            <directory>${project.basedir}/target</directory>
                            <includes>
                                <include>*.jar</include>
                            </includes>
                        </resource>
                    </resources>
                </deployment>
                <appSettings>
                    <property>
                        <name>COSMOS_URI</name>
                        <value>${COSMOS_URI}</value>
                    </property>
                    <property>
                        <name>COSMOS_KEY</name>
                        <value>${COSMOS_KEY}</value>
                    </property>
                    <property>
                        <name>COSMOS_DATABASE</name>
                        <value>${COSMOS_DATABASE}</value>
                    </property>
                    <property>
                        <name>JAVA_OPTS</name>
                        <value>-Dserver.port=80</value>
                    </property>
                </appSettings>
    
            </configuration>
        </plugin>            
        ...
    </plugins>
    
  2. App Service Linux で Java SE にデプロイする

    mvn azure-webapp:deploy
    
    // Deploy
    bash-3.2$ mvn azure-webapp:deploy
    [INFO] Scanning for projects...
    [INFO]
    [INFO] -------< com.azure.spring.samples:spring-todo-app >--------
    [INFO] Building spring-todo-app 2.0-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- azure-webapp-maven-plugin:1.14.0:deploy (default-cli) @ spring-todo-app ---
    Auth type: AZURE_CLI
    Default subscription: Consoto Subscription(subscription-id-xxx)
    Username: user@contoso.com
    [INFO] Subscription: Consoto Subscription(subscription-id-xxx)
    [INFO] Creating app service plan...
    [INFO] Successfully created app service plan asp-spring-todo-app.
    [INFO] Creating web app spring-todo-app...
    [INFO] Successfully created Web App spring-todo-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:05 min
    [INFO] Finished at: 2021-05-28T09:43:19+08:00
    [INFO] ------------------------------------------------------------------------
    
  3. App Service Linux の Java SE で実行されている Web アプリを参照します。

    https://<WEBAPP_NAME>.azurewebsites.net
    

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

ログを表示して Azure 上の Spring Todo アプリのトラブルシューティングを行う

次の手順では、Azure 上のログ ファイルを開きます。

  1. Linux の Azure App Service にデプロイされた Java Web アプリのログを構成します。

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. ローカル コンピューターから Java Web アプリのリモート ログ ストリームを開きます。

    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}
    2021-05-28T01:46:08.000655632Z   _____                               
    2021-05-28T01:46:08.000701432Z   /  _  \ __________ _________   ____  
    2021-05-28T01:46:08.000708133Z  /  /_\  \___   /  |  \_  __ \_/ __ \ 
    2021-05-28T01:46:08.000711733Z /    |    \/    /|  |  /|  | \/\  ___/ 
    2021-05-28T01:46:08.000714933Z \____|__  /_____ \____/ |__|    \___  >
    2021-05-28T01:46:08.000718233Z         \/      \/                  \/ 
    2021-05-28T01:46:08.000721333Z A P P   S E R V I C E   O N   L I N U X
    2021-05-28T01:46:08.000724233Z Documentation: http://aka.ms/webapp-linux
    ...
    ...
    2021-05-28T01:46:18.925044188Z   .   ____          _            __ _ _
    2021-05-28T01:46:18.925481392Z  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    2021-05-28T01:46:18.926004297Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    2021-05-28T01:46:18.926587603Z  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    2021-05-28T01:46:18.926599403Z   '  |____| .__|_| |_|_| |_\__, | / / / /
    2021-05-28T01:46:18.926841806Z  =========|_|==============|___/=/_/_/_/
    2021-05-28T01:46:18.931157849Z  :: Spring Boot ::                (v2.4.5)
    ...
    ...
    2021-05-28T01:46:29.842553633Z 2021-05-28 01:46:29.842  INFO 124 --- [           main] c.azure.spring.   samples.TodoApplication   : Started TodoApplication in 12.635 seconds (JVM running for 17.664)
    2021-05-28T01:46:30.477951594Z 2021-05-28 01:46:30.477  INFO 124 --- [p-nio-80-exec-1] o.a.c.c.C.   [Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2021-05-28T01:46:30.483316162Z 2021-05-28 01:46:30.483  INFO 124 --- [p-nio-80-exec-1] o.s.web.   servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2021-05-28T01:46:30.485411088Z 2021-05-28 01:46:30.484  INFO 124 --- [p-nio-80-exec-1] o.s.web.   servlet.DispatcherServlet        : Completed initialization in 0 ms
    2021-05-28T01:47:19.683003828Z 2021-05-28 01:47:19.682  INFO 124 --- [p-nio-80-exec-9] c.a.s.s.   controller.TodoListController    : GET request access '/api/todolist' path.
    2021-05-28T01:47:26.069984388Z 2021-05-28 01:47:26.069  INFO 124 --- [-nio-80-exec-10] c.a.s.s.   controller.TodoListController    : POST request access '/api/todolist' path with item: Milk
    2021-05-28T01:47:26.649080678Z 2021-05-28 01:47:26.648  INFO 124 --- [p-nio-80-exec-1] c.a.s.s.   controller.TodoListController    : GET request access '/api/todolist' path.
    

Spring Todo アプリをスケールアウトする

アプリケーションをスケーリングするには、次の手順に従います。

  1. Azure CLI を使用して Java Web アプリをスケールアウトする:

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

次の手順

関連項目

Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。

  • Azure App Service で Spring Boot アプリケーションを Linux にデプロイする

  • Azure Container Service で Kubernetes クラスターで Spring Boot アプリケーションを実行する

Java での Azure の使用の詳細については、Java 開発者向け Azure と、Azure DevOps と Javaの使用に関する を参照してください。

Spring Framework は、Java 開発者がエンタープライズ レベルのアプリケーションを作成するのに役立つオープンソース ソリューションです。 そのプラットフォームの上に構築されているより一般的なプロジェクトの 1 つは、Spring Bootです。これは、スタンドアロンの Java アプリケーションを作成するための簡略化されたアプローチを提供します。 開発者が Spring Boot を使い始めるのに役立つよう、https://github.com/spring-guides/でいくつかのサンプル Spring Boot パッケージを入手できます。 基本的な Spring Boot プロジェクトの一覧から選択するだけでなく、Spring Initializr は、開発者がカスタム Spring Boot アプリケーションの作成を開始するのに役立ちます。