hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

Android 端末による実機テスト手順

HT-03A 買いましたよ。
さっそく端末で「Hello, Android」を表示させてみたので、手順をメモしておきます。

Android端末での実行 for Mac

  1. Android 端末にて「設定>アプリケーション>開発>USBデバッグ」をオン
  2. Android アプリの AndroidManifest.xml の Application の Debuggable を true を指定
  3. Android 端末と PC を USB接続

windows の場合、さらにドライバーのインストールが必要らしいですが Mac だと不要です。
端末側は常に USBデバッグをオンにしておいて、毎回気をつけるのはアプリ毎に設定する Debuggable を true にする設定かな。
写真

Amazon S3 を使ってみたよ

AMI を保存するため、急遽必要に迫られたので環境構築していきます。
今回も CodeZine に沿って進めて行くため、ほとんど書く内容は変わらないと思います。

利用申請

申請は終わってるので飛ばします。

利用準備

クライアントツールのインストール

Firefox のアドオン「S3Fox」を使います。
とりあえず、 S3Fox をインストール。

クライアントツールの起動

インストールしてブラウザ再起動したら、[ツール]-[S3 Organizer]をクリックして S3Fox を起動します。
このとき、警告ウィンドウがでましたが、私は無視しました。

アカウント情報設定
  1. 左上にある [Manage Accounts] ボタンをクリックします
    S3
  2. [S3 Account Preferences] ウィンドウが表示される
    S3その2
  3. Access Name」と「Access Key ID」と「Secret Access Key」を設定
  4. [Add] ボタンをクリックしたら、[Close] します

バケットの作成

バケット(=トップディレクトリ)を作成します。ちなみにではなく、です。

  1. 右上にある [Create Bucket/Directory] をクリックします
    S3その3
  2. bucket 名を入力します。ただし、S3 全体でユニークとなる名前でないとエラーになります*1

使ってみる

アップロード

右の枠内にドラック&ドロップでアップロードできました。楽々です。

ダウンロード

ダウンロードしたいファイルを選択し、画面真ん中になる ← ボタンを押すとダウンロードされます。こちらも楽ですね。

まとめ

手軽にファイルのやり取りができるのは良いですね。
といっても、しっかり料金が発生してしまうので、あまり手軽に使いすぎるのもどうかと思います。

*1:私はアカウント名にしました

EC2 での AMI 作成手順

前々回は、インスタンスの起動・停止・確認まで進みました。そして、今回は AMI の作成を行いたいます。
作成理由は、EC2 をシャットダウンするとディスクに保存した内容が失われてしまうのですが。AMI を作成することにより、作成した時点のディスク内容でインススタンス起動できます。*1
今回も CodeZine に沿った形で作業を進めて行きます。今回の内容は2ページ分ですね。

事前情報

  • AMI は S3 に転送して保存する
  • EC2 から S3 への転送料は課金対象外
  • イメージ化されるディレクトリは「/dev/sda1」のみ

インスタンス

前々回の方法で、インスタンス起動まで進めます。

ssh 接続

今回は『AWS Management Console』を利用した手軽な接続方法を解説します。

  1. AWS Management Console/EC2 から、左メニューの [Instances] をクリック
  2. [Connect] ボタンをクリック
    ssh 接続その1
  3. [Connect Help - Secure Shell (SSH)]というタイトルのウィンドウが表示される
  4. ウィンドウ下に、ssh 接続するためのコマンドが添付されているので copy and paste
    ssh 接続その2
  5. ターミナルで、以前に作成したインスタンスキーが保管されているディレクトリでコマンド実行*2

適当なファイル作成

そのまま AMI 作成しても、元の AMI と違いが無いので、何かしらファイルを作成しておきます。

root@domU-12-31-39-00-5E-33:/root# ls
test

AMI 作成

「X.509証明書」転送

前々回に取得しておいた「X.509証明書」を AMI 側へ転送させます。

$ scp -i ec2_instance_key.pem *.pem root@ec2-75-101-180-145.compute-1.amazonaws.com:/mnt
cert-xxxxx.pem     100%  916     0.9KB/s   00:00    
ec2_instance_key.pem                          100% 1675     1.6KB/s   00:00    
pk-xxxxx.pem       100%  926     0.9KB/s   00:00    
ssh 接続して転送されたことを確認

/mnt にファイルが存在するかをチェックします。

# cd /mnt
# ls
cert-xxxxx.pem
ec2_instance_key.pem
lost+found
pk-xxxxx.pem

おぉ、ちゃんと転送されていましたね。

AMI 作成

はい、ようやく作成できます。
コマンドで、user の後にはアカウント名*3を指定してください。
途中で確認を求められますが。インスタンスタイプが「m1.small」なら、そのまま Enter を押せばよいです。

# ec2-bundle-vol -d /mnt --privatekey pk-xxxxx.pem --cert cert-xxxxx.pem --user xxxx-xxxx-xxxx  --fstab /etc/fstab
Please specify a value for arch [i386]: 
Copying / into the image file /mnt/image...
Excluding: 
	 /sys
	 /proc
	 /dev/pts
	 /dev
	 /media
	 /mnt
	 /proc
	 /sys
	 /etc/udev/rules.d/70-persistent-net.rules
	 /etc/udev/rules.d/z25_persistent-net.rules
	 /mnt/image
	 /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.002536 s, 413 MB/s
mke2fs 1.41.4 (27-Jan-2009)
/etc/fstab:
	 # Legacy /etc/fstab
	 # Supplied by: ec2-ami-tools-1.3-30748
	 /dev/sda1 /     ext3    defaults 1 1
	 /dev/sda2 /mnt  ext3    defaults 0 0
	 /dev/sda3 swap  swap    defaults 0 0
	 none      /proc proc    defaults 0 0
	 none      /sys  sysfs   defaults 0 0
Bundling image file...
Splitting /mnt/image.tar.gz.enc...
Created image.part.00
Created image.part.01
Created image.part.02
Created image.part.03
Created image.part.04
Created image.part.05
Created image.part.06
Created image.part.07
Created image.part.08
Created image.part.09
Created image.part.10
Created image.part.11
Created image.part.12
Generating digests for each part...
Digests generated.
Unable to read instance meta-data for product-codes
Creating bundle manifest...
ec2-bundle-vol complete.

ほぼ初期状態にも関わらず、作成には2・3分もかかりました。

作成した AMI を S3 へアップロード(仮)

作成されたデータは、EC2 側の /mnt ディレクトリにありますので、これを S3 へアップロードしてみます。
と、ここで重要なことに気づきました。
S3 の環境構築をしていない
ここ以降から構築について書いても良いのですが、読み難くなるので分けて書きます。
Amazon S3 を使ってみたよ

作成した AMI を S3 へアップロード(真)

${...} は、それぞれ指定して実行してください。

# ec2-upload-bundle --bucket ${アップ先のバケット名} --manifest image.manifest.xml --access-key ${Access Key ID} --secret-key ${Secret Access Key}
bucket ${アップ先のバケット名} ...
Uploaded image.part.00
Uploaded image.part.01
Uploaded image.part.02
Uploaded image.part.03
Uploaded image.part.04
Uploaded image.part.05
Uploaded image.part.06
Uploaded image.part.07
Uploaded image.part.08
Uploaded image.part.09
Uploaded image.part.10
Uploaded image.part.11
Uploaded image.part.12
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.

前述した通り、この転送料は課金されません。

AMI 登録

インスタンス起動できるよう AMI の ID を発行します。そのため、ログアウト(インスタンス起動停止)してから作業してください。

$ ec2-register ${アップ先のバケット名}/image.manifest.xml
IMAGE	ami-0558bf6c

現在登録中の AMI を確認してみましょう。

$ ec2-describe-images -o self
MAGE	ami-0558bf6c	aws-kawakami/image.manifest.xml	443600062368	available	private		i386	machine	aki-a71cf9ce	ari-a51cf9cc	

AMI の ID が「ami-0558bf6c」だと分かります。
また、デフォルトでは private となっていますが、これを public にすることも可能です。

AMI 起動

AWS Management Console を使って起動してみたいと思います。

  1. 左メニューにある [AMIs] をクリック
  2. 左側のコンボボックスで、「Private Images」を選択
  3. 発行した AMI の ID が一覧上に並ぶので、選択して [Launch] ボタンをクリック
    EC2

これで起動します。

確認

root@ip-10-251-211-144:~# ls
test

きちんと前に作成した「test」ファイルが存在することが確認できました。
以上で、今回の検証は終わります。

まとめ

まず、起動した仮想マシン上での作業がとにかく遅い。単にファイル作成するだけでもモッサリしててイラっと来る場合があります。このレスポンスの遅さは、国内にサーバーが置かれたら改善されるかもしれませんが、それ意外の方法でも何か対策が取れないか模索すべきです(既にある?)。
また、AMI の保存という作業が予想以上にメンドクサイです。どこがメンドウかと言うと、/mnt ディレクトリ情報が保存できないため、再度 AMI を保存したいときは一から作業しないとダメなところです。この辺は別の仕組みで保存できるらしいので、その方法しだいでは改善できるのかもしれません。

*1:別の方法でもディスク内容は保存可能

*2:以前に作成したインスタンスキー名称は ec2_instance_key.id でしたが、コピー元に合わせて ec2_instance_key.pem と拡張子を変更しました

*3:AWS サイトの [Account Activity] ページに Account Number とある番号のこと

AWSの操作方法比較

今回は『EC2コマンドライン』、『ElasticFox』、『AWS Management Console』の使い方を比較しながら進めていきます。

特徴

EC2コマンドライン
  • クライアントで CUI 操作
ElasticFox
AWS Management Console

事前準備

EC2コマンドライン
ElasticFox
  • Firefox ブラウザをインストール
  • ElasticFox アドオンをインストール
AWS Management Console
  • 必要なし

起動方法

EC2コマンドライン
  • ターミナル起動*1
ElasticFox
  1. Firefox 起動
  2. メニューバーから [ツール] - [Elasticfox] で、ElasticFox 起動
    ElasticFoxその1
AWS Management Console
  1. AWS Management Console/EC2 サイト表示
    AWS Management Consoleその1

AMIの選択

EC2コマンドライン

一覧が表示されるので、その中から探す。
AMI の ID は後に使用するので、メモしておく必要あり。

$ ec2-describe-images -x all
ElasticFox
  1. 起動したときにウィンドウが表示されるので、「Account Name*2」と「Access Key*3」と「Secret Access Key*4」を入力。
    ElasticFoxその2
  2. [Images]タブを選択
  3. リフレッシュすると一覧表示される
    ElasticFoxその3
AWS Management Console
  1. 左メニューの[AMIs]をクリックすると、一覧表示される
    AWS Management Consoleその2

インスタンス起動

EC2コマンドライン

AMIのIDと、sshキーを指定してコマンド実行。

$ ec2-run-instances ami-ec48af85 -k ec2_instance_key
ElasticFox
  1. 起動したい AMI を選択
  2. 起動ボタンをクリック
    ElasticFoxその4
  3. 起動オプションを設定するウィンドウが表示される
  4. お好みで設定し終えたら、[Launch]ボタンをクリック
  5. [Instances]タブへ自動的に遷移される
  6. [State]セルが pending から running になれば、インスタンス起動成功
    ElasticFoxその6
AWS Management Console
  1. 起動したい AMI を選択
  2. [Launch]ボタンをクリック
    AWS Management Consoleその3
  3. 起動オプションを設定するウィンドウが表示される
  4. お好みで設定し終えたら、[Launch]ボタンをクリック
  5. [Instances]へ自動的に遷移される
  6. [State]セルが pending から running になれば、インスタンス起動成功
    AWS Management Consoleその4

インスタンス確認

EC2コマンドライン

ドメイン名が表示されていれば起動中。

$ ec2-describe-instances
ElasticFox
  1. [Instances]タブをクリックすると、現在のインスタンス状況が一覧で表示される
AWS Management Console
  1. 左メニューの[Instances]をクリックすると、現在のインスタンス状況が一覧で表示される

インスタンス停止

EC2コマンドライン

インスタンスIDを指定してコマンド実行します。

$ ec2-terminate-instances i-58600831
ElasticFox
  1. 停止したいインスタンスを選択
  2. [terminate]ボタンをクリック
    ElasticFoxその7
  3. 停止確認ダイアログが表示されるので、[OK]をクリック
  4. [State]セルが shutting-down から terminated になれば、インスタンス停止成功
AWS Management Console
  1. 停止したいインスタンスを選択
  2. [terminate]ボタンをクリック
    AWS Management Consoleその5
  3. 停止確認ダイアログが表示されるので、[Yes,Terminate]をクリック
  4. [Stage]セルが shutting-down から termnated になれば、インスタンス停止成功

まとめ

CUI だと手間に感じていた部分が、GUI だと楽にできますね。
今回は2種類の GUI 操作できる方法を試してみましたが、個人的には『AWS Management Console』の方が良いと感じました。
理由は、ブラウザに捕われないことと、初期設定が無くすぐに始められる手軽さです。あとは、UI が自分好みというのもありますね。

*1:Macの場合

*2:e-mail address

*3:AWSページから[Your Account]-[Access Identifiers]遷移した先から確認可能

*4:Access Key と同じページ内で確認可能

Amazon EC2 でのインスタンス起動・停止・確認方法

ホント今更ですが、Amazon EC2 少し触ってみました。
あまり情報収集もしていなかった所なので、中途半端な知識しかないので触っていくうちに覚えられたら良いなぁと。


開始方法については以下をメインに参考にしました。ほとんど CodeZine で書かれてあることの繰り返しになると思います。
Amazon EC2を動かしてみよう〜Amazon EC2/S3環境構築のすべて〜

証明書を取得

  1. EC2 を動かすためには証明書が必要らしいので、早速 Amazon Web Services から取ってきます。
  2. AWS」ページ上から [Your Account] - [Access Identifiers] をクリックします。
  3. Access Identifiers」ページに遷移するので、下の「X.509 Certificate」枠にある [Create New] をクリックします。
  4. 「Create A New Certificate」ページに遷移され、「You can only have one certificate associated with your AWS account.」と警告文がでますが、「1アカウントに対し、1証明しか発行できませんよ!」と言ってるらしいので、無視して [YES] をクリックします。
  5. 「Create Success」ページに遷移され、[Download Private Key File]と「Your X.509 Certificate file」ボタンをクリックして、プライベートキーとクリティカルファイルをローカルにダウンロードして、任意ディレクトリ*1に保管してください。

以上が、CodeZine の1ページ目の内容。いやー、まったく同じで読む価値ないです。それほど記事の内容が分かりやすいということですね。

Amazon EC2 を操作するためのコマンドラインツール

Amazon EC2 API Tools」というツールで操作できるらしいので、こいつを取得します。EC2 サービスは全て API 経由での操作になるようなので、かなり大事なツールになるようですね。

  1. ここの [Download the Amazon EC2 API Tools] をクリックすると、ダウンロードが開始される。
  2. 解凍して、任意ディレクトリ*2に配置します。このツールを実行するために、Javaランタイムが必要らしい。だが、前回 java を最新にしていた俺に抜かりはなかった。
  3. ここで環境変数を設定する必要が出てきますが、私のマシンは Mac なので、他のプラットフォームだと違ってくる*3と思います。各々が配置したディレクトリを参照するよう、環境変数を設定してください。
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/
export EC2_HOME=/usr/local/ec2-api-tools
export PATH=$JAVA_HOME/bin:$PATH:$EC2_HOME/bin
export EC2_PRIVATE_KEY=~/key/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=~/key/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem

最後にコマンド実行してエラーにならなければ、ツールのインストール&設定は完了。

$ ec2ver
1.3-34128 2009-03-01

環境変数の設定だけは、各プラットフォームに合わせての設定が必要ですが。それ以外は CodeZine にある記事通り進めれば問題なく設定できますね。

AMI の選択

公式や一般公開されてある分を以下のコマンドで一覧表示できます...が、公式や一般公開分を合わせると大変な数で、正直よく分かりません。

$ ec2-describe-images -x all

ザッと眺めた限りだと、Ubuntu8 は使ったことあるので、このイメージを使わせてもらう事にする。

IMAGE	ami-ec48af85	alestic/ubuntu-8.10-intrepid-base-20090418.manifest.xml063491364108	available	public		i386	machine	aki-a71cf9ce	ari-a51cf9cc	

この中で必要なデータは、IDである「ami-bbfe19d2」だけらしいので、これだけメモっておく。

インスタンス起動

ssh 接続するためのキーを作成します。
$ ec2-add-keypair ec2_instance_key | sed -e "1d" > ec2_instance_key.id
$ chmod 400 ec2_instance_key.id

「ec2_instance_key」部分は任意の文字列で良いみたいです。
作成されたキーに対し、自分のみアスセス権限を与えます。

インスタンス起動

このコマンドを実行したタイミングから課金開始されるようです。

$ ec2-run-instances ami-ec48af85 -k ec2_instance_key
RESERVATION	r-8cf973e5	443600062368	default
INSTANCE	i-58600831	ami-ec48af85			pending	ec2_instance_key	0		m1.small 2009-04-21T16:05:10+0000	us-east-1c	aki-a71cf9ce	ari-a51cf9cc

前述にある通り、AMI の ID と ssh キーを指定して実行しています。
特にオプションは付けていないので最小規模のsmallインスタンス(m1.small)で起動されたようですね。

インスタンス起動状態の確認
$ ec2-describe-instances
RESERVATION	r-8cf973e5	443600062368	default
INSTANCE	i-58600831	ami-ec48af85	ec2-75-101-208-31.compute-1.amazonaws.com	domU-12-31-39-00-DD-05.compute-1.internal	running	ec2_instance_key	0		m1.small	2009-04-21T16:05:10+0000	us-east-1c	aki-a71cf9ce	ari-a51cf9cc
  • AMIのIDは ami-ec48af85 ですよ。
  • m1.small(最小規模)で起動しましたよ。
  • 起動時間は 2009-04-21T16:05:10+0000(たぶん米タイム)ですよ。

くらいは分かりますね!確認すると言っても、これくらい分かってれば良さそうな気がします。
あと、「ec2-75-101-208-31.compute-1.amazonaws.com」というドメイン名が重要らしく、アクセスするときに必要になるようです。

アクセス可能ポートを設定

初期状態だと、どのポートも閉じてるらしいので開設作業を行います。

$ ec2-authorize default -p 22
GROUP		default	
PERMISSION		default	ALLOWS	tcp	22	22	FROM	CIDR	0.0.0.0/0

$ ec2-authorize default -p 80
GROUP		default	
PERMISSION		default	ALLOWS	tcp	80	80	FROM	CIDR	0.0.0.0/0

インスタンスへのアクセス

ここでドメイン名が登場します。

$ ssh -i ec2_instance_key.id root@ec2-75-101-208-31.compute-1.amazonaws.com
The authenticity of host 'ec2-75-101-208-31.compute-1.amazonaws.com (75.101.208.31)' can't be established.
RSA key fingerprint is 53:69:0c:76:a4:b2:a5:eb:4d:f6:65:60:5c:91:8f:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-75-101-208-31.compute-1.amazonaws.com,75.101.208.31' (RSA) to the list of known hosts.
Linux domU-12-31-39-00-DD-05 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/

Amazon EC2 Ubuntu 8.10 intrepid AMI built by Eric Hammond
http://alestic.com  http://ec2ubuntu-group.notlong.com

root@domU-12-31-39-00-DD-05:~# 

「信憑性を確立できません。」と Warning が出てましたが、無理に通しました。
これが正解か不正解かは不明ですが、とりあえずログインはできました。
本日は使わないのでログアウトします。

root@domU-12-31-39-00-DD-05:~# exit
logout

CodeZine での注意書き

インスタンスを停止すると、ディスクの内容が失われる

回避するためには、停止前にディスク内容をOSイメージとして取得すれば良いらしい。
あと、Amazon EBS を使っても回避できるようです。

付与されるIPアドレス固定IPアドレスではない

固定にすることは可能だそうです。

インスタンス停止

起動状態の確認
$ ec2-describe-instances
RESERVATION	r-8cf973e5	443600062368	default
INSTANCE	i-58600831	ami-ec48af85	ec2-75-101-208-31.compute-1.amazonaws.com	domU-12-31-39-00-DD-05.compute-1.internal	running	ec2_instance_key	0		m1.small	2009-04-21T16:05:10+0000	us-east-1c	aki-a71cf9ce	ari-a51cf9cc

インスタンスID「i-58600831」をメモります。

停止
$ ec2-terminate-instances i-58600831
INSTANCE	i-58600831	running	shutting-down

shutting-down とあるので、正常に停止したようですね!
念のため起動状態を確認してみましょう。

$ ec2-describe-instances
RESERVATION	r-8cf973e5	443600062368	default
INSTANCE	i-58600831	ami-ec48af85			terminated	ec2_instance_key	0		m1.small	2009-04-21T16:05:10+0000	aki-a71cf9ce	ari-a51cf9cc	

ドメイン名が表示されていた場所が、terminated に変わってますね。これは切断って意味なので、キチンと切断されていたようです。
以上で、Amazon EC2を動かしてみよう 〜Amazon EC2/S3環境構築のすべて〜分の内容は終了です。

まとめ

初めて EC2 に触れてみましたが、インスタンスの起動・停止・確認する作業が少し手間に感じました。ここら辺はスクリプト書いちゃったほうが良いかもしれませんね。
また、CUI 上での操作は人によって敷居が高いと感じるかもしれません。CUI で操作する以外にも、GUI での操作も可能らしいので、時間があればそちらも試してみたいと思います。

*1:私の場合は ~/key/

*2:私の場合は /usr/local/

*3:私の場合は[http://d.hatena.ne.jp/hyoromo/20090226/1235659062#2:title=こう]やってます。

Vim 勉強会

社内勉強会での内容ですが、別に問題ない内容なのでブログに書き残します。
まぁ間違ってるかもしれないので、ミスがあったら指摘して頂けると幸いです。

移動

アクション コマンド 備考
左へカーソル移動 h
下へカーソル移動 j
上へカーソル移動 k
右へカーソル移動 l
行頭へカーソル移動 0(数字)
行末へカーソル移動 $
1単語右へカーソル移動 w
1単語左へカーソル移動 b
指定行番号へカーソル移動 行番号gg
指定数分、下へカーソル移動 指定数j
page up +b
page down +f
先頭行へカーソル移動 gg
最終行へカーソル移動 G

検索

アクション コマンド 備考
曖昧検索 /hoge %hoge%に一致する単語へ移動
完全一致検索 /\\> hogeに一致する単語へ移動
閉じ括弧へ移動 { にカーソル選択して、% 括弧なら何でも可能
マーク付け :ma a a とマーク付ける
マーク移動 `a a とマークを付けた単語へ移動

その他

アクション コマンド 備考
行番号表示 :setlocal number
ファイルを開く :e hoge.txt

まとめ

これ内容じゃなくて、コマンド一覧だろう!ってツッコミはなしの方向で。

gem パッケージの参照先について

gem でインストールしたパッケージの参照先ですが、複数存在してややこしいので整理します。

/usr/local/lib/gem/

管理者権限でインストール and 参照可能な領域。

sudo gem install hoge

とすると、ここにのみインストールされます。

~/.gem/ruby/1.8/gems/ #ruby1.8の場合

ユーザー権限でインストール and 参照可能な領域。

gem install hoge

とすると、ここにのみインストールされます。

その他

他にもインストール先が存在していましたが、どこか忘れたし、なぜここにインストールされたか分かりませんでした。
とりあえず、上記2カ所さえ知っていれば、gem 参照関連のトラブルは回避しやすいと思います。