はじめに
みなさんこんにちは。時の流れは速いもので、気づいたら平成が終わって令和が始まり、10日もあったゴールデンウィークもあっというまに終わってしまいました。
平成が終わる前にOracle提供のJava JDKの無償での提供も終わってしまったようですが、それに代わりAmazon Correttoという代替手段を無事導入することができましたので記事にしてみました。
2019年4月16日から、Oracle提供のJavaのJDKが有償化された
弊社のこちらのサービスのVagrantの開発環境を新規でセットアップしようとしたところ、以前は問題がなかった部分でエラーが発生し、もともと使っていたOracleのJava 8のJDKのダウンロードリンクが404を返していることがわかりました。
確認すると、これまでOracleによって商用も含めて無償で提供されていたJava 8のJDKが2019年4月16日以降OracleのOTNライセンスの取得を必須とするようになり、これに伴いJava JDKの商用での利用は有償化となり、これまでと提供方法が大きく変わったことでこれまで利用可能だったダウロードリンクも利用できなくなっているようでした。
そこでオープンソースのJavaのOpenJDK 8への切り替え、またはAmazonによるOpenJDK 8のディストリビューションであるAmazon Corretto 8への切り替えという選択肢が考えられましたが、今回の対応ではAmazonによるLTSが提供されているAmazon Correttoを使用することにしました。
Amazon Correttoとは
https://aws.amazon.com/jp/corretto/
Amazon CorrettoはAmazonが提供するLTS(Long term support)付きの無償のOpenJDKのディストリビューションです。OpenJDKとの大きな違いは、Amazonによるパフォーマンスの向上とセキュリティの問題に対する不具合の修正などを含むサポート(少なくともCorretto 8 の場合は 2023 年 6 月まで)を用意しているLTS付きのものであるということです。
ドキュメントによると、OpenJDKにはまだ統合されていないAmazonが提供するパッチを含み、特にパフォーマンスと安定化の向上のためのパッチに焦点を当てているとのことで、すでにAmazonの内部で使用されている数千のサービスでCorrettoが使用されているそうで、これらのことを考えるとOpenJDKよりもパフォーマンスや安全性に期待できると言えそうです。
以下の公式FAQに詳しく内容が記載されていますが、こちらのFAQの内容とCorrettoのGithubレポジトリの内容を見る限りですとAmazon自身でのパッチの提供もしているようでした。
https://aws.amazon.com/corretto/faqs/
https://github.com/corretto/corretto-8
また、プラットフォームに関してもDocumentによると以下のものへの対応がされているようです。
- Linux
- Windows
- macOS
- Docker
Vagrant + Ansible + Ubuntuの環境でのAmazon Correttoの導入の方法
今回Java8が必要になった弊社のサービスでのVagrant + Ansible + Ubuntuの環境でAmazon Correttoを導入しましたので、具体的にどのようなコードで導入したのかを共有します。
環境構築時に実行されるAnsibleのタスクで、もともとOracle JDKでJava8をインストールしていた部分を以下のような流れで書き換えました。
- Oracle JDKがインストールされているかチェック
↓ - (インストールされていたら)Oracle JDKをアンインストール
↓ - java-commonのパッケージをインストール
↓ - Amazon Correttoがインストールされているかチェック
↓ - (インストールされていなかったら)Amazon Correttoをインストール
「java-commonのパッケージのインストールする」と「Amazon Correttoをインストール 」という部分ですが、以下のCorrettoのドキュメントのLinuxにおける導入ガイドにしたがっています。
https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/generic-linux-install.html
Java 8導入部分のAnsibleのコード
# 1. Oracle JDKがインストールされているかチェック
- name: Check if Oracle JDK is installed
shell: dpkg-query -l oracle-java8-installer
register: oracle_jdk_installed
failed_when: no
tags: java
# 2. (インストールされていたら)Oracle JDKをアンインストール
- name: Uninstall Oracle JDK
apt:
pkg: oracle-java8-installer
state: absent
purge: yes
force: yes
when: oracle_jdk_installed.rc == 0 # 0 = installed, 1 = not installedなので、installedのときだけ削除している。
tags: java
# 3. java-commonのパッケージをインストール
- apt: name=java-common
tags: java
# 4. Amazon Correttoがインストールされているかチェック
- name: Check if Amazon Corretto is installed
command: dpkg-query -W java-1.8.0-amazon-corretto-jdk
register: corretto_installed
failed_when: corretto_installed.rc > 1
tags: java
# 5. (インストールされていなかったら)Amazon Correttoをインストール
- name: Install Amazon Corretto
apt:
deb: https://d3pxv6yz143wms.cloudfront.net/8.212.04.1/java-1.8.0-amazon-corretto-jdk_8.212.04-1_amd64.deb
when: corretto_installed.rc == 1 # 0 = installed, 1 = not installedなので、not installedのときだけインストールしている。
tags: java
まとめ
OpenJDKとは異なりJavaの最新バージョンのJava 12に対応したバージョンなどは出ていないようで、まだ予定もないようです。しかし、既存のJava 8またはJava 11環境でOracleの提供するJava JDKが有償化になってしまったことで切り替えの必要がある人にとっては優れた代替手段となりそうなAmazon Correttoでした。皆様も是非お試しください。