2012/11/14

Amazon RDSでMySQLなDBを作ってみたよ。

■Amazon RDS向けのSecurity Groupの作成

  1. DB Security Groupsに移動し、「Create DB Security Group」を選択。
    image
  2. DB Security Groupの名前、説明を入力し作成する。
    image
  3. DB Security Groupが追加されたことを確認し、接続元となるNWアドレスやAmazon EC2のSecurity Group名などで接続元を絞る設定を入れる。
    (画面では0.0.0.0/0 = すべてのIPアドレスからの接続を許可しようとしている)
    image
  4. 「Add」ボタンを押し、Statusがauthorizing→authorizedに変化したことを確認する。
    image

■Amazon RDS向けのParameter Groupの作成

  1. DB Parameter Groupsから「Create DB Parameter Group」を実行する。
    image
  2. DB Parameter Groupが追加されるので、Viewingに変更したいパラメータ名を入力し、値の変更などを行う。
    image
    image
    image

■Amazon RDS DBインスタンスの作成

  1. DB Instancesから「Launch DB Instance」を実行する。
    image
  2. DBインスタンスとしてMySQLを選択。
    image
  3. DBインスタンスの詳細設定を行う。
    image
  4. 追加設定を行う。
     image
  5. 管理用オプションの設定を行う。(今回は自動バックアップ不要なので変更する)
    image
    image
  6. 最終確認が出てくるので「Launch DB Instance」を押す。
    image
    image

■MySQLクライアントから接続確認を行う。

$ mysql -h clouderadbinstance.xxxxxxx.us-east-1.rds.amazonaws.com -u cloudera –p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.27 Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| clouderadb         |
| innodb             |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

mysql>

Amazon Linux上にSun JDK 1.7を入れてみた。(修正)


■Sun JDKのダウンロード

OracleのダウンロードページからJavaScriptが動くブラウザでダウンロードしておく。
ダウンロードしたらLinux上にSCPなどでコピーする。

■Sun JDKの展開

Amazon Linuxだと/usr/lib/jvmの配下に置くのがよさそうなのでそこに展開することにした。
cd /usr/lib/jvm
sudo tar xvzf ~ec2-user/jdk-7u9-linux-x64.gz
sudo ln -s java-1.6.0-openjdk-1.6.0.0.x86_64 jdk-1.7.0-sunjava.x86_64
sudo ln -s jdk1.7.0_09/jre jre-1.7.0-sunjdk.x86_64

cd /usr/lib/jvm/jdk1.7.0_09/man/man1
sudo gzip *

■JRE(java)のインストール

alternatives (update-alternatives)コマンドを使ってJava関連ファイルへのリンクを設定していく。

cd /usr/lib/jvm
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/java 17009 \
--slave /usr/bin/java_vm java_vm /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/java_vm \
--slave /usr/bin/javaws javaws /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/javaws \
--slave /usr/bin/jcontrol jcontrol /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/jcontrol \
--slave /usr/bin/keytool keytool /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/keytool \
--slave /usr/bin/orbd orbd /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/pack200 \
--slave /usr/bin/policytool policytool /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/policytool \
--slave /usr/bin/rmid rmid /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/unpack200 \
--slave /usr/lib/jvm-exports/jre jre_exports /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/lib \
--slave /usr/lib/jvm/jre jre /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64 \
--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/java.1.gz \
--slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/keytool.1.gz \
--slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/orbd.1.gz \
--slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/pack200.1.gz \
--slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmid.1.gz\
--slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmiregistry.1.gz \
--slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/servertool.1.gz \
--slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/tnameserv.1.gz \
--slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/unpack200.1.gz

sudo alternatives --config java

■JDK(javac)のインストール

javaコマンドと同様に、javacコマンドもリンクを作成していく。
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_09/bin/javac 17009 \
--slave /usr/bin/appletviewer appletviewer /usr/lib/jvm/jdk1.7.0_09/bin/appletviewer \
--slave /usr/bin/apt apt /usr/lib/jvm/jdk1.7.0_09/bin/apt \
--slave /usr/bin/extcheck extcheck /usr/lib/jvm/jdk1.7.0_09/bin/extcheck \
--slave /usr/bin/idlj idlj /usr/lib/jvm/jdk1.7.0_09/bin/idlj \
--slave /usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_09/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/lib/jvm/jdk1.7.0_09/bin/jarsigner \
--slave /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.7.0_09/bin/javadoc \
--slave /usr/bin/javafxpackager javafxpackager /usr/lib/jvm/jdk1.7.0_09/bin/javafxpackager \
--slave /usr/bin/javah javah /usr/lib/jvm/jdk1.7.0_09/bin/javah \
--slave /usr/bin/javap javap /usr/lib/jvm/jdk1.7.0_09/bin/javap \
--slave /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/jdk1.7.0_09/bin/java-rmi.cgi \
--slave /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_09/bin/javaws \
--slave /usr/bin/jcmd jcmd /usr/lib/jvm/jdk1.7.0_09/bin/jcmd \
--slave /usr/bin/jconsole jconsole /usr/lib/jvm/jdk1.7.0_09/bin/jconsole \
--slave /usr/bin/jcontrol jcontrol /usr/lib/jvm/jdk1.7.0_09/bin/jcontrol \
--slave /usr/bin/jdb jdb /usr/lib/jvm/jdk1.7.0_09/bin/jdb \
--slave /usr/bin/jhat jhat /usr/lib/jvm/jdk1.7.0_09/bin/jhat \
--slave /usr/bin/jinfo jinfo /usr/lib/jvm/jdk1.7.0_09/bin/jinfo \
--slave /usr/bin/jmap jmap /usr/lib/jvm/jdk1.7.0_09/bin/jmap \
--slave /usr/bin/jps jps /usr/lib/jvm/jdk1.7.0_09/bin/jps \
--slave /usr/bin/jrunscript jrunscript /usr/lib/jvm/jdk1.7.0_09/bin/jrunscript \
--slave /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/jdk1.7.0_09/bin/jsadebugd \
--slave /usr/bin/jstack jstack /usr/lib/jvm/jdk1.7.0_09/bin/jstack \
--slave /usr/bin/jstat jstat /usr/lib/jvm/jdk1.7.0_09/bin/jstat \
--slave /usr/bin/jstatd jstatd /usr/lib/jvm/jdk1.7.0_09/bin/jstatd \
--slave /usr/bin/jvisualvm jvisualvm /usr/lib/jvm/jdk1.7.0_09/bin/jvisualvm \
--slave /usr/bin/keytool keytool /usr/lib/jvm/jdk1.7.0_09/bin/keytool \
--slave /usr/bin/native2ascii native2ascii /usr/lib/jvm/jdk1.7.0_09/bin/native2ascii \
--slave /usr/bin/orbd orbd /usr/lib/jvm/jdk1.7.0_09/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/lib/jvm/jdk1.7.0_09/bin/pack200 \
--slave /usr/bin/policytool policytool /usr/lib/jvm/jdk1.7.0_09/bin/policytool \
--slave /usr/bin/rmic rmic /usr/lib/jvm/jdk1.7.0_09/bin/rmic \
--slave /usr/bin/rmid rmid /usr/lib/jvm/jdk1.7.0_09/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk1.7.0_09/bin/rmiregistry \
--slave /usr/bin/schemagen schemagen /usr/lib/jvm/jdk1.7.0_09/bin/schemagen \
--slave /usr/bin/serialver serialver /usr/lib/jvm/jdk1.7.0_09/bin/serialver \
--slave /usr/bin/servertool servertool /usr/lib/jvm/jdk1.7.0_09/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/lib/jvm/jdk1.7.0_09/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/lib/jvm/jdk1.7.0_09/bin/unpack200 \
--slave /usr/bin/wsgen wsgen /usr/lib/jvm/jdk1.7.0_09/bin/wsgen \
--slave /usr/bin/wsimport wsimport /usr/lib/jvm/jdk1.7.0_09/bin/wsimport \
--slave /usr/bin/xjc xjc /usr/lib/jvm/jdk1.7.0_09/bin/xjc \
--slave /usr/share/man/man1/appletviewer.1.gz appletviewer.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/appletviewer.1.gz \
--slave /usr/share/man/man1/apt.1.gz apt.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/apt.1.gz \
--slave /usr/share/man/man1/extcheck.1.gz extcheck.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/extcheck.1.gz \
--slave /usr/share/man/man1/idlj.1.gz idlj.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/idlj.1.gz \
--slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jar.1.gz \
--slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jarsigner.1.gz \
--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/java.1.gz \
--slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javac.1.gz \
--slave /usr/share/man/man1/javadoc.1.gz javadoc.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javadoc.1.gz \
--slave /usr/share/man/man1/javafxpackager.1.gz javafxpackager.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javafxpackager.1.gz \
--slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javah.1.gz \
--slave /usr/share/man/man1/javap.1.gz javap.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javap.1.gz \
--slave /usr/share/man/man1/javaws.1.gz javaws.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javaws.1.gz \
--slave /usr/share/man/man1/jcmd.1.gz jcmd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jcmd.1.gz \
--slave /usr/share/man/man1/jconsole.1.gz jconsole.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jconsole.1.gz \
--slave /usr/share/man/man1/jdb.1.gz jdb.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jdb.1.gz \
--slave /usr/share/man/man1/jhat.1.gz jhat.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jhat.1.gz \
--slave /usr/share/man/man1/jinfo.1.gz jinfo.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jinfo.1.gz \
--slave /usr/share/man/man1/jmap.1.gz jmap.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jmap.1.gz \
--slave /usr/share/man/man1/jps.1.gz jps.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jps.1.gz \
--slave /usr/share/man/man1/jrunscript.1.gz jrunscript.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jrunscript.1.gz \
--slave /usr/share/man/man1/jsadebugd.1.gz jsadebugd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jsadebugd.1.gz \
--slave /usr/share/man/man1/jstack.1.gz jstack.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jstack.1.gz \
--slave /usr/share/man/man1/jstat.1.gz jstat.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jstat.1.gz \
--slave /usr/share/man/man1/jstatd.1.gz jstatd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jstatd.1.gz \
--slave /usr/share/man/man1/jvisualvm.1.gz jvisualvm.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jvisualvm.1.gz \
--slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/keytool.1.gz \
--slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/native2ascii.1.gz \
--slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/orbd.1.gz \
--slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/pack200.1.gz \
--slave /usr/share/man/man1/policytool.1.gz policytool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/policytool.1.gz \
--slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmic.1.gz \
--slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmid.1.gz \
--slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmiregistry.1.gz \
--slave /usr/share/man/man1/schemagen.1.gz schemagen.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/schemagen.1.gz \
--slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/serialver.1.gz \
--slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/servertool.1.gz \
--slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/tnameserv.1.gz \
--slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/unpack200.1.gz \
--slave /usr/share/man/man1/wsgen.1.gz wsgen.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/wsgen.1.gz \
--slave /usr/share/man/man1/wsimport.1.gz wsimport.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/wsimport.1.gz \
--slave /usr/share/man/man1/xjc.1.gz xjc.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/xjc.1.gz

sudo alternatives --config javac

■環境変数JAVA_HOMEの設定

Amazon Linuxの場合は、APIツール自身が使うために下記ファイルで環境変数を設定しているため特に対応不要。
/etc/profile.d/aws-apitools-common.sh

# Prefer JDK if presentif [ -d /usr/lib/jvm/java ]; then    export JAVA_HOME=/usr/lib/jvm/javaelif [ -d /usr/lib/jvm/jre ]; then    export JAVA_HOME=/usr/lib/jvm/jrefi

↑もしAmazon Linux以外の場合は自分で/etc/profile.dにjavahome.shとでもして
export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-sunjdk.x86_64
とでもしておけばよい。

■メモ

--slave節を組み立てるのが面倒臭いときは、実行ファイルやmanファイルが転がっているディレクトリに行って
$ ls * | xargs -I% echo --slave /usr/share/man/man1/% % $PWD/% \\
としてから適当に取捨選択すればよい。

2012/11/13

Amazon Linux上にSun JDK 1.7を入れてみた。

Amazon Linux AMI上でSun JDK 1.7を入れるのにちょっと苦労したのでメモ。

2012/11/14追記:
⇒ Amazon Linux上にSun JDK 1.7を入れてみた。(修正) にて再修正したやり方を書いています。
(下のやり方をした場合、/usr/lib/jvm/jreが正常に作成されないため、JAVA_HOME環境変数が自動設定されなくなります)


Sun Java SE (JDK)のダウンロード

http://www.oracle.com/technetwork/java/javase/downloads/index.html あたりからJavaScriptが動くブラウザを使ってダウンロードしておく。
# w3mやlynxからは上手くいかないので注意。


rpmのインストール

上でダウンロードしてきたrpmをインストールする。
root# rpm -ivh jdk-7u9-linux-x64.rpm


利用するJavaの切り換え



作業前の状態
root# java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

root# update-alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java - priority 16000
 slave keytool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/orbd
 slave pack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/pack200
 slave rmid: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmid
 slave rmiregistry: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmiregistry
 slave servertool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/servertool
 slave tnameserv: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/tnameserv
 slave unpack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/unpack200
 slave jre_exports: /usr/lib/jvm-exports/jre-1.6.0-openjdk.x86_64
 slave jre: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64
 slave java.1.gz: /usr/share/man/man1/java-java-1.6.0-openjdk.1.gz
 slave keytool.1.gz: /usr/share/man/man1/keytool-java-1.6.0-openjdk.1.gz
 slave orbd.1.gz: /usr/share/man/man1/orbd-java-1.6.0-openjdk.1.gz
 slave pack200.1.gz: /usr/share/man/man1/pack200-java-1.6.0-openjdk.1.gz
 slave rmid.1.gz: /usr/share/man/man1/rmid-java-1.6.0-openjdk.1.gz
 slave rmiregistry.1.gz: /usr/share/man/man1/rmiregistry-java-1.6.0-openjdk.1.gz
 slave servertool.1.gz: /usr/share/man/man1/servertool-java-1.6.0-openjdk.1.gz
 slave tnameserv.1.gz: /usr/share/man/man1/tnameserv-java-1.6.0-openjdk.1.gz
 slave unpack200.1.gz: /usr/share/man/man1/unpack200-java-1.6.0-openjdk.1.gz
Current `best' version is /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java.

インストールしてきたJDKを追加する
root# update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_09/bin/java 17009 \
--slave /usr/bin/keytool keytool /usr/java/jdk1.7.0_09/bin/keytool \
--slave /usr/bin/orbd orbd /usr/java/jdk1.7.0_09/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/java/jdk1.7.0_09/bin/pack200 \
--slave /usr/bin/rmid rmid /usr/java/jdk1.7.0_09/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/java/jdk1.7.0_09/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/java/jdk1.7.0_09/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/java/jdk1.7.0_09/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/java/jdk1.7.0_09/bin/unpack200

root# update-alternatives --display java
java - status is manual.
 link currently points to /usr/java/jdk1.7.0_09/bin/java
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java - priority 16000
 slave keytool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/orbd
 slave pack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/pack200
 slave rmid: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmid
 slave rmiregistry: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmiregistry
 slave servertool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/servertool
 slave tnameserv: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/tnameserv
 slave unpack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/unpack200
 slave jre_exports: /usr/lib/jvm-exports/jre-1.6.0-openjdk.x86_64
 slave jre: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64
 slave java.1.gz: /usr/share/man/man1/java-java-1.6.0-openjdk.1.gz
 slave keytool.1.gz: /usr/share/man/man1/keytool-java-1.6.0-openjdk.1.gz
 slave orbd.1.gz: /usr/share/man/man1/orbd-java-1.6.0-openjdk.1.gz
 slave pack200.1.gz: /usr/share/man/man1/pack200-java-1.6.0-openjdk.1.gz
 slave rmid.1.gz: /usr/share/man/man1/rmid-java-1.6.0-openjdk.1.gz
 slave rmiregistry.1.gz: /usr/share/man/man1/rmiregistry-java-1.6.0-openjdk.1.gz
 slave servertool.1.gz: /usr/share/man/man1/servertool-java-1.6.0-openjdk.1.gz
 slave tnameserv.1.gz: /usr/share/man/man1/tnameserv-java-1.6.0-openjdk.1.gz
 slave unpack200.1.gz: /usr/share/man/man1/unpack200-java-1.6.0-openjdk.1.gz
/usr/java/jdk1.7.0_09/bin/java - priority 17009
 slave keytool: /usr/java/jdk1.7.0_09/bin/keytool
 slave orbd: /usr/java/jdk1.7.0_09/bin/orbd
 slave pack200: /usr/java/jdk1.7.0_09/bin/pack200
 slave rmid: /usr/java/jdk1.7.0_09/bin/rmid
 slave rmiregistry: /usr/java/jdk1.7.0_09/bin/rmiregistry
 slave servertool: /usr/java/jdk1.7.0_09/bin/servertool
 slave tnameserv: /usr/java/jdk1.7.0_09/bin/tnameserv
 slave unpack200: /usr/java/jdk1.7.0_09/bin/unpack200
 slave jre_exports: (null)
 slave jre: (null)
 slave java.1.gz: (null)
 slave keytool.1.gz: (null)
 slave orbd.1.gz: (null)
 slave pack200.1.gz: (null)
 slave rmid.1.gz: (null)
 slave rmiregistry.1.gz: (null)
 slave servertool.1.gz: (null)
 slave tnameserv.1.gz: (null)
 slave unpack200.1.gz: (null)
Current `best' version is /usr/java/jdk1.7.0_09/bin/java.

追加したJDKを標準で利用するように設定する
root# update-alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
*  2           /usr/java/jdk1.7.0_09/bin/java

Enter to keep the current selection[+], or type selection number: 2

作業後の状態
root# java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)



Amazon EC2上で、内部IP(Private IP)をベースにhostsファイルを作成するスクリプト。

Amazon EC2インスタンスでは、標準でPublic DNS名と、Private DNS名が割り当てられる。

自分が作ったノード同士は出来れば固定したホスト名でやりとりしたいが、Public DNS名もPrivate DNS名もインスタンスをstopしてstartした場合は付け直されてしまうため、何かと困ってしまう状況が発生する。

そういう場合に、インスタンスに設定したタグ:Nameに基づいて、各ノード上で動的に/etc/hostsファイルを生成するスクリプトを書いてみた。

☆ec2-describe-instancesコマンドでは、自分のアカウントに紐付くインスタンス情報が全て出てきてしまうので、各ノードに設定しているタグ:GroupNameが同じものだけhostsに出てくるようにしている。

==== create_hosts.sh ====

#!/bin/sh

# 必要な環境変数の定義
export PATH=${PATH}:/opt/aws/bin/
export EC2_HOME=/opt/aws/apitools/ec2
export JAVA_HOME=/usr/lib/jvm/jre

cd /tmp

# AWS Access Key, Secret Access Keyを設定しておく
export AWS_ACCESS_KEY=XXXXXXXXXXXXXXXX
export AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# 自分のインスタンスを求めるために内部IPを求める
MY_LOCAL_ADDR=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4` >/dev/null 2>&1
MY_PUBLIC_ADDR=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4` >/dev/null 2>&1

EC2_INSTANCES_FILENAME=instances.$$
ec2-describe-instances > ${EC2_INSTANCES_FILENAME}

# 内部IPに基づいて、インスタンスIDを見つける
MY_INSTANCE_ID=`grep ${MY_LOCAL_ADDR} ${EC2_INSTANCES_FILENAME} | grep -w ^INSTANCE | awk '{print $2;}'`
# インスタンスIDに紐付いているタグGroupNameの値を引っ張る
MY_GROUPNAME=`grep ${MY_INSTANCE_ID} ${EC2_INSTANCES_FILENAME} | grep -w ^TAG | grep -w GroupName | awk '{print $5;}'`

# タグGroupNameが同じインスタンスの一覧を取得する
EC2_GROUP_INSTANCES_FILENAME=group_instances.$$
ec2-describe-instances -F tag:GroupName=${MY_GROUPNAME} > ${EC2_GROUP_INSTANCES_FILENAME}

# インスタンス一覧から、インスタンスID・内部IP・名前(tag:Name)の紐付けを作成する
EC2_GROUP_IPADDRS_FILENAME=group_ipaddr.$$
grep -w ^INSTANCE ${EC2_GROUP_INSTANCES_FILENAME} | awk '{print $2,$15;}' | sort > ${EC2_GROUP_IPADDRS_FILENAME}
EC2_GROUP_HOSTNAME_FILENAME=group_hosts.$$
grep -w ^TAG ${EC2_GROUP_INSTANCES_FILENAME} | grep -w Name | awk '{print $3,$5;}' | sort > ${EC2_GROUP_HOSTNAME_FILENAME}

# 内部IP・名前から/etc/hostsを作成し上書きする
EC2_GROUP_HOSTS=hosts.$$
echo "127.0.0.1   localhost localhost.localdomain" > ${EC2_GROUP_HOSTS}
join -j1 1 -j2 1 ${EC2_GROUP_IPADDRS_FILENAME} ${EC2_GROUP_HOSTNAME_FILENAME} | awk '{print $2,$3;}' >> ${EC2_GROUP_HOSTS}

cat ${EC2_GROUP_HOSTS} > /etc/hosts

# 一時作業ファイルを削除する
rm ${EC2_INSTANCES_FILENAME} ${EC2_GROUP_INSTANCES_FILENAME} ${EC2_GROUP_IPADDRS_FILENAME} ${EC2_GROUP_HOSTNAME_FILENAME}
rm ${EC2_GROUP_HOSTS}
==== end. ====

とりあえずこれでタグ:GroupNameが同じもの同士は、/etc/hostsに書き出されるようになったので、crontabなどで定期的に実行されるように設定しておく。


<追記>
スクリプトだけだと何をやってるのか分かりにくかったので、コマンド例を。

※インスタンスのインスタンスID($2)と内部IP($15)を拾ってくる。

[root@ip-10-145-150-102 shell]# ec2-describe-instances | grep -w ^INSTANCE | awk '{print $2,$15}'
i-56aa7a1b 10.123.102.108
i-54ab7ab1 10.123.148.222

※インスタンスのインスタンスID($3)とタグ名・設定値($4,$5)を拾ってくる。

[root@ip-10-145-150-102 shell]# ec2-describe-instances | grep -w ^TAG | awk '{print $3,$4,$5;}'
i-56aa7a1b Name CDHMGR01
i-56aa7a1b GroupName Cloudera
i-54ab7ab1 Name CDHMGR02
i-54ab7ab1 GroupName Cloudera

↓これらをUNIXのjoinコマンドでつなげてやると、

i-56aa7a1b 10.123.102.108 CDHMGR01
i-54ab7ab1 10.123.148.222 CDHMGR02

となるので、あとは頭のいらない部分を捨てた上で、hostsに追記している。