こんにちは、エンジニアの横倉です。
ルートデバイスをインスタンスストアタイプからEBSタイプへ変更する作業をUbuntuで行ってみました。簡単な説明をつけて手順を記載したいと思います。
インスタンスストアタイプとEBSタイプ とは
- インスタンスのrootデバイスにはインスタンスストアタイプとEBSタイプの2種類が存在します
- インスタンスタイプ : EC2初期からあり、停止するとデータが消える
- EBSタイプ : 2009年後半から、停止(stop)と起動(start)ができ、削除するまでデータが消えない
その他の用語
- EBSボリューム : 仮想的な外付けHDDみたいなもの
- スナップショット : EBSボリュームのイメージ これでEBSボリュームの複製やAMIを作成できます
- AMI(Amazon Machine Image) : サーバーのコピーをテンプレート可したもの
構成
- Ubuntu インスタンス 1台
- Ubuntu 公式AMI ami-4c0fa44d ※ 検証の為インスタンスストアタイプを利用しておりますが、Ubuntu公式AMIでEBSタイプもあります。
作業フロー
- EC2インスタンスの起動、Amazon EC2 AMI Tools、Amazon EC2 API Toolsの利用準備
- インスタンスのイメージを作成を行い、空のEBSボリュームにイメージをコピーします
- イメージをコピーしたEBSボリュームから、AMIを作成します
作業手順
1.EC2の操作ができる Amazon EC2 AMI Tools、Amazon EC2 API Toolsの準備
まず最初に、Management ConsoleよりインスタンスストアタイプのEC2インスタンスを起動してください。
なお、EC2やEBSの説明、使い方は「仮想サーバーEC2 & EBS詳細 -ほぼ週刊AWSマイスターシリーズ "Reloaded"」で確認できます。
起動したインスタンスにSSH接続後、Amazon EC2 AMI Tools、Amazon EC2 API Toolsのインストールを行ないます。
EC2 API Toolsにはjavaアプリなので、sunのjdkが必要になりますが、apt-getでOpenJDKも纏めてインストール可能です。Ubuntu公式ページにEC2利用の手順があるので、詳細はこちらでご確認ください。
※Ubuntuインスタンスはubuntuユーザで接続
$ sudo apt-add-repository ppa:awstools-dev/awstools
$ sudo apt-get update
$ sudo apt-get install ec2-api-tools
$ sudo apt-get install ec2-ami-tools
環境設定を編集します。X.509の秘密鍵ファイルと証明書ファイルの2つを取得してください。
$ ls ~/
cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
次に、~/.bashrcの編集を行います。
$ vi ~/.bashrc
最下行に下記を追記してください。
export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
export EC2_PRIVATE_KEY=/home/ubuntu/pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
export EC2_CERT=/home/ubuntu/cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
設定変更を有効化してください。
$ source ~/.bashrc
APIの動作テスト
$ ec2-describe-regions
各リージョンのアドレスが表示されれば成功です。
2.インスタンスのイメージを作成して、EBSにイメージをコピーします
現在、起動しているインスタンスのバンドルボリュームを作成してイメージを作成します。
※イメージ作成には少し時間がかかります。
$ sudo ec2-bundle-vol --cert /home/ubuntu/cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem --privatekey /home/ubuntu/pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem --user AWS_ACCOUNT_NUMBER
起動しているインスタンスと同一Zoneに空のEBSボリュームを作成します。作成するEBSボリュームは元となるインスタンスのrootボリュームと同一の容量で作成してください。※Management Consoleで操作可
$ ec2-create-volume -s 10 -z ap-northeast-1a
VOLUME vol-ca4f22a5 10 ap-northeast-1a creating 2012-02-21T12:45:47+0000
起動しているインスタンスに作成したEBSボリュームを取り付けます。 ※Management Consoleで操作可
$ ec2-attach-volume vol-ca4f22a5 -i i-1d98381d -d /dev/sdf1
ATTACHMENT vol-ca4f22a5 i-1d98381d /dev/sdf1 attaching 2012-02-21T12:58:35+0000
作成したイメージをddコマンドを使ってEBSボリュームに書き込みます。 データ容量により書き込み時間が変わります。今回は10GBで30分程かかりました。
$ sudo dd if=/dev/sda1 of=/dev/sdf1
3.イメージをコピーしたEBSから、AMIを作成します
イメージを書き込んだEBSのスナップショットを作成します。 ※Management Consoleで操作可
$ ec2-create-snapshot vol-ca4f22a5
スナップショット作成も多少時間がかかります。ステータスがcompletedになっていることを確認後、作成したスナップショットからAMIを作ります。
※AMI作成時にkernelやramdiskを指定できるので、ec2-describe-instanceコマンドで事前にkernelやramdiskを調べて指定しましょう。
$ ec2-register --snapshot snap-10e6367d --kernel aki-d209a2d3 --name="ubuntu-ebs" --architecture i386 --root-device-name /dev/sda1
作成したAMIでEBSインスタンスが起動できれば成功です。もしうまくいかなければec2-get-console-outputコマンドで起動に使用しているカーネル確認や原因を調べてみてください。 今回は環境設定も記載したため、多少長くなりましたが、ある程度EC2を触った方なら、コマンドラインの操作が3箇所くらいで簡単にできることがわかるのではないでしょうか? また、EC2初心者の方でも簡単にできるのでぜひやってみてください。