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
Browser
recruitengineers
PRO
9
2.6k
JavaScript 研修
recruitengineers
PRO
8
1.6k
TypeScript入門
recruitengineers
PRO
36
12k
モダンフロントエンド 開発研修
recruitengineers
PRO
11
6.6k
Webアクセシビリティ入門
recruitengineers
PRO
4
1.7k
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
4
2k
モバイルアプリ研修
recruitengineers
PRO
6
1.8k
事業価値と Engineering
recruitengineers
PRO
8
5.9k
制約理論(ToC)入門
recruitengineers
PRO
10
4.1k
Other Decks in Technology
See All in Technology
研究開発と製品開発、両利きのロボティクス
youtalk
1
490
生成AI時代のデータ基盤
shibuiwilliam
6
3.8k
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
4
1.2k
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
160
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
7
3.3k
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
180
Nstockの一人目エンジニアが 3年間かけて向き合ってきた セキュリティのこととこれから〜あれから半年〜
yo41sawada
0
210
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
2
430
Codeful Serverless / 一人運用でもやり抜く力
_kensh
6
340
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
140
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
400
フィンテック養成勉強会#56
finengine
0
130
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Into the Great Unknown - MozCon
thekraken
40
2k
It's Worth the Effort
3n
187
28k
Rails Girls Zürich Keynote
gr2m
95
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
How to Think Like a Performance Engineer
csswizardry
26
1.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
How STYLIGHT went responsive
nonsquared
100
5.8k
Visualization
eitanlees
148
16k
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形式)