Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Webアプリを動かすまでのインフラ構築 / infra-build-for-web-app

Webアプリを動かすまでのインフラ構築 / infra-build-for-web-app

23卒エンジニア志望学生LT会 vol.2 July 17, 2021 @オンライン

Tomoyuki KOYAMA

July 17, 2021
Tweet

More Decks by Tomoyuki KOYAMA

Other Decks in Technology

Transcript

  1. Webアプリを動かすまでの
    インフラ構築
    Tomoyuki KOYAMA
    23卒エンジニア志望学⽣LT会 vol.2
    July 17, 2021 @オンライン

    View Slide

  2. ⾃⼰紹介
    • 名前︓こやま ともゆき
    • 所属︓東京⼯科⼤ M1
    • 初プログラミング︓中2のときにVBA
    • 好きな技術︓コンテナ,CI/CD,監視
    • 好きなお酒︓エールビール
    tomoyk
    tomoyk
    [Slack] #times-koyama_5000000000000000

    View Slide

  3. はじめに
    ◆本⽇のゴール
    デプロイしたWebアプリが動作するために必要な
    インフラ技術を理解する.
    ◆対象とする⽅
    Webアプリの開発者
    (デプロイしたWebアプリが動作する裏側を知りたい)
    Web App
    (Flask/Rails)
    インター
    ネット
    いい感じ
    な何か
    ユーザ

    View Slide

  4. アジェンダ
    Webアプリを動かすための
    環境構築
    リクエストがAppに
    到達するまで

    View Slide

  5. Webアプリを動かすための
    環境構築
    ⼟台づくり

    View Slide

  6. 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.
    ⾼レイヤ
    低レイヤ

    View Slide

  7. 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
    クラウド
    利⽤者
    クラウド
    提供者

    View Slide

  8. Webアプリの動作に必要なもの
    • IaaSを例にWebアプリの動作に関わるインフラ構築を紹介
    • Flask製Webアプリ(⾔語: Python) を例に紹介
    • パブリッククラウドを対象にするため,Hardwareは割愛
    • ※ Hardwareの知識は,チューニングには必要不可⽋
    OS
    Bin/Lib
    App
    Hardware
    ®Ubuntu is a registered trademark of Canonical Ltd.

    View Slide

  9. 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.

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. リクエストがAppに
    到達するまで
    リクエストが処理される順序

    View Slide

  13. 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層アーキテクチャ

    View Slide

  14. 1層
    1層 − Webサーバ
    • エンドユーザからのリクエストを受け取る.
    • OSSの例)Apache HTTP Server, Nginx, Caddy
    • Managed Serviceの例)AWS ALB, Azure Load Balancer
    • 主な役割︓HTTPSの終端,ロードバランサ,キャッシュ
    Webサーバ
    エンド
    ユーザ
    Bin/Lib
    (Middleware)
    HTTPS

    View Slide

  15. 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

    View Slide

  16. Note: ゲートウェイ・インターフェース
    ◆英語版WikipediaのSCGI
    出典 https://en.wikipedia.org/wiki/Simple_Common_Gateway_Interface 2021-07-17アクセス

    View Slide

  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
    通信⽅式

    View Slide

  18. 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.

    View Slide