S3 のファイルを HTTP で取得するコマンドを作った
Aws::SSM::Client#get_command_invocation
の返り値には standard_output_url
, standard_error_url
が含まれているんですが、いちいち s3://
の URI に変換して aws s3 cp s3://... -
で確認するのも辛いので、URL をそのまま指定すればオブジェクトの内容を出力するコマンドを作りました。
https://github.com/abicky/s3-http-get
% gem install s3-http-get
% s3-http-get -h
Usage: s3-http-get [options] URL
--profile PROFILE Use a specific profile from your credential file.
% echo Hello > hello.txt
% aws s3 cp hello.txt s3://s3-test.abicky.net/
upload: ./hello.txt to s3://s3-test.abicky.net/hello.txt
% s3-http-get https://s3-ap-northeast-1.amazonaws.com/test.abicky.net/hello.txt
Hello
AWS CLI 同様、次の優先順位で使用するアカウントが決定されます。
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
環境変数--profile
オプションAWS_PROFILE
環境変数
Amazon S3 REST API を使うにあたって、Authorization header を付与しているんですが、Aws::Sigv4::Signer#sign_request
が必要なヘッダ情報を生成してくれるので、一番面倒だったのは URL から regoin 情報を抽出することでした。
なお、これを作ったきっかけは、standard_error_url
は S3 のパスからコロンが除かれたものになっており、単純に aws s3 s3://...
に変換するだけだとオブジェクトにアクセスできなかったからなんですが、HTTP でアクセスするにしてもコロンは必要みたいです…。