es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de alternar de manera condicional entre la concurrencia no reservada y reservada en las plantillas sin servidor?

Estoy usando una plantilla sin servidor para crear una función lambda en AWS.

Si no especifico ningún valor para la propiedad “ReservedConcurrentExecutions”, entonces la función se crea con concurrencia no reservada.

Ahora, me gustaría usar concurrencia reservada (o no reservada) dependiendo de un parámetro de entrada.

Función con concurrencia reservada:

 "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
          "Handler": "MyFunctionHandler",
          "CodeUri": "myfunction.zip",
          "ReservedConcurrentExecutions" : 2               
       }
  }

Función con concurrencia no reservada: (simplemente no utilice la propiedad “ReservedConcurrentExecutions”)

 "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
          "Handler": "MyFunctionHandler",
          "CodeUri": "myfunction.zip"               
       }
  }

Sé que puedo declarar las 2 funciones por separado y tener una condición para crear una u otra.

Lo que me gustaría saber es si es posible tener solo una función y agregar condicionalmente la propiedad “ReservedConcurrentExecutions”.

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible agregar condicionalmente la propiedad ReservedConcurrentExecutions a una única función en AWS utilizando la plantilla sin servidor (serverless template). Puede utilizar una condición de CloudFormation y una función intrínseca como IF para agregar condicionalmente la propiedad en función del parámetro de entrada.

    Aquí hay un ejemplo:

    "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Handler": "MyFunctionHandler",
        "CodeUri": "myfunction.zip",
        "ReservedConcurrentExecutions": {
            "Fn::If": [
                "UseReservedConcurrency",
                2,
                { "Ref": "AWS::NoValue" }
            ]
        }
      },
      "Condition": "UseReservedConcurrency"
    }
    

    En este ejemplo, la propiedad ReservedConcurrentExecutions se agrega condicionalmente en función del valor del parámetro UseReservedConcurrency. La función IF verifica si el parámetro es verdadero y, de ser así, establece el valor en 2. De lo contrario, establece el valor en AWS::NoValue, lo que significa que la propiedad no está configurada.

    La función también tiene una propiedad Condition que hace referencia al mismo parámetro. Esto asegura que la función solo se cree si el parámetro es verdadero.

    Al utilizar este enfoque, puede crear una función única que pueda configurarse con concurrencia reservada o no reservada según el parámetro de entrada.

Comments are closed.