lambda_microvm_hook_server/
lib.rs1#![doc = include_str!("../README.md")]
2
3mod error;
4mod hook_server;
5mod request;
6mod spawn_command;
7mod state;
8
9pub use error::MicroVmError;
10pub use hook_server::{BASE_PATH, HookServer};
11pub use request::{RunHookPayload, RunHookRequest};
12
13use clap::Parser;
14use std::net::SocketAddr;
15use tokio::net::TcpListener;
16use tracing::info;
17use tracing_subscriber::EnvFilter;
18use tracing_subscriber::util::SubscriberInitExt;
19
20#[derive(Clone, Debug, Parser)]
21#[command(name = "lambda-microvm-hook-server", about = "Supervise commands in an AWS Lambda MicroVM")]
22pub struct MicroVmArgs {
23 #[arg(long, env = "HOOK_SERVER_PORT", default_value = "0.0.0.0:9000")]
24 pub port: SocketAddr,
25
26 #[arg(long, env = "RUST_LOG", default_value = "info")]
27 pub log_filter: String,
28}
29
30pub async fn run_microvm(args: MicroVmArgs) -> Result<(), MicroVmError> {
31 let filter = EnvFilter::try_new(&args.log_filter).map_err(MicroVmError::InvalidLogFilter)?;
32 let _ = tracing_subscriber::fmt().with_ansi(false).with_env_filter(filter).finish().try_init();
33 let listener = TcpListener::bind(args.port).await.map_err(MicroVmError::Bind)?;
34 info!(address = %listener.local_addr().map_err(MicroVmError::Bind)?, "Lambda MicroVM hook server listening");
35 HookServer::new().serve(listener).await
36}