そこに仁義はあるのか(仮)

略してそこ仁!

Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - 環境構築編

Oracle Code Tokyoでハンズオンのお手伝いをしてきました!
ハンズオンは、Rails / laravel / Django / Spring Bootの4つのフレームワークを利用して、Oracle CloudのAutonomous Transaction Processingサービス(Oracle 18c)へ接続するサンプルアプリと、その手順を作っています。
私はSpring Boot(JPAを利用)のサンプルアプリとハンズオン手順、また、それに合わせてアプリの検証環境構築用のTerraformも作りました。

ハンズオンの手順やアプリはこちらのGitHubリポジトリに置いています。
ハンズオン手順と内容がかぶるところも多いのですが、この機会に、環境の作り方やデータベース接続方法などを整理したいと思います。

github.com

今回は、環境構築までの手順を書いていこうと思います。
アプリケーションの動作環境の設定についてはこちら。
syobochim.hatenablog.com

👌 クラウド環境の構築

必要最低限の構成を構築するため、今回はこちらをOracle CloudのTokyo Regionで作成します。

  • 仮想ネットワーク
  • インターネットゲートウェイ
  • セキュリティリスト(ファイアウォール)
  • 仮想マシン
    • アプリケーションを稼働させるためのインスタンス
    • OS : Oracle Linux 7系
  • Autonomous Database
    • Oracle Database 18c

f:id:syobochim:20190520002319p:plain

手動で作成する場合

ハンズオンでは実際にクラウドの画面を体感してもらいたかったので、手順書を見ながら環境を作成していただきました。
Oracle Cloudでのインスタンス作成などの手順はこちらです。
code19-coding-hol/Lab1-hol-common-steps.md at master · oracle-japan/code19-coding-hol · GitHub

Terraformを使って作成する場合

Oracle Cloudの環境構築をする時のTerraformの公式ドキュメントはこちらです。
Provider: Oracle Cloud Infrastructure - Terraform by HashiCorp

環境を何度も作り直すことが多かったので、今回のハンズオン環境を個人的にTerraformを使って環境構築ができるようにしました。
Oracle CLIなどを自分のパソコンに入れるのは嫌だったので、全てDocker経由でコマンドを実行するようにもしてみました。
実行完了時には、仮想マシンのPublic IPアドレスが表示されるので、ssh接続やアプリの起動確認にはそのIPアドレスを利用してください。
github.com

環境作成が完了したらAutonomous Transaction Prosessingのページにアクセスし、Walletファイルをダウンロードしておいてください。
Walletの取得方法はこちらの記事で書いています。
IntelliJ IDEAでOracle CloudのAutonomous Data Warehouseに接続する - そこに仁義はあるのか(仮)
事前準備>データベース接続用のクライアント証明書の取得
※Autonomous Data Warehosueの手順ですが、Autonomous Transaction Processingでも手順は変わりません。

👌 仮想マシンの環境構築について

ハンズオンでは、アプリケーションを実行する仮想マシンにカスタムイメージを利用しました。
カスタムイメージはOracle Linux 7のOSイメージに対して、code19setup.shのスクリプトを実行して作成されていますが、環境構築が他の言語と共通化されておりわかりにくいので、Spring Bootのアプリに必要な設定のみを抜粋します。

ポイントはファイアウォールの設定を外すための"firewall-cmd"と、アプリからJDBC接続をする際に必要な環境変数"TNS_ADMIN"の設定です。

ビルド環境+実行環境

ハンズオンではJDKのバージョンやMavenの認証設定などを統一させるため、仮想マシンをアプリの実行環境兼ビルド環境として利用しました。
それにより、MavenやGitなど、ビルド環境にのみ必要なツールのインストールや設定もスクリプトにて実行しています。

参考 : OracleのMavenリポジトリを利用するための設定

# ファイアウォールの設定を変更する
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

# ソース取得やビルドに必要なツールをインストールする
sudo yum -y install git
sudo yum -y install maven
# JDK11をインストールする
sudo yum -y install java-11-openjdk-devel
sudo alternatives --set java /usr/lib/jvm/java-11-openjdk-11.0.3.7-0.0.1.el7_6.x86_64/bin/java

# Mavenでビルドするために、JAVA_HOMEにjdk11を指定
echo 'export JAVA_HOME="/usr/lib/jvm/java-11-openjdk"' >> ~/.bash_profile
# Autonomous DBの接続用Walletファイルの解凍ディレクトリパスをTNS_ADMINへ指定する
echo 'export TNS_ADMIN="/usr/local/etc/"' >> ~/.bash_profile
source ~/.bash_profile

# Maven経由でOracleのライセンス認証をし、jdbcなどをダウンロードするために必要な設定
sudo wget http://central.maven.org/maven2/org/apache/maven/wagon/wagon-http/2.8/wagon-http-2.8-shaded.jar -P /usr/share/maven/lib/ext/

実行環境

jarファイルを実行するために必要な設定のみ抜粋したものは、以下の通りです。

# ファイアウォールの設定を変更する
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

# JDK11をインストールする
sudo yum -y install java-11-openjdk-devel
sudo alternatives --set java /usr/lib/jvm/java-11-openjdk-11.0.3.7-0.0.1.el7_6.x86_64/bin/java

# Autonomous DBの接続用Walletファイルの解凍ディレクトリパスをTNS_ADMINへ指定する
echo 'export TNS_ADMIN="/usr/local/etc/"' >> ~/.bash_profile
source ~/.bash_profile


今回はここまで!
環境構築が一度切りであれば、手順通りに手動で作るのもいいかと思いますが、Terraformを作っておくと、OSイメージやセキュリティリスト(ファイアウォールの設定)を少し変更するだけで簡単に環境構築できるので、作っておいてよかったなぁ〜!という感じです。
また、もし環境構築をレビューされる場合も、Terraformなどでスクリプト化されるのはいいのではないでしょうか。

syobochim.hatenablog.com