[RUBY] Restaurer un répertoire Glacier séparé par date à l'aide d'opérations par lots Amazon S3

Contexte

Les données de journal sont stockées quotidiennement dans S3 comme `` bucket / log / 20201 '', et les journaux après une certaine période de temps ont été déplacés de S3 vers Glacier, mais les données de journal de Glacier sont nécessaires pendant plusieurs mois. , Je devais le restaurer.

À considérer

Correspondance

J'ai décidé d'utiliser les opérations par lots S3 parce que j'ai effectué une opération appelée restauration pour un grand nombre d'objets dans S3.

Les opérations par lots S3 sont approximativement exécutées dans les étapes suivantes. --Création d'un fichier manifeste

Créer un fichier manifeste

target_date_range  = Date.parse(config['START_DATE'])..Date.parse(config['END_DATE'])
target_date_range.each do |date|
  #Obtenir une liste des objets dans le répertoire où les données de journal à restaurer sont enregistrées
  s3_objects = s3_list_object_content(config['BUCKET'], "#{config['S3_KEY']}/#{date.strftime('%Y%m%d')}")
  #Transformez la liste d'objets acquis en fichier manifeste au format CSV
  s3_objects.each do |object|
    CSV.open(file_name, 'a') { |f| f << [config['BUCKET'], object.key] }
  end
end

Créer un emploi


job_id = Aws::S3Control::Client.new.create_job(
  account_id: config['AWS_ACCOUNT_ID'],
  confirmation_required: false,
  operation: {
    s3_initiate_restore_object: {
      expiration_in_days: 10,
      glacier_job_tier: config['GLACIER_JOB_TIER'],
    },
  },
  report: {
    bucket: "arn:aws:s3:::#{config['MANIFEST_BUCKET']}", 
    format: 'Report_CSV_20180820',
    enabled: true,
    prefix: 'report',
    report_scope: 'AllTasks',
  },
  client_request_token: SecureRandom.uuid,
  manifest: {
    spec: {
      format: 'S3BatchOperations_CSV_20180820',
      fields: ['Bucket', 'Key'],
    },
    location: {
      object_arn: "#{manifest_bucket_arn}/#{manifes_file_name}",
      etag: etag,
    },
  },
  description: 'restore',
  priority: 10,
  role_arn: config['ROLE_ARN'],
  tags: config['TAGS'],
)

puts job_id

Autre

Recommended Posts

Restaurer un répertoire Glacier séparé par date à l'aide d'opérations par lots Amazon S3