lambda-microvm-hook-server 0.1.0

Hook server for supervising commands in AWS Lambda MicroVMs
Documentation
#![doc = include_str!("../README.md")]

mod error;
mod hook_server;
mod request;
mod spawn_command;
mod state;

pub use error::MicroVmError;
pub use hook_server::{BASE_PATH, HookServer};
pub use request::{RunHookPayload, RunHookRequest};

use clap::Parser;
use std::net::SocketAddr;
use tokio::net::TcpListener;
use tracing::info;
use tracing_subscriber::EnvFilter;
use tracing_subscriber::util::SubscriberInitExt;

#[derive(Clone, Debug, Parser)]
#[command(name = "lambda-microvm-hook-server", about = "Supervise commands in an AWS Lambda MicroVM")]
pub struct MicroVmArgs {
    #[arg(long, env = "HOOK_SERVER_PORT", default_value = "0.0.0.0:9000")]
    pub port: SocketAddr,

    #[arg(long, env = "RUST_LOG", default_value = "info")]
    pub log_filter: String,
}

pub async fn run_microvm(args: MicroVmArgs) -> Result<(), MicroVmError> {
    let filter = EnvFilter::try_new(&args.log_filter).map_err(MicroVmError::InvalidLogFilter)?;
    let _ = tracing_subscriber::fmt().with_ansi(false).with_env_filter(filter).finish().try_init();
    let listener = TcpListener::bind(args.port).await.map_err(MicroVmError::Bind)?;
    info!(address = %listener.local_addr().map_err(MicroVmError::Bind)?, "Lambda MicroVM hook server listening");
    HookServer::new().serve(listener).await
}