原文はこちら

マイクロサービスはこのところ急発展しているテクノロジーのひとつであり、メインストリームでの適用が始まりつつあります。その理由としてコンテナやクラウドなどの他の新興のテクノロジーを挙げることもできますが、最も重要な理由はアジャイル、スケーラブル、高速性へのビジネス上の要求でしょう。Dion HinchcliffeによるWhy Microservices Will Become a Core Business Strategy for Most Organizationsという記事に、マイクロサービスがどのようなビジネス上のインパクトをもたらすのかについてよくまとめられています。
なぜOracle GraalVM Enterprise Editionなのか?
GraalVM Enterprise Edition 19.0はOracleが製品化に向けた研究開発への数年間の投資の末にリリースした新製品で、商用デプロイメントの準備もできています。GraalVM Enterprise Editionは高性能、組み込み可能、ポリグロットな仮想マシンです。JavaScript、Python、Ruby、JavaやScala、KotlinといったJVMベースの言語、そしてCやC++のようなLLVMベースの言語で書かれたアプリケーションを稼働させることができ、プログラミング言語間での効率的なインターオペラビリティを提供します。GraalVM Enterprise Editionにどのような利点があるのかはこのウェブサイトでご覧になれます。
GraalVM Enterprise Editionとマイクロサービスが交わるところ
GraalVM Enterprise Editionの機能のひとつとしてネイティブイメージがあり(執筆時点ではEarly Adopterとして利用可能です)、これは多くのJavaのマイクロサービスフレームワークと組み合わせることができます。Quarkus、MicronautやHelidonといったプロジェクトがこの技術を受容し、ネイティブイメージで実行時のメモリ要求サイズと起動時間を大きく抑制しています。
この記事は?
この記事では、Oracle Cloud Infrastructure (OCI)上でGraalVM Enterprise EditionとMicronautを使用したマイクロサービスを開発する方法をご紹介します。上記の図は、ここで使うことになるクラウドサービスと、それらが互いにどのようにやり取りするかを示しています。

はじめてみよう(Windows 10を使った場合)
ステップの概覧

Step 1: 前提ソフトウェアのインストール
- IntelliJ CE for Windows (わたしの好みです)
- プラグイン: GIT, Terraform, Docker
- Docker for Windows 10 (ネイティブイメージの生成時にシステムが終了してしまう場合はメモリ割り当てを増やしてください)
- Micronaut
- KubeCtl
- OCI Tool for Windows
Step 2: ODCSでのプロジェクト作成

- サンプルプロジェクトをGitHubからODCSにクローン

- チームで実施している場合は、チームメンバーを追加して適切な権限を割り当ててください。
Step 3 (オプショナル): IntelliJを使って開発
コードや設定に変更を加えない場合はステップ4にそのまま進んでください。
- プロジェクトをチェックアウト
- IntelliJ → VCS | Checkout from Version Control | Git

Step 4: OCIRでのDockerリポジトリのセットアップ
- リポジトリの作成――リポジトリ名はwercker.yml / kubernetes_deployment.template.yamlでの修正に使われます
- リポジトリをパブリックに設定(これによりシークレットの設定のためのステップを省くことができます。K8Sシークレットの扱いになれているのであれば、プライベートに設定してそのステップを行ってください)

Step 5: OKEインスタンスのセットアップ
There are 2 ways that you can setup OKEのセットアップにはふたつのやりかたがあります。Web UIを使う方法(こちらにチュートリアルがあります)と、terraform scriptを使う方法です。
OKEインスタンスを無事に作成したら、ステップ8で必要になるWercker環境の変数を取得しておきましょう。
こちらのマニュアルにあるように、あなたのKubernetesが稼働していることを確認してください。
- 自分のkubeconfigのダウンロード
- 自分のKubernetes Dashboardを表示
Step 6: Werckerのセットアップ
- Werckerにログインして、(+) をクリックして“Add Application”をクリック。出てくるウィザードを進めていきます。
- ユーザーを選んで、SCMはOracle Developer Cloud Serviceを選んでください。

- このプロジェクト用に作成しておいたリポジトリを選んで、セットアップウィザードは完了です。

Step 7: Werckerパイプラインの作成
サンプルコードでは、ワークフローの中でふたつのパイプラインが出てきます(build、deploy-to-oke)。このパイプラインはMasterブランチに新しいチェックインがプッシュされたときに起動されます。buildパイプラインでコードをコンパイルし、Dockerイメージを作成してイメージリポジトリにプッシュします。その後deploy-to-okeパイプラインが新しく作成されたイメージをOCIRから取得し、OKEにデプロイします。
こちらご覧いただくとWerckerの一般的な見本が見つかります。
Step 8: Wercker環境の定義
このチュートリアルで重要になる環境変数です。以下がWerckerパイプラインのために必要な変数です。

Step 9: 設定ファイルの修正とWerckerパイプラインの起動
- wercker.ymlとkubernetes_deployment.template.yamlを修正します (#TODO:とマークされた行を編集します)
- ファイルをコミットし、masterブランチにプッシュすることでWerckerパイプラインをトリガーします

Step 10: K8sダッシュボードをチェックし、アプリケーションにアクセス
- http://<external_endpoints>/meetup/random をブラウザに入力(Random conferences)
- http://<external_endpoints>/abs/java/<number> をブラウザに入力(Absolute number)


GraalVM Enterprise Editionに今すぐトライ
GraalVM Enterprise Editionは開発用途、評価用途には無料でOracle Technology Networkからダウンロードできます。
GraalVM Enterprise Editionの購入も可能で、Oracle Cloud上では無料で利用可能です。
GraalVM Enterprise EditionのドキュメントはOracle documentationのページで閲覧可能です。
graalvm.orgのブログをウォッチして、新しい情報もゲットしましょう。
コードのクレジットはJoseph Cheにあります。