【AWS】Amazon LinuxにOracle Instant Clientをインストールする(Chefレシピ付)
はじめに
こんにちは植木和樹です。仕事でRDS for Oracleを使う機会があったので、Amazon Linuxからsqlplusが使えるよう「Oracle Instant Client」をインストールしました。本日はインストール録になります。
インストール台数が少々多かったのでChefのcookbookを作成して作業時間を短縮しました。せっかくなのでその際に使用したレシピも公開したいと思います。
Oracle Instant Clientとは
Oracle Instatnt Clientは、Oracleが無償で提供しているOracleクライアント向けバイナリパッケージです。通常OracleクライアントはセットアップCD-ROMからOralce Univarsal Installerを使ってメディアインストールするのですが、sqlplusや開発用ライブラリしか使わないアプリケーションサーバー向けにzipやRPMでお手軽にインストールできるようになっています。
Oracle Database Instant Client
環境
今回の環境やソフトウェアのバージョンは以下の通りです。
- EC2
- Amazon Linux AMI 2013.09 (64-bit) ami-3561fe34
- RDS
- Oracle Database Enterprise Edition 11.2.0.2.v7 (Lincense Included)
- Oralce Instant Client
- Version 11.2.0.4.0
Instant Clientは「Basic」と「SQL*Plus」のみを利用しました 。JDBCやCのヘッダーファイルが必要な場合は対応したパッケージもインストールしてください。
それとchefからS3のファイルをダウンロードするので、EC2にはS3ReadOnlyAccessポリシーを持ったIAMインスタンスプロファイルを割り当てています。
インストール手順
インストール手順は以下の流れになります。
- OTN(Oralce Technorogy Network)にユーザー登録する
- ダウンロードサイトからrpmファイルをローカルPCにダウンロードする
- rpmファイルをS3へアップロードする
- chefを使ってインストールする
OTNにユーザー登録する
ダウンロードにはOTN(Oralce Technorogy Network)へのログインが必要になりますので、事前にユーザー登録をしておいてください。ユーザー登録は下記ページから行うことができます。
ユーザー登録後、OTNにログインした状態で以下の作業を続けます。
rpmファイルをダウンロードする
ダウンロードは「Instant Clientのダウンロード」から行うことができます。今回はAmazon Linux 64bitを利用するため「Instant Client for Linux x86-64」を選択します。
まずはページ上部の「Accept License Agreement」のラジオボタンをクリックします。
その後ページを下にスクロールして「Version 11.2.0.4.0」から2つのパッケージのRPMをダウンロードします。
- Instant Client Package - Basic: All files required to run OCI, OCCI, and JDBC-OCI applications
- Instant Client Package - SQL*Plus: Additional libraries and executable for running SQL*Plus with Instant Client
S3へrpmをアップロードする
ダウンロードしたファイルをS3へアップロードします。バケットを作成して「software」フォルダに2つのrpmアップロードしました。
chefからs3_fileリソースを利用してS3上のrpmをダウンロードし、rpmコマンドでインストールします。s3_fileリソースは「ChefでS3からファイルを取得する」で紹介しています。便利なので超オススメです。
chefを使ってインストールする
インストールはchef-soloを使用しました。cookbookを作成しインストールレシピを作成します。その後knife-soloを利用して適用しています。
$ knife solo init . $ cp -rpi >my-chef-repos</site-cookbooks/s3_file site-cookbooks/ $ knife cookbook create oracle-instant-client -o site-cookbooks $ vi site-cookbooks/oracle-instant-client/recipes/default.rb $ vi roles/app_server.json $ knife solo bootstrap -i my_keypair.pem ec2-user@12.34.56.78 -o 'role[app_server]'
recipes/default.rb
include_recipe "s3_file" work_dir = "/home/ec2-user/work" directory work_dir do owner "ec2-user" group "ec2-user" mode "00755" action :create end node['oracle-instant-client']['rpms'].each do |rpm_path| file = File.basename(rpm_path) s3_file "#{work_dir}/#{file}" do source "s3://#{node['oracle-instant-client']['bucket']}/#{rpm_path}" owner "ec2-user" group "ec2-user" mode "0644" action :create not_if { File.exists?("#{work_dir}/#{file}") } end rpm_package "#{file}" do source "#{work_dir}/#{file}" action :install end end
roles/app_server.json
{ "name": "app_server", "default_attributes": { "oracle-instant-client": { "bucket": "my-bucket", "rpms": [ "software/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm", "software/oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm" ] } }, "json_class": "Chef::Role", "description": "This is a Role for setting up an application server", "chef_type": "role", "run_list": [ "recipe[oracle-instant-client]" ] }
Oracleにsqlplusで接続する
sqlplusを実行する前に環境変数LD_LIBRARY_PATHの設定が必要です。
$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib $ sqlplus64 awsuser/mypassword@"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com)(PORT= 1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))"
接続するたびに毎回@以降の文字列を入力するのはさすがにツラいので接続文字列を設定しましょう。ec-userのホームディレクトリにoracle/network/adminディレクトリを作成し、そこにtnsnames.oraを作成します。
$ mkdir -p ~/oracle/network/admin $ vi ~/oracle/network/admin/tnsnames.ora mydb = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp) (HOST=oracle.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=ORCL)) )
これで@mydbで接続先を指定することができます。環境変数TNS_ADMINでtnsnames.oraのあるディレクトリを指定したら、再度sqlplusで接続してみましょう。
$ export TNS_ADMIN=~/oracle/network/admin $ sqlplus64 awsuser/mypassword@mydb SQL*Plus: Release 11.2.0.4.0 Production on Sun Oct 6 01:30:40 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP, Data Mining, Oracle Database Vault and Real Application Testing options SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production PL/SQL Release 11.2.0.2.0 - Production CORE 11.2.0.2.0 Production TNS for Linux: Version 11.2.0.2.0 - Production NLSRTL Version 11.2.0.2.0 - Production SQL> quit
まとめ
今回はOracle Instant Clientのインストール方法をご紹介しました。今回初めてRDS for Oracleを触っているのですが、OracleはMySQLに比べると全体的に事例が少ない印象です。
今後オンプレミスからAWSへの移行が増えてきた際に、既存アプリケーションパッケージの動作条件としてRDBMSにOracle利用が要求され、AWSでもOracleが採用されるケースが多くなると思います。RDSはバックアップやパッチ適用など保守運用の手間が大幅に省力化できるため、DBの管理にはなるべく手間をかけずOracleを利用することができ魅力的です。本ブログでもRDS for Oracleを検討されている方のために、積極的に情報公開していきたいと思います。