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

AWS Lambdaは俺が作った

AWS Lambdaは俺が作った

「DevelopersIO 2023 〜GETだけじゃもったいない、POSTしてPUTする2日間〜」で利用した発表資料です

TomoyaIwata

July 19, 2023
Tweet

More Decks by TomoyaIwata

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 3 • CX事業本部 サーバーサイドチーム • ⼤阪オフィス所属 • 2023 Japan

    AWS Top Engineer • 好きなAWSサービスはAWS Lambda • Firecrackerコントリビューター 岩⽥ 智哉
  2. Firecrackerの概要 8 • AWSが開発した OSSのVMM(Virtual Machine Monitor) • Rust製 •

    Linux KVM(kernel-based virtual machine)を利⽤ • MicroVMを⾼速(125ms)に起動可能 • 仮想化によるメモリのオーバーヘッドは5M以下
  3. 昔のLambda 12 ホストOS ゲストOS (AWSアカウントA) ゲストOS (AWSアカウントB) Lambda Function (AWSアカウントA)

    Lambda Function (AWSアカウントB) コンテナ コンテナ コンテナ コンテナ コンテナ
  4. セキュリティのトレードオフ 15 • AWSにとってセキュリティは最優先事項 • コンテナによる環境分離だけでは不⼗分 • CVE-2019-14271 docker cp

    コマンドの脆弱性によりホストOSのroot権限が利⽤可能 • CVE-2019-5736 runcの脆弱性によりホストOSのroot権限が利⽤可能 • ゲストOSレベルで環境を分離することでより強 ⼒な環境分離を実現
  5. Firecrackerを活⽤した多層防御の実現 19 ホストOS Firecracker ゲストOS Lambda Function KVM Jailer Sandbox

    Inner Sandbox MicroVM VMMによる環境分離 コンテナ型仮想化による環境分離
  6. パブリッククラウドを使う 47 • AWSならi3.metal等が利⽤可能 • ベアメタルインスタンスなので⾼い… • a1.metalはサポート対象外(とはいえ多分動く) • Google

    CloudのCompute Engineを使う • Nested Virtualizationが使える︕︕ • Intel Haswell以降のプロセッサが必要なので注意
  7. 開発環境のLinux OSが準備できたら 49 • ソースコードをクローン • git clone https://github.com/firecracker-microvm/firecracker.git •

    Docker環境の準備 • 開発⽤のコンテナをpull • docker pull public.ecr.aws/firecracker/fcuvm • ./tools/devtool shell 等
  8. オススメツール 51 • VS CodeのExtension Remote Developmentがオススメ • Remote –

    SSHで開発環境に接続 • Dev Containersで開発⽤のコンテナといい感じに連携
  9. ./tools/devtoolで便利コマンドを実⾏ 59 ./tools/devtool --help Firecracker devtool Usage: devtool [<args>] <command>

    [<command args>] Global arguments -y, --unattended Run unattended. Assume the user would always answer "yes" to any confirmation prompt. Available commands: build [--debug|--release] [-l|--libc musl|gnu] [-- [<cargo args>]] Build the Firecracker binaries. Firecracker is built using the Rust build system (cargo). All arguments after -- will be passed through to cargo. --debug Build the debug binaries. This is the default. --release Build the release binaries. -l, --libc musl|gnu Choose the libc flavor against which Firecracker will be linked. Default is musl. --ssh-keys Provide the paths to the public and private SSH keys on the host (in this particular order) required for the git authentication. It is mandatory that both keys are specified. …略
  10. ユニットテストもpytest経由で実⾏ 60 • pytest ./tests/integration_tests/build/test_unittests.py • ./tools/devtool test -- integration_tests/build/test_unittests.py

    ユニットテストの実⾏はcargo testではない pytest経由で呼び出すことでcargo testの諸々のオプションが 適切に設定される
  11. コミット時の注意事項 61 git commitするときは -s オプションを We require that every

    contribution to Firecracker is signed with a Developer Certificate of Origin. DCO checks are enabled via https://github.com/apps/dco, and your PR will fail CI without it. https://github.com/firecracker-microvm/firecracker/blob/main/CONTRIBUTING.md