Monthly Archives: March 2011

AWSとOracleとElastic IP

  (旧ブログから移行したので情報が古い。もうOracleのRDSまで出るもんなあ。AWSの機能追加・改善のスピードにはいつも驚かされる) Amazon Web Services上でOracle用のインスタンスをlaunchして、Elastic IPを割り振った後、何点かハマったのでメモ。 インスタンス起動すると、listener.oraのHOSTが古いままなんですけど 症状: AWSのインスタンスは、起動する度にホスト名が変わってしまう。 listener.oraは、こんな感じになっているのだが、 $ cat listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) (ADDRESS = (PROTOCOL = TCP)(HOST = domU-XX-XX-XX-XX-XX-XX)(PORT = 1521)) ) ) HOSTの文字列が更新されない。ちなみに、tnsnames.oraのHOSTも同じ。 どうしよう: 参考:[TechDay] 第6回 Amazon Elastic Compute Cloud (Amazon EC2) http://builder.japan.zdnet.com/member/u502383/blog/2008/10/25/entry_27017395/ 上記サイトを参考に、Oracleの起動スクリプトを書き換える。上記サイトではOracle XEをベースに解説されているが、Enterprise Editionの場合は/etc/init.d/dboraを書き換える。ポイントとしては、元の起動スクリプトだと、/root/firstrunがないとlistener.oraの更新がされないようになっていたので、条件文コメントアウトした。 インスタンス起動すると、環境変数ORACLE_HOSTNAMEが古いままなんですけど 症状: oracleユーザの環境変数ORACLE_HOSTNAMEも、前回起動していたインスタンスのホスト名が割り当てられたまま。 どうしよう: 参考:Thread: How to use the db installed on Amazon EBS (Elastic Block Storage)? http://forums.oracle.com/forums/thread.jspa?threadID=720265&start=15&tstart=0 これもOracleの起動スクリプトを書き換える。元の# Get Public DNS Hostnameセクションをコメントアウトして、以下だけにしてみた。例外処理できてませんけど・・・。 echo “Getting Public DNS for this Instance” | logger -t “dbora” METADATA_URI=http://169.254.169.254/latest/meta-data/public-hostname export ORACLE_HOSTNAME=”`wget -q -O – ${METADATA_URI}`” echo “Setting ORACLE_HOSTNAME in .bash_profile” | logger -t “dbora” echo “export ORACLE_HOSTNAME=${ORACLE_HOSTNAME}” >> /home/oracle/.bash_profile EM起動しないんですけど・・・ 症状: Enterprise Manager起動しようとすると、 […]

Elastic IPを自動で割り振りたい

  AWSはインスタンスを起動する度にPublic IPが変わってしまい、非常にウザいので、Elastic IPを使って固定IPを割り振ることにした。Elastic IPはインスタンスのInstance IDと紐付くことになるため、Amazon EBSと同じく、インスタンスを起動するタイミング、shutdownするタイミングで紐付きを解除することにした。 参考:[TechDay] 第7回 Amazon Elastic Compute Cloud (Amazon EC2) : Elastic IP http://builder.japan.zdnet.com/member/u502383/blog/2008/11/08/entry_27017766/ 1、固定IP取得 AWS Management Consoleとかで固定IPをallocateする。 2、スクリプト準備 /rootに.ec2envを作成。自分とこの環境に合わせて適宜修正。 (2014/10/12追記) EC2_PRIVATE_KEY、EC2_CERT環境変数を使ったAWS CLIツールアクセスはできなくなるので、IAM Roleを活用しましょう。 参考:Private key authentication has been deprecated from the CLI. export JAVA_HOME=/usr/local/jre1.6.0_13 export EC2_HOME=/usr/local/ec2-api-tools-1.3-34128/ export PATH=$PATH:$EC2_HOME/bin:$JAVA_HOME/bin export EC2_PRIVATE_KEY=/root/pk-.pem export EC2_CERT=/root/cert-.pem /etc/init.dにaws_elastic_ipを作成。 #! /bin/sh # ELASTIC_IP_ADDRESS=自分とこのelastic IP . /root/.ec2env EC2_INSTANCE_ID=`ec2din | grep running | gawk ‘{print $2}’` # Carry out specific functions when asked to by the system case “$1” in start) echo “Assigning Elastic IP Address.” ec2-associate-address $ELASTIC_IP_ADDRESS -i $EC2_INSTANCE_ID >/dev/null 2>&1 ;; stop) echo “Deassigning Elastic IP Address.” ec2-disassociate-address $ELASTIC_IP_ADDRESS >/dev/null 2>&1 ;; esac exit 0 chmodしておく。 3、起動スクリプト配置 rc4.dとかにリンクはっておく。 ln -s […]

Amazon EBSのボリュームを自動でattachしてマウントしたい

  EC2でインスタンスを起動すると、Instance IDが割り振られる。Amazon EBS(Elastic Block Store)のボリュームをインスタンスにattachすると、このInstance IDとボリュームが紐付くことになる。fstabにマウント情報を書いておけば、インスタンスを再起動してもこの紐付きは維持され、再起動後も普通にマウントされる。 だが、Instance IDはインスタンスをshutdownすると変わってしまい、都度ボリュームをattachし直さないといけない。これはウザい。耐えられない。 おなじことを考えている(?)人がいた。 Possible to Auto-Attach/Mount EBS at Boot? http://developer.amazonwebservices.com/connect/thread.jspa?messageID=103331&#103331 そして、EBSのボリュームを自動でattach/detachして、マウントするためのスクリプトをPythonで書いた勇者がいた。 Scripts to automatically attach and mount an EBS Volume at Boot Time http://developer.amazonwebservices.com/connect/thread.jspa?messageID=99100 早速試してみたときのメモ。 ■インスタンスを起動して、EBSをattach AWS Management ConsoleとかでEBSのボリュームを作成しておく。今回、デバイス名はsdfとした。 今回は、Oracleが提供しているAMIを使って、インスタンスを起動した。AMI IDはami-cecb2fa7のやつを使った。 以下を参考に、EBSをattach。 Amazon EBSを活用してデータをバックアップしてみよう ~Amazon EC2/S3環境構築のすべて~ http://codezine.jp/article/detail/3546 EBSボリュームが認識されているか確認。 $ cd /dev $ ls sd* sda1 sda2 sda3 sdf ファイルシステムつくる。 mkfs -t ext3 /dev/sdf マウントポイントを作っておく。今回は/opt/oracleとする。 mkdir /opt/oracle マウントする。 mount /dev/sdf /opt/oracle fstabにエントリを追記しておく。 echo “/dev/sdf /opt/oracle ext3 noatime 0 0” /etc/fstab あと、今回使ったAMIでは、デフォルトではsda2がマウントされていなかったので、上記と同じような要領で、/volにマウントしておいた。後述のec2-bundle-vol実行用。 ■ec2-api-toolsを使えるようにしておく EC2のインスタンス上で、ec2-api-toolsを使えるようにしておくこと。 以下、やったこと。 ・ネットから落としたJRE解凍して、/usr/localに配置した。Oracle付属のJREあったけど、なんとなく気持ち悪いので。 ・ec2-api-tools.zipをダウンロードして、サーバにアップ。unzipして、/usr/localに配置した。 ・/rootに、証明書ファイル(cert-なんたら)と秘密鍵ファイル(pk-なんたら)を配置した。 ・後は適当に、環境変数の設定とか。JAVA_HOME、EC2_HOME、EC2_PRIVATE_KEY、EC2_CERT、PATHとか。 ■スクリプトの準備 スクリプトをダウンロード。wgetできなかったので、クライアント側に一旦取得して、インスタンス側にアップロードした。 http://developer.amazonwebservices.com/connect/servlet/JiveServlet/download/30-24163-99100-1963/mount_ebs_volume.py http://developer.amazonwebservices.com/connect/servlet/JiveServlet/download/30-24163-99100-1964/.ec2cred http://developer.amazonwebservices.com/connect/servlet/JiveServlet/download/30-24163-99100-1965/aws_ebs_mount http://developer.amazonwebservices.com/connect/servlet/JiveServlet/download/30-24163-114043-2210/mount_ebs_volume.patch スクリプトにパッチを当てる。 $ patch < mount_ebs_volume.patch patching file mount_ebs_volume.py mount_ebs_volume.pyの# setup environmentセクションを修正。 元々のos.putenv行をコメントアウトして、自分とこのインスタンスの環境に合わせて記述。 #os.putenv('PATH', '/root/ec2-api-tools/bin/:' + os.getenv('PATH')) #os.putenv('EC2_HOME', '/root/ec2-api-tools/') #os.putenv('JAVA_HOME', '/usr/lib/jvm/java-6-sun') […]