OSから直接マウントするのがEBSに対し、S3はウェブから見ることができるなど共有用途向け。各種言語に対応したライブラリがあるので、プログラムから使うのもそれほど難しくはない。データの保全に関しては99.999999999%と信頼性も高いし、ミラーリングもできるのでバックアップストレージとして使うのが良かろう。バケットという単位で管理するが、ドメインが割り当てられるのでバケットの命名規則もドメイン命名規約にのっとる必要がある。AWSの各種サービスのログ置き場としてもS3が利用されることが多い。ただしこの場合PUTの回数が凄まじく伸びるので(特にELBなど)、無料枠で止めるのならばログの出力は実験程度にしておくべし。
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3
容量は5GBなので大丈夫だと思うが、PUTが2000回なのでいつも超えるのはここ。AWSの他サービスのログ置き場として経由することが多く以下のサービスでログを出してみた。
| 項目 | 備考 |
| 標準 | デフォルトで高頻度アクセス向け |
| 低頻度アクセス | ログなど低頻度アクセス用で、コンソールからの利用はできる |
| Glaicier | 完全貯蔵用で、取り出しには手続き必要 |
なお、標準以外のアクセスが発生すると少額だが課金されるので無料枠に収めたい場合は標準だけ利用していればよい。
大量に出るのであまり見てられないのだが、設定を有効にするとある程度遅れるが指定ディレクトリにJSON形式で出力される。前述の通りアクセスログのPUTが無料枠を超えるぐらい出てしまうので注意。
単なるリダイレクトも可能だし、ホスティングすることも可能。独自ドメインだとSSLが不可能なのでCloudFrontなどと組み合わせる。ただしこれを有効化してもしなくてもObjectに対するgetが許可されていればアクセスできるというなんとも意味がない設定。
# Reverse Proxy
ProxyPass /s3 http://fuga.s3-website-ap-northeast-1.amazonaws.com/ ProxyPassReverse /s3 http://fuga.s3-website-ap-northeast-1.amazonaws.com/
{
"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がバケット名となる。
特定のステータスの時にリダイレクトさせたりできる。
クロスリージョンレプリケーションを有効にすることにより可能!RDSにも同じ仕組みがある。
秒間50アクセス程度ならパフォーマンスチューニングは不要だが、それを超えるようになってくるとオブジェクトの配置が分散されるように名前を工夫する必要がある。具体的には連番になるようなものは逆にしてしまうのが良い。「2016-02-08-log」よりは「08-02-2016-log」のほうが良いということ。