Fine-grained hot reloading configuration for functions and layers to replace global `mountCode` option
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript
- Área
- tooling
Línea de trabajo
Comienza revisando el PR #222 relacionado y la configuración custom.localstack.lambda.mountCode existente; después compara las propiedades hotReload propuestas a nivel de función y de layer con la configuración de Serverless enlazada y la documentación sobre la extensión del esquema. Se considera completado cuando se admiten las cuatro historias de usuario indicadas, se define el comportamiento de los layers y se documenta el reemplazo de la opción global obsoleta.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
The current hot reloading configuration mountCode has many limitations (e.g., global config, no layer support). An improved configuration API and documentation could make hot reloading more powerful and easier to use with the Serverless Framework.
Related Issues/PRs
- https://github.com/localstack/serverless-localstack/pull/222
- https://github.com/localstack/serverless-localstack/issues/129
- https://github.com/localstack/serverless-localstack/issues/216
Challenges
mountCode: trueis a global option but currently does not support hot-reloading of layers (new feature in LocalStack 2.0).- Hot reloading (currently) only works with at most one layer per function. Hence, if we intend to apply mountCode to layers as well, it fails if there is any function with more than one layer in the serverless.yml
mountCodeis bad terminology because the current implementation does not do any mounting anymore but rather copies ZIP files (https://docs.localstack.cloud/user-guide/tools/lambda-tools/hot-reloading/).hotReloadwould be a better name- We need to consider the scope of hot reloading because not everyone wants to enable hot reloading globally. Selectively enabling hot reloading for single functions or layers under development would be helpful.
mountCode: trueuses the current directory (assumed to be project directory) as default hot reload path or accepts relative paths (e.g., ./functions). This might lead to many unnecessary and slow reloads.
Background
- Serverless documentation on how to provide custom plugin configuration options: https://www.serverless.com/framework/docs/guides/plugins/custom-configuration
- It is possible to add custom function-level properties using "Function properties via defineFunctionProperties" via defineFunctionProperties
- There is no well-defined mechanism to add layer-level properties. It might be possible to do manually using
addPropertiesToSchemato add something likedefineLayerProperties?! Might need to relax provider schema by allowing additional properties like for functions.patternProperties here https://github.com/serverless/serverless/blob/ed15cb27aee68954c93d875da96274914943ad71/lib/classes/config-schema-handler/index.js#L335 - There is some API to extend configuration: https://www.serverless.com/framework/docs/guides/plugins/extending-configuration
- There is no well-defined mechanism to add layer-level properties. It might be possible to do manually using
- Serverless v3 comes with breaking changes regarding plugin variable resolving (e.g., comes with stricter validation): https://www.serverless.com/framework/docs/guides/upgrading-v3#new-variable-resolver-engine
User Stories
Enable hot reloading for:
- Single function code
- Single function code + single layer
- Single layer
- Two functions sharing the same hot-reloaded layer
These cases are supported by LocalStack but not by the serverless-localstack plugin.
Possible API
service: myService
plugins:
- serverless-localstack
custom:
localstack:
# DEPRECATED global config
# lambda:
# mountCode: true
stages:
- local
host: http://127.0.0.1
provider:
name: aws
region: us-east-1
runtime: python3.9
# OPTIONAL provider-scoped config here (would need to think about function vs. layers scope)
# https://www.serverless.com/framework/docs/providers/aws/guide/layers
layers:
layerOne:
path: layerOne
hotReload: true
# https://www.serverless.com/framework/docs/providers/aws/guide/functions
functions:
hello:
handler: handler.handler
hotReload: true
layers:
- !Ref LayerOneLambdaLayer
Considerations
- Hot reloading for layers is configured per layer (rather than per layer usage) and applies to all functions using the layer
- LocalStack (currently) support at most one layer in total when using hot reloading for a layer. This makes it difficult to apply hot reloading globally for layers.
- Should we consider supporting ZIP files for hot reloading such that we can re-use build steps from tools such as Serverless, Gradle, etc rather than adding extra steps to unzip these archives (Java Gradle example).
Alternatives to create layers with Serverless
Based on https://www.tutorialspoint.com/serverless/serverless_layer_creation.htm
- Creating python-requirements layer
- Using an existing layer from another function in the same region
- Non-requirements/ generic layers (example: https://www.serverless.com/blog/publish-aws-lambda-layers-serverless-framework)
- Lenguaje dominante
- JavaScript
- Estrellas
- 542
- Forks
- 92
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de localstack/serverless-localstack
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 25/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
-
Support for Python 3.13 Lambdas Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Serverless deploy to LocalStack fails: “Invalid character in header content [authorization]” Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
-
Static API Gateway V1 Endpoints Abiertoaws:apigateway status: backlog
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
localstack/serverless-localstack#270 · 3 reacciones ·
Todos los issues de localstack/serverless-localstack
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Theme loads third-party resources on every page (jsdelivr web font, cdnjs Font Awesome) – GDPR Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
docToolchain/docToolchain#1705 ·
-
Timezone select lists one option per character; duplicate "Failed" reason; shared tracker popover id Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
nightscout/nocturne#1414 ·
-
bug v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
modelcontextprotocol/inspector#2458 · 1 comentario ·
-
Mend: dependency security vulnerability status: needs triage 🕵️♀️
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
carbon-design-system/ibm-products#9907 ·