AWS 起動中のEC2からプライベートなAMIを作成する




投稿日:

EC2でインスタンスを作成したら、AMIを作りたくなります。バックアップもしたくなります。
そんな時の第1歩です。

作業手順は以下のようになります。


・各種キーや証明書の取得。
・インスタンスにCUIで繋ぎ、APIツールを使ってOSイメージを作成。
・APIツールを使用して、S3へイメージをアップ。
・Webのコンソール画面にて、S3のイメージをAMIとして登録し、完成。

この手順で作成したAMIの特徴
・インスタンスを停止できない場合に、起動したまま可能。よって、簡易バックアップにもなる。
・Visibilityステータス=Privateとなり、自分のみしか見えない。使えないのでいざという時に安心。


ちなみに、EBSに登録するタイプもありますが、それは別途書きます。

■ イメージの整理




イメージの作成を行うと、ルートファイルシステムから全ファイルがAMIに含まれてしまいます。
その為、AMIを作成する際には、ログファイル、シェルの実行履歴ファイル、AWS鍵等は除外した方が無難です。
以下は、一般的にAMIに含めるべきでないファイルを空にする一例です。
もしバックアップを残すのであれば、必要ありません。

# rm ~/.bash_history
# cd /var/log
# > cron
# > maillog
# > secure
# > spooler
# > yum.log
# > httpd/error_log
# > httpd/access_log

ここまでで、OSの整理は完了です。

■ 各種キーや証明書の取得




インスタンスのイメージを取得する際に以下の情報が必要となります。


・証明書
・秘密鍵
・アクセスキー ID
・シークレットアクセスキー
・AWS アカウント ID

これらは、AWS Management Consoleの Console →「Security Credentials」にて取得できます。


コンソール


それぞれの項目でダウンロードを実施して、取得してください。


コンソール2


Access Keysでキーを作成しアクセスキーとシークレットキーのcvsをダウンロード。
X.509 Certificatesで、証明書:cert-xxxxx.pem と、秘密鍵:pk-xxxxx.pem をダウンロード。
ページ一番下の「AWS Account ID」をメモ。
以上で完了です。


ダウンロードした証明書と秘密鍵をインスタンスへアップします。


アップロードに関しては、Tera TermなどSSHでファイルアップロードができるツールやSCPコマンドで実施してください。
これで準備完了です。

■ APIツールを使ってOSイメージを作成する




APIツールは、Amazon Linuxの場合にはデフォルトで入っています。その他のOSの場合は別途APIツールを使えるようにインストールする必要があります。今回はツールは使用できるとして進めます。
rootになります。

$ sudo su -



証明書と秘密鍵は作成するイメージに含ませたくないので「/mnt」配下に配置します。
※「/mnt」以下は、イメージに含まれません。

# mv /home/ec2-user/*.pem /mnt



以下のコマンドを実行し、インスタンスのイメージを作成します。
OSが32bitの場合は、-rの引数は「i386」を指定してください。

# cd /mnt/
# ec2-bundle-vol -c cert-xxxxx.pem -k pk-xxxxxx.pem -u <AWS アカウント ID> -r x86_64
Copying / into the image file /tmp/image...
Excluding:
	 /sys
	 /proc
	 /dev/pts
	 /dev
	 /media
	 /mnt
	 /proc
	 /sys
	 /tmp/image
	 /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00253097 seconds, 414 MB/s
mke2fs 1.39 (29-May-2006)
Bundling image file...
Splitting /tmp/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
Created image.part.13
Created image.part.14
Created image.part.15
Created image.part.16
Created image.part.17
Created image.part.18
Created image.part.19
Created image.part.20
Created image.part.21
Created image.part.22
Created image.part.23
Created image.part.24
Created image.part.25
Created image.part.26
Created image.part.27
Created image.part.28
Created image.part.29
Created image.part.30
Created image.part.31
Created image.part.32
Created image.part.33
Created image.part.34
Created image.part.35
Created image.part.36
Created image.part.37
Created image.part.38
Created image.part.39
Created image.part.40
Created image.part.41
Created image.part.42
Created image.part.43
Created image.part.44
Created image.part.45
Created image.part.46
Created image.part.47
Created image.part.48
Created image.part.49
Created image.part.50
Created image.part.51
Created image.part.52
Created image.part.53
Created image.part.54
Created image.part.55
Created image.part.56
Created image.part.57
Created image.part.58
Created image.part.59
Created image.part.60
Created image.part.61
Created image.part.62
Created image.part.63
Created image.part.64
Created image.part.65
Created image.part.66
Created image.part.67
Created image.part.68
Created image.part.69
Created image.part.70
Created image.part.71
Created image.part.72
Created image.part.73
Created image.part.74
Created image.part.75
Created image.part.76
Created image.part.77
Created image.part.78
Created image.part.79
Created image.part.80
Created image.part.81
Generating digests for each part...
Digests generated.
Unable to read instance meta-data for ancestor-ami-ids
Unable to read instance meta-data for product-codes
Creating bundle manifest...
ec2-bundle-vol complete.


■ AWS Management ConsoleにてS3にバケットを作成




最初にS3にバケットを作成しておくことで、S3のlocationが違った場合に発生するエラー

HTTP 301 (Moved Permanently) response for URL http://xxxxxxxx.s3.amazonaws.com:80/image.manifest.xml: check your manifest path is correct and in the correct region.



を回避することが出来る。
ということで、S3のコンソール画面で、新規バケットを作成しておきます。

■ APIツールを使用して、S3へイメージをアップ



# cd /tmp
# ec2-upload-bundle -b <作成したバケット名> -a <アクセスキー ID> -s <シークレットアクセスキー> -m image.manifest.xml

Uploading bundled image parts to the S3 bucket xxxxxxxxx ...
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
Uploaded image.part.13
Uploaded image.part.14
Uploaded image.part.15
Uploaded image.part.16
Uploaded image.part.17
Uploaded image.part.18
Uploaded image.part.19
Uploaded image.part.20
Uploaded image.part.21
Uploaded image.part.22
Uploaded image.part.23
Uploaded image.part.24
Uploaded image.part.25
Uploaded image.part.26
Uploaded image.part.27
Uploaded image.part.28
Uploaded image.part.29
Uploaded image.part.30
Uploaded image.part.31
Uploaded image.part.32
Uploaded image.part.33
Uploaded image.part.34
Uploaded image.part.35
Uploaded image.part.36
Uploaded image.part.37
Uploaded image.part.38
Uploaded image.part.39
Uploaded image.part.40
Uploaded image.part.41
Uploaded image.part.42
Uploaded image.part.43
Uploaded image.part.44
Uploaded image.part.45
Uploaded image.part.46
Uploaded image.part.47
Uploaded image.part.48
Uploaded image.part.49
Uploaded image.part.50
Uploaded image.part.51
Uploaded image.part.52
Uploaded image.part.53
Uploaded image.part.54
Uploaded image.part.55
Uploaded image.part.56
Uploaded image.part.57
Uploaded image.part.58
Uploaded image.part.59
Uploaded image.part.60
Uploaded image.part.61
Uploaded image.part.62
Uploaded image.part.63
Uploaded image.part.64
Uploaded image.part.65
Uploaded image.part.66
Uploaded image.part.67
Uploaded image.part.68
Uploaded image.part.69
Uploaded image.part.70
Uploaded image.part.71
Uploaded image.part.72
Uploaded image.part.73
Uploaded image.part.74
Uploaded image.part.75
Uploaded image.part.76
Uploaded image.part.77
Uploaded image.part.78
Uploaded image.part.79
Uploaded image.part.80
Uploaded image.part.81
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.


■ S3のイメージからAMIをコンソール操作で作成




S3のコンソールに入ります。


s3


指定のバケットに入り、一覧の中から「image.manifest.xml」をクリックした状態で「Properties」をクリックすると
詳細情報が表示されるので「Link」の項目をメモしておきます。


s3


AWS Management ConsoleのEC2に移動し、メニューから「AMIs」をクリックします。
新規にオリジナルAMIを登録するので、上部のActionsから「Register New AMI」をクリックします。
すると下のような画面になります。


AMI create

こちらで、先ほど取得したLinkの後半を記載します。「バケット名/image.manifest.xml」になります。
Name, Discriptionは適当に入力。karnelとRamdiskはデフォルトを入れましょう。


成功すれば、AMi一覧に追加されています。

参考




EC2インスタンスからオリジナルAMIを作成する(インスタンスストア・EBS) | イーライセンスシステムズ技術ラボ
http://lab.eli-sys.jp/2012/12/31/ec2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%8B%E3%82%89%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%ABami%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%EF%BC%88%E3%82%A4%E3%83%B3/

AWS EC2 カスタムAMI(S3/EBS)作成手順 – 130単位
http://d.hatena.ne.jp/deeeki/20110519/aws_ami_creation