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

Wasmコンテナを動かしてみた

 Wasmコンテナを動かしてみた

WebAssembly(Wasm)技術は、近年さまざまな領域で注目を集めており、クラウドネイティブ分野ではCNCFにおいて2022年に注目したい5つの技術の1つとしても取り上げられたこともあります。

Wasmの多様な活用シーンの中でも、特にWasmコンテナではアプリケーションコード以外のLinux部分を意識する必要がなくなります。今回はこのWasmコンテナとしての利用に着目し、その使い方や特徴について、デモを交えながらご紹介いたします。
※スピーカーの勉強内容を基に発表いたします。

【本セッションのゴール】
WebAssembly(Wasm)がどのような技術なのか、概要を理解する
Wasmコンテナとはどのようなものか、概要や特徴を理解する
アプリケーションをWasmコンテナとして作成する方法について知る

Shunsuke Tanaka

September 20, 2024
Tweet

More Decks by Shunsuke Tanaka

Other Decks in Technology

Transcript

  1. SNS拡散 資料公開 動画撮影 写真撮影 Ask the Speaker #IBMTechXchange #Dojo #Wasm

    後日Connpassにて 公開させていただ きます 後日Connpassにて 公開させていただ きます • セッションにて ご質問ください • セッションにて ご案内するアン ケートにご記入 ください Copyright ©2024 NS Solutions Corporation, IBM Corporation.
  2. 当イベントは日本IBMおよび日鉄ソリューションズの有志エンジニアによって企画された勉強会です。 新しいテクノロジーやクラウドネイティブやマイクロサービスなどのテーマを中心に、今後も色々な勉強会・イベントを開催 する予定です。 本勉強会の内容は、エンジニア個人の見解であり、所属する企業の公式見解ではありません。 セッション中はマイクミュートでの参加にご協力お願いします。 本イベントは録画してアーカイブ公開する予定ですので、その点ご了承ください。 本発表で利用している製品の名称およびロゴは下記の個人、組織または企業の商標となります。 • IBM、は、 世界の多くの国で登録されたInternational

    Business Machines Corporationの商標です。他の製品名および サービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 • NS(ロゴ)、NSSOL、NS Solutionsは、日鉄ソリューションズ株式会社の登録商標です。 • W3Cは、World Wide Web Consortiumの商標です。 • Windows、Microsoft Azureは、マイクロソフト グループの企業の商標です。 • Kubernetesは、The Linux Foundationの登録商標です。 • macOSは、Apple Inc.の登録商標です。 • Linuxは、Linus Torvaldsの登録商標です。 • Dockerは、Docker Inc.の登録商標です。 • wasmCloudは、wasmCloud LLCの登録商標です。 • Wasmtimeは、Bytecode Allianceの登録商標です。 • WasmEdgeは、Second Stateという会社の登録商標です。 • Wasmerは、Wasmer, Inc.の登録商標です。 • その他本文記載の会社名及び製品名は、それぞれ各社の商標又は登録商標です。 はじめに Copyright ©2024 NS Solutions Corporation, IBM Corporation.
  3. 目的 • Wasm(WebAssembly)を知る・体験する ゴール • Wasmを理解する • Wasmコンテナとはどのようなものか、概念や特徴を理解する • アプリケーションをWasmコンテナとして作成する方法について知る

    対象 • Wasmに興味のある方 • Wasmコンテナを作ってみたい方 このセッションについて Copyright ©2024 NS Solutions Corporation, IBM Corporation. • 本日は主に座学と簡単なデモで雰囲気だけでも味わってもらえれば嬉しいです
  4. 田中 俊介(Shunsuke Tanaka) <所属> 日本IBM カスタマーサクセスマネージャー <経歴> 2013- 主にWebシステムの開発に携わる 2022-

    日本IBMに中途入社 Automation、特にObservability製品のカスタマーサクセスマネージャーとして、業種・業態問わずサポート <趣味> スポーツ(観るのもやるのも)、旅行 自己紹介
  5. 田村 大樹(Daiki Tamura) <所属> 日鉄ソリューションズ株式会社 システム研究開発センター <経歴> 2017-2019 Webシステムに対する負荷試験実行や性能分析 2020-2022

    常駐先でクラウド上での開発運用案件(主に基盤担当) 2023- クラウドネイティブ分野の研究開発 <趣味> オーケストラ(クラリネット) 自己紹介
  6. Wasmとは Copyright ©2024 NS Solutions Corporation, IBM Corporation. • WebAssemblyの略称

    • W3C(※1)によって仕様が標準化されている • Webブラウザでプログラムを高速に実行するための、 「Webブラウザ上で動くバイナリコードの新しいフォーマット」 • JavaScriptより高速 • 基本的には、Rust、C/C++、Go、TypeScriptなどのコンパイル先となり、 これらの言語をウェブ上で実行することができる ※1 World Wide Web Consortium ------- ------- Rust, C/C++ Wasm HTML JS
  7. Wasmの特徴 Copyright ©2024 NS Solutions Corporation, IBM Corporation. 1.Portable/Platform independent

    -Wasmランタイムが実行できる環境であれば、 すべてのWasmコードの実行が可能 ブラウザ、サーバ、IoTデバイスなど同じコードで実行可能 2.Language Free -様々な言語でコンパイルすることが可能 Rust、C/C++、Go、TypeScript、Python、Ruby…etc. 3.Sandbox/Secure -Wasmはサンドボックス環境で実行される -不正なメモリアクセスや、リソースへのアクセスなどを厳密に制御 ※サンドボックス外へのアクセスはあらかじめ用意されているAPIを呼び出す
  8. Wasmをブラウザ外で Copyright ©2024 NS Solutions Corporation, IBM Corporation. • WASI

    (WebAssembly System Interface)とは… Wasmをブラウザ外で実行するためのインターフェイスを標準化 様々なAPIが定義されていて、システムリソースへのアクセスが可能 Wasmの特徴である、Portable、Sandbox/Secureを引き継いでいる
  9. Filesystem Database Network Wasmをブラウザ外で Copyright ©2024 NS Solutions Corporation, IBM

    Corporation. • 元々はブラウザ処理の高速化のために生まれた技術だったが… WASIが開発されたことで、WebブラウザだけでなくWindowsやLinuxと いったOSの上にWasmランタイムを配置し実行が可能となった Wasm Wasm Runtime WASI Linux Mac Windows
  10. Wasmとコンテナ Copyright ©2024 NS Solutions Corporation, IBM Corporation. • なぜコンテナとしての利用も期待されているのか…

    • 従来のコンテナではOSやインストールされているパッケージの脆弱性も 管理対象となり、コンテナの脆弱性もトレンドの一つとなっている • 一方、Wasmはアプリケーション部分のみをフォーカスすれば良いので、 よりセキュアで軽量な運用が実現できる • また、OSなどに依存せず実行できるPortabilityも兼ね備えていることから、 コンテナとしてのWasmも注目されている • KubernetesやDockerとの統合も進んでおり今後も更なる発展が期待でき る
  11. Spin • Wasmをビルド・実行するためのフレームワーク • イベント駆動 • HTTP, Redis • コールドスタートの影響が小さい

    (ミリ秒単位) その他、Wasm ランタイムの例 • Wasmtime、 WasmEdge、 Wasmer 、WasmCloud、など 実行環境 (フレームワーク) Copyright ©2024 NS Solutions Corporation, IBM Corporation. Spin: https://developer.fermyon.com/spin/v2/
  12. Spinのインストール curl –fsSL https://developer.fermion.com/downloads/install.sh | bash sudo mv ./spin /usr/local/bin/spin

    対応言語 • Rust, TypeScript, Python, TinyGo • 各言語のテンプレートが用意されている $ spin templates install --git https://github.com/fermyon/spin --update Copying remote template source Installing template redis-go... Installing template http-go... +------------------------------------------------------------------------+ | Name Description | +========================================================================+ | ... other templates omitted ... | | http-go HTTP request handler using (Tiny)Go | | redis-go Redis message handler using (Tiny)Go | | ... other templates omitted ... | +------------------------------------------------------------------------+ 実行環境 (フレームワーク) – Spin 1/2 Copyright ©2024 NS Solutions Corporation, IBM Corporation.
  13. 以下のように複数のアプリを配置し、ビルドと実行ができる • アプリごとに言語が異なっても良い . ├── hello-go │ └── main.go ├──

    hello-rust │ ├── Cargo.toml │ └── src │ └── lib.rs └── spin.toml ビルド、実行 spin build spin up 実行環境 (フレームワーク) – Spin 2/2 Copyright ©2024 NS Solutions Corporation, IBM Corporation.
  14. ローカル • Docker • k3d (Kubernetes) • どちらも、高レベル-低レベルランタイム間(containerd-runc間)を繋ぐ 各コンテナのプロセスによって実現可能になってきている •

    containerd-wasm-shim • containerd-shim-spin クラウド • AKS (Microsoft Azure Kubernetes Service) • 大手クラウドベンダの中でWasmを先駆的にサポート 実行環境 (コンテナ) Copyright ©2024 NS Solutions Corporation, IBM Corporation.
  15. Dockerfileの作成 FROM --platform=${BUILDPLATFORM} rust:1.79 AS build WORKDIR /opt/build COPY .

    . RUN cd hello-rust && rustup target add wasm32-wasi && cargo build --target wasm32-wasi --release FROM --platform=linux/amd64 golang:1.21.3-bullseye AS build-go WORKDIR /opt/build COPY . . RUN curl -LO https://github.com/tinygo-org/tinygo/releases/download/v0.30.0/tinygo_0.30.0_amd64.deb && dpkg -i ti RUN cd hello-go && tinygo build -target=wasi -gc=leaking -no-debug -o main.wasm main.go RUN cd healthz && tinygo build -target=wasi -gc=leaking -no-debug -o main.wasm main.go FROM scratch COPY --from=build /opt/build/hello-rust/target/wasm32-wasi/release/hello_rust.wasm ./hello-rust/target/wasm32-was COPY --from=build /opt/build/spin.toml . COPY --from=build-go /opt/build/hello-go/main.wasm ./hello-go/main.wasm COPY --from=build-go /opt/build/healthz/main.wasm ./healthz/main.wasm • spin用のファイルやコマンドを含むため、spinでしか動かせず可搬性が低い • 余計なOSやライブラリ、コマンドが入らず、脆弱性管理の負荷が小さい • scratchイメージに、wasmバイナリとテキストファイルを入れているだけ Dockerでspinのビルド(補足) Copyright ©2024 NS Solutions Corporation, IBM Corporation. 大田0
  16. • イメージサイズ • 一般的なLinuxコンテナイメージと比べて非常に小さい $ docker images REPOSITORY TAG IMAGE

    ID CREATED SIZE hello-spin-spin-go latest 0ae54aefef10 6 seconds ago 101kB hello-spin-spin-rust latest 142fe8c0b8aa 15 seconds ago 104kB hello-spin-golang latest 897ad95e3982 23 seconds ago 6.6MB hello-spin-nodejs latest 60b266ebf819 50 seconds ago 427MB • 実行速度の比較結果 • 必ずしも速くなるとは限らない(※今回の実験結果) Wasmの特徴 Copyright ©2024 NS Solutions Corporation, IBM Corporation. Wasm(Rust) Wasm(Go) Nodejs Go 大田0
  17. 現状 • まだWasmコンテナの実行環境が整備されている途中段階であり、その結果、実行 フレームワークが乱立しているという印象 (ネットワーク通信などWasmで実行できなかった部分をフレームワークで補完) • フレームワークに依存した実装やイメージになる メリットとデメリット • メリット

    • セキュリティで考慮すべき点が少ない • イメージサイズが小さい • 従来のLinuxコンテナで必要なイメージサイズを小さくする工夫が不要 • コンテナとしての学習負荷が小さい • 従来のLinuxコンテナと同様にDockerやKubernetesで扱える • デメリット • 実行速度がやや遅い Wasmコンテナ総評 Copyright ©2024 NS Solutions Corporation, IBM Corporation. 大田0 大田1 大田2
  18. スライド 25 大田0 メリットといえるか微妙ですけど、 新しい技術ではあるものの、従来のLinuxコンテナと同様にDockerやKubernetesで扱えるので、コンテナの扱いの面では学習負荷は小さい、 というのも言えそうでしょうか(そのように開発等が進んでいるので、当たり前といえば当たり前) 田村 大樹, 2024-09-04T04:15:16.324 大田1

    今後もう少し深ぼってみたい点として、 ・今回はspinというフレームワークにしか触れられなかったけど、他にも見てみたい ・可観測性(プロファイリングとかOpenTelemetry使えるのかとか)の観点での調査 とか、挙げられるかしら 田村 大樹, 2024-09-04T04:17:29.438 大田2 関連して、従来のLinuxコンテナで必要になるような、イメージサイズを小さくするための工夫(aptのキャッシュを消して・・)とかを、意識しなくてもよくなる(認知負荷が減る) も言えそうでしょうか 田村 大樹, 2024-09-04T04:25:33.835
  19. ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独 自の見解を反映したものです。それらは情報提供の目的のみで提供されており、いかなる参加者に対しても 法律的またはその他の指導や助言を意図したものではなく、またIBM製品やサービスがお客様に適用ある特 定の法令に適合することを保証するものでもありません。本講演資料に含まれている情報については、完全 性と正確性を期するよう努めておりますが、「現状のまま」提供され、明示または黙示にかかわらず、商業 性、特定の目的への適合性、非侵害性を含め、いかなる保証も伴わないものとします。本講演資料またはそ の他の資料の使用によって、あるいはその他の関連によって、いかなる損害が生じた場合も、IBMは責任を 負わないものとします。 本講演資料で言及されるIBM製品、プログラム、またはサービスは、IBMがビジネスを行っているすべての 国・地域でご提供可能なわけではありません。本講演資料で言及される将来の展望(製品リリース日付や製

    品機能を含む)は、市場機会またはその他の要因に基づいてIBM独自の決定権をもっていつでも変更できる ものとし、将来の製品または機能が使用可能になること、もしくは特定の結果を確約することを意図するも のではありません。 本講演資料は、言及される IBM製品またはサービスに適用ある契約条件を変更するものでも、追加の表明ま たは保証を意図するものでもありません。 Copyright ©2024 NS Solutions Corporation, IBM Corporation.
  20. Q&A