2014年10月9日木曜日

RailsでCSVを生成して、そのままS3にアップロードする方法

夜間バッチなどで、定期的に外部システム用のCSVをAWSのS3にアップロードすることを想定しています。

作成方法

gemのインストール

まず、gemのインストール。
Gemfileに以下を追加。
# http://aws.amazon.com/sdkforruby/
# https://github.com/aws/aws-sdk-core-ruby
gem 'aws-sdk'
GitHubaws : aws-sdk-core-rubyはこちら。
以下を実行
bundle install

Railsへの実装

前提条件として、S3にbucketが作成済みの想定です。
      require 'csv'

      begin
        users = user.all

        data = CSV.generate do |csv|

          csv << ['id', '氏名']

          users.each do |user|
            raw = []
            raw << user.id
            raw << user.name
            csv << raw
          end
        end

        AWS.config(:access_key_id => 'your-access_key_id',
                   :secret_access_key => 'your-secret_access_key',
                   :region => 'your-bucket_region')

        s3 = AWS::S3.new
        bucket = s3.buckets['your-backet']

        file = data.sjisable.encode(Encoding::SJIS, {:invalid => :replace, :undef => :replace, :replace => '?'})
        file_name = "users.csv"
        file_full_path="user_data/#{file_name}"

        object = bucket.objects[file_full_path]
        object.write(file ,:acl => :public_read)

        puts '全ての処理に成功しました。'
      rescue => e
        puts "error occurred batch : #{Time.now} : #{e.message}"
      end
上記では、全Userのid と 氏名のカラムを持ったCSVを作成して、それを、S3にアップロードすることを想定しています。
途中こちらの部分でS3へのアクセスの設定を行っています。
 AWS.config(:access_key_id => 'your-access_key_id',
                   :secret_access_key => 'your-secret_access_key',
                   :region => 'your-bucket_region')
s3 = AWS::S3.new
bucket = s3.buckets['your-backet']
下記は適宜、自分の環境にあったものを設定してください。
  • your-access_key_id
  • your-secret_access_key
  • your-bucket_region
  • your-backet
頻繁にアクセスが発生する場合は、こちらconfig/initialyzerのしたaws.rb見たいのを作ってそちらで設定してしまってもよいかもしれません。
今回は、単発のバッチということなので、つどつど設定を行っています。

0 件のコメント:

コメントを投稿

statistics

Arsip