FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

【AWS】EC2のSnapshot作成について

初めまして、女子エンジニアの貴子です。

これからAWSについて、9月まで毎月一回更新していきますので、お付き合いくれると嬉しいです。
内容としては、AWSクラウドデザインパターンを読んで、
実際にインスタンスを作成して学んだことを書いていきます。

EC2のSnapshot作成について

AWSではEC2のSnapshotをEBS単位で作成します。
作成したSnapshotからは、EC2イメージ・ESBボリュームのリストアが簡単にでき、
非常に便利な機能です。
※EC2(Elastic Compute Cloud)とはAmazonのサービスの一つで、
クラウド内で自在に規模を変更できるコンピューティング(仮想サーバー)のこと。
※EBS(Amazon Elastic Block Store)とは、EC2のブロックレベルのストレージボリュームのこと。


・手動で行う場合

AmazonGUIから、サイドメニューにある【Snapshots】から【Create Snapshot】をクリックし、
Volume名等必要な上場を入力してcreateを押すと作成できます。

aws-cliを利用して、自動で行う場合

先ほど手動で作成したSnapshotは自動でもAmazonコマンドツール(aws-cli)を使って
cronで設定すれば出来ます。
今回はAmazonLinuxをインストールしたサーバー上に、aws-cliの設定を行います。

aws-cliの設定

1.AWSGUIから、アクセスキーとセキュリティキーを取得します

2.サーバーにログインし、下記コマンドを入力します

コマンド

aws configure

一行づつ
入力していく

AWS Access Key ID [None]:***************
AWS Secret Access Key [None]: ***************
Default region name [None]: ap-northeast-1
Default output format [None]:

3.【aws ec2 describe-instances】を叩いて、データが取得できれば設定完了です

4.コマンドを叩いてSnapshotが取得できるか試してみましょう
 volume-idは各自変更して下さい

 コマンド

aws ec2 create-snapshot --volume-id vol-ff8b57f9

結果

{

"Description": null,

"Encrypted": false,

"VolumeId": "vol-ff8b57f9",

"State": "pending",

"VolumeSize": 8,

"Progress": null,

"StartTime": "2014-06-23T02:09:22.000Z",

"SnapshotId": "snap-9345d873",

"OwnerId": "998591395404"

}

作成されたか確認します

 コマンド

aws ec2 describe-snapshots|grep vol-ff8b57f9

結果

"VolumeId": "vol-ff8b57f9",

作成できていますね!

shell作成

先ほど手動で叩いたコマンドを、シェルでも実行できるようにします

 コマンド vi snapshot.sh
エディタに記入

#コピーしたいEC2インスタンス名指定
snapshot_instance_id='Snapshot_test'

#東京リージョンのボリュームID取得
volumes=$(aws ec2 describe-volumes --query 'Volumes[*].VolumeId' --output text)

#Snapshotを取りたいEC2に紐づくESBボリュームID取得
snapshot_volume_ids=$(aws ec2 describe-instances --filters
"Name=tag:Name,Values=${snapshot_instance_id}" --query 'Reservations[*].Instances[*].BlockDeviceMappings[*].Ebs.VolumeId' --output text)

#Snapshot作成処理
for var in $volumes; do

for snapshot_volume_id in $snapshot_volume_ids; do

if [ $var = $snapshot_volume_id ]

then

aws ec2 create-snapshot --volume-id $var

fi

done

done

あとはcronに設定するだけです。


00 05 * * 0 /opt/aws/snapshot.sh

これで一週間に一度、日曜日の午前5時に自動でSnapshotが作成されます。

・意識して作成していないのに出来ていた場合

EC2のimageをコピーをするとAMIが作成されます。
※AMIとはAWSで使用できるLinux のイメージのこと
AMIからサーバーを作成すると、自動でSnapshotが作成されます。
私はこの仕組を知らなくて、たくさんのSnapshotを意識せずに作ってしまっていました(´・ω・`)
AMIから作成されたSnapshotは、現在使用中のEC2のものなので、EC2を削除しない限り消せません。

まとめ

Snapshotは、AmazonGUIからでもコマンドツールからでも作成できます。
コマンドツールを応用すれば、自動でSnapshotを取ることも可能です。
AMIのイメージからEC2インスタンスを作成すると、同時にSnapshotも作成されます。

感想

今回はSnapshotについて記載させていただきました。
こんなに簡単にSnapshotがとれるなんて、クラウドって本当に便利ですね。
その分デメリットもたくさんありますが。
自動でSnapshotを取って、サーバーのバックアップが取れるところも
いつ故障してもすぐにロールバックが出来るので、いかしていますよね!