はい、可能です。ライフサイクルルールが設定されていない場合と、エラーで取得できなかった場合を区別することができます。
一つの方法として、aws s3api get-bucket-lifecycle-configuration コマンドのリターンコードをチェックし、適切なメッセージをCSVファイルに書き込む方法があります。
例えば、以下のようなスクリプトに修正します。
スクリプトの修正版
#!/bin/bash
# バケットの一覧を取得
BUCKETS=$(aws s3api list-buckets --query "Buckets[].Name" --output text)
# CSVファイルのヘッダーを設定
echo "BucketName,Status,DaysToExpire" > s3_buckets.csv
# 各バケットに対してライフサイクルルールを取得
for BUCKET in $BUCKETS; do
echo "Processing bucket: $BUCKET"
OUTPUT=$(aws s3api get-bucket-lifecycle-configuration --bucket $BUCKET --query "Rules[].Expiration.Days" --output text 2>&1)
RET_CODE=$?
if [ $RET_CODE -eq 0 ]; then
# ライフサイクルルールが存在し、正常に取得
if [ "$OUTPUT" != "None" ]; then
echo "$BUCKET,Configured,$OUTPUT" >> s3_buckets.csv
else
echo "$BUCKET,NoRules," >> s3_buckets.csv
fi
else
# ライフサイクルルールの取得でエラー発生
echo "$BUCKET,Error,$OUTPUT" >> s3_buckets.csv
fi
done
スクリプトの説明
RET_CODE=$?:aws s3api get-bucket-lifecycle-configurationコマンドの終了ステータスコードを取得します。0は正常終了、その他はエラーを示します。if [ $RET_CODE -eq 0 ]; then ... else ... fi:
コマンドの終了ステータスによって処理を分岐します。"BucketName,Status,DaysToExpire":
出力されるCSVに “Status” 列を追加し、ライフサイクルルールが設定されているか、設定されていないか、あるいはエラーが発生したかを示します。echo "$BUCKET,Configured,$OUTPUT" >> s3_buckets.csv:
ライフサイクルルールが設定され、正常に取得された場合の処理です。echo "$BUCKET,NoRules," >> s3_buckets.csv:
ライフサイクルルールが設定されていない場合の処理です。echo "$BUCKET,Error,$OUTPUT" >> s3_buckets.csv:
コマンド実行時にエラーが発生した場合の処理です。エラーメッセージもCSVに記録します。
スクリプトの実行方法
- テキストエディタで上記のスクリプトをファイルにコピーします。
- ファイルを
list_s3_buckets.shとして保存します。 - 保存したファイルに実行権限を付与します。
chmod +x list_s3_buckets.sh
- スクリプトを実行します。
./list_s3_buckets.sh
結果の確認
スクリプトを実行すると、次のようなCSVファイルが生成されます:
BucketName,Status,DaysToExpire
bucket1,Configured,30
bucket2,NoRules,
bucket3,Error,An error message
- “Configured” はライフサイクルルールが正しく設定されていることを示します。
- “NoRules” はライフサイクルルールが設定されていないことを示します。
- “Error” はライフサイクルルールの取得時にエラーが発生したことを示します。
この方法では、エラーの内容も記録されるので、エラー原因を特定しやすくなります。

コメント