行動すれば次の現実

テック中心の個人ブログ

AWS

【Carrierwave+fog-aws】特定バケットへのアクセス権限を持ってS3にアップロードさせる方法

RailsアプリでS3にファイルをアップロードする場合、Carrierwaveとfog-awsを使用することが多いと思います。複数アプリをS3バケットを切り替えて使用する際に、ユーザーごとにバケットのアクセス権限を与えることで、思わぬ事故を防いだり、セキュリティを向…

AWS SDK for Rubyを使ってS3上のファイル存在チェックをする方法

AWS SDK for Rubyを使用して、S3上に特定のファイルが存在するかどうかチェックする方法をまとめました。 前提 AWS SDK for Ruby Version 3のaws-sdk-s3を使用します。 github.com 実装 # 事前に初期化しておく @s3_client = Aws::S3::Client.new def exists…

RubyのAWS SDKを使用してS3からファイルをダウンロードするときのエンコーディング問題

S3 bucketにあるファイルをダウンロードしてTempfileに書き込みしようとしたところ以下のエラーが発生しました。 Encoding::UndefinedConversionError: "\xE5" from ASCII-8BIT to UTF-8 その時のコードは以下の通りです s3_client = Aws::S3::Client.new Te…

CarrierWaveでAWS S3 にファイルをアップロードしようとするときに発生する403エラーについて | Rails

carrierwaveとfog-awsを使用してファイルをアップロードしようとしたところ以下のエラーが発生しました。 Excon::Error::Forbidden: Expected(200) <=> Actual(403 Forbidden) このエラーの原因と対処法を整理しましたので同様のことでお悩みの方はぜひ参考…

RubyでS3にある巨大なファイルをストリーム処理する方法

最近の案件で、AWS S3に配置された1GB程度のCSVファイルを処理することがありました。 そのままメモリに載せてしまうとすぐにメモリオーバーになってしまうので、ストリーム処理で実装することにしました。 その時の内容を整理してみましたので、同様のこと…

別のAWSアカウント間でS3バケットにあるファイルを転送する方法

AWS

異なるAWSアカウント間(クロスアカウント)で、S3バケットにファイルを転送させたいことがありました。 accountA accountB S3bucket ⇐ file accountAのS3バケットに対して、accountBからファイル転送する場合を例として設定手順を説明します。 同様のことで…