Memo/AmazonWebServices/Glacier

https://dexlab.net:443/pukiwiki/index.php?Memo/AmazonWebServices/Glacier
 

Glacier

  • Amazon Glacier (低価格アーカイブストレージサービス) | アマゾン ウェブ サービス(AWS 日本語)
    • 低コストストレージサービス
    • $0.01/GB、5%/月の取り出しまで無料
    • アップロードと取り出しのリクエストの料金は、1,000 リクエストにつき 0.05 USD
    • 90 日経過前に削除されたデータについては、0.03 USD/GB
    • ダウンロードにTier=Standardの場合、3〜5時間の待ち時間が発生
    • 月間10GBのダウンロードは無料
    • 用途:ログの保管、バックアップ他、アクセス頻度の低いデータや、取り出しに数時間かかっても問題ないデータ
    • S3とGlacierを連携させ、作成後30日経過後Glacierに移動、作成後90日経過後削除等の設定がS3のバケットプロパティから行える。
    • S3からGlacierにアーカイブされたオブジェクトはエラー(403)を返す。元に戻すためにはRESTORE操作が必要。

GlacierからS3へ戻す

Glacierは、StorageClass?:Glacierになっている。
S3に戻して、ダウンロード可能になるにはTier=Standardの場合、3〜5時間かかる。
指定時間経過後、Glacierに移動する時間を指定できる。

  • GlacierからS3へ1日だけ戻す。数時間かかる
    aws --profile test-user --region us-east-1 s3api restore-object --bucket mybucket --key logs/host1/access.log-20140101.gz --restore-request '{"Days": 1}'
  • s3に戻したらダウンロードできる。Glacierのままだと、何もダウンロード出来ない。
    aws --profile test-user --region us-east-1 s3 cp s3://mybucket/logs/host1/access.log-20140101.gz ./host1/
  • 2017-05-08〜09のweb01〜03だけを対象に復元
    AWS_PROFILE=default
    AWS_REGION=us-east-1
    S3_BUCKET=mybucket
    S3_PREFIX='path/to/web$i/access.log-201705'
    S3_FILTER='2017050[8-9]'
    RESTORE_DAYS=3
    END_HOST=03
    
    for i in $(seq -w 01 $END_HOST); do \
      prefix=$(echo $S3_PREFIX | perl -pe "s/\\$\i/$i/" ); \
      for key in $(aws s3api list-objects --profile $AWS_PROFILE --region $AWS_REGION --bucket $S3_BUCKET --prefix $prefix --output json | jq -r '.Contents[].Key' | grep -P $S3_FILTER); \
        do echo $key; aws s3api restore-object --profile $AWS_PROFILE --region $AWS_REGION --bucket $S3_BUCKET --key $key --restore-request "Days=$RESTORE_DAYS,GlacierJobParameters={Tier=Standard}"; \
      done \
    done
  • オブジェクトの状態を確認。「expiry-date="..."」があれば、復元済み。ストレージクラスはGlacierのまま
    aws s3api head-object --profile $AWS_PROFILE --region $AWS_REGION --bucket $S3_BUCKET --key $key --output json | jq -r .Restore
  • 2017-05だけダウンロード: --dryrunでテスト
    • 「--recursive」 が使いたい場合、「--force-glacier-transfer」を付ける必要がある。復元済みでも「 An error occurred (InvalidObjectState?) when calling the GetObject? operation: The operation is not valid for the object's storage class」が出るがダウンロード出来る
      S3_INCLUDE='access.log-2017050[8-9]*'
      for i in $(seq -w 0001 $END_HOST); do \
        prefix=$(echo $S3_PREFIX | perl -pe "s/\\$\i/$i/" ); \
        aws s3 cp s3://$S3_BUCKET/$(dirname $prefix)/ ./$(dirname $prefix)/ \
         --profile $AWS_PROFILE --region $AWS_REGION \
         --recursive --exclude "*" --include "$S3_INCLUDE" --force-glacier-transfer; \
      done

毎月の無料枠で納めるようにするための設定

デフォルトでは 月のストレージ容量の5%まで無料。以下の方法で確認できる。

  • リージョン毎のデータリトリーブポリシーを取得。(aws cli v1.7.4) 結果のログで「"Strategy": "FreeTier?"」であれば無料枠のみになっている。
    AWS_PROFILE=default; AWS_ACCOUNT_ID=12345467890; \
    for region in $(aws --profile $AWS_PROFILE ec2 describe-regions --query "Regions[].[RegionName]" --output text); do \
    echo "---- $region"; aws --profile $AWS_PROFILE --region $region glacier get-data-retrieval-policy --account-id $AWS_ACCOUNT_ID; \
    done >> $AWS_PROFILE.glacier.$(date +%Y%m%d-%H%M%S).log
  • データリトリーブポリシーを設定する場合のテンプレート作成
    aws --profile default --region us-east-1 glacier set-data-retrieval-policy --generate-cli-skeleton > glacier-policy.json

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:37 (61d)