ノート:
- このチュートリアルではOracle Cloudにアクセスする必要があります。無料アカウントに登録するには、Oracle Cloud Infrastructure Free Tierの使用を開始するを参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
Oracle Cloud Infrastructure上のAmpere A1にJavaアプリケーションをデプロイ
JavaアプリケーションをコンテナとしてOracle Cloud Infrastructure (OCI)のアンペアA1コンピュート・プラットフォームにデプロイする方法をご紹介します。データベースとともに、Ampere A1コンピュート・プラットフォームで実行されているコンテナとしてTodoアプリケーションをデプロイします。さらに、Oracle Linux 8.0で利用可能なPodmanなどの新しいコンテナ・ツール・セットを使用します。
イントロダクション
目的
このチュートリアルの内容:
- Ampere A1コンピュート・インスタンスを作成します。
- Todoノートを管理するJava EEアプリケーションを作成します。
- アプリケーションをTomcat 9にデプロイします。
- アプリケーションをデータベースに接続し、デプロイメントをポッドとして管理します。
- アプリケーションを実行してテストします。
- デプロイメントをクリーン・アップします。
前提条件
- Oracle Free Tier (トライアル)、有料またはLiveLabsクラウド・アカウント。
- OCIコンソールの理解
- ネットワーキングの概要
- コンパートメントの知識
- コンテナおよびポドマンの基本概念知識
- SSHキーは慎重に保管してください。キーがない場合は、SSHキーを生成します。
環境を設定する
まず、Java EEアプリケーションの作成およびデプロイに使用するOracleクラウド環境を開始します。この環境はクラウド・コンパートメント内に格納され、コンパートメント内の通信は仮想クラウド・ネットワーク(VCN)経由になります。コンパートメントとVCNは、環境全体を分離および保護します。Tomcat 9.0およびMySQLサーバー・コンテナを使用して、Java EEアプリケーションをホストするためにAmpere A1コンピュート・インスタンスをデプロイします。
基本的なインフラストラクチャ設定
-
ナビゲーション・メニューを開きます。「ガバナンスおよび管理」で、「アイデンティティ」に移動して「コンパートメント」をクリックします。この画面から、コンパートメントのリストが表示され、「コンパートメントの作成」をクリックします。
-
次を入力します:
- 名前: "AppDev"と入力します。
- 説明:説明(必須)を入力します。例:チュートリアルを開始するためのAppDevコンパートメント。機密情報を入力しないでください。
- 親コンパートメント:このコンパートメントを配置するコンパートメントを選択します。デフォルトでは、ルート・コンパートメント(またはテナンシ)に設定されます。
- 「コンパートメントの作成」をクリックします。
- コンパートメントがリストに表示されます。
Ampere A1コンピュート・インスタンスの作成
-
アンペアのA1コンピュート・インスタンスを作成するには、コンソールの左上隅にあるナビゲーション・メニューを使用して、「コンピュート」 > 「インスタンス」に移動します。
-
インスタンス作成フローを開きます。
- AppDevコンパートメントにいることを確認します。
- 「インスタンスの作成」をクリックします。
-
インスタンスの作成ページで、仮想クラウド・ネットワーク(VCN)、インターネット・ゲートウェイ(IG)などの新しいネットワーク・リソースとともに新しいインスタンスを作成します。
- インスタンスにJavaAppという名前を付けます
- イメージの選択を更新して、Oracle Linux 8以降を使用します
- 「シェイプの変更」ボタンをクリックして、使用可能なコンピュート・シェイプを表示します。
-
インスタンスのイメージを構成します。
- 使用可能なOSイメージを表示するには、「イメージの変更」ボタンをクリックします。
- Oracle Linux 8以降を選択します。
-
インスタンスのリソースを構成します。
- シェイプシリーズの選択でアンペレアームベースのプロセッサを選択します。
- Ampere Armベースのプロセッサを含むシェイプのリストから
VM.Standard.A1.Flex
シェイプを選択します。アンペアのA1シェイプは柔軟で、コア数およびメモリーの量を変更できます。VM用に1コアと6GBのメモリーを選択します。
-
ネットワーキング・オプションを選択します。次のクラウド・デプロイメント用の新しいVCNおよびサブネットを作成します。インスタンスのパブリックIPアドレスの割当てを選択していることを確認してください。
-
SSHキー・ペアを生成してダウンロードします。このステップは省略可能ですが、後の保守とアップグレードには特にお薦めします。また、使用するキーペアがすでにある場合は、公開キーを持ち込むこともできます。SSHキーの生成方法を知りたい場合は、「SSHキーの生成」チュートリアルの手順に従ってください。
-
「作成」をクリックしてネットワーキング・リソースを作成し、コンピュート・インスタンスを起動します。
図起動インスタンスの説明
アプリケーション・ポートをユーザーに公開
インターネットからアプリケーションにアクセスするには、アプリケーションで使用するポートを開く必要があります。この項では、アプリケーションでトラフィックを送信および受信できるように、コンピュート・インスタンスのクラウド・ネットワークおよびファイアウォール・ルールでセキュリティ・リストを構成します。
仮想クラウド・ネットワーク(VCN)の構成
セキュリティ・リストは、インスタンスの仮想ファイアウォールとして機能し、内外で許可されるトラフィック・タイプを指定するイングレスおよびエグレス・ルールが含まれます。サブネット・レベルで構成されているセキュリティ・リスト。そのサブネット内のすべてのネットワーク要素にセキュリティ・ルールを適用します。ネットワークには、ルールの初期セットを持つデフォルト・セキュリティ・リストが付属しています。デフォルトのセキュリティ・リストを使用すると、SSHを使用してインスタンスに接続でき、インスタンスが任意の宛先にアウトバウンド・ネットワーク・コールを行うことができます。
-
作成したインスタンスのインスタンス詳細ページをナビゲートします。コンピュート > インスタンス > 作成したインスタンスをクリック
-
サブネット
「図選択サブネットの説明」をクリックして、インスタンスがアタッチされているサブネットに移動します
-
サブネット・ページで、デフォルトのセキュリティ・リストをクリックして詳細を表示し、構成します。
-
「Add Ingress Rule」をクリックして、ルールに一致する受信トラフィックを許可する新しいルールを追加します。
-
ポート8080で受信トラフィックを許可するイングレス・ルールを追加します
- 「ソースCIDR」を
0.0.0.0/0
に設定します。これにより、すべてのソースからの受信トラフィックが許可されます。 - 「宛先ポート範囲」を
8080
に設定します。これにより、宛先はポート8080
のみに設定されます。これで、すべてのソースからのトラフィックがポート8080
を使用できるようになりました。これは、アプリケーションをどこからでも到達できるように、必要なものです。 - 説明を入力します。
- 「ソースCIDR」を
インスタンスでのファイアウォールの構成
ファイアウォール・ルールは、インスタンス内外のパケット・レベルのトラフィックを制御します。ファイアウォール・ルールはインスタンス自体で直接構成し、追加レベルのセキュリティを提供します。
- 作成したインスタンスのインスタンス詳細ページに移動します。コンピュート > インスタンス > 作成したインスタンスをクリックします。
- インスタンスのパブリックIPアドレスをコピーします。
- SSHを使用してインスタンスにログインします。自分によって生成されたキーまたはインスタンス作成ステップ中に指定したキーを使用します。Oracle Linuxオペレーティング・システムを使用するインスタンスのデフォルトのユーザー名は
opc
です。 -
ファイアウォール構成コマンドを実行します。これにより、インスタンス自体のファイアウォールが変更され、ポート
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
コマンドが提供されます。
-
SSHを使用してインスタンスにログインします。自分によって生成されたキーまたはインスタンス作成ステップ中に指定したキーを使用します。Oracle Linuxオペレーティング・システムを使用するインスタンスのデフォルトのユーザー名は
opc
です。 -
コンテナの操作に必要なすべてのツールをプルする
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アーキテクチャがサポートされています。
-
Podmanを使用してポッドを作成します。
podman pod create --name todo-app -p 8080:8080 --infra-image k8s.gcr.io/pause:3.1
-
ポッドでデータベース・コンテナを起動します。
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
ファイルを実行するように構成されています。データのエクスポート方法やバックアップ方法など、その他のオプションについては、ドキュメンテーションを参照してください。 -
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アドレスを介して使用可能になります。
-
コンピュート・インスタンスのパブリックIPアドレスを、ポート
8080
のブラウザで入力します。アプリケーションが表示されます。http://<ip_address>:8080/todo/
トラブルシューティング
Podmanコンテナは、Dockerコンテナと同じように調査できます(podman
をdocker
として別名設定することもできます)。コンテナを検査するための一般的なコマンドを次に示します:
podman ps -pa
-実行中および終了済のコンテナおよびそれらが属するポッドを表示します。podman logs -f todo-mysql
-指定されたコンテナ(この例ではtodo-mysql
)からの出力を表示します。Ctrl+c
を押して終了します。
関連リンク
謝辞
- 作成者 - Jeevan Joseph
- コントリビュータ - Orlando Gentil
その他の学習リソース
docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。
製品ドキュメントは、Oracleヘルプ・センターを参照してください。
Deploy Java applications on Ampere A1 on Oracle Cloud Infrastructure
F51395-01
December 2021
Copyright © 2021, Oracle and/or its affiliates.