インフラ屋のAWSはじめた日記─GUIを捨てよ

第2回Amazon S3を使ってみる

S3にファイルをアップロードしてみる

前回は最初の環境準備までできたところで終わった。これでAWS CLIを使う準備は整ったようだ。まずはAmazon Simple Storage Service(Amazon S3)というのがすごく簡単に使えると噂を聞いたので、Amazon S3を使ってみようと思う。

Amazon S3の概念を理解する。

いざ使おうと思っても、じつはAmazon S3が何なのかもさっぱりわからなかった。Simple Storage Serviceだということはわかっていたので、おそらくストレージのサービスであろうということはわかっていた。

BucketとObject
Amazon S3にはBucketという物とObjectというものがあるようだ。BucketはCドライブとかDドライブみたいなもので、Objectをしまうための入れ物のようなものだということがわかった。

Bucketの名前は世界中でユニークな名前である必要がある。これは後でわかったことだけど、このBucketの名前がそのまま******.s3.amazonaws.comといったようなドメインになるという。

ということはきっとBucketの名前に.を含めるとSSL的にまずいことになりそうな気がする。

Objectはファイルのことで、Bucketを指定してObjectを保存する。ObjectにはKeyと呼ばれるファイル名を付けることができる。KeyはBucket内でユニークである必要がある。

/を含めても別にフォルダのようになるわけではないけれど、たいていのツールは/をKeyに含めていくことでフォルダの用に扱ってくれる。

Amazon S3でできること
Amazon S3でできることは
  • ファイルをアップロードすること
  • ファイルをダウンロードすること
  • ファイルをインターネットに公開すること

他にもあるらしいけど、おおまかにはこういった機能があるということがわかった。ここまで理解したら、後はBucketを作って、ファイルをアップロードして、それブラウザから見る。というのをやってみる。

Bucketの作成

まずはBucketを作る。どうやってつくるか調べてみると、AWS CLIでAmazon S3を使う方法は2つあるらしい。ひとつはファイルシステムのコマンドのように使うもの(s3)と、S3のAPIを使うもの(s3api)がある。

普段慣れ親しんだファイルシステムのコマンドのように扱えるのはすごくありがたい。 ドキュメントもきちんと整備されていて、どのように使うのかは、docs.aws.amazon.comを見ればわかりそうだ。

Bucketを作るにはmbというサブコマンドを使うらしい。おそらくmake backetなんだろう。

$ aws s3 mb hogefuga1221
usage: aws s3 mb <S3Path>

間違っているらしい。aws s3で始まるコマンドを使う場合はS3Pathというs3://から始まるようにする必要があるようだ。

$ aws s3 mb s3://hogefuga1221
make_bucket: s3://hogefuga1221/

これで無事にBucketが作れた。作れたとレスポンスが返ってきてはいるものの、やはり気になる。ファイルシステムのように触れるはずなので、試しにaws s3 ls と打ってみたら、思ってた通り、今作ったBucketが出てきた。

$ aws s3 ls
2014-12-12 11:57:54 hogefuga1221

オブジェクトのアップロード

Bucketが作れたから、今度はファイルをアップロードしてみる。ファイルは適当にhtmlを作った。うまくいけば、ブラウザにhello s3 world.と大きく表示されるはずだ。

<html>
<h1>hello s3 world.</h1>
</html>

htmlはindex.htmlという名前で保存した。保存ができたら、実際にアップロードしてみる。

$ aws s3 cp index.html s3://hogefuga1221/index.html
upload: ./index.html to s3://hogefuga1221/index.html

アップロードはできたらしい。さぁ、これにブラウザでアクセスしようと思ったけれど、URLがわからない。

結局すごく単純で、 http://hogefuga1221.s3.amazonaws.com/index.html というURLでアクセスできる。Bucketの名前が世界中でユニークになる必要があるというのにも納得できた。

S3にアップロードしたファイルにブラウザでアクセスする。

ファイルをアップロードしたら、もうブラウザで見れるだろうと思っていたけど、それは甘かった。AccessDeniedと言われてしまった。

画像

その理由は単純でブラウザからアクセスしてきた人はAmazon S3にたいする権限を持っていなかったからだった。じゃあ、外からアクセスさせるためにはアクセスしてくる人全員にIAMでユーザを作らないといけないんだろうか??

Amazon S3のObjectACLを変更

その辺りはキチンとできていて、Object ACLという機能を使って、制御できるようだ。今回は誰からも見てもらいたいので、そういう設定をする。

$ aws s3 chmod 755 s3://hogefuga1221/index.html
usage: aws [options] <command> <subcommand> [parameters]
aws: error: argument subcommand: Invalid choice, valid choices are:

ls                                       | website
cp                                       | mv
rm                                       | sync
mb                                       | rb

ACLの設定は残念な事に、chmodではない。index.htmlは数バイトしかない軽いファイルだし、もう一度アップロードしてみる。今度は--acl public-readを付けて

$ aws s3 cp --acl public-read index.html s3://hogefuga1221/

再度ブラウザにアクセスしてみると思ったとおりの表示をしてくれた。

画像

これでなんとかクラウドが使えるようになった気がしてきた。

どうやら基本の動作は実行できた様子のとあるインフラエンジニア。いよいよこれからはクラウドの道へ踏み込みます、もちろんブラウザなしで。乞うご期待!

AWSの仕事ができるようになる、トレーニングプログラム

https://www.pasonatech.co.jp/project/aws_get.jsp

おすすめ記事

記事・ニュース一覧