ノート:

Oracle Cloud Infrastructure上のAmpere A1にJavaアプリケーションをデプロイ

JavaアプリケーションをコンテナとしてOracle Cloud Infrastructure (OCI)のアンペアA1コンピュート・プラットフォームにデプロイする方法をご紹介します。データベースとともに、Ampere A1コンピュート・プラットフォームで実行されているコンテナとしてTodoアプリケーションをデプロイします。さらに、Oracle Linux 8.0で利用可能なPodmanなどの新しいコンテナ・ツール・セットを使用します。

イントロダクション

目的

このチュートリアルの内容:

前提条件

  1. Oracle Free Tier (トライアル)、有料またはLiveLabsクラウド・アカウント。
  2. OCIコンソールの理解
  3. ネットワーキングの概要
  4. コンパートメントの知識
  5. コンテナおよびポドマンの基本概念知識
  6. SSHキーは慎重に保管してください。キーがない場合は、SSHキーを生成します

環境を設定する

まず、Java EEアプリケーションの作成およびデプロイに使用するOracleクラウド環境を開始します。この環境はクラウド・コンパートメント内に格納され、コンパートメント内の通信は仮想クラウド・ネットワーク(VCN)経由になります。コンパートメントとVCNは、環境全体を分離および保護します。Tomcat 9.0およびMySQLサーバー・コンテナを使用して、Java EEアプリケーションをホストするためにAmpere A1コンピュート・インスタンスをデプロイします。

基本的なインフラストラクチャ設定

  1. ナビゲーション・メニューを開きます。「ガバナンスおよび管理」で、「アイデンティティ」に移動して「コンパートメント」をクリックします。この画面から、コンパートメントのリストが表示され、「コンパートメントの作成」をクリックします。

  2. 次を入力します:

    • 名前: "AppDev"と入力します。
    • 説明:説明(必須)を入力します。例:チュートリアルを開始するためのAppDevコンパートメント。機密情報を入力しないでください。
    • 親コンパートメント:このコンパートメントを配置するコンパートメントを選択します。デフォルトでは、ルート・コンパートメント(またはテナンシ)に設定されます。
    • 「コンパートメントの作成」をクリックします。
    • コンパートメントがリストに表示されます。

Ampere A1コンピュート・インスタンスの作成

  1. アンペアのA1コンピュート・インスタンスを作成するには、コンソールの左上隅にあるナビゲーション・メニューを使用して、「コンピュート」 > 「インスタンス」に移動します。

  2. インスタンス作成フローを開きます。

    1. AppDevコンパートメントにいることを確認します。
    2. 「インスタンスの作成」をクリックします。
  3. インスタンスの作成ページで、仮想クラウド・ネットワーク(VCN)、インターネット・ゲートウェイ(IG)などの新しいネットワーク・リソースとともに新しいインスタンスを作成します。

    1. インスタンスにJavaAppという名前を付けます
    2. イメージの選択を更新して、Oracle Linux 8以降を使用します
    3. 「シェイプの変更」ボタンをクリックして、使用可能なコンピュート・シェイプを表示します。

     インスタンスの作成図「インスタンスの作成」の説明

  4. インスタンスのイメージを構成します。

    1. 使用可能なOSイメージを表示するには、「イメージの変更」ボタンをクリックします。
    2. Oracle Linux 8以降を選択します。

    Oracle Linux 8の選択図「Oracle Linux 8の選択」の説明

  5. インスタンスのリソースを構成します。

    1. シェイプシリーズの選択でアンペレアームベースのプロセッサを選択します。
    2. Ampere Armベースのプロセッサを含むシェイプのリストからVM.Standard.A1.Flexシェイプを選択します。アンペアのA1シェイプは柔軟で、コア数およびメモリーの量を変更できます。VM用に1コアと6GBのメモリーを選択します。

    シェイプの選択図「シェイプの選択」の説明

  6. ネットワーキング・オプションを選択します。次のクラウド・デプロイメント用の新しいVCNおよびサブネットを作成します。インスタンスのパブリックIPアドレスの割当てを選択していることを確認してください。

  7. SSHキー・ペアを生成してダウンロードします。このステップは省略可能ですが、後の保守とアップグレードには特にお薦めします。また、使用するキーペアがすでにある場合は、公開キーを持ち込むこともできます。SSHキーの生成方法を知りたい場合は、「SSHキーの生成」チュートリアルの手順に従ってください。

    ネットワーク・オプション図のネットワーク・オプションの説明

  8. 「作成」をクリックしてネットワーキング・リソースを作成し、コンピュート・インスタンスを起動します。インスタンスの起動図起動インスタンスの説明

アプリケーション・ポートをユーザーに公開

インターネットからアプリケーションにアクセスするには、アプリケーションで使用するポートを開く必要があります。この項では、アプリケーションでトラフィックを送信および受信できるように、コンピュート・インスタンスのクラウド・ネットワークおよびファイアウォール・ルールでセキュリティ・リストを構成します。

仮想クラウド・ネットワーク(VCN)の構成

セキュリティ・リストは、インスタンスの仮想ファイアウォールとして機能し、内外で許可されるトラフィック・タイプを指定するイングレスおよびエグレス・ルールが含まれます。サブネット・レベルで構成されているセキュリティ・リスト。そのサブネット内のすべてのネットワーク要素にセキュリティ・ルールを適用します。ネットワークには、ルールの初期セットを持つデフォルト・セキュリティ・リストが付属しています。デフォルトのセキュリティ・リストを使用すると、SSHを使用してインスタンスに接続でき、インスタンスが任意の宛先にアウトバウンド・ネットワーク・コールを行うことができます。

  1. 作成したインスタンスのインスタンス詳細ページをナビゲートします。コンピュート > インスタンス > 作成したインスタンスをクリック

  2. サブネットサブネットの選択 「図選択サブネットの説明」をクリックして、インスタンスがアタッチされているサブネットに移動します

  3. サブネット・ページで、デフォルトのセキュリティ・リストをクリックして詳細を表示し、構成します。

  4. 「Add Ingress Rule」をクリックして、ルールに一致する受信トラフィックを許可する新しいルールを追加します。

  5. ポート8080で受信トラフィックを許可するイングレス・ルールを追加します

    1. 「ソースCIDR」0.0.0.0/0に設定します。これにより、すべてのソースからの受信トラフィックが許可されます。
    2. 「宛先ポート範囲」8080に設定します。これにより、宛先はポート8080のみに設定されます。これで、すべてのソースからのトラフィックがポート8080を使用できるようになりました。これは、アプリケーションをどこからでも到達できるように、必要なものです。
    3. 説明を入力します。

    イングレス・ルールの設定 図設定イングレス・ルールの説明

インスタンスでのファイアウォールの構成

ファイアウォール・ルールは、インスタンス内外のパケット・レベルのトラフィックを制御します。ファイアウォール・ルールはインスタンス自体で直接構成し、追加レベルのセキュリティを提供します。

  1. 作成したインスタンスのインスタンス詳細ページに移動します。コンピュート > インスタンス > 作成したインスタンスをクリックします。
  2. インスタンスのパブリックIPアドレスをコピーします。
  3. SSHを使用してインスタンスにログインします。自分によって生成されたキーまたはインスタンス作成ステップ中に指定したキーを使用します。Oracle Linuxオペレーティング・システムを使用するインスタンスのデフォルトのユーザー名はopcです。
  4. ファイアウォール構成コマンドを実行します。これにより、インスタンス自体のファイアウォールが変更され、ポート8080が公開され、受信トラフィックが受け入れられます。

    sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

Ampere A1 Compute PlatformでJava EEアプリケーションを実行

このアプリケーションを実行するには、まず、コンテナ・ツールやgitなど、必要なパッケージがいくつかあるAmpere A1コンピュート・インスタンスを準備します。次に、リポジトリをクローニングし、含まれているMaven pom.xmlを使用してアプリケーションを構築します。最後に、コンテナ・ツールを使用してMySQLおよびTomcat dockerコンテナを起動します。

コンテナ・ツールのインストール

Oracle Linux 8では、Podmanを使用してコンテナを実行および管理します。Podmanは、LinuxシステムでOpen Container Initiativeコンテナおよびコンテナ・イメージを開発、管理および実行するためのデーモンレス・コンテナ・エンジンです。Podmanは、dockerの代替として使用できるDocker互換コマンドライン・アプリケーションを提供します。podman-dockerパッケージをインストールすると、podmanを透過的に起動するdockerコマンドが提供されます。

  1. SSHを使用してインスタンスにログインします。自分によって生成されたキーまたはインスタンス作成ステップ中に指定したキーを使用します。Oracle Linuxオペレーティング・システムを使用するインスタンスのデフォルトのユーザー名はopcです。

  2. コンテナの操作に必要なすべてのツールをプルするcontainer-toolsモジュールをインストールします。

    sudo dnf module install container-tools:ol8
    
    sudo dnf install podman-docker git
    

ソース・コードのクローニング

開始するには、SSHを使用してコンピュート・インスタンスにログインし、リポジトリをクローニングします。

git clone https://github.com/oracle-quickstart/oci-arch-tomcat-mds.git
cd oci-arch-tomcat-mds/java

Webアプリケーションのビルド

Java Webアプリケーションは、Webアプリケーション・アーカイブまたはWARファイルとしてパッケージ化されます。WARファイルは、Tomcatなどのサーブレット・コンテナへのアプリケーションを記述するメタデータを含むzipファイルです。この例では、Apache Mavenを使用してアプリケーションのWARファイルを構築しています。アプリケーションを構築するには、次のコマンドを実行します。ソース・ファイルのクローン先の場所からコマンドを必ず実行してください。

podman run -it --rm --name todo-build \
    -v "$(pwd)":/usr/src:z \
    -w /usr/src \
    maven:3 mvn clean install

このコマンドは、targetディレクトリとその中にWARファイルを作成します。ここではMavenをインストールするのではなく、コンテナ内でビルド・ツールを実行していることに注意してください。

Ampere A1 Compute Platformでのアプリケーションの実行

アプリケーションは、Tomcatサーブレット・コンテナとMySQLデータベースを使用します。TomcatデータベースとMySQLデータベースの両方で、Ampere A1コンピュート・プラットフォームが使用するARM64v8アーキテクチャがサポートされています。

  1. Podmanを使用してポッドを作成します。

    podman pod create --name todo-app -p 8080:8080 --infra-image k8s.gcr.io/pause:3.1
    
  2. ポッドでデータベース・コンテナを起動します。

    podman run --pod todo-app -d \
    -e MYSQL_ROOT_PASSWORD=pass \
    -e MYSQL_DATABASE=demo \
    -e MYSQL_USER=todo-user \
    -e MYSQL_PASSWORD=todo-pass \
    --name todo-mysql \
    -v "${PWD}"/src/main/sql:/docker-entrypoint-initdb.d:z \
    mysql/mysql-server:8.0
    

    MySQLデータベースの場合、データベース初期化スクリプトがコンテナに提供され、起動時に必要なデータベース・ユーザーおよび表が作成されます。これを行うには、ホストから/src/main/sqlディレクトリをコンテナ内の/docker-entrypoint-initdb.dとしてマウントします。ここで使用する正式なMySQLイメージは、起動時にこのディレクトリで.sqlファイルを実行するように構成されています。データのエクスポート方法やバックアップ方法など、その他のオプションについては、ドキュメンテーションを参照してください。

  3. Tomcatサーバーを使用したWARファイルとして構築したアプリケーションをデプロイします。

    podman run --pod todo-app -d\
    --name todo-tomcat \
    -v "${PWD}"/target/todo.war:/usr/local/tomcat/webapps/todo.war:z \
    tomcat:9
    podman logs -f todo-tomcat
    

    データベース接続情報とアプリケーションは、src/main/resources/todo.propertiesを使用してApache Tomcatコンテナに提供されます。JDBC URLは、MySQLサーバー・ホストとしてlocalhostを使用します。これは、同じポッド内のコンテナがlocalhostを使用して相互に通信できるためです。アプリケーションWARファイルは、コンテナへのマウントとして提供されます。

    Tomcatは起動時にアプリケーションをデプロイし、ホストへのポート・マッピングによってアプリケーションがコンピュート・インスタンスのパブリックIPアドレスを介して使用可能になります。

  4. コンピュート・インスタンスのパブリックIPアドレスを、ポート8080のブラウザで入力します。アプリケーションが表示されます。http://<ip_address>:8080/todo/

トラブルシューティング

Podmanコンテナは、Dockerコンテナと同じように調査できます(podmandockerとして別名設定することもできます)。コンテナを検査するための一般的なコマンドを次に示します:

Ampere A1コンピュート・プラットフォーム

謝辞

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。

製品ドキュメントは、Oracleヘルプ・センターを参照してください。