インスタンスストアタイプからEBSタイプのAMI作成 Ubuntu編

記事タイトルとURLをコピーする

こんにちは、エンジニアの横倉です。

ルートデバイスをインスタンスストアタイプから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タイプもあります。

作業フロー

  1. EC2インスタンスの起動、Amazon EC2 AMI Tools、Amazon EC2 API Toolsの利用準備
  2. インスタンスのイメージを作成を行い、空のEBSボリュームにイメージをコピーします
  3. イメージをコピーした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 ToolsAmazon 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初心者の方でも簡単にできるのでぜひやってみてください。