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
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
2
440
AI-DLCを現場にインストールしてみた:プロトタイプ開発で分かったこと・やめたこと
recruitengineers
PRO
2
710
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
4
1.1k
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
4
430
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
5
330
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
5
2k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
520
Browser
recruitengineers
PRO
13
4.4k
JavaScript 研修
recruitengineers
PRO
9
2.4k
Other Decks in Technology
See All in Technology
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
400
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
270
Tebiki Engineering Team Deck
tebiki
0
24k
OpenShiftでllm-dを動かそう!
jpishikawa
0
140
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
210
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
390
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
170
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
420
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
220
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.3k
Designing for Performance
lara
610
70k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
sira's awesome portfolio website redesign presentation
elsirapls
0
150
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
54
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
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形式)