Rubyでaws-sdk-s3を使用してログファイルをアップロードしてみた。

■環境

$ rbenv -v
rbenv 1.1.2-26-gc6324ff
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19]

■目次

  1. 事前準備
  2. ruby環境準備
  3. AWS準備
  4. 必要なファイル準備
  5. 作業
  6. SDK追加
  7. 環境変数準備
  8. Ruby処理追加
  9. 実行
  10. 確認
  11. 参考

■内容

1. 事前準備

1-1. ruby環境準備

・rubyインストール → Ruby環境をmacに構築
・bunlerのインストール
$ rbenv exec gem install bundler
$ which bundler
/Users/y-agatsuma/.rbenv/shims/bundler

1-2. AWS準備

以下の情報が必要になります。

1-2-1. access_key / secret_key
  • access_key
  • secret_key

今回はこの記事を参考に。

s3用のユーザーを作成して上げて、role/policyはs3のみに制限してあげた形で、access_key/secret_keyを発行し、メモしておきます。

1-2-2. s3バケット
  • bucket_name
  • region

バケットをパブリックにて作成します。

Image from Gyazo

Image from Gyazo

Image from Gyazo

1-3. 必要なファイル準備

$ mkdir sample
$ cd sample
$ touch Gemfile
$ touch upload_s3.rb
# ディレクトリは以下構造
sample
  |- Gemfile
  |- upload.rb

2. 作業

2-1. SDK追加

公式: aws-sdk-ruby

# Gemfile
gem 'aws-sdk-s3', '~> 1.0.0.rc2'
$ bundle install
$ bundler exec gem list | grep aws-sdk-s3
aws-sdk-s3 (1.0.0)

2-2. 環境変数準備

$ export AWS_ACCESS_KEY=【準備したアクセスキー】
$ export AWS_SECRET_KEY=【準備したシークレットキー】
$ env | grep AWS
AWS_ACCESS_KEY=【準備したアクセスキー】
AWS_SECRET_KEY=【準備したシークレットキー】
↓
# 環境変数から取り除く時はunset
$ unset AWS_ACCESS_KEY
$ unset AWS_SECRET_KEY

2-3. Ruby処理追加

# upload_s3.rb

require 'aws-sdk-s3'

# ログファイル生成〜出力
log_file_name = "#{Time.now.strftime('%Y%m%d_%H%M')}.log"
log_file = File.join(File.dirname(__FILE__), log_file_name)
logger = Logger.new(log_file)
logger.debug('hello world!!')

bucket = 'yaga-sample-bucket'.freeze
region = 'ap-northeast-1'.freeze
access_key = ENV.fetch('AWS_ACCESS_KEY') # *1
secret_key = ENV.fetch('AWS_SECRET_KEY')   # *1
date_dir = 'sample/' + Time.now.strftime('%Y%m%d') + '/'

client = Aws::S3::Client.new(
  region: region,
  access_key_id: access_key,
  secret_access_key: secret_key
)
client.put_object(
  acl: "public-read",
  bucket: bucket,
  key: date_dir + log_file_name,
  body: File.open(log_file, :encoding => "UTF-8"),
  content_type: "application/force-download",
)

# ログファイル削除
File.delete(log_file)

2-4. 実行

$ ruby upload_s3.rb

2-5. 確認

Image from Gyazo

URLクリックすると、強制的にファイルをダウンロードされる

ダウンロードしたファイルに以下が記載されていることを確認

# Logfile created on 2020-03-02 20:45:26 +0900 by logger.rb/61378
D, [2020-03-02T20:45:26.847370 #15758] DEBUG -- : hello world!!

3. 参考