How to use AWS resources without long-lived AWS credentials(2) - Rails with AWS Opsworks.

先日 AWS のLong-lived AWS credentialsを使わずに、AWS OpsWroks 上で Rails から AWS のリソースにアクセスするための設定を紹介しましたが、今日はその設定を前提に、Rails から目的別に AWS の各リソースを活用する方法を @ourass が紹介します。

メール送信

AWS SES + aws-sdk + ActionMailer の組み合わせ。

/Gemfile

gem "aws-sdk", "~> 1.0"

/config/environments/production.rb

config.action_mailer.delivery_method = :amazon_ses

これで ActionMailer の deliver メソッドで SES 経由でメールが送信されるようになります。
AWS SES は設定が簡単なうえに高機能ですので是非導入しましょう。
なお、サービスで利用するドメインについて AWS SES で事前に認証処理を行う必要があります(初めての場合はさらにサンドボックス環境からプロダクション環境への変更が必要)。その辺要望があればコメントに書いてもらえると心優しい誰かが書いてくれるでしょう。たぶん。

キューイング

AWS SQS + aws-sdk の組み合わせ。
メール送信と同じくaws-sdk を使います。
弊社ではメール送信後のバウンスメールの処理に利用しています。

/Gemfile

gem "aws-sdk", "~> 1.0"

ファイルアップロード

AWS S3 + Carrierwave + fog の組み合わせ。

/Gemfile

gem "carrierwave"
gem "fog"

/config/initializers/carrierwave.rb

config.fog_credentials = {
  :provider               => "AWS",
  :region                 => "ap-northeast-1",
  :use_iam_profile        => true
}

弊社ではプロダクション環境と開発環境の違いは rails_config を活用して処理を分けてます。

アセットホストへのアセットファイルのアップロード

AWS S3 + asset_sync の組み合わせ。

/Gemfile

gem "asset_sync"

/config/initializers/asset_sync.rb

config.aws_iam_roles = true

ただこの asset_sync、開発が止まっていて議論が始まっちゃってます。。
asset_sync project appears dead · Issue #267 · rumblelabs/asset_sync · GitHub

当然のごとく IAM Role 対応の pull-request も取り込まれていないので pull-request をあげてくれた方のブランチを参照します。またはGithub上の自身のアカウントでフォークしてから、それを参照した方が安全かもしれません。この対応は暫定で本家の開発が再開して取り込まれれば早急に切り替えるべきです。

2014-08-16更新 上記 pull-request が取り込まれていたので記事を更新しました。

ちなみにアセットホストへのアセットファイルのアップロードはデプロイ前に実施するほうがオススメです。
以前これについてはすでにポストされてますね。
サーバ側でassets:precompileしたくない - インターファーム開発部ブログ

でわでわ。