Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS研修 Amazon S3を使ったデータ保管

Recruit
PRO
August 17, 2021

AWS研修 Amazon S3を使ったデータ保管

2021年度リクルート エンジニアコース新人研修の講義資料です

Recruit
PRO

August 17, 2021
Tweet

More Decks by Recruit

Other Decks in Technology

Transcript

  1. Amazon S3を使ったデータ保管 株式会社リクルート クラウドアーキテクトグループ

  2. Amazon S3 • ユーザがデータを保管するためのオブジェクトストレージです。 2

  3. [補⾜] オブジェクトストレージとは 他の種類のストレージとの⽐較 3 ブロックストレージ ファイルストレージ オブジェクトストレージ 対応するAWS サービス EBS

    EFS S3 データを⼀定の⼤きさ(ブロック) に区切り、ブロック番号をつかって OSとデータのやり取りを⾏う FC-SCSI, iSCSI, FCoEなどで データアクセスを提供 属性情報とディレクトリ構造の 組み合わせでファイルのアクセスや 検索を実現 CIFS/NFSでデータアクセスを提供 オブジェクトとそれに付随する 属性情報を⽤いてデータにアクセス (Key Value Store的) RESTでのデータアクセスを提供 ※ 最終的には裏側にブロックストレージが存在 ※ 最終的には裏側にブロックストレージが存在 OS ブロック番号ベースで データアクセス OS ディレクトリパス +ファイル名でアクセス OS REST (HTTPリクエスト)
  4. Amazon S3の特徴 • ⾼い耐久性 • 99.999999999%(イレブンナイン) • 10000オブジェクトを保管した場合に、 1つのオブジェクトが何らかの理由で失われるまでに1000万年程度かかる •

    容量制限なし • 1 オブジェクト(≒1 ファイル) 5 TBまで • 安価 • 1 GB当たり⽉額3円の保管料⾦ • スケーラブルかつ安定した性能 • データの追加 3500 req/sec・データの取得操作 5500 req/secを処理可能 • データの取得操作についてはCloudFront(CDN サービス)と組み合わせることで 更に性能スケールさせることも可能 4
  5. S3の⽤語 • バケット • オブジェクトの保存場所 • オブジェクト • バケット内に保管されているデータ (≒ファイル)

    • キー • オブジェクトの⼀意識別⼦ • バケット + キー (+ バージョン)で 特定のデータが⼀意に定まるようにする • メタデータ • オブジェクトに付随する属性情報 5 S3 バケット オブジェクト データ本体 User バケット名 + キー (+ バージョン) を指定してオブジェクトを取得
  6. S3バケット・S3 Glacierの種類 種別 データ取出 保存価格*3 [USD/GB・month] 耐久性[%] スタンダード 即時 0.023〜0.025

    99.999999999 スタンダート-IA*1 即時 0.019 99.999999999 OneZone-IA*1 即時 0.0152 99.999999999 RPS(低冗⻑化ストレージ) *2 即時 - 99.99 6 *1 IAはInfrequent Access、低頻度アクセスの意 *2 Glacierからリストアしたデータの保管⽤に主に利⽤ *3 2020/12/24時点の東京リージョンの料⾦ バケット種別 データ取出 保存価格 [USD/GB・month] 耐久性[%] S3 Glacier 即時 0.005 99.999999999 S3 Glacier Deep Archive 12時間以内 0.002 99.999999999 なお、S3とS3 Glacierでは料⾦の計算⽅法が異なるのでその点は注意が必要です
  7. S3の基本操作 RESTっぽくシンプルな操作を提供 7 GET: オブジェクトの取得 PUT: オブジェクトのアップロード HEAD: バケットおよびオブジェクトの存在確認 DELETE:

    オブジェクトの削除 LIST: バケットおよびバケット内オブジェクトの⼀覧表⽰ 別途Glacier(のアーカイブ)からS3へのRESTOREなどもある
  8. S3のアクセス制御 ⼤きく3つの⽅法がある ① ユーザーポリシー Ÿ IAMポリシーをIAMユーザ・ロール・グループに付与して管理 Ÿ "誰"が"何"をできるのかを定義 ② バケットポリシー

    Ÿ S3バケット毎にアクセス権を指定 Ÿ このリソース(オブジェクト)に対して"誰"が"何"をできるのかを定義 Ÿ クロスアカウントでのアクセス権限を管理する場合にも利⽤する ③ ACL(Access Control List) Ÿ バケット/オブジェクト単位の簡易なアクセス権限に利⽤ Ÿ バケットACLよりもオブジェクトに付与したACLが優先される Ÿ 基本的には、バケットポリシーを使うようにします 8
  9. ユーザーポリシー IAMのポリシーのことです。構成要素は、 1. どのリソース(Resource, S3バケット)に対して 2. どんな操作(Action)を 3. どんな条件(Condition)下で実施できるか? 9

    Action: どんな操作︖ Resource: どのリソース︖ Condition(オプション) : 条件(接続元アドレスや時間帯など) Effect: 許可(Allow) or 許否(Deny)
  10. バケットポリシー 10 Effect: 許可(Allow) or 許否(Deny) Action: どんな操作︖ Resource: どのリソース︖

    (ここはバケット名を指定する) Principal: "誰"の操作を許可・拒否するか Condition(オプション) : 条件(接続元アドレスや時間帯など)
  11. ACL 11 オブジェクトへの 操作権限 バケットへの 操作権限 上図の場合は、バケットを所有しているAWSアカウントからのみバケットおよびバケット内オブジェクトのCRUDが可能

  12. S3のアクセス制御: 意図しない公開を防ぐ仕組み(S3 Block Public Access) S3では容易にバケット内のオブジェクトを外部に公開できるので、それが発⽣し ないための安全弁のような仕組みとしてS3 Block Public Accessが存在する

    • S3 Block Public Access • デフォルトではACLやポリシー外部公開設定をしても公開されないようにする仕組み ① BlockPublicAcls • パブリック公開設定となっているACL設定をブロックする ② IgnorePublicAcls • パブリック公開設定になっているACLS設定を無視する ③ BlockPublicPolicy • パブリックなバケットポリシー設定をブロックする ④ RestrictPublicBuckets • パブリックなバケットポリシー設定を持つバケットへのパブリックアクセス、 クロスアカウントアクセスをブロックする 12
  13. S3バケット内オブジェクトの公開⽅法 1. パブリックアクセス Ÿ バケットポリシーを使って公開します Ÿ S3バケットのWEBサイトホスティング機能と組み合わせて静的WEBページを公開することも可能です 2. 署名付きURL Ÿ

    AWS SDK/CLIを使って期限付きでオブジェクトの取得またはアップロードが可能なURLを発⾏ する機能 13
  14. データの保護 データの改竄や窃取を防ぐための⼿段と、削除を防⽌する2つの保護の観点が存在 します ① 暗号化 Ÿ サーバサイドで保管しているオブジェクトを暗号化します(SSE; Server Side Encryption)

    ② 誤削除の防⽌ Ÿ バージョニングの有効化 誤って削除しても旧バージョンから復旧できます(厳密には削除フラグを取り消せる) Ÿ どうしても消されて困る場合は、S3 Object Lock(WORM機能)を使います 14
  15. オブジェクトのライフサイクル管理 • 不要になったオブジェクトやアクセスされていないオブジェクトをずっとS3に 置いておくのはコスト的に無駄になるため、S3ではライフサイクル機能を提供 しています。 • オブジェクトのアップロードから⼀定期間経過後にS3スタンダードからスタ ンダード-IAへ移動してコストを削減(さらに⼀定期間経過後にオブジェクト そのものを削除する)といったことが可能です •

    スタンダードからスタンダード-IAについてルールを決めきれない場合は、 Intelligent Tiering機能などをもちいて⾃動分析 & 移動といったことも可 能です 15
  16. S3と他サービスの連携 S3のオブジェクトの⽣成や削除などの各種イベントをトリガーとして 他サービスと連携した処理を実⾏することができます* 16 Bucket オブジェクト ① オブジェクトのアップロード SNS Topic

    SQS Queue Lambda function ② イベントの通知 * かつてはS3バケットのイベントの取りこぼしなどが特定条件下では発⽣していますが 現在では改善されイベントの取りこぼしは発⽣しないようになっています。 ただし、at least onceのため、複数回同じイベントの通知が発⽣する可能性があります。
  17. データの投⼊・取得時の注意点 • ⼤容量ファイルの取扱 • RANGE GETによる⼤容量ファイル取得の効率化/マルチパートアップロードによる ⼤容量ファイルアップロードの効率化が実現できる • RANGE GETの参考資料

    • https://developer.mozilla.org/ja/docs/Web/HTTP/Range_requests • https://triple-underscore.github.io/RFC7233-ja.html • マルチパートアップロードの参考資料 • https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/uploadobjusingmpu.html • データ取得の際に、S3 Selectを使ってオブジェクト全体を取得するのではなく、 オブジェクトの中⾝をフィルタリングして取得するデータ量を削減すると⾔ったことも可能 • S3 Transfer Acceleration • エッジロケーションを使ったオブジェクトのアップロード速度の改善 • なるべく早い段階でAWSの管理するネットワークへと⼊り、経路、帯域幅などが最適化された状態を確 保する。 17
  18. [補⾜] S3 Select S3バケット内に格納されたCSV, (LD)JSON*1, Parquet形式のデータを持つオブ ジェクトから必要なデータのみをSQLライクなクエリ⾔語で抽出できる機能 18 Bucket CSVファイル

    (LD)JSONファイル Parquet形式ファイル *1 LDJSON ⾏区切りJSON、⾏単位で区切られたJSON形式のこと ストリーミングデータの取扱などでよくもちいられる 参考) https://aws.amazon.com/jp/blogs/news/querying-data-without-servers-or-databases-using-amazon-s3-select/ 問い合わせ (バケット名 + オブジェクトのキー + その他オプション) 抽出結果 (基本的にはJSON形式)