CDK - передача конкретной лямбда-версии в задачу пошаговой функции

У меня есть стек CDK, который создает лямбда-функции и задачи. Каждая задача использует лямбда-функцию. В настоящее время задача пошаговой функции указывается только на псевдоним $LATEST. Моя цель - обновить версию или псевдоним лямбда-функций и соответствующим образом обновить задачу пошаговой функции.

Создание лямбды:

    createLambda(scope: cdk.Construct, name: string, lambdaPath: string, handler: string = 'app.handler', timeout: number = 900): lambda.Function {
            const lambdaFunction = new lambda.Function(scope, name, {
              functionName: name, 
              runtime: lambda.Runtime.NODEJS_10_X,
              code: lambda.Code.asset(lambdaPath),
              handler: handler,
              timeout: Duration.seconds(timeout),
              description: `Generated on: ${new Date().toISOString()}`
            });
            const version  = lambdaFunction.addVersion(new Date().toISOString());

            new lambda.Alias(scope, `alias-${new Date().toISOString()}`, {
              aliasName: 'live',
              version: version,
            });

            return lambdaFunction;
          }

создание задачи:

    createTask(scope: cdk.Construct,lambdaFunction: lambda.Function,duration: number = 1200,name: string): sfn.Task {
            const task = new sfn.Task(scope, name, {
              task: new tasks.InvokeFunction(lambdaFunction),
              timeout: Duration.seconds(duration)
            });
            return task;
          }

Итак, мой вопрос: Могу ли я указать на конкретную лямбда-версию в задаче пошаговой функции?


person Amit Baranes    schedule 01.01.2020    source источник


Ответы (1)


Закончился использованием лямбда-ARN, при каждом изменении лямбда-выражения CDK создает новую версию и возвращает лямбда-версию ARN:

createLambda(scope: cdk.Construct, name: string, lambdaPath: string, handler: string = 'app.handler', timeout: number = 900): string {
    const lambdaFunction = new lambda.Function(scope, name, {
      functionName: name, 
      runtime: lambda.Runtime.NODEJS_10_X,
      code: lambda.Code.asset(lambdaPath),
      handler: handler,
      timeout: Duration.seconds(timeout),
    });
    const lambdaFunctionARN  = lambdaFunction.addVersion(`${new Date().toISOString()}`).functionArn;

    return lambdaFunctionARN;
  }

Позже задача Step functions получает ARN в качестве входных данных и импортирует лямбда-функцию, используя:

const lambdaVersion = lambda.Function.fromFunctionArn(scope,'LambdaImportUsingARN',lambdaVersionARN)
person Amit Baranes    schedule 02.01.2020