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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tomoyuki KOYAMA
July 17, 2021
Technology
0
460
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
イベントとリソース定義から作成した依存グラフを用いた連鎖障害の調査時間の短縮 / DPS-206
tomoyk
0
4
Query Prediction for Log Search for Distributed Tracing with External Monitoring Alerts
tomoyk
0
18
Root Cause Analysis for Middleware Issues by Kubernetes Resource Events / KST-2026
tomoyk
0
34
Reading HTTP Client Hints
tomoyk
0
130
Log message with JSON item count for root cause analysis in microservices
tomoyk
1
250
Distributed Log Search Based on Time Series Access and Service Relations
tomoyk
0
380
コンピュータが大好きな私が大学院進学した理由 / Why I chose graduate school
tomoyk
1
1.1k
検索性能に配慮した複製による分散ログ管理 / DPS-185
tomoyk
0
12
この先生きのこるための学び方 / how-to-learn-tech
tomoyk
1
430
Other Decks in Technology
See All in Technology
Phase07_実務適用
overflowinc
0
1.7k
Phase09_自動化_仕組み化
overflowinc
0
1.6k
データマネジメント戦略Night - 4社のリアルを語る会
ktatsuya
1
210
モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction
nazonohito51
3
1.7k
Phase03_ドキュメント管理
overflowinc
0
2.3k
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
320
【PHPerKaigi2026】OpenTelemetry SDKを使ってPHPでAPMを自作する
fendo181
1
170
Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!
knj
1
240
脳が溶けた話 / Melted Brain
keisuke69
1
910
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
120
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
Escape from Excel方眼紙 ~マークダウンで繋ぐ、人とAIの架け橋~ /nikkei-tech-talk44
nikkei_engineer_recruiting
0
200
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
160
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
410
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Color Theory Basics | Prateek | Gurzu
gurzu
0
260
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
180
Testing 201, or: Great Expectations
jmmastey
46
8.1k
The Curse of the Amulet
leimatthew05
1
10k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Crafting Experiences
bethany
1
93
Writing Fast Ruby
sferik
630
63k
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.