[AWSJP.COM トップ]
[AWS CLI サンプルコード トップへ]





【AWS CLI サンプルコード】N日間経過したAWS EBS スナップショットを削除するサンプルプログラム

Powershell で AWS API を操作するサンプルコードの紹介です。Windows 環境を想定しています。




N日経過したスナップショットを削除する


AWS EC2 の EBS から生成したスナップショットに関して、作成日から一定時間経過したスナップショットを削除するサンプルプログラムを紹介します。
スナップショットには StartTime を参照することによりそのスナップショットの作成日を取得することができます。
この StartTime を元に今の日付から -N 日経過した日と比較することにより削除するかしないか決定しています。
間違えて重要なスナップショット(例えばインスタンスのバックアップ)を削除しないように、タグでフィルタリングしています。
EBS には識別するためにタグを設定すべきです。このタグにより削除するスナップショットをフィルタリングしています。


サンプルプログラム


次のサンプルプログラムは 7日(一週間) 経過したスナップショットを削除するサンプルプログラムです。
タグでフィルタリングしています。削除対象となるスナップショットはタグである "tag:SPNAME,Values=test" を持つスナップショットのみです。
確認なしで削除されるので十分に注意してください。削除した場合は復帰できないのでテスト環境のみで実行することを強く推奨します。




######################################################
#
# N日経過したスナップショットを削除するサンプルプログラム
# タグで削除するスナップショットをフィルタリングしている
#
# 削除したスナップショットは復活できないので十分な注意が必要
#
# Copyright(c) awsjp.com
# Created:2020/4/1
#
######################################################



$SnapShotsFiltered=(aws ec2 describe-snapshots --filters "Name=tag:SPNAME,Values=test" --region ap-northeast-1)
$s=($SnapShotsFiltered | ConvertFrom-json).SnapShots

$s | ForEach{

$StartTime=$_.StartTime.SubString(0,19)
$StartTime=[DateTime]::ParseExact($StartTime,"yyyy-MM-ddTHH:mm:ss", $null)

if ($StartTime -lt (Get-Date).AddDays(-7))
{
#【注意】次はスナップショット削除コマンドです。十分に注意して実行してください。
#間違えて必要なスナップショットを削除しないよう十分に気を付けてください。
#問題ないことを確認できたらコメントを除外してください。

#aws ec2 delete-snapshot --snapshot-id $_.SnapshotId --region ap-northeast-1
#write-host "$_ deleted"
}
}




参考:
EBS スナップショットの作成日 (StartTime) を日付型に変換する


文字列は有効な DateTime ではありませんでした。


プログラムを実行した場合、"文字列は有効な DateTime ではありませんでした"と表示される場合があります。
この場合、時間を表す HH が hh になっていないか確認してください。 hhは0〜12 であるため、 13:00:00 のように指定するとこのエラーとなります。


PS C:\> [DateTime]::ParseExact("2020-01-01T13:00:00","yyyy-MM-ddThh:mm:ss", $null)
"3" 個の引数を指定して "ParseExact" を呼び出し中に例外が発生しました: "文字列は有効な DateTime ではありませんでした。"
発生場所 行:1 文字:1
+ [DateTime]::ParseExact("2020-01-01T13:00:00","yyyy-MM-ddThh:mm:ss", $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException




・AWS APIは原則として JSON 形式で戻されます。Powershellでは原則JSONは扱いにくいため、ConvertFrom-jsonで配列に変換して処理しています。






[AWS CLI サンプルコード トップへ]
[awsjp.com トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 Copyright(c) awsjp.com 2018-2019