このエントリーをはてなブックマークに追加
ラベル AWS の投稿を表示しています。 すべての投稿を表示
ラベル AWS の投稿を表示しています。 すべての投稿を表示

2017年1月10日火曜日

carrierwave-awsを使ってS3に画像をアプロードする

こんにちは、h_ono_222です。
今回はcarrirewave-awsを使ってS3に画像をアップロードする方法を紹介します。

目次

  1. carrierwave-awsとは
  2. gemをインストールする
  3. initializerの設定

1. carrierwave-awsとは

carrierwave-awsはfogに似たgemで、Amazon S3へのアップロード機能を提供します。

carrierwaveでS3などのストレージ画像をアップロードするにはfogがよく使われると思いますが、
AWSへのアクセスをaws-sdkに統一するために、今回carrierwave-awsを利用しました。

GitHubのリポジトリはこちら

2. gemをインストールする

下記のgemをインストールします。
# Gemfile
gem 'carrierwave'
gem 'carrierwave-aws'

3. initializerの設定

carrierwaveの設定を行います。()
# Gemfile
CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage    = :aws
    config.aws_bucket = 'data.hoge.upload'
    config.aws_acl    = 'public-read'

    # The maximum period for authenticated_urls is only 7 days.
    config.aws_authenticated_url_expiration = 60 * 60 * 24 * 7

    # Set custom options such agit s cache control to leverage browser caching
    config.aws_attributes = {
        expires: 1.week.from_now.httpdate,
        cache_control: 'max-age=604800'
    }

    # aws credential
    config.aws_credentials = {
        # 今回はIAM ロールを使用するため記載しない
        # access_key_id:     ENV.fetch('AWS_ACCESS_KEY_ID'),
        # secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
        region:            'ap-northeast-1' # Required
    }
  else
    # テスト時はローカルにファイルを保存する
    config.storage    = :file
  end
end
設定は以上です。
アップローダの方で特に意識することなく、S3へファイルをアップロードできました。

2016年12月3日土曜日

MySQL 5.7 オプティマイザの改善(UNION ALL)

こちらのブログは下記に引っ越しました。 
RE:ENGINESブログ:MySQL 5.7 オプティマイザの改善〜UNION ALL〜

2016年11月25日金曜日

Amazon RDS 一般クエリログとスロークエリログの削除

 こんにちは、Hiroです。Amazon RDSでのテーブルに保存されている「一般クエリログ」と「スロークエリログ」の削除方法について、簡単にまとめたいと思います。

 まず、RDSのデフォルトのDBパラメータでは、一般クエリログ、スロークエリログともにファイルにもテーブルにも保存されないようになっています。
 そこで、詳しくはAmazonのガイドページを見ていただければと思いますが、クエリログ関連の設定内容を転記させていただきます。
  • slow_query_log: スロークエリログを作成するには、1 に設定します。デフォルトは 0 です。
  • general_log: 一般ログを作成するには、1 に設定します。デフォルトは 0 です。
  • long_query_time: ファストクエリがスロークエリログに記録されないようにするために、ログに記録されるクエリの最短実行時間の値を秒単位で指定します。デフォルトは 10 秒で、最小値は 0 です。log_output = FILE の場合は、マイクロ秒の精度になるように、浮動小数点値を指定できます。log_output = TABLE の場合は、秒の精度になるように、整数値を指定する必要があります。実行時間が long_query_time の値を超えたクエリのみがログに記録されます。たとえば、long_query_time を 0.1 に設定すると、実行時間が 100 ミリ秒未満のすべてのクエリはログに記録されなくなります。
  • log_queries_not_using_indexes: インデックスを使用しないすべてのクエリをスロークエリログに記録するには、1 に設定します。デフォルトは 0 です。インデックスを使用しないクエリは、その実行時間が long_query_time パラメータの値未満であってもログに記録されます。
  • log_output optionlog_output パラメータに指定できるオプションは、次のとおりです。
    • TABLE(デフォルト)– 一般クエリを mysql.general_log テーブルに、スロークエリを mysql.slow_log テーブルに書き込みます。
    • FILE – 一般クエリログとスロークエリログの両方をファイルシステムに書き込みます。ログファイルは 1 時間ごとにローテーションされます。
    • NONE – ログ記録を無効にします。
今回は、下記の設定した場合のケースでお話します。
  • slow_query_log: 1
  • general_log: 1
  • long_query_time: 1
  • log_queries_not_using_indexes: 0
  • log_output: TABLE
上記の設定をすると設定内容に記載の通り一般クエリログは「mysql.general_log」に、スロークエリログは「mysql.slow_log」に保存され、ある一定サイズや空き容量をもとにローテーションされます。
 このテーブルなのですが、RDSのユーザ権限ではDELETEすることができないため、Amazonから2つのストアドプロシージャが提供されています。
CALL mysql.rds_rotate_slow_log;
CALL mysql.rds_rotate_general_log;  

 1回の実行ではバックアップにログがローテーションされ、2 回目の実行で完全に削除されることになります。

Amazonの公式ガイドページ