Class: PrelandsRails::MyAwsClient

Inherits:
Object
  • Object
show all
Defined in:
lib/prelands_rails/concerns/my_aws_client.rb

Constant Summary collapse

ACL_PUBLIC_READ =
'public-read'

Instance Method Summary collapse

Constructor Details

#initialize(access_key, secret_key, region) ⇒ MyAwsClient

Returns a new instance of MyAwsClient.



10
11
12
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 10

def initialize(access_key, secret_key, region)
  @s3 = Aws::S3::Resource.new(region: region, access_key_id: access_key, secret_access_key: secret_key)
end

Instance Method Details

#bucket_objects_count(bucket_name) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 14

def bucket_objects_count(bucket_name)
  bucket = @s3.bucket bucket_name
  result = bucket.objects.count
  log :bucket_objects_count, 'bucket_name=%s, result=%s' % [bucket_name, result]
  result
rescue Aws::S3::Errors::NoSuchBucket
  log :bucket_objects_count, ['No such bucket: ', bucket_name].join
end

#create_bucket_if_not_exists(bucket_name) ⇒ True

Returns:

  • (True)


30
31
32
33
34
35
36
37
38
39
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 30

def create_bucket_if_not_exists(bucket_name)
  log :create_bucket_if_not_exists, 'bucket_name=%s' % bucket_name
  @s3.create_bucket bucket: bucket_name
  true
rescue Aws::S3::Errors::BucketAlreadyOwnedByYou
  true
rescue StandardError => e
  log :create_bucket_if_not_exists, e.message
  false
end

#delete_bucket(bucket_name) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 41

def delete_bucket(bucket_name)
  log :delete_bucket, 'bucket_name=%s' % bucket_name
  @s3.client.delete_bucket bucket: bucket_name
rescue StandardError => e
  log :delete_bucket, e.message
  false
end

#delete_objects(bucket_name, objects) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 59

def delete_objects(bucket_name, objects)
  log :delete_objects, 'bucket_name=%s' % bucket_name
  result = @s3.client.delete_objects({
    bucket: bucket_name,
    delete: {
      objects: objects
    }
  })
  log :delete_objects, result
rescue StandardError => e
  log :delete_objects, e.message
  false
end

#list_bucketsstruct Aws::S3::Types::ListBucketsOutput

Returns:

  • (struct Aws::S3::Types::ListBucketsOutput)


24
25
26
27
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 24

def list_buckets
  result = @s3.client.list_buckets({})
  log :list_buckets, result.buckets.map(&:name)
end

#list_objects(bucket_name) ⇒ Object



49
50
51
52
53
54
55
56
57
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 49

def list_objects(bucket_name)
  log :list_objects, 'bucket_name=%s' % bucket_name
  result = (@s3.client.list_objects bucket: bucket_name).contents.map(&:key)
  log :list_objects, result
  result
rescue StandardError => e
  log :list_objects, e.message
  false
end

#upload_file(path_to_file, s3_file_name, bucket_name) ⇒ Object

Parameters:

  • path_to_file (String)

    Абсолютный к файлу на хосте.

  • s3_file_name (String)

    Под каким именем будет сохранён файл на AWS.

  • bucket_name (String)

    Название bucket



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/prelands_rails/concerns/my_aws_client.rb', line 77

def upload_file(path_to_file, s3_file_name, bucket_name)
  begin
    obj = @s3.bucket(bucket_name).object s3_file_name
    begin
      if obj.get
        log :upload_file, [s3_file_name, ' exists, skipping..'].join('')
      end
    rescue Aws::S3::Errors::NoSuchKey => _e
      obj.upload_file path_to_file, acl: ACL_PUBLIC_READ
      log :upload_file, [s3_file_name, ' uploaded to "', bucket_name, '".'].join('')
    end
  rescue Aws::S3::Errors::NoSuchBucket => _e
    log :upload_file, 'No such bucket, create bucket: \'%s\'] ' % bucket_name
    create_bucket_if_not_exists bucket_name
    retry
  end
end