#author("2020-03-25T23:59:37+00:00","default:wikiadmin","wikiadmin") #author("2020-05-06T04:52:00+00:00","default:wikiadmin","wikiadmin") -S3はよく使うので独立させた #contents *What is S3? [#z7ee9cfc] OSから直接マウントするのがEBSに対し、S3はウェブから見ることができるなど共有用途向け。各種言語に対応したライブラリがあるので、プログラムから使うのもそれほど難しくはない。データの保全に関しては99.999999999%と信頼性も高いし、ミラーリングもできるのでバックアップストレージとして使うのが良かろう。バケットという単位で管理するが、ドメインが割り当てられるのでバケットの命名規則もドメイン命名規約にのっとる必要がある。AWSの各種サービスのログ置き場としてもS3が利用されることが多い。ただしこの場合PUTの回数が凄まじく伸びるので(特にELBなど)、無料枠で止めるのならばログの出力は実験程度にしておくべし。 *SDK 2.0 sample [#z7a74043] https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3 *無料枠の注意点 [#b43b5e16] 容量は5GBなので大丈夫だと思うが、PUTが2000回なのでいつも超えるのはここ。AWSの他サービスのログ置き場として経由することが多く以下のサービスでログを出してみた。 +CloudFront オリジンごとに設定でき、細かく送られてくるので有効にしないほうがよい(ここですぐ無料枠超える) +CloudWatch +CloudTrail コンソールの操作が少ない場合は、大した回数発生しない。 *S3の種類 [#bb9170eb] |項目|備考| |標準|デフォルトで高頻度アクセス向け| |低頻度アクセス|ログなど低頻度アクセス用で、コンソールからの利用はできる| |Glaicier|完全貯蔵用で、取り出しには手続き必要| なお、標準以外のアクセスが発生すると少額だが課金されるので無料枠に収めたい場合は標準だけ利用していればよい。 *S3 クライアントソフト [#ta41f826] +Cyberduck +CloudBerry Explorer *アクセスログ [#e2a0c366] 大量に出るのであまり見てられないのだが、設定を有効にするとある程度遅れるが指定ディレクトリにJSON形式で出力される。前述の通りアクセスログのPUTが無料枠を超えるぐらい出てしまうので注意。 *ストレージオブジェクトに関する設定 [#h2cee8e2] **バージョニング [#n225dca0] ***ライフサイクル(定期削除) [#va91d958] -ルールを決めて、削除させることができる。 -日本時間9時ぐらいに発動するが、一定ではない。午後にも発動したので1日数回タイミングがあるらしい。 -適用の結果オブジェクトがなくなると上位のフォルダもなくなるようだ。 -ルールが複雑で検証中。''ワイルドカードなどは使えない。''あくまでプリフィックスの一致なのでhogeで設定するとhogeで始まるオブジェクトが消える。 -とあるときは9時反映、とあるときは13時、とあるときは19時,19時,スキップ,14時など反映時間が日によってばらばら。反映されない日もあったが、さすがに二日連続はない模様。 *静的ウェブサイトホスティング [#k44b6e76] 単なるリダイレクトも可能だし、ホスティングすることも可能。独自ドメインだとSSLが不可能なのでCloudFrontなどと組み合わせる。ただしこれを有効化してもしなくてもObjectに対するgetが許可されていればアクセスできるというなんとも意味がない設定。 単なるリダイレクトも可能だし、ホスティングすることも可能。独自ドメインだとSSLが不可能なのでCloudFrontなどと組み合わせる。ただしこれを有効化してもしなくてもObjectに対するgetが許可されていればアクセスできるというなんとも意味がない設定。設定反映までに時間がかかるので5分ほど待った方が良い。 **ApacheとのReverse Proxy [#a40228c0] # Reverse Proxy ProxyPass /s3 http://fuga.s3-website-ap-northeast-1.amazonaws.com/ ProxyPassReverse /s3 http://fuga.s3-website-ap-northeast-1.amazonaws.com/ **手順 [#kfb908b6] +静的ウェブサイトホスティングを有効にする(不要疑惑あり) +バケットポリシーで閲覧を許可する!(忘れがち!)。 { "Version":"2012-10-17", "Statement":[{ "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::example-s3-bucket/*" ] } ] } -拒否があると許可に優先するので注意。(OAIから可能、get可能、特定のVPC以外拒否) { "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" } } } ] } **独自ドメインの制限 [#xebd305e] バケット名を独自ドメインと一緒にする。www.example.comをs3で表示させたいならばwww.example.comがバケット名となる。 **リダイレクトルール [#qdca52be] 特定のステータスの時にリダイレクトさせたりできる。 *Lambda連携 [#ca81d1d3] +Lambdaのコンソール→Functions +Event sourcesでS3を選択する **リージョン間でのデータコピー [#k3b2304a] クロスリージョンレプリケーションを有効にすることにより可能!RDSにも同じ仕組みがある。 *パフォーマンスチューニング [#b25b607f] 秒間50アクセス程度ならパフォーマンスチューニングは不要だが、それを超えるようになってくるとオブジェクトの配置が分散されるように名前を工夫する必要がある。具体的には連番になるようなものは逆にしてしまうのが良い。「2016-02-08-log」よりは「08-02-2016-log」のほうが良いということ。 #counter