lambda-optimization-advisor
Optimizar funciones de AWS Lambda
Las funciones de AWS Lambda a menudo sufren de arranques en frío lentos y altos costos debido a patrones ineficientes. El Asesor de Optimización de Lambda analiza el código de Lambda y sugiere mejoras específicas para el rendimiento, la configuración de memoria y la reducción de costos.
下载技能 ZIP
在 Claude 中上传
前往 设置 → 功能 → 技能 → 上传技能
开启并开始使用
测试它
正在使用“lambda-optimization-advisor”。 Review this Lambda handler: async fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> { let user = fetch_user(&event.payload.user_id).await?; let posts = fetch_posts(&event.payload.user_id).await?; let comments = fetch_comments(&event.payload.user_id).await?; Ok(Response { user, posts, comments }) }
预期结果:
- **Problema de rendimiento encontrado: Operaciones asíncronas secuenciales**
- Este manejador hace tres llamadas a API secuenciales que toman más de 3 segundos en total. Cada `.await?` bloquea hasta que la llamada anterior se completa.
- **Optimización**: Usar `tokio::try_join!` para ejecutar todas las solicitudes concurrentemente:
- ```rust
- async fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {
- let (user, posts, comments) = tokio::try_join!(
- fetch_user(&event.payload.user_id),
- fetch_posts(&event.payload.user_id),
- fetch_comments(&event.payload.user_id),
- )?;
- Ok(Response { user, posts, comments })
- }
- ```
- **Mejora esperada**: Tiempo de ejecución reducido de más de 3 segundos a aproximadamente 500 ms (6 veces más rápido)
正在使用“lambda-optimization-advisor”。 Check this Lambda handler for optimization opportunities: async fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> { let client = reqwest::Client::new(); let data = client.get("https://api.example.com").await?; Ok(Response { data }) }
预期结果:
- **Problema de arranque en frío encontrado: Inicialización de cliente en el manejador**
- Crear un nuevo cliente HTTP en cada invocación agrega latencia y sobrecarga de memoria. Cada inicio del contenedor Lambda debe inicializar un nuevo cliente.
- **Optimización**: Usar `OnceLock` para inicializar el cliente una vez por contenedor:
- ```rust
- use std::sync::OnceLock;
- static HTTP_CLIENT: OnceLock<reqwest::Client> = OnceLock::new();
- async fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {
- let client = HTTP_CLIENT.get_or_init(|| {
- reqwest::Client::builder()
- .timeout(Duration::from_secs(10))
- .build()
- .unwrap()
- });
- let data = client.get("https://api.example.com").await?;
- Ok(Response { data })
- }
- ```
- **Mejora esperada**: Arranques en frío más rápidos y menor uso de memoria
安全审计
安全Static analysis flagged 25 potential issues in SKILL.md code examples, all of which are false positives. The flagged patterns (external_commands, network URLs, cryptographic references) are markdown documentation examples illustrating Lambda optimization patterns, not executable code. The skill only uses read-only tools (Read, Grep, Glob) for code analysis. No malicious intent or dangerous patterns present.
质量评分
你能构建什么
Configuración de nuevo proyecto Lambda
Revisar un nuevo manejador de Lambda durante el desarrollo para establecer patrones óptimos desde el principio, evitando costosas refactorizaciones posteriormente.
Resolución de problemas de rendimiento
Diagnosticar por qué una función Lambda existente tiene alta latencia o problemas de arranques en frío y recibir cambios específicos de código para mejorar el rendimiento.
Revisión de optimización de costos
Analizar funciones Lambda para identificar oportunidades para reducir costos de ejecución a través de mejor configuración de memoria y operaciones concurrentes.
试试这些提示
Revisar este código de manejador de AWS Lambda para optimizaciones de rendimiento y costos. Identificar cualquier operación asíncrona secuencial, problemas de inicialización de recursos o problemas de configuración.
Analizar esta función Lambda para encontrar causas de arranques en frío lentos. Buscar patrones que creen nuevos clientes o recursos en cada invocación y sugerir correcciones usando OnceLock o inicialización estática.
Revisar el archivo Cargo.toml de este proyecto Lambda. Verificar si el perfil de lanzamiento está optimizado para despliegue de Lambda con configuraciones como opt-level, lto, codegen-units y strip para binarios más pequeños.
Esta función Lambda está ejecutándose en x86_64. Evaluar si migrar a ARM64 (Graviton2) proporcionaría mejor relación precio-rendimiento y qué cambios de código o compilación serían necesarios.
最佳实践
- Usar tokio::try_join! o tokio::join! para operaciones de E/S concurrentes en lugar de declaraciones await secuenciales
- Inicializar clientes HTTP, grupos de conexiones de bases de datos y clientes de AWS SDK usando OnceLock o lazy_static para reutilización de contenedores
- Configurar el perfil de lanzamiento de Cargo.toml con opt-level = 'z', lto = true, codegen-units = 1 y strip = true
避免
- Crear nuevos clientes o recursos dentro de la función del manejador de Lambda (sucede en cada invocación)
- Hacer llamadas asíncronas secuenciales que podrían ejecutarse concurrentemente (desperdicia tiempo de ejecución)
- Usar el perfil de lanzamiento predeterminado de Cargo sin indicadores de optimización (binarios más grandes, arranques en frío más lentos)