Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS研修 Amazon S3を使ったデータ保管
Search
Recruit
PRO
August 17, 2021
Technology
3
11k
AWS研修 Amazon S3を使ったデータ保管
2021年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 17, 2021
Tweet
Share
More Decks by Recruit
See All by Recruit
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
130
問題解決に役立つ数理工学
recruitengineers
PRO
11
2.8k
Curiosity & Persistence
recruitengineers
PRO
2
190
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
410
成長実感と伸び悩みからふりかえる キャリアグラフ
recruitengineers
PRO
1
190
リクルートの オンプレ環境の未来を語る
recruitengineers
PRO
3
350
LLMのプロダクト装着と独自モデル開発
recruitengineers
PRO
1
360
新規検索基盤でマッチング精度向上に挑む! ~『ホットペッパーグルメ』の開発事例 ビジネス編
recruitengineers
PRO
3
200
新規検索基盤でマッチング精度向上に挑む! ~『ホットペッパーグルメ』の開発事例 技術編
recruitengineers
PRO
2
260
Other Decks in Technology
See All in Technology
SpringBoot x TestContainerで実現するポータブル自動結合テスト
demaecan
0
110
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
170
急成長を支える基盤作り〜地道な改善からコツコツと〜 #cre_meetup
stefafafan
0
130
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
260
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
0
140
製造業からパッケージ製品まで、あらゆる領域をカバー!生成AIを利用したテストシナリオ生成 / 20250627 Suguru Ishii
shift_evolve
PRO
1
150
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
650
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
100
Kotlin Coroutine Mechanisms: A Surprisingly Deep Rabbithole
amanda_hinchman
2
100
AI導入の理想と現実~コストと浸透〜
oprstchn
0
110
SalesforceArchitectGroupOsaka#20_CNX'25_Report
atomica7sei
0
230
Snowflake Summit 2025全体振り返り / Snowflake Summit 2025 Overall Review
mtpooh
2
420
Featured
See All Featured
Producing Creativity
orderedlist
PRO
346
40k
Visualization
eitanlees
146
16k
Side Projects
sachag
455
42k
Embracing the Ebb and Flow
colly
86
4.7k
Bash Introduction
62gerente
614
210k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Six Lessons from altMBA
skipperchong
28
3.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
The Invisible Side of Design
smashingmag
300
51k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Transcript
Amazon S3を使ったデータ保管 株式会社リクルート クラウドアーキテクトグループ
Amazon S3 • ユーザがデータを保管するためのオブジェクトストレージです。 2
[補⾜] オブジェクトストレージとは 他の種類のストレージとの⽐較 3 ブロックストレージ ファイルストレージ オブジェクトストレージ 対応するAWS サービス EBS
EFS S3 データを⼀定の⼤きさ(ブロック) に区切り、ブロック番号をつかって OSとデータのやり取りを⾏う FC-SCSI, iSCSI, FCoEなどで データアクセスを提供 属性情報とディレクトリ構造の 組み合わせでファイルのアクセスや 検索を実現 CIFS/NFSでデータアクセスを提供 オブジェクトとそれに付随する 属性情報を⽤いてデータにアクセス (Key Value Store的) RESTでのデータアクセスを提供 ※ 最終的には裏側にブロックストレージが存在 ※ 最終的には裏側にブロックストレージが存在 OS ブロック番号ベースで データアクセス OS ディレクトリパス +ファイル名でアクセス OS REST (HTTPリクエスト)
Amazon S3の特徴 • ⾼い耐久性 • 99.999999999%(イレブンナイン) • 10000オブジェクトを保管した場合に、 1つのオブジェクトが何らかの理由で失われるまでに1000万年程度かかる •
容量制限なし • 1 オブジェクト(≒1 ファイル) 5 TBまで • 安価 • 1 GB当たり⽉額3円の保管料⾦ • スケーラブルかつ安定した性能 • データの追加 3500 req/sec・データの取得操作 5500 req/secを処理可能 • データの取得操作についてはCloudFront(CDN サービス)と組み合わせることで 更に性能スケールさせることも可能 4
S3の⽤語 • バケット • オブジェクトの保存場所 • オブジェクト • バケット内に保管されているデータ (≒ファイル)
• キー • オブジェクトの⼀意識別⼦ • バケット + キー (+ バージョン)で 特定のデータが⼀意に定まるようにする • メタデータ • オブジェクトに付随する属性情報 5 S3 バケット オブジェクト データ本体 User バケット名 + キー (+ バージョン) を指定してオブジェクトを取得
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では料⾦の計算⽅法が異なるのでその点は注意が必要です
S3の基本操作 RESTっぽくシンプルな操作を提供 7 GET: オブジェクトの取得 PUT: オブジェクトのアップロード HEAD: バケットおよびオブジェクトの存在確認 DELETE:
オブジェクトの削除 LIST: バケットおよびバケット内オブジェクトの⼀覧表⽰ 別途Glacier(のアーカイブ)からS3へのRESTOREなどもある
S3のアクセス制御 ⼤きく3つの⽅法がある ① ユーザーポリシー IAMポリシーをIAMユーザ・ロール・グループに付与して管理 "誰"が"何"をできるのかを定義 ② バケットポリシー
S3バケット毎にアクセス権を指定 このリソース(オブジェクト)に対して"誰"が"何"をできるのかを定義 クロスアカウントでのアクセス権限を管理する場合にも利⽤する ③ ACL(Access Control List) バケット/オブジェクト単位の簡易なアクセス権限に利⽤ バケットACLよりもオブジェクトに付与したACLが優先される 基本的には、バケットポリシーを使うようにします 8
ユーザーポリシー IAMのポリシーのことです。構成要素は、 1. どのリソース(Resource, S3バケット)に対して 2. どんな操作(Action)を 3. どんな条件(Condition)下で実施できるか? 9
Action: どんな操作︖ Resource: どのリソース︖ Condition(オプション) : 条件(接続元アドレスや時間帯など) Effect: 許可(Allow) or 許否(Deny)
バケットポリシー 10 Effect: 許可(Allow) or 許否(Deny) Action: どんな操作︖ Resource: どのリソース︖
(ここはバケット名を指定する) Principal: "誰"の操作を許可・拒否するか Condition(オプション) : 条件(接続元アドレスや時間帯など)
ACL 11 オブジェクトへの 操作権限 バケットへの 操作権限 上図の場合は、バケットを所有しているAWSアカウントからのみバケットおよびバケット内オブジェクトのCRUDが可能
S3のアクセス制御: 意図しない公開を防ぐ仕組み(S3 Block Public Access) S3では容易にバケット内のオブジェクトを外部に公開できるので、それが発⽣し ないための安全弁のような仕組みとしてS3 Block Public Accessが存在する
• S3 Block Public Access • デフォルトではACLやポリシー外部公開設定をしても公開されないようにする仕組み ① BlockPublicAcls • パブリック公開設定となっているACL設定をブロックする ② IgnorePublicAcls • パブリック公開設定になっているACLS設定を無視する ③ BlockPublicPolicy • パブリックなバケットポリシー設定をブロックする ④ RestrictPublicBuckets • パブリックなバケットポリシー設定を持つバケットへのパブリックアクセス、 クロスアカウントアクセスをブロックする 12
S3バケット内オブジェクトの公開⽅法 1. パブリックアクセス バケットポリシーを使って公開します S3バケットのWEBサイトホスティング機能と組み合わせて静的WEBページを公開することも可能です 2. 署名付きURL
AWS SDK/CLIを使って期限付きでオブジェクトの取得またはアップロードが可能なURLを発⾏ する機能 13
データの保護 データの改竄や窃取を防ぐための⼿段と、削除を防⽌する2つの保護の観点が存在 します ① 暗号化 サーバサイドで保管しているオブジェクトを暗号化します(SSE; Server Side Encryption)
② 誤削除の防⽌ バージョニングの有効化 誤って削除しても旧バージョンから復旧できます(厳密には削除フラグを取り消せる) どうしても消されて困る場合は、S3 Object Lock(WORM機能)を使います 14
オブジェクトのライフサイクル管理 • 不要になったオブジェクトやアクセスされていないオブジェクトをずっとS3に 置いておくのはコスト的に無駄になるため、S3ではライフサイクル機能を提供 しています。 • オブジェクトのアップロードから⼀定期間経過後にS3スタンダードからスタ ンダード-IAへ移動してコストを削減(さらに⼀定期間経過後にオブジェクト そのものを削除する)といったことが可能です •
スタンダードからスタンダード-IAについてルールを決めきれない場合は、 Intelligent Tiering機能などをもちいて⾃動分析 & 移動といったことも可 能です 15
S3と他サービスの連携 S3のオブジェクトの⽣成や削除などの各種イベントをトリガーとして 他サービスと連携した処理を実⾏することができます* 16 Bucket オブジェクト ① オブジェクトのアップロード SNS Topic
SQS Queue Lambda function ② イベントの通知 * かつてはS3バケットのイベントの取りこぼしなどが特定条件下では発⽣していますが 現在では改善されイベントの取りこぼしは発⽣しないようになっています。 ただし、at least onceのため、複数回同じイベントの通知が発⽣する可能性があります。
データの投⼊・取得時の注意点 • ⼤容量ファイルの取扱 • 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
[補⾜] 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形式)