Happy My Life

日常とか技術とか

Amazon EC2でAndroid(gingerbread)をビルドする(設定編)

巷というかWeb界隈ではよく話題にあがるAmazon EC2。では、Androidソースコード(gingerbread)をビルドすると、どの程度の時間でビルドが完了するのかなーと試してみたくなったので、やってみた。

Amazon EC2はインターネットサービスに限定せずに、ネットワーク接続されているPCとも考えられるので、リモートのLinuxマシンに見立てて、そこでAndroidソースコードをビルドすることも勿論可能。EC2を利用することで、場所やマシンを限定せずにビルドできるようになるという。どこでもビルドできるって素敵だね(棒)

ってことでビルド環境を仕立てたが、私はEC2自体よく知らない状況から始めたので、試行錯誤しながら進めていった。このエントリーが参考になればいいな、ということで。

基本的にUbuntu 10.04LTS Server(64bit)をEC2上に構築して、そこにビルド環境を整える手順となる。そういった意味では、Androidに限らずEC2でUbuntu使いたい人には参考になるかと。

EC2の契約

何はともあれまずは契約。契約方法については、ここでは省略。契約編:Amazon クラウド- AWS/EC2でSAP環境構築(1/10)|Realtech Japan(リアルテックジャパン)が参考になるかと。一つ注意する点があるとすれば、AWSのユーザ登録の際、携帯番号の登録が必須となっており、その過程で海外から自動音声による電話の着信による確認がある。着信を取ると、英語の自動音声アナウンスが流れて、最後に4ケタの暗唱番号を入力するようアナウンスがある。

あとはブラウザには4ケタの数字が表示されているので、それを入力する。英語でいきなりしゃべるので少しビビるが相手は機械だ、あせるな、ということを言いたかっただけで(笑)

Ubuntuのイメージとか、リージョンとか

登録完了後は、まずは自分が利用するUbuntuインスタンス(実行イメージ)を作成する必要がある。一番お手軽なのが、公式配布されているAMI(設定済OSのマシンイメージ)を自分のインスタンスとしてコピーする方法。

この手順は、Ubuntuの公式サイトであるEC2StartersGuide - Community Ubuntu Documentationに書かれている。今回は、Ubuntu10.04LTS(64bit)を利用した。

あとAMIは、リージョンごとに決められている。リージョンとは、インスタンスを設置する地域のこと。EC2のサーバは、アメリカ(us-northeast, us-west)、EU、シンガポール、東京にあるので。

本当は東京で作成したかったのだが、公式のUbuntuのイメージが、us-northeast, us-westにしか用意されていなかったので、日本に近いus-westで。まあ、us-westから東京に移転させる事も可能なのだが、今回はそのままで。

http://uec-images.ubuntu.com/releases/10.04/release/ には、AMIとして用意されているUbuntu 10.04LTSが多数紹介が紹介されていて、どれを選択してよいか分からず面喰らうかもしれない。今回は"us-west-1"、"64bit"、"ebs"(イメージが停止しても設定ファイルが消えないファイル)ということで、"ami-8d1d4fc8"を利用した。

環境設定

インスタンス生成や起動などといったEC2の環境をリモート操作する方法は2通りあって、1つはブラウザから操作する方法、もうひとつは"Amazon EC2 API Tools"というCUIツール群を利用する方法がある。

今回は、EC2StartersGuide - Community Ubuntu Documentationに従ってAmazon EC2 API Toolsを利用する。実行するには、Javaの実行環境が必要となる(JDK、OpenJDKどちらでもOK)。以下、EC2StartersGuide - Community Ubuntu Documentationを参考に作成していく。

Amazon EC2 API Toolsのインストール

Ubuntuでは、パッケージも用意されているが、最新版を利用した方が無難だろう、ということで、Amazon EC2 API Tools : Developer Tools : Amazon Web Servicesからダウンロードした。展開するとreadmeファイルとか、binディレクトリ、libディレクトリなどが生成されているが、それらをまるごと$HOME/ec2toolsディレクトリにコピー。

秘密鍵、X.509証明書の取得

EC2のインスタンスにアクセスするには、X.509の証明書が必要となるので、秘密鍵、X.509証明書の2つのファイルをダウンロードしておく。

X.509証明書は、ログイン後、「セキュリティ証明書」「アクセス証明書」で、"新しい証明書を作成する"から秘密鍵、X.509証明書が取得できる。

aws1 aws2 aws3

取得した2つのファイルは、.ec2ディレクトリに移動

mv *.pem $HOME/.ec2

環境変数の設定

あとは環境変数の設定を ~/.bashrcに追加する。

export JAVA_HOME=/usr/lib/jvm/java-6-sun
export EC2_HOME=$HOME/ec2tools
export EC2_CERT=$HOME/.ec2/cert-xxxxxxx.pem
export EC2_PRIVATE_KEY=$HOME/.ec2/pk-xxxxxx.pem
export PATH=$EC2_HOME/bin:$PATH

そして設定を有効化。

source ~/.bashrc

つぎに公開されているAMIを利用するために、sshの鍵を生成して保存する必要がある。今回は、us-west-1を利用しているので、リージョンの設定を忘れないこと(リージョンの指定を忘れると、us-northeastを設定したことになる)

あとは秘密鍵なのでアクセス権限も600にしておく。

ec2-add-keypair ec2-keypair --region us-west-1 > ec2-keypair.pem
mv ec2-keypair.pem  $HOME/.ec2
cd $HOME/.ec2
chmod 600 ec2-keypair.pem

インスタンスの設定

ここでようやくインスタンスが設定できる。マイクロインスタンスで動作させる場合は以下のようになる。これで起動する。

ec2-run-instances ami-8d1d4fc8 -k ec2-keypair -t t1.micro --region us-west-1

インスタンスが起動しているか確認する(AWS マネージメントコンソール から確認することもできる)

ec2-describe-instances --region us-west-1

あとは、port22(ssh)を開ける。

ec2-authorize default -p 22 --region uw-west-1

sshにてログインする。

ssh -i $HOME/.ec2/ec2-keypair.pem ubuntu@

このときのexternal-host-nameは、インスタンス生成後に割り当てられるPublic DNSを指定すること(ec2-(数字)-(数字)-(数字)-(数字).us-west-1.compute.amazonaws.com みたいなアドレス) ec2-describe-instancesで確認することができる。

ec2-describe-instances --region us-west-1

あとは

ここまできたら、Ubuntu10.04LTS(64bit)にアクセスする環境が整った。あとは通常のgingerbreadのビルド環境を構築するだけの話。次回は、これを利用してベンチマークしてみる。