Memo

メモ > サーバ > サービス: AWS > S3

■S3
※可用性の高い、オンラインストレージ(ファイルサーバ)を利用できる 「S3 → バケットを作成」からバケットを作成 バケット名: refirio リージョン: アジアパシフィック(東京) パブリックアクセス設定: 各チェックを外して公開 バケットポリシー:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::refirio/*" } ] }
※Bucket Name は「net.refirio.images」「net.refirio.backup」のように、URLをベースにすると他と重複しなくていいかもしれない 問題なければ「バケット」ボタンを押す ■S3のファイルを直接公開しない Amazon S3 → happy-ring-production → アクセス許可 → ブロックパブリックアクセス (バケット設定) → 編集 で「パブリックアクセスをすべて ブロック」にチェックを入れて保存した つまり、S3の画像を直接公開しないようにした ■サーバサイドプログラムからS3にファイルをアップロード 画面右上のアカウント名 → マイセキュリティ資格情報 → Delete your root access keys → Manage Security Credentials Your Security Credentials ページの Access Keys (Access Key ID and Secret Access Key) でアクセスキーを作成できるので、控えておく http://j-caw.co.jp/blog/?p=1100 などを参考に、S3にファイルをアップロードできるプログラムを作成して動作確認する インスタンス一覧からインスタンスを選択し、指定したフォルダ内に指定したファイルをアップロードできているか確認する ファイルを選択し、Properties → Link で、実際にアップロードされたファイルにアクセスできる Access Key ID : XXXXX Secret Access Key : YYYYY http://develop-123456789.ap-northeast-1.elb.amazonaws.com/s3/ ただし基本的にルートキーは使用せず、限定的な権限を持つユーザーを作成することを推奨 画面右上のアカウント名 → マイセキュリティ資格情報 → ユーザー → ユーザーを追加 ユーザー名: refirio-production アクセスの種類: プログラムによるアクセス アクセス権限を設定: 既存のポリシーを直接アタッチ のようにして、「EC2とS3にだけアクセスできる」のように作成する awsのs3を操作する為のaccess keyとsecret keyを取得する(IAM) - joppot https://joppot.info/2014/06/14/1621 ユーザーをいくつも作成する場合、権限をグループで管理するといい AWSアクセスキー作成 - Qiita https://qiita.com/miwato/items/291c7a8c557908de5833 PHPプログラムからS3にアップロードする場合、バケットの 「アクセス権限 → パブリックアクセス設定 → 編集」 で各チェックを外して「保存」とすると、SDKでアップロードする際
$client = S3Client::factory(array( 'key' => 'XXXXX', 'secret' => 'YYYYY', )); $result = $client->putObject(array( 'ACL' => 'public-read', 'Bucket' => 'refirio-staging', 'Key' => 'images/photo01.jpg', 'Body' => file_get_contents('images/photo01.jpg'), ));
のように「ACL」を「public-read」にすればファイルを公開できる また、バケットのプロパティの 「アクセス許可 → バケットポリシー」で以下を登録すると、「ACL」を「public-read」に指定しなくてもファイルがデフォルトで公開される
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::バケット名/*" } ] }
HDDに保存するのはもう古い!Amazon S3を使ってみたら簡単便利すぎてHDDが蒸発した http://www.4-fusion.jp/randd/2013/05/08/hdd-old-amazon-s3-easy/ AWS SDK for PHPを使ってS3にファイルをアップロードする http://j-caw.co.jp/blog/?p=1100 Installing via Composer http://docs.aws.amazon.com/aws-sdk-php/guide/latest/installation.html AWS SDK for PHP http://aws.amazon.com/jp/sdkforphp/ Amazon S3 でバケット配下を全て public read にする http://www.bokukoko.info/entry/2015/02/03/Amazon_S3_%E3%81%A7%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E9... ■画像の表示 ※未検証 S3に配置した画像のURLに直接アクセスすると、ダウンロードダイアログが表示される (imgタグで呼び出せば普通に画像が表示される) AWSコンソールからオブジェクトのプロパティを確認すると、「メタデータ」に以下が設定されている これがデフォルト値だと思われる タイプ: システム定義 キー: Content-Type 値: binary/octet-stream 例えば画像がJpegの場合、以下のように設定することで、画像のURLに直接アクセスするとブラウザに表示されるようになる タイプ: システム定義 キー: Content-Type 値: image/jpeg SDK経由なら、オブジェクトをputする際にメタデータを指定できるみたい AWS S3 の putObject API でメタデータを設定する - 銀の弾丸 https://takamints.hatenablog.jp/entry/set-metadata-with-aws-s3-putobject CLI経由でも処理できるみたい AWS CLI で S3 オブジェクトのメタデータを変更する - michimani.net https://michimani.net/post/aws-modify-metadata-of-s3-object/ AWS CLIでS3 objectsへメタデータを設定する - Qiita https://qiita.com/yohachi/items/7b91fcc441b2ccf4da87 【小ネタ】S3オブジェクトのContent-TypeをAWS CLIで一括で変更する | DevelopersIO https://dev.classmethod.jp/articles/change-content-type-by-aws-cli/ ■データ転送量の確認 S3 → バケットを選択 → 管理 → メトリクス 左メニュー内にある鉛筆アイコンをクリック 「リクエストのメトリクス」「データ転送のメトリクス」にチェックを入れて「保存」をクリック (片方にチェックを付けると、もう片方も強制的にチェックが付いた) CloudWatch → メトリクス → S3 → 各フィルターのメトリクスをリクエスト で上で追加したメトリクスを確認できる 表示されていない場合はしばらく待つ。(「リクエストのメトリクス」「データ転送のメトリクス」の設定が反映されるまでに、15分程度のタイムラグがある) S3データ転送量のアラート設定 | ハックノート https://hacknote.jp/archives/54254/ ■CLIで操作 CLIを使えば、バケットから一括ダウンロードや一括アップロードすることができる 詳細は、このファイル内にある「AWS CLI」の「S3を操作」を参照 ■バケットの再作成 バケットを削除した後、すぐに同じ名前でバケットを作成しようとすると 「A conflicting conditional operation is currently in progress against this resource. Please try again.」 のようなエラーになる 複数リージョンに分散配置されたデータが消えるまで時間がかかるようなので、1〜2時間ほどしてから再度試すといい AWS S3 で bucket を削除した後に再作成を試みるとうまくいかない|Sheeprograming http://sheeprogramming.iku4.com/Entry/269/ ■フォルダの扱い Amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする | DevelopersIO https://dev.classmethod.jp/articles/amazon-s3-folders/ > Amazon S3には実はフォルダという概念は無いのです。 > Amazon S3の基礎技術は、単純なKVS(Key-Value型データストア)でしかありません。 ■静的サイトホスティング ※未検証 S3に静的ページを配置し、それをWebサイトとして表示させることができる ただしPHPなど動的ページに対応させることはできない 対象バケットの「プロパティ → 静的ウェブサイトホスティング」から設定できそう Amazon S3 を使用して静的ウェブサイトをホスティングする - Amazon Simple Storage Service https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/WebsiteHosting.html > Amazon S3 はサーバーサイドスクリプトをサポートしていませんが、 > AWSには動的ウェブサイトをホストするための他のリソースがあります。 動的ページには対応していないので、別途EC2などを使用する必要がある CloudFrontとS3で作成する静的サイト構成の私的まとめ | DevelopersIO https://dev.classmethod.jp/articles/s3-cloudfront-static-site-design-patterns-2022/ ■バージョン管理 ※未検証 今さらだけどS3のバージョニングを試してみた。 https://qiita.com/kooohei/items/8775b380632e8b7940a3 ■セキュリティ ※未検証。2018年11月18日の記事 S3で誤ったデータの公開を防ぐパブリックアクセス設定機能が追加されました | DevelopersIO https://dev.classmethod.jp/cloud/aws/s3-block-public-access/

Advertisement