dvalbuena1 / visa_rescheduler_aws

US VISA (ais.usvisa-info.com) appointment re-scheduler - Colombian adaptation - AWS Lambda
24 stars 10 forks source link

Parameter ScheduleExpression is not valid #2

Closed animista01 closed 1 year ago

animista01 commented 1 year ago

Hey, buen trabajo en esta implementación del visa rescheduler.

Queria saber si has visto este error? image

dvalbuena1 commented 1 year ago

Podria adjuntar el archivo serverless.yml y utils.py

Ya que parese ser un problema al en el serverless.yml con el tiempo del evento de EventBridge

Pregunta, ha realizado alguna modificacion adicional al programa?

animista01 commented 1 year ago
org: bryanvillafane
app: visa-rescheduler-lambda
service: visa-rescheduler-lambda

provider:
  name: aws
  logRetentionInDays: 5
  iam:
    role:
      statements:
        - Effect: Allow
          Action: "events:PutRule"
          Resource: "arn:aws:events:*:*:rule/visa-rescheduler-lambda*"

  stage: ${opt:stage, 'prod'}
  region: ${env:AWS_REGION, 'us-east-1'}
  ecr:
    images:
      img:
        path: ./
        platform: linux/amd64

functions:
  main:
    timeout: 60
    # If you experience any errors such as Chrome crashing or not being available you might need to increase the storage available to your Lambda Function.
    memorySize: 2048
    image:
      name: img
    events:
      - eventBridge:
          schedule: rate(${file(./json_var.json):retry_value, '10'} minutes)

Aca en utils.py, tambien hice modificaciones. Reduje el tiempo en todas las const.

from enum import Enum

class Time:
    RETRY_TIME = 60  # wait time between retries/checks for available dates: 1 minute
    EXCEPTION_TIME = 60 * 20  # wait time when an exception occurs: 20 minutes
    COOLDOWN_TIME = 60 * 20  # wait time when temporary banned (empty list): 20 minutes

class Result(Enum):
    SUCCESS = 1
    RETRY = 2
    COOLDOWN = 3
    EXCEPTION = 4

Si, hice un par de modificaciones en visa.py pero en la logica nada más.

dvalbuena1 commented 1 year ago

Al ejecutar la funcion as_lambda_function() en setup.py se crea temporalmente un archivo JSON para asignar la constante RETRY_TIME a ese archivo, y asi el serverless.yml pueda usarlo.

def as_lambda_function():
    data = {"retry_value": Time.RETRY_TIME // 60} # Verifique esta operacion
    ...

El error que le esta generando es relacionado a algun valor invalido en schedule: rate(X minutes) Por favor verifique que ese valor no sea ni decimal o igual a cero.

dvalbuena1 commented 1 year ago

Como recomendacion adicional, verifique que al ejecutarse cada minuto no genere algun baneo. Debido a que si se realizan esta operacion en periodos de tiempo muy corto puede ser baneado por 5 horas. https://github.com/uxDaniel/visa_rescheduler/issues/4

animista01 commented 1 year ago

Funcionó subiendo de 1 a 8 en el RETRY_TIME pero ahora se ejecuta bien una vez, entra en el cooldown time y falla porque event en lambda_handler no tiene el key resources

image
dvalbuena1 commented 1 year ago

Es extaño, ya que parece que el evento que le esta llegando al lambda_handler es: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} Pero asumo que el evento de EventBridge se manipulo de alguna forma o esta probando solamente la funcion. El parametro event de la funcion lambda_handler tiene una estructura especifica que genera el evento de EventBridge donde en la llave [resources][0] se encuentra el ARN del evento. Similar al siguiente:

arn:aws:events:us-east-1:00000000000:rule/visa-rescheduler-lambda-prod-main-rule-1

animista01 commented 1 year ago

Quizas haga falta algo en el readme, despues de python3 -c "import setup; setup.as_lambda_function()", hay algo más por hacer? Así se ve mi function en el dashboard.

image
dvalbuena1 commented 1 year ago

No señor, ese es el único comando que debe ejecutarse. Tal vez le recomiendo nuevamente que revise cualquier cambio que haya realizado que pueda estar afectando ese despliegue como pueden ser los tabs o espaciados en archivos python y .yml. De igual forma revise los últimos commits que he realizado, puede que solucione el problema.