RSSリーダーの記事を消化していて、そういえばこういうのをやらなきゃいけなかったんだったと思い出したのでシェルにした。
だいたいこんな感じ。 各バケットに対してサブコマンドをバンバン発行して、それをファイルに出力する。
出力は {日付(YYYYMMDD)}/{プロファイル名}/{バケット名}/
の下に サブコマンド毎に出力。
#!/bin/bash # 呼び出したいS3apiサブコマンドを定義 ### --------------------------------------------------------------------------- FUNCS=$(cat << EOS get-bucket-acl get-bucket-encryption get-bucket-lifecycle-configuration get-bucket-location get-bucket-logging get-bucket-notification-configuration get-bucket-ownership-controls get-bucket-policy get-bucket-policy-status get-bucket-replication get-bucket-request-payment get-bucket-tagging get-bucket-versioning get-bucket-website get-public-access-block EOS ) # 定数定義 ### --------------------------------------------------------------------------- # s3api コマンド S3CMD="aws s3api --profile ${1}" # メイン処理 ### --------------------------------------------------------------------------- # 引数チェック if [ $# != 1 ]; then echo "Usage: ${0} [profilename]" exit 0 fi # 最初にバケット一覧を取得 BUCKETS=`${S3CMD} list-buckets --query "Buckets[].Name" --output text` # S3apiサブコマンドを各バケットに対して実行 for BUCKET in ${BUCKETS}; do # 処理日付取得(YYYYMMDD) OUTDIR=`date +"%Y%m%d"`/${1}/${BUCKET} # 出力ディレクトリ作成 if [ ! -d ${OUTDIR} ] ; then mkdir -p ${OUTDIR} fi printf "[%60s] を処理中 " ${BUCKET} for FUNC in ${FUNCS}; do printf "." # 属性が未設定の場合はエラーになるが、ここでは無視 ${S3CMD} ${FUNC} --bucket ${BUCKET} > ${OUTDIR}/${FUNC}.json 2> /dev/null done printf "\n" done
設定をバックアップしておいて、何かあった時に確認する感じ。 何でこういうのが必要かといえば、こーどかIaaS化されずに構築された環境がありまして、という話です。