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
毎晩の 負荷試験自動実行による効果
recruitengineers
PRO
5
200
Transformerを用いたアイテム間の 相互影響を考慮したレコメンドリスト生成
recruitengineers
PRO
2
570
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
170
問題解決に役立つ数理工学
recruitengineers
PRO
13
2.8k
Curiosity & Persistence
recruitengineers
PRO
2
200
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
440
成長実感と伸び悩みからふりかえる キャリアグラフ
recruitengineers
PRO
1
210
リクルートの オンプレ環境の未来を語る
recruitengineers
PRO
3
390
LLMのプロダクト装着と独自モデル開発
recruitengineers
PRO
1
390
Other Decks in Technology
See All in Technology
20250719_JAWS_kobe
takuyay0ne
1
130
M365アカウント侵害時の初動対応
lhazy
0
310
How to Quickly Call American Airlines®️ U.S. Customer Care : Full Guide
flyaahelpguide
0
240
AIコードアシスタントとiOS開発
jollyjoester
1
200
RapidPen: AIエージェントによる高度なペネトレーションテスト自動化の研究開発
laysakura
1
320
安定した基盤システムのためのライブラリ選定
kakehashi
PRO
3
150
Deep Security Conference 2025:生成AI時代のセキュリティ監視 /dsc2025-genai-secmon
mizutani
5
3.4k
Figma Dev Mode MCP Serverを用いたUI開発
zoothezoo
1
270
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
200
Microsoft Defender XDRで疲弊しないためのインシデント対応
sophiakunii
2
360
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
6.9k
AWS 怖い話 WAF編 @fillz_noh #AWSStartup #AWSStartup_Kansai
fillznoh
0
140
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Optimizing for Happiness
mojombo
379
70k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
BBQ
matthewcrist
89
9.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Code Review Best Practice
trishagee
69
19k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
750
Typedesign – Prime Four
hannesfritz
42
2.7k
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形式)