EC2でEBSを使う
EC2でEBSを使ってみましょう。
EBSは外部のファイルサーバのような物で、ここに格納したデータは、EC2のインスタンスを落としても消えることはありません。更に、スナップショットを取ってS3にバックアップ出来るなど、データを確保したまま継続運用を行えます。またEBSは、複数のEC2インスタンスからアタッチしてマウントできるので、データの共有も行えます。
作成からアタッチまでの手順です。
1.EBS領域の作成
AWS Management Consoleの「ELASTIC BLOCK STORE」メニューの「Volumes」を選択。
そして「create volume」で必要なサイズを指定して作成します。
ただし、EC2のロケーションと同じ場所でないとアタッチ出来ないので、必ず同じロケーションを指定してください。
2.EC2へのアタッチ
ローカルマシンから以下のコマンドを打つと、アタッチされます。
# ec2-attach-volume -d /dev/sdc --region us-west-1 -i i-**** vol-****
westで使うときは、--region us-west-1の指定を忘れずに。eastがデフォルトなので、eastの場合は指定がいらないので、つい忘れてしまいますから。
i-****は接続先のEC2のインスタンスIDです。
vol-****はEBSのVolume IDです。
以下のコマンドで状態を確認してください。
# ec2-describe-volumes --region us-west-1
ステータスがattachedになっていれば完了です。
3.EC2から確認してみる
EC2にsshログインして、以下で認識されているか確認してください。
# ll /dev/sd*
先程の/dev/sdcが確認できたらOKです。
3.ファイルシステムの作成
あとは通常のLinuxの知識です。
# mkfs -t ext3 /dev/sdc # mkdir /vol # mount /dev/sdc /vol
もしMySQLとかのデータを本格的にこのボリュームで動かすなら、ext3よりもxfsとかの方がいいかもしれません。カーネルによるので、その辺りは調べてみても良いかもしれません。
AWS利用料金の確認
備忘録だらけですいません。
AWSの利用料金の確認方法です。
数時間更新(1時間?)で、リアルに今いくら使ったかが分かります。
アマゾンのAWSのTOPページhttp://aws.amazon.com/に行き、「Your Account」→「Account Activity」で、料金が出ています。リアルに上がっていくのでドキドキです。
AWSをeastからwestに移して稼働させる
S3に稼働中のEC2のAMIを保存するからの続きです。
eastのS3上に作成したAMIを、westに転送して、インスタンスを稼働させます。
1.eastからwestにコピー
us-east-*のインスタンスにログインして、以下のコマンドを実行します。
転送する場合、先にwestのS3のバケットを作るとNGになります。以下のコマンドの最後にwestのバケット名をしていすると、自動的に作成してくれます。
# ec2-migrate-bundle -k ${private key file} -c ${cert file} -a ${access key ID} -s ${secret access key} --bucket ${source bucket(eastの物)} --manifest ${manifest filename} --location us-west-1 --region us-west-1 --destination-bucket ${west backet name}
これもサイズによりますが、時間がかかります。
終わるとwestでのmanifestへのフルパスが表示されるので、保存しておきましょう。
2.westにAMIを登録する
今度は、west側にAMIを登録します。
ec2-register --region us-west-1 --name ${イメージ名} ${新しいmanifestのwestでのフルパス}
3.eastのAMIを削除
eastの分を削除しておきましょう。
# ec2-deregister ${AMIのID}
※もしwestのを削除する場合は
# ec2-deregister --region us-west-1 ${AMIのID}
4.westでインスタンスを起動
AWS Management Consoleにログインし、左上の「region」を「US west」に変更。
「Launch Instance」で、「My AMI's」を選択し、2で登録したAMIのIDを探しインスタンスを起動する。
うまくいきました!!
mixiアプリでgoogle Analyticsを使う方法
mixiアプリの解析にgoogle analyticsを利用してみます。
まず
「mixiアプリで実際使えんのかよ?」
って思ったんですが、こちらに「OK!使える」って意味のことが書いてるんで、使えるんでしょう。
http://developer.mixi.co.jp/appli/pc/lets_enjoy_making_mixiapp/ablle_list
あと、こちらにOpenSocialアプリでの利用の仕方が書かれていました。
http://groups.google.co.jp/group/opensocial-japan/browse_thread/thread/0c27937954fbcb5a
ってことで、この2つの内容を合わせるとですね
<Require feature="analytics" /> <script type="text/javascript"> _IG_Analytics(<ID>, <仮想パス>); </script>
って書けば、mixiアプリでも動くんじゃないのかってことです。
最悪でも通常のトラッキングコードを書けば動くでしょ
<Require feature="analytics" /> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try { var pageTracker = _gat._getTracker(<ID>); pageTracker._trackPageview(); } catch(err) {}</script>
ってのりで、埋め込んでみたんですけど。。。
まだ結果を見てないので、うまくいったら報告します。
S3に稼働中のEC2のAMIを保存する
実は。。。
インスタンスをEASTに作ってセットアップしてしまったので、今のうちにWESTに移そうと思います。EBSで実運用は行う予定ですが、一旦はEASTのS3にイメージを保存して、WESTに送って、WESTで新しくインスタンスを立ち上げてからEBSにて稼働させる予定。
その手順のAMIの登録までです。相変わらず備忘録ですが。
1.S3のBucketを作る
1-1.まずはX.509証明を取得
AWSのページの右上、Your Account→Security Credentialsのページを開きます。
真ん中のタブ「X.509 Certificates」で、X.509 Certificateカラムの下にあるDownloadをクリックして、2つのキーをダウンロードして下さい。
pk-******.pem
cert-*******.pem
1-2.Access keyとSecret Access keyの取得
同じページの左のタブ「Access Keys」で、「Access Key ID」と「Secret Access Key」を取得します。
2.S3Foxのインストール
Firefoxを開き、以下のアドオンをインストールして下さい。
https://addons.mozilla.org/ja/firefox/addon/3247
3.S3のbacketを作る
S3Foxを起動後、左上のManage Accountsで、1-2.で取得したAccess key IDとSecret Access keyを設定します。
S3Foxの右側のエリアで右クリックし、Create Directoryでディレクトリを作成します。この名前は、AWS全体で一意じゃないといけないので、他の人とかぶるとNGです。
参考
http://codezine.jp/article/trackback/3232
4.稼働中のインスタンスのイメージを作成
稼働中のインスタンスに、1-1.で取得したファイルを転送しておきます。
それを/mntに保存。
いよいよAMIの作成です。ただし、保存されるのは/dev/sda1のみで、/dev/sda2などは保存されないのでご注意を。
# ce /mnt # ec2-bundle-vol -d /mnt --privatekey pk-*****.pem --cert cert-*****.pem --user ${Acount key ID} --fstab /etc/fstab Please specify a value for arch [i386]: 32bitならこのままEnter。54bitなら「x86_64」と入力しEnter
サイズによって時間はまちまちですが、作成されるまでに時間がかかります。
15分くらいですかね。
5.AMIをS3に転送
「Amazon EC2」⇔「Amazon S3」間の転送量は課金対象外となっているため、安心して使うことができます。
# ec2-upload-bundle --bucket ${バケット名} --manifest image.manifest.xml --access-key ${Access key ID} --secret-key ${Secret Access key ID}
${バケット名}は、例えば「bucketname」というバケットを使っていて、その直下にある「ec2_images」ディレクトリ内に「fedora」という名前でAMIを保存したい場合は、上記例の${アップ先のバケット名}部分に「bucketname/ec2_images/fedora」と入力します。
6.AMIの登録
AMIを登録しておけば、次回からそのAMIで起動が可能になります。
ローカルのパソコンから以下のコマンドを打ってください。
※ec2-api-toolsがインストールされている前提です。
# ec2-register ${バケット名}/image.manifest.xml -n ${イメージ名}
${アップ先のバケット名}は、5.で指定したものです。
${イメージ名}は分かりやすいもので
このとき、以下の出力がされるます
IMAGE ami-*****
これがAMIのIDになります。クライアントから以下でも確認可能です。
# ec2-describe-images -o self
参考
http://codezine.jp/article/trackback/3546
http://builder.japan.zdnet.com/member/u502383/blog/2008/08/19/entry_27013061/
EC2の手引き
EC2の申し込みが終わったら、インスタンスを立ち上げましょう。
これがなかなか大変だったので、こちらに記述しておきます。
1.操作用のクライアントツールを決める
Eclipseのプラグインや、Firefox用のアドオンなどありますが、今回はAWSが提供しているAWS Management Consoleを利用しました。
2.ログインして、Instancesでインスタンスを選びます。32bit版だと強制的に契約がSmallなどになります。64bit版だと、強制的にえと、上のヤツになります。
初回にkey pairを作るので、プライベートキーをちゃんと取っておきましょう。
3.デフォルトのセキュリティーグループ設定では、SSHが無効なので、セキュリティーグループを作って割り当てます。起動後でも変更可能です。
4.起動したら、インスタンス一覧の該当のサーバを右クリックして、connectを選びます。
5.Puttyで設定するのですが、2で作ったキーはそのままでは使えないので、PuttyGenでPutty用に作りなおします。パスフレーズを設定して、忘れないようにしてください。
6.接続したら、パスフレーズを入れてログイン完了。
※このとき、Access denaideなどが出る場合は、多分OSイメージファイル(AMI)でrootのアクセスを禁止した状態で作れらた物だと思います。使えるように剃る方法がわからないので、別なAMIを選んでください。
7.まずは、rootのパスワードを変更します。
もし
#passwd root Changing password for user root. passwd: Authentication token manipulation error
が出たら、
#pwconv
してからもう一度やってみてください。
パスワードが/etc/shadowと/etc/passwdとで整合性が取れなくなるとでるようです。
8.ログインなどの制限
/etc/ssh/sshd_config
を以下のように設定します。パスワードを解析されたら、プライベートキーがなくてもログインされてしまうので、それらを禁止しましょう。
# SSH2のみ許可 #Protocol 2,1 Protocol 2 # ROOTログイン拒否 #PermitRootLogin yes PermitRootLogin no # 匿名ユーザ拒否 #PermitEmptyPasswords yes PermitEmptyPasswords no # パスワードログイン拒否 #PasswordAuthentication yes PasswordAuthentication no
最後に反映します
/etc/rc.d/init.d/sshd restrt
固定IPからの接続のみなら、AWS Management Consoleでセキュリティーグループの設定でsource IPを設定しておきましょう。
参考
http://blog.goo.ne.jp/hirohito_japan/e/6917911cd09b3788054d3ee98d7c949b
9.ユーザの作成
useradd ユーザ名
その後、パスワードを変えておきましょう。
10.Apacheのダウンロード
# cd /usr/local/src # wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.14.tar.gz
11.Apacheのインストール
# tar xzf httpd-2.2.14.tar.gz # cd httpd-2.2.14 # ./configure --prefix=/usr/local/**** --enable-proxy=yes --enable-proxy-ajp=yes --enable-proxy-balancer=yes --enable-shared=yes --enable-rewrite=yes --enable-so=yes --enable-ssl=yes --enable-dav=yes # make # make install
※今回、GCC、make、opensslもなかったので、以下をインストールしました。
# yum install gcc # yum install make # yum install openssl-devel
http://centos.i-recording.net/apache_install.html
12.時間を日本時間にする
よく見たら、時間が米国のものに!
そらそうや。
で、ntp入れて合わせようとしたが、時間が変わらない。
調べてみたら、EC2の場合ntpであわせても反映されないそう。ってか、AWS側でそれぞれあわせてくれるそう。
日本時間にするには、インスタンスのOSのローカル時間を日本設定に変えるだけ。
サーバーのローカルタイムの設定ですが、設定は /etc/localtime ファイルで決まるので、/usr/share/zoneinfo/ 内の任意のファイルを /etc/localtime としてコピーしてやるか、リンクを作ればOK。OSの再起動は必要なく、ローカルタイムの表示が変わります。
13.SFTPでの接続確認
SSHを入れているので、デフォルトでSFTPが立ち上げっています。
切りたい場合は、/etc/ssh/sshd_configファイルの以下をコメントアウト
Subsystem sftp /usr/libexec/openssh/sftp-server
反映も忘れないように
/etc/rc.d/init.d/sshd restrt
次に、それぞれのユーザがアクセス出来るようにします。
# cp -Rf /root/.ssh /home/ユーザ # chown -Rf ユーザ .ssh
これで公開キーがユーザに配布されました。
Filezillaを利用する場合、パスフレーズに対応していないので、PuttyGenでパスフレーズ無しで鍵をつくって読み込ませる必要があります。
14.Jdkのダウンロード、インストール
wgetで取れないので、ローカルでとってサーバにアップします。
http://java.sun.com/javase/ja/6/download.html
インストールは
# ./jdk-1.6.18.bin # mv jdk-1.6.18 /usr/local/java/
15.Tomcatのダウンロード、インストール
# wget http://www.apache.org/dist/tomcat/tomcat-6/v6.0.24/bin/apache-tomcat-6.0.24.tar.gz # tar zxvf apache-tomcat-6.0.24.tar.gz # mv apache-tomcat-6.0.24 /usr/local/****
16.Apache、Tomcatの連携
Apache2では、これまでの1系とちがって、mod_proxyによる連携が標準でサポートされています。
それらはビルトインモジュールなので、以下で確認しましょう。
# /usr/local/apache***/bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_include.c mod_filter.c mod_log_config.c mod_env.c mod_setenvif.c mod_proxy.c mod_proxy_connect.c mod_proxy_ftp.c mod_proxy_http.c mod_proxy_ajp.c mod_proxy_balancer.c prefork.c http_core.c mod_mime.c
ここで、mod_proxyが入っていれば使える状態になっています。
httpd.confで、以下の設定を追加します。
<Location /nanika/> ProxyPass ajp://127.0.0.1:8009/nanika/ </Location>
http://ドメイン/nanika/
など、実際のURLにアクセスしてみましょう!
とりあえず、これで動作しました。
AntタスクでSFTPを使ってファイルをアップする Eclipse利用
外部サーバにSFTPでファイルをアップする必要があったので、調べました。
Eclipse3.5のGalireoを利用しています。
1.jschの入手
SSH接続でのファイル転送を実行するには、scpタスクを利用します。
そのためには、jsch.jarを以下からダウンロードして
${ECLIPSE_HOME}\plugins\org.apache.ant_1.7.1.v20090120-1145\lib
などの、antプラグインのlibフォルダにいててください。
http://sourceforge.jp/projects/sfnet_jsch/
※これで出来ると思ったけど、パスが通らないので、Antで利用出来るようにEclipseで以下の設定を行いました。Window→preference→Ant/Runtime のclasspathタブのGlobal Entriesを選択し、Add External Jarsで先程のjsch.jarを指定します。
追記:Eclipseの中に元々入っているものでもOKみたいです。${ECLIPSE_HOME}/plugins/com.jcraft.jsch_0.1.42.jarあたり。
2。Antタスクの作成
SCPタスクの主な属性は以下。
属性 | 詳細 |
---|---|
file | コピー対象ファイル。 例 user[:password]@host:/directory/path コピー対象ファイルはこのfile属性か |
todir | コピー先ディレクトリ。 例 user[:password]@host:/directory/path 必須項目です。 |
port | リモートホストに接続するためのポート。 デフォルト22。 |
password | file属性かtodir属性にパスワードを指定している場合は不要です。 |
記述すると
<target name="deploy-war" > <scp todir="${USERID}:${PASSWORD}@${HOST_TEST}:${TOMCAT_HOME}/webapps/" trust="true"> <fileset refid="war_transfer" /> </scp> </target>
みたいな感じです。
追記:keyfileを使って認証する場合は、以下の作業が必要。
Eclipseで
Window→Prefference
左側ののGeneral→Network Connections→SSH2
右側のKye ManagementタブでGenerate DSA Keyなどでキーセットを作成
公開キーは、サーバ上の.sshに追加
秘密キーは、build.xmlで以下のように設定
<target name="deploy-war" > <scp todir="${USERID}:${PASSWORD}@${HOST_TEST}:${TOMCAT_HOME}/webapps/" trust="true" keyfile="${KEYFILE}" passphrase="${PASSPHRASE}"> <fileset refid="war_transfer" /> </scp> </target>