constructor()

in source/patterns/@aws-solutions-constructs/aws-lambda-dynamodb/lib/index.ts [91:154]


  constructor(scope: Construct, id: string, props: LambdaToDynamoDBProps) {
    super(scope, id);
    defaults.CheckProps(props);

    if (props.deployVpc || props.existingVpc) {
      if (props.deployVpc && props.existingVpc) {
        throw new Error("More than 1 VPC specified in the properties");
      }

      this.vpc = defaults.buildVpc(scope, {
        defaultVpcProps: defaults.DefaultIsolatedVpcProps(),
        existingVpc: props.existingVpc,
        userVpcProps: props.vpcProps,
        constructVpcProps: {
          enableDnsHostnames: true,
          enableDnsSupport: true,
        },
      });

      defaults.AddAwsServiceEndpoint(scope, this.vpc, defaults.ServiceEndpointTypes.DYNAMODB);
    }

    this.lambdaFunction = defaults.buildLambdaFunction(this, {
      existingLambdaObj: props.existingLambdaObj,
      lambdaFunctionProps: props.lambdaFunctionProps,
      vpc: this.vpc
    });

    this.dynamoTable = defaults.buildDynamoDBTable(this, {
      dynamoTableProps: props.dynamoTableProps,
      existingTableObj: props.existingTableObj
    });

    // Configure environment variables
    const tableEnvironmentVariableName = props.tableEnvironmentVariableName || 'DDB_TABLE_NAME';
    this.lambdaFunction.addEnvironment(tableEnvironmentVariableName, this.dynamoTable.tableName);

    // Add the requested or default table permissions
    if (props.tablePermissions) {
      const _permissions = props.tablePermissions.toUpperCase();
      if (_permissions === 'ALL') {
        this.dynamoTable.grantFullAccess(this.lambdaFunction.grantPrincipal);
      } else if (_permissions  ===  'READ') {
        this.dynamoTable.grantReadData(this.lambdaFunction.grantPrincipal);
      } else if (_permissions  ===  'READWRITE') {
        this.dynamoTable.grantReadWriteData(this.lambdaFunction.grantPrincipal);
      } else if (_permissions  ===  'WRITE') {
        this.dynamoTable.grantWriteData(this.lambdaFunction.grantPrincipal);
      }
    } else {
      this.dynamoTable.grantReadWriteData(this.lambdaFunction.grantPrincipal);
    }

    // Conditional metadata for cfn_nag
    if (props.dynamoTableProps?.billingMode === dynamodb.BillingMode.PROVISIONED) {
      defaults.addCfnSuppressRules(this.dynamoTable, [
        {
          id: "W73",
          reason: `PROVISIONED billing mode is a default and is not explicitly applied as a setting.`,
        },
      ]);

    }
  }