Unix系OSのコマンドラインシェルでは,パイプを用いた処理が頻発します.
そのため,s3 で作業をしていても,バケット内のオブジェクトを標準出力に出し,パイプで処理をしたい場合があるかと思います.
aws-cli は,オブジェクトをローカルファイルシステムにコピーするコマンドがありますが,cat コマンドに相当する処理は無いようです.
このような時,AWS SDK を使って,簡単なスクリプトを書いて解決できます.
require 'inifile'
require 'aws-sdk'
ini = IniFile.load(ENV['HOME'] + "/.aws/config")
section = 'default'
uri = URI.parse(ARGV[0])
raise 'Scheme must be "s3"' if uri.scheme != 's3'
#==============================================================
s3 = AWS::S3.new(
:access_key_id => ini[section]['aws_access_key_id'],
:secret_access_key => ini[section]['aws_secret_access_key'],
:region => ini[section]['region']
)
bucket = s3.buckets[uri.host]
object = bucket.objects[uri.path[1..-1]]
object.read { |chunk|
print chunk
}
上記の例では,認証関係の情報は,aws-cli と同じini形式であることを期待しています.
ARGV[0] には URI 形式でバケットとプレフィックスを指定します.scheme は s3 であることを期待しています.
この辺りは,aws-cli と同じですので,戸惑うことはないと思います.
このような簡単な記述で,catコマンドの基本機能に相当するものを実現できます.
上記ソースコードは,ライセンスを設定するほどのものではありませんが,一応MITライセンスとしました.
最新版ソースコードは,Bitbucketで保守 しています.