######################################################
#
# 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