What is S3?

OSから直接マウントするのがEBSに対し、S3はウェブから見ることができるなど共有用途向け。各種言語に対応したライブラリがあるので、プログラムから使うのもそれほど難しくはない。データの保全に関しては99.999999999%と信頼性も高いし、ミラーリングもできるのでバックアップストレージとして使うのが良かろう。バケットという単位で管理するが、ドメインが割り当てられるのでバケットの命名規則もドメイン命名規約にのっとる必要がある。AWSの各種サービスのログ置き場としてもS3が利用されることが多い。ただしこの場合PUTの回数が凄まじく伸びるので(特にELBなど)、無料枠で止めるのならばログの出力は実験程度にしておくべし。

SDK 2.0 sample

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3

無料枠の注意点

容量は5GBなので大丈夫だと思うが、PUTが2000回なのでいつも超えるのはここ。AWSの他サービスのログ置き場として経由することが多く以下のサービスでログを出してみた。

  1. CloudFront オリジンごとに設定でき、細かく送られてくるので有効にしないほうがよい(ここですぐ無料枠超える)
  2. CloudWatch
  3. CloudTrail コンソールの操作が少ない場合は、大した回数発生しない。

S3の種類

項目備考
標準デフォルトで高頻度アクセス向け
低頻度アクセスログなど低頻度アクセス用で、コンソールからの利用はできる
Glaicier完全貯蔵用で、取り出しには手続き必要

なお、標準以外のアクセスが発生すると少額だが課金されるので無料枠に収めたい場合は標準だけ利用していればよい。

S3 クライアントソフト

  1. Cyberduck
  2. CloudBerry Explorer

アクセスログ

大量に出るのであまり見てられないのだが、設定を有効にするとある程度遅れるが指定ディレクトリにJSON形式で出力される。前述の通りアクセスログのPUTが無料枠を超えるぐらい出てしまうので注意。

ストレージオブジェクトに関する設定

バージョニング

ライフサイクル(定期削除)

静的ウェブサイトホスティング

単なるリダイレクトも可能だし、ホスティングすることも可能。独自ドメインだとSSLが不可能なのでCloudFrontなどと組み合わせる。ただしこれを有効化してもしなくてもObjectに対するgetが許可されていればアクセスできるというなんとも意味がない設定。

ApacheとのReverse Proxy

# Reverse Proxy

ProxyPass /s3 http://fuga.s3-website-ap-northeast-1.amazonaws.com/
ProxyPassReverse /s3 http://fuga.s3-website-ap-northeast-1.amazonaws.com/

手順

  1. 静的ウェブサイトホスティングを有効にする(不要疑惑あり)
  2. バケットポリシーで閲覧を許可する!(忘れがち!)。
{
  "Version":"2012-10-17",
  "Statement":[{
 	 "Sid":"PublicReadGetObject",
        "Effect":"Allow",
	  "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::example-s3-bucket/*"
      ]
    }
  ]
}
{
   "Version": "2008-10-17",
   "Id": "PolicyForCloudFrontPrivateContent",
   "Statement": [
       {
           "Sid": "Allow-OAI-Access-To-Bucket",
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX"
           },
           "Action": "s3:GetObject",
           "Resource": [
               "arn:aws:s3:::awsexamplebucket/*"
           ]
       },
       {
           "Sid": "Allow-Public-Access-To-Bucket",
           "Effect": "Allow",
           "Principal": "*",
           "Action": "s3:GetObject",
           "Resource": [
               "arn:aws:s3:::awsexamplebucket/*"
           ]
       },
       {
           "Sid": "Access-to-specific-VPCE-only",
           "Effect": "Deny",
           "Principal": "*",
           "Action": "s3:GetObject",
           "Resource": [
               "arn:aws:s3:::awsexamplebucket/*"
           ],
           "Condition": {
               "StringNotEquals": {
                   "aws:sourceVpce": "vpce-1a2b3c4d"
               }
           }
       }
   ]
 }

独自ドメインの制限

バケット名を独自ドメインと一緒にする。www.example.comをs3で表示させたいならばwww.example.comがバケット名となる。

リダイレクトルール

特定のステータスの時にリダイレクトさせたりできる。

Lambda連携

  1. Lambdaのコンソール→Functions
  2. Event sourcesでS3を選択する

リージョン間でのデータコピー

クロスリージョンレプリケーションを有効にすることにより可能!RDSにも同じ仕組みがある。

パフォーマンスチューニング

秒間50アクセス程度ならパフォーマンスチューニングは不要だが、それを超えるようになってくるとオブジェクトの配置が分散されるように名前を工夫する必要がある。具体的には連番になるようなものは逆にしてしまうのが良い。「2016-02-08-log」よりは「08-02-2016-log」のほうが良いということ。

Counter: 3709, today: 1, yesterday: 3

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS