Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Webアプリを動かすまでのインフラ構築 / infra-build-for-web-app
Search
Tomoyuki KOYAMA
July 17, 2021
Technology
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Webアプリを動かすまでのインフラ構築 / infra-build-for-web-app
23卒エンジニア志望学生LT会 vol.2 July 17, 2021 @オンライン
Tomoyuki KOYAMA
July 17, 2021
More Decks by Tomoyuki KOYAMA
See All by Tomoyuki KOYAMA
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
5.4k
イベントとリソース定義から作成した依存グラフを用いた連鎖障害の調査時間の短縮 / DPS-206
tomoyk
0
49
Query Prediction for Log Search for Distributed Tracing with External Monitoring Alerts
tomoyk
0
59
Root Cause Analysis for Middleware Issues by Kubernetes Resource Events / KST-2026
tomoyk
0
120
Reading HTTP Client Hints
tomoyk
0
160
Log message with JSON item count for root cause analysis in microservices
tomoyk
1
280
Distributed Log Search Based on Time Series Access and Service Relations
tomoyk
0
410
コンピュータが大好きな私が大学院進学した理由 / Why I chose graduate school
tomoyk
1
1.1k
検索性能に配慮した複製による分散ログ管理 / DPS-185
tomoyk
0
50
Other Decks in Technology
See All in Technology
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
210
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
220
AI に書かせたその API、 “信頼” できますか?
nagix
0
110
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
110
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
820
データ_AIの事業の勝敗をわけるもの
nek0128
0
370
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
190
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
4
1.7k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
29
24k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
16k
Spring BootからQuarkusへの移行
tatsuya1bm
2
120
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Building an army of robots
kneath
307
46k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
540
Tell your own story through comics
letsgokoyo
1
1.1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
The Limits of Empathy - UXLibs8
cassininazir
1
670
Technical Leadership for Architectural Decision Making
baasie
3
570
Six Lessons from altMBA
skipperchong
29
4.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How GitHub (no longer) Works
holman
316
150k
Transcript
Webアプリを動かすまでの インフラ構築 Tomoyuki KOYAMA 23卒エンジニア志望学⽣LT会 vol.2 July 17, 2021 @オンライン
⾃⼰紹介 • 名前︓こやま ともゆき • 所属︓東京⼯科⼤ M1 • 初プログラミング︓中2のときにVBA •
好きな技術︓コンテナ,CI/CD,監視 • 好きなお酒︓エールビール tomoyk tomoyk [Slack] #times-koyama_5000000000000000
はじめに ◆本⽇のゴール デプロイしたWebアプリが動作するために必要な インフラ技術を理解する. ◆対象とする⽅ Webアプリの開発者 (デプロイしたWebアプリが動作する裏側を知りたい) Web App (Flask/Rails)
インター ネット いい感じ な何か ユーザ
アジェンダ Webアプリを動かすための 環境構築 リクエストがAppに 到達するまで
Webアプリを動かすための 環境構築 ⼟台づくり
Webアプリの動作に必要なもの ◆Webアプリの実⾏環境を構成する要素 Application 実⾏対象のソースコード(main.py) Binary/Library (Middleware) Python, OpenSSL, Nginx, MySQL
OS Linux (Ubuntu, Alpine Linux) Hardware CPU, メモリ, ストレージ, ネットワーク OS Bin/Lib App Hardware ®Ubuntu is a registered trademark of Canonical Ltd. ⾼レイヤ 低レイヤ
Webアプリの動作に必要なもの ◆クラウド上にある実⾏環境での管理対象 • 責任共有モデル︓クラウド利⽤者とクラウド提供者で責任を共有 • 管理対象が増えるほど,考えるべきことが増える. • アップデート,セキュリティ対応,品質保証 OS Bin/Lib
App OS Bin/Lib App IaaS 例: AWS EC2 OS Bin/Lib App PaaS / FaaS 例: Heroku CaaS 例: Google Cloud Run OS Bin/Lib Container Hardware Hardware Hardware I: Infrastructure P: Platform F: Function C: Container クラウド 利⽤者 クラウド 提供者
Webアプリの動作に必要なもの • IaaSを例にWebアプリの動作に関わるインフラ構築を紹介 • Flask製Webアプリ(⾔語: Python) を例に紹介 • パブリッククラウドを対象にするため,Hardwareは割愛 •
※ Hardwareの知識は,チューニングには必要不可⽋ OS Bin/Lib App Hardware ®Ubuntu is a registered trademark of Canonical Ltd.
OSレイヤー ◆OSの選定とインストール • OSの例)Ubuntu, CentOS, Amazon Linux, Alpine Linux •
クラウドの場合,⼀般的にOSテンプレートから選択 • AWSの場合,AMI(Amazon Machine Images)を選択 ◆OSの初期設定 ホスト名,ユーザ管理,ファイアウォール (監視,ロギング,バックアップ) Hardware OS ®Ubuntu is a registered trademark of Canonical Ltd.
Bin/Libレイヤー ◆Binary/Libraryのインストール パッケージマネージャで導⼊する. ソースコードからビルドして導⼊する. OS Hardware Bin/Lib $ sudo apt
install python3.9 The following additional packages will be installed: ca-certificates file libexpat1 libmagic-mgc libmagic1 libpython3.9-minimal libpython3.9-stdlib libreadline8 libsqlite3-0 libssl1.1 mime-support openssl python3.9-minimal readline-common tzdata xz-utils Suggested packages: python3.9-venv python3.9-doc binutils binfmt-support readline-doc The following NEW packages will be installed: ca-certificates file libexpat1 libmagic-mgc libmagic1 libpython3.9-minimal libpython3.9-stdlib libreadline8 libsqlite3-0 libssl1.1 mime-support openssl python3.9 python3.9-minimal readline-common tzdata xz-utils $ wget http://nginx.org/download/nginx- 1.21.1.tar.gz $ tar xvf nginx-1.21.1.tar.gz $ cd nginx-1.21.1 $ ./configure && make && make install
Appレイヤー ◆Applicationライブラリ パッケージをインストール ◆Applicationのデプロイ ソースコードの配置(Ansible, Capistrano) ◆Applicationの起動(永続化) OS Bin/Lib App
Hardware $ pip install –r requirements.txt $ rsync /path/to/src remote:/dest $ /path/to/python /opt/src/main.py
リクエストがAppに 到達するまで リクエストが処理される順序
3層 2層 1層 PaaS / FaaS PaaS / FaaS Managed
Database PaaS / FaaS リクエストがAppに到達するまで ◆アーキテクチャの例 Managed Load Balancer Load Balancer uWSGI + Flask MySQL エンド ユーザ Bin/Lib (Middleware) App Bin/Lib (Middleware) 仮想マシン Nginx uWSGI + Flask MySQL エンド ユーザ Bin/Lib (Middleware) App Bin/Lib (Middleware) Managed Service 単⼀の仮想マシン 3層アーキテクチャ
1層 1層 − Webサーバ • エンドユーザからのリクエストを受け取る. • OSSの例)Apache HTTP Server,
Nginx, Caddy • Managed Serviceの例)AWS ALB, Azure Load Balancer • 主な役割︓HTTPSの終端,ロードバランサ,キャッシュ Webサーバ エンド ユーザ Bin/Lib (Middleware) HTTPS
2層 2層 − Appサーバ • Webサーバ(Nginx)からのリクエストに応じた処理を⾏う. • 「Webサーバ→Appサーバ」でのインターフェースは, WebサーバとAppサーバの組み合わせにより変化 •
⾔語やライブラリによりアーキテクチャは変わる. • ⾮同期処理が得意な⾔語/ライブラリか︖ → cf. C10K問題 Nginx uWSGI – Appサーバ Bin/Lib (Middleware) HTTP(S) Unix domain socket 通信⽅式 process process process thread thread WSGI(Python) Rack(Ruby) PSGI(Perl) Flask Flask
Note: ゲートウェイ・インターフェース ◆英語版WikipediaのSCGI 出典 https://en.wikipedia.org/wiki/Simple_Common_Gateway_Interface 2021-07-17アクセス
3層 − データベース • Appサーバからのクエリ(SQL)を受け取る. • クエリに対応したレコードを返答する. • OSSの例)MySQL, MongoDB,
PostgreSQL • 商⽤DBの例)Oracle Database, AWS DynamoDB, Google Cloud Spanner 3層 MySQL Bin/Lib (Middleware) uWSGI + Flask TCP Unix domain socket 通信⽅式
3層 2層 1層 まとめ Webアプリの構成要素 3層アーキテクチャ OS Bin/Lib App Hardware
⾼レイヤ 低レイヤ Nginx uWSGI + Flask MySQL エンド ユーザ Bin/Lib (Middleware) App Bin/Lib (Middleware) ®Ubuntu is a registered trademark of Canonical Ltd.