読者です 読者をやめる 読者になる 読者になる

Septeni Engineer's Blog

セプテーニエンジニアが綴る技術ブログ

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

AWS

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

これから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を取って、サーバーのバックアップが取れるところも
いつ故障してもすぐにロールバックが出来るので、いかしていますよね!