はじめに
プログラミングのお勉強をしようと思い、AWS公式ドキュメントにある「AWS SDK for Ruby を使用したオブジェクトのアップロード」を参考にファイルアップロードを行うRubyスクリプトを書いてみました。
とはいえ、そのままだとただのコピペになってしまうので、アップロードするのに必要な権限のみを持つIAMユーザーを作成し、それをスクリプト内で指定してファイルのアップロードを行いたいと思います。
1. ファイルアップロード先の準備
「S3」→「バケットを作成」でアップロード先となるバケットを作成します。
一応、今回はリージョンを「Tokyo」にしています。
2. アップロードユーザーの用意
「IAM」→「ユーザー」→「新規ユーザーの作成」で今回利用するアップロード用のユーザー名を入力し「作成」をクリックします。
ここで、アクセスキーIDとシークレットアクセスキーが表示されるので、メモまたはダウンロードをしてから「閉じる」をクリックしてください。後で必要になります。
「アクセス許可」→「インラインポリシー」→「ここをクリックしてください。」をクリックします。
以下のポリシーを適用します。(コピペでOKです。)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1471591778000",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"*"
]
}
]
}
以上で、ファイルアップロード用ユーザーが作成できました。
3. スクリプトの作成
それではいよいよアップロード用のスクリプトを作成します。
今回の作業環境はMacで行います。
$ vim upload.rb
ファイルを開いたら以下のスクリプトをコピペします。
ただ、その際にbucketname、objectname、uploadfileとアクセスキーIDとシークレットアクセスキーは適宜変更してください。
また、バケットのリージョンをTokyoにしなかった場合も適切なリージョンに変更する必要があります。
#!/usr/bin/env ruby
require 'aws-sdk'
bucketname = "kohei-no-bucket" # バケット名
objectname = "ceresso.png" # アップロード後のファイル名
uploadfile = "ceresso.png" # アップロードするファイル名
Aws.config[:credentials] = Aws::Credentials.new(
'********************', # アクセスキーID
'****************************************', # シークレットアクセスキー
)
s3 = Aws::S3::Resource.new(region:'ap-northeast-1') # Tokyoリージョン
obj = s3.bucket(bucketname).object(objectname)
obj.upload_file(uploadfile)
最後に、作成したら実行権限をつけておきましょう。
$ chmod +x upload.rb
あと、もしaws-adkのインストールがまだの場合は以下のコマンドでインストールもしておいてください。
$ gem install aws-sdk
ということで、すべての準備が整いました。
4. 実践!
それではアップロードしてみます。
$ ./upload.rb
何もエラーなくプロンプトが返って来れば無事アップロード成功です。
5. 確認
それではバケットを確認してみます。
アップロードできているのが確認できました。
おわりに
今回は同じディレクトリ内にあるファイルをアップロードしました。
別の場所にあるファイルをアップロードしたい場合は、スクリプト内のuploadfileをパス指定すればOKです。