AWS SDK for Ruby バージョン 2 を使用したS3バケットへのオブジェクトアップロード

はじめに

プログラミングのお勉強をしようと思い、AWS公式ドキュメントにある「AWS SDK for Ruby を使用したオブジェクトのアップロード」を参考にファイルアップロードを行うRubyスクリプトを書いてみました。 とはいえ、そのままだとただのコピペになってしまうので、アップロードするのに必要な権限のみを持つIAMユーザーを作成し、それをスクリプト内で指定してファイルのアップロードを行いたいと思います。


# 1. ファイルアップロード先の準備 「S3」→「バケットを作成」でアップロード先となるバケットを作成します。 一応、今回はリージョンを「Tokyo」にしています。 ![1-s301.png](/images/posts/06dae641-9467a12e-d512-e23a-7c76-f9a541e1eb76.png)

1-s302.png


# 2. アップロードユーザーの用意 「IAM」→「ユーザー」→「新規ユーザーの作成」で今回利用するアップロード用のユーザー名を入力し「作成」をクリックします。 ![2-iam01.png](/images/posts/b43e5a2f-c3fdf8ba-b84a-b1b0-8a24-3a7302a8577b.png)

ここで、アクセスキーIDシークレットアクセスキーが表示されるので、メモまたはダウンロードをしてから「閉じる」をクリックしてください。後で必要になります。 2-iam02.png

次に、先ほど作成したユーザーを選択します。 2-iam03.png

「アクセス許可」→「インラインポリシー」→「ここをクリックしてください。」をクリックします。 2-iam04.png

「カスタムポリシー」を選んで「選択」をクリックします。 2-iam05.png

以下のポリシーを適用します。(コピペでOKです。)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1471591778000",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

2-iam06.png

2-iam07.png

以上で、ファイルアップロード用ユーザーが作成できました。


# 3. スクリプトの作成 それではいよいよアップロード用のスクリプトを作成します。 今回の作業環境はMacで行います。
$ vim upload.rb

ファイルを開いたら以下のスクリプトをコピペします。 ただ、その際にbucketnameobjectnameuploadfileアクセスキー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. 確認 それではバケットを確認してみます。

3-upload01.png

アップロードできているのが確認できました。


# おわりに 今回は同じディレクトリ内にあるファイルをアップロードしました。 別の場所にあるファイルをアップロードしたい場合は、スクリプト内の*uploadfile*をパス指定すればOKです。