如何使用aws-cdk绑定规则和lambda执行?

时间:2020-07-16 19:36:17

标签: amazon-web-services aws-lambda aws-cdk

我正在创建的小型服务遇到麻烦。我试图每晚触发一个lambda,我正在使用aws-cdk将基础设施编写为代码。我在查找有关如何执行此操作的正确示例时遇到了麻烦,文档对此并不适合。

我应该如何正确绑定? nightlyServiceRule.addTarget行上的cdk依赖项代码引发了一个未处理的错误。

import lambda = require('@aws-cdk/aws-lambda');
import { Vpc, SecurityGroup, IVpc, ISecurityGroup } from '@aws-cdk/aws-ec2';
import { IFunction } from '@aws-cdk/aws-lambda';
import { Rule, Schedule } from '@aws-cdk/aws-events';
import apigateway = require('@aws-cdk/aws-apigateway');
import targets = require('@aws-cdk/aws-events-targets');

export class DeviceApiStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps, env?: { [key: string]: string }) {
    super(scope, id, props);
    this.env = env as { [key: string]: string };

    // Create API and paths
    const api = new apigateway.RestApi(this, 'deviceApi', {
      restApiName: 'Device Service',
    });

    this.vpc = Vpc.fromLookup(this, 'vpc', { vpcId: 'vpc-sdf' });
    this.securityGroup = SecurityGroup.fromSecurityGroupId(
      this,
      'Security Group',
      'sg-sdf',
    );

    // Nightly service
    const nightlySimServiceLambda = this.createLambda(
      'nightlySimServiceLambda',
      'NightlySimService.handler',
      60 * 15,
    );
    const nightlyServiceRule = new Rule(this, 'NightlyServiceRule', {
      schedule: Schedule.cron({ minute: '0', hour: '1' }),
    });
    nightlyServiceRule.addTarget(
      targets.LambdaFunction.bind(nightlyServiceRule, nightlySimServiceLambda),
    );
  }

  vpc: IVpc;
  env: { [key: string]: string };
  securityGroup: ISecurityGroup;

  createLambda(name: string, code: string, runLength: number = 20): IFunction {
    return new lambda.Function(this, name, {
      code: new lambda.AssetCode('source'),
      handler: code,
      runtime: lambda.Runtime.NODEJS_10_X,
      vpc: this.vpc,
      environment: this.env,
      timeout: cdk.Duration.seconds(runLength),
      securityGroup: this.securityGroup,
    });
  }
}

0 个答案:

没有答案