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
360
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
51
Log message with JSON item count for root cause analysis in microservices
tomoyk
0
140
Distributed Log Search Based on Time Series Access and Service Relations
tomoyk
0
270
コンピュータが大好きな私が大学院進学した理由 / Why I chose graduate school
tomoyk
2
810
この先生きのこるための学び方 / how-to-learn-tech
tomoyk
1
350
佐川急便のフィッシングサイトを調べてみた / Analysis of sagawa fishing site
tomoyk
1
150
既存のWebアプリをセキュアにするためにやったこと / Student-LT-WebSec
tomoyk
0
160
パケットを覗いてみよう / Packet workshop for beginners
tomoyk
0
290
XSSの入力値を調べてみた / searching xss insertion value
tomoyk
3
1.4k
Other Decks in Technology
See All in Technology
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
250
Bring Your Own Container: When Containers Turn the Key to EDR Bypass/byoc-avtokyo2024
tkmru
0
850
Git scrapingで始める継続的なデータ追跡 / Git Scraping
ohbarye
5
490
JAWS-UG20250116_iOSアプリエンジニアがAWSreInventに行ってきた(真面目編)
totokit4
0
140
アジャイルチームが変化し続けるための組織文化とマネジメント・アプローチ / Agile management that enables ever-changing teams
kakehashi
3
3.4k
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
0
340
20250116_自部署内でAmazon Nova体験会をやってみた話
riz3f7
1
100
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
1
100
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
140
2025年のARグラスの潮流
kotauchisunsun
0
790
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.5k
あなたの知らないクラフトビールの世界
miura55
0
120
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Agile that works and the tools we love
rasmusluckow
328
21k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Optimising Largest Contentful Paint
csswizardry
33
3k
4 Signs Your Business is Dying
shpigford
182
22k
Done Done
chrislema
182
16k
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.