Spring Boot + Azure App Engine +Cosmos DBでAPIを無料で爆速開発する - その1

目次

  1. 背景
  2. Azureにした理由
  3. 作るもの
  4. 前提条件
  5. Spring Initializrでプロジェクト作成
  6. Azure CLIのインストール
  7. Azureにデプロイする
    1. POMの編集
    2. Localでの動作確認
    3. Azureへデプロイ
  8. 関連記事
  9. 【PR】おすすめ技術本

背景

こんにちは。karintomania(twitter)です。
今まで個人開発で使ってきたHerokuの無料枠に制限が増えて、
一日に6時間以上サーバーをスリープさせないといけなくなってしまいました。

今、ちょうどモバイルアプリのバックエンドを構築しようとしているので、
一日6時間のダウンタイムは厳しい。というわけで、代替のPaaSを探すことになりました。

Azureにした理由

クラウド初心者のため、深い理由は特にないのですが、

  • 永久無料枠が用意されているから。
  • Springboot関連の資料が多い。
  • DBにも無料枠がある
    ざっくりいうと以上な感じです。
    無料のDBというのが意外とないんですねー。

作るもの

今回は、プログラマ向けの名言を返してくれるAPIを作ってみます。
以下、要件です。

  • GETでランダムに名言・言った人を一個返す
  • POSTで名言を追加できる
    それでは始めましょう。

前提条件

以下を前提としています。

  • Spring Boot分かる
  • maven入ってる
  • Azureのサブスクリプション持ってる

Azureのサブスクリプションがなければ、
さくっと作成してください。

クレカと電話番号の登録が必要なので、ご用意をお忘れなく。

Spring Initializrでプロジェクト作成

Spring Initializrを使用して新規Spring bootプロジェクトを作成します。

注意することとしては、

  • Mavenプロジェクトを選ぶ
  • 依存性は以下を選択
    • Web
    • Azure support
    • (必要であれば) Lombok
      Artifactはquoteapiなどとしてください。

Azure CLIのインストール

インストールは公式を参考にしてください。
Mac使っていればBrewで簡単にいけます。
brew update && brew install azure-cli
インストールできたら
az loginコマンドを叩きます。
ブラウザが立ち上がってAzureのログイン画面が表示されるので、
ログインしたら認証完了です。

Azureにデプロイする

それでは先ほど作成したSpring bootプロジェクトを設定して、
Azureにデプロイするところまでいきましょう。

POMの編集

pom.xmlを編集します。
pluginsのところに以下を追加してください。

pom.xml
1
2
3
4
5
6
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.9.0</version>
</plugin>

追加したら以下のMavenコマンドを叩いてください。
mvn azure-webapp:config
OSとjavaのバージョンを聞かれますので、
何もなければデフォルトで作成してください。

コマンドが実行されるとpom.xmlに項目が追加されます。
さらに設定を追加していきましょう。
先ほど追記したあたりに以下の項目があるので、値を設定します。

  • resourceGroup
    使用したいresourceGroupがあれば指定。なければデフォルトでも命名しても構わない。
  • appName
    アプリ名です。
  • pricingTier
    F1にすること。そうでないと課金対象です。
pom.xml
1
2
3
4
5
6
<configuration>
          <schemaVersion>V2</schemaVersion>
          <resourceGroup>YOUR_RESOURCE_GROUPID</resourceGroup>
          <appName>YOUR_APP_NAME</appName>
          <pricingTier>F1</pricingTier>
          <region>centralus</region>

また、その少し下にruntimeタグとdeploymentタグがあるのですが、
その間にappSettingタグを追加して、ポート80を使用するようにします。

pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<runtime>
            <os>linux</os>
            <javaVersion>jre8</javaVersion>
            <webContainer>jre8</webContainer>
          </runtime>
         <!-- Begin of App Settings  -->
       <appSettings>
          <property>
                <name>JAVA_OPTS</name>
                <value>-Dserver.port=80</value>
          </property>
       </appSettings>
       <!-- End of App Settings  -->
          <deployment>
            <resources>
              <resource>

ここまでできたらazure用の設定は完了です。

Localでの動作確認

それではAPIのエンドポイントとなるコントローラを作成します。
現時点ではとりあえず文字列Hello Azureを返すものにします。

QuoteController.java
1
2
3
4
5
6
7
@RestController
public class QuoteController {

@GetMapping("/")
public Quote get(){
return "Hello, Azure";
}

特に難しいことやazure固有の実装はありません。

localで動作確認します
mvn spring-boot:run

Getリクエストを出してみましょう。

きちんと動作していますね。

Azureへデプロイ

それではazureへデプロイします。
デプロイは以下のコマンドでできます。
このmvn cleanをしないと変更が反映されないので、
ご注意下さい。
mvn clean package && mvn azure-webapp:deploy

azureのポータルに行ってアプリができていることを確認しましょう。

うまくいっていればApp Serviceに新しいサービスが追加されています。

また、httpsに対応したURLが発行されています。
PaaSは無料かつ面倒な設定無しでHTTPS対応できることも大きいメリットですね。

無料プランだからなのか、
デプロイがすぐ反映されないこともあります。
少し待ったらうまくいったりするので
気長にやりましょう。

次回はazureのDBサービスCosmosDBに接続して本格的にAPIとしての機能を作っていきます。

今日はこの辺で。

関連記事

こちらの記事もおすすめです。
Spring Boot + Azure App Engine +Cosmos DBでAPIを無料で爆速開発する - その2

【PR】おすすめ技術本

Spring Bootの勉強にはこちらがおすすめです。