1. 概要

SpringBootアプリケーションをCloudFoundryにデプロイするのは簡単な演習です。 このチュートリアルでは、その方法を説明します。

2. 春のクラウドの依存関係

このプロジェクトではSpring Cloudプロジェクトに新しい依存関係が必要になるため、Spring Cloud依存関係BOMを追加します。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwhich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

spring-cloud-dependencies ライブラリの最新バージョンは、 MavenCentralにあります。

ここで、Cloud Foundryの個別のビルドを維持したいので、Mavenpom.xml。cloudfoundryという名前のプロファイルを作成します。

また、コンパイラの除外とSpring Bootプラグインを追加して、パッケージの名前を構成します。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/logback.xml</exclude>
            </excludes>
        </resource>
    </resources>
    <plugins>
        <plugin>                        
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <finalName>${project.name}-cf</finalName>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/cloud/config/*.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

また、通常のビルドからクラウド固有のファイルを除外したいので、Mavenコンパイラプラグインにグローバルプロファイルの除外を追加します。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/cloud/*.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

次に、CloudFoundryのサポートを提供するSpringCloudStarterおよびSpringCloudConnectorsライブラリを追加する必要があります。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cloud-connectors</artifactId>
</dependency>

3. CloudFoundryの構成

このチュートリアルを実行するには、試用版ここに登録するか、 NativeLinuxまたはVirtualBox用に事前構成された開発環境をダウンロードする必要があります。

さらに、CloudFoundryCLIをインストールする必要があります。 手順はこちらです。

Cloud Foundryプロバイダーに登録すると、API URLが利用可能になります(左側の Tools オプションに従ってアクセスできます)。

アプリケーションコンテナを使用すると、サービスをアプリケーションにバインドできます。 次に、CloudFoundry環境にログインしましょう。

cf login -a <url>

Cloud Foundry Marketplaceは、データベース、メッセージング、メール、モニタリング、ロギングなどのサービスのカタログです。 ほとんどのサービスは、無料または試用プランを提供します。

マーケットプレイスで「MySQL」を検索し、アプリケーションのサービスを作成しましょう。

cf marketplace | grep MySQL
>
cleardb     spark, boost*, amp*, shock*         Highly available MySQL for your Apps.

出力には、説明に「MySQL」が含まれるサービスが一覧表示されます。 PCFでは、MySQLサービスの名前は cleardb であり、無料でないプランにはアスタリスクが付いています。

次に、以下を使用してサービスの詳細をリストします。

cf marketplace -s cleardb
>
service plan description                                                                 free or paid
spark        Great for getting started and developing your apps                             free
boost        Best for light production or staging your applications                         paid
amp          For apps with moderate data requirements                                       paid
shock        Designed for apps where you need real MySQL reliability, power and throughput  paid

次に、spring-bootstrap-dbという名前の無料のMySQLサービスインスタンスを作成します。

cf create-service cleardb spark spring-bootstrap-db

4. アプリケーション構成

次に、AbstractCloudConfigを拡張する@Configurationアノテーション付きクラスを追加して、org.baeldung.cloud.configという名前のパッケージにDataSourceを作成します。 ]:

@Configuration
@Profile("cloud")
public class CloudDataSourceConfig extends AbstractCloudConfig {
 
    @Bean
    public DataSource dataSource() {
        return connectionFactory().dataSource();
    }
}

@Profile(“ cloud”)を追加すると、ローカルテストを実行するときにCloudConnectorがアクティブにならないようになります。 また、統合テストに @ActiveProfiles(profiles = {“ local”})を追加します。

次に、次のコマンドを使用してアプリケーションをビルドします。

mvn clean install spring-boot:repackage -P cloudfoundry

また、サービスをアプリケーションにバインドするために、manifest.ymlファイルを提供する必要があります。

通常はmanifest.ymlファイルをプロジェクトフォルダーに配置しますが、この場合、複数のクラウドネイティブプロバイダーへのデプロイをデモンストレーションするため、cloudfoundryフォルダーを作成します:

---
applications:
- name: spring-boot-bootstrap
  memory: 768M
  random-route: true
  path: ../target/spring-boot-bootstrap-cf.jar
  env:
    SPRING_PROFILES_ACTIVE: cloud,mysql
  services:
  - spring-bootstrap-db

5. 展開

アプリケーションのデプロイは、次のように簡単になりました。

cd cloudfoundry
cf push

Cloud Foundryは、Javaビルドパックを使用してアプリケーションをデプロイし、アプリケーションへのランダムなルートを作成します。

次を使用して、ログファイルの最後のいくつかのエントリを表示できます。

cf logs spring-boot-bootstrap --recent

または、ログファイルを調整することもできます。

cf logs spring-boot-bootstrap

最後に、アプリケーションをテストするためのルート名が必要です。

cf app spring-boot-bootstrap
>
name:              spring-boot-bootstrap
requested state:   started
routes:            spring-boot-bootstrap-delightful-chimpanzee.cfapps.io
last uploaded:     Thu 23 Aug 08:57:20 SAST 2018
stack:             cflinuxfs2
buildpacks:        java-buildpack=v4.15-offline-...

type:           web
instances:      1/1
memory usage:   768M
     state     since                  cpu    memory           disk
#0   running   2018-08-23T06:57:57Z   0.5%   290.9M of 768M   164.7M of 1G

次のコマンドを実行すると、新しい本が追加されます。

curl -i --request POST \
    --header "Content-Type: application/json" \
    --data '{"title": "The Player of Games", "author": "Iain M. Banks"}' \
    https://<app-route>/api/books
#OR
http POST https://<app-route>/api/books title="The Player of Games" author="Iain M. Banks"

そして、このコマンドはすべての本を一覧表示します。

curl -i https://<app-route>/api/books 
#OR 
http https://<app-route>/api/books
>
HTTP/1.1 200 OK

[
    {
        "author": "Iain M. Banks",
        "id": 1,
        "title": "Player of Games"
    },
    {
        "author": "J.R.R. Tolkien",
        "id": 2,
        "title": "The Hobbit"
    }
]

6. アプリケーションのスケーリング

最後に、Cloud Foundryでのアプリケーションのスケーリングは、scaleコマンドを使用するのと同じくらい簡単です。

cf scale spring-cloud-bootstrap-cloudfoundry <options>
Options:
-i <instances>
-m <memory-allocated> # Like 512M or 1G
-k <disk-space-allocated> # Like 1G or 2G
-f # Force restart without prompt

アプリケーションが不要になったら、忘れずに削除してください。

cf delete spring-cloud-bootstrap-cloudfoundry

7. 結論

この記事では、SpringBootを使用してクラウドネイティブアプリケーションの開発を簡素化するSpringCloudライブラリについて説明しました。 Cloud Foundry CLIを使用したデプロイについては、ここで詳しく説明されています。

CLI用の追加のプラグインは、プラグインリポジトリで入手できます。

ここでの例の完全なソースコードは、いつものように、GitHub上にあります。