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
Webアプリを動かすまでのインフラ構築 / infra-build-for-web-app
Search
Tomoyuki KOYAMA
July 17, 2021
Technology
0
390
Webアプリを動かすまでのインフラ構築 / infra-build-for-web-app
23卒エンジニア志望学生LT会 vol.2 July 17, 2021 @オンライン
Tomoyuki KOYAMA
July 17, 2021
Tweet
Share
More Decks by Tomoyuki KOYAMA
See All by Tomoyuki KOYAMA
Reading HTTP Client Hints
tomoyk
0
71
Log message with JSON item count for root cause analysis in microservices
tomoyk
0
180
Distributed Log Search Based on Time Series Access and Service Relations
tomoyk
0
300
コンピュータが大好きな私が大学院進学した理由 / Why I chose graduate school
tomoyk
2
850
この先生きのこるための学び方 / how-to-learn-tech
tomoyk
1
360
佐川急便のフィッシングサイトを調べてみた / Analysis of sagawa fishing site
tomoyk
1
160
既存のWebアプリをセキュアにするためにやったこと / Student-LT-WebSec
tomoyk
0
170
パケットを覗いてみよう / Packet workshop for beginners
tomoyk
0
310
XSSの入力値を調べてみた / searching xss insertion value
tomoyk
3
1.4k
Other Decks in Technology
See All in Technology
さくらの夕べ Debianナイト - さくらのVPS編
dictoss
0
180
Tokyo dbt Meetup #13 dbtと連携するBI製品&機能ざっくり紹介
sagara
0
430
【2025年度新卒技術研修】100分で学ぶ サイバーエージェントのデータベース 活用事例とMySQLパフォーマンス調査
cyberagentdevelopers
PRO
4
6.5k
От ручной разметки к LLM: как мы создавали облако тегов в Lamoda. Анастасия Ангелова, Data Scientist, Lamoda Tech
lamodatech
0
400
入社後SREチームのミッションや課題の整理をした話
morix1500
1
250
JPOUG Tech Talk #12 UNDO Tablespace Reintroduction
nori_shinoda
1
120
似たような課題が何度も蘇ってくるゾンビふりかえりを撲滅するため、ふりかえりのテーマをフォーカスしてもらった話 / focusing on the theme
naitosatoshi
0
390
クォータ監視、AWS Organizations環境でも楽勝です✌️
iwamot
PRO
1
240
Automatically generating types by running tests
sinsoku
1
450
【日本Zabbixユーザー会】LLDを理解するときの勘所 〜LLDのある世界を楽しもう!〜
yoshitake945
0
120
20250413_湘南kaggler会_音声認識で使うのってメルス・・・なんだっけ?
sugupoko
1
400
AWSLambdaMCPServerを使ってツールとMCPサーバを分離する
tkikuchi
1
2.5k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
660
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
We Have a Design System, Now What?
morganepeng
52
7.5k
How to Think Like a Performance Engineer
csswizardry
23
1.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
Music & Morning Musume
bryan
47
6.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
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.