Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: resource naming refactor #233

Merged
merged 2 commits into from
Jan 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
729 changes: 659 additions & 70 deletions API.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions src/pipelines/stage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export abstract class DataStage extends Stage {

export interface StateMachineStageProps extends StageProps {
readonly stateMachineInput?: { [key: string]: any };
readonly stateMachineName?: string;
malachi-constant marked this conversation as resolved.
Show resolved Hide resolved
readonly additionalRolePolicyStatements?: iam.PolicyStatement[];
readonly stateMachineFailedExecutionsAlarmThreshold?: number;
readonly stateMachineFailedExecutionsAlarmEvaluationPeriods?: number;
Expand All @@ -86,6 +87,7 @@ export abstract class StateMachineStage extends DataStage {
protected createStateMachine(definition: sfn.IChainable, props: StateMachineStageProps): CreateStateMachineResult {
const stateMachine = new sfn.StateMachine(this, "State Machine", {
definition: definition,
stateMachineName: props.stateMachineName,
});

if (props.additionalRolePolicyStatements) {
Expand Down
2 changes: 2 additions & 0 deletions src/stages/kinesis-s3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { DataStage, DataStageProps } from "../pipelines/stage";
export interface FirehoseToS3StageProps extends DataStageProps {
readonly s3Bucket?: s3.IBucket;
readonly s3BucketProps?: s3.BucketProps;
readonly firehoseDeliveryStreamProps?: firehose.DeliveryStreamProps;
readonly kinesisFirehoseDestinationsS3BucketProps?: destinations.S3BucketProps;

readonly dataOutputPrefix?: string;
Expand Down Expand Up @@ -54,6 +55,7 @@ export class FirehoseToS3Stage extends DataStage {
this.deliveryStream = new firehose.DeliveryStream(this, "Delivery Stream", {
destinations: [new destinations.S3Bucket(this.bucket, consolidatedDestinationsBucketProps)],
sourceStream: this.dataStream,
...props.firehoseDeliveryStreamProps,
malachi-constant marked this conversation as resolved.
Show resolved Hide resolved
});
const dataOutputPrefix: string = consolidatedDestinationsBucketProps.dataOutputPrefix;

Expand Down
21 changes: 4 additions & 17 deletions src/stages/sqs-lambda.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,17 @@ import * as sqs from "aws-cdk-lib/aws-sqs";
import { Construct } from "constructs";
import { DataStage, DataStageProps } from "../pipelines/stage";

export interface SqsToLambdaStageFunctionProps {
readonly code: lambda.Code;
readonly handler: string;
readonly runtime?: lambda.Runtime;
readonly timeout?: cdk.Duration;
readonly memorySize?: cdk.Size;
readonly role?: iam.Role;
readonly layers?: lambda.ILayerVersion[];

export interface SqsToLambdaStageFunctionProps extends lambda.FunctionProps {
readonly errorsAlarmThreshold?: number;
readonly errorsEvaluationPeriods?: number;
readonly errorsComparisonOperator?: cloudwatch.ComparisonOperator;
}

export interface SqsToLambdaStageQueueProps {
readonly visibilityTimeout?: cdk.Duration;
readonly fifo?: boolean;
}

export interface SqsToLambdaStageProps extends DataStageProps {
readonly lambdaFunction?: lambda.IFunction;
readonly lambdaFunctionProps?: SqsToLambdaStageFunctionProps;
readonly sqsQueue?: sqs.IQueue;
readonly sqsQueueProps?: SqsToLambdaStageQueueProps;
readonly sqsQueueProps?: sqs.QueueProps;

readonly batchSize?: number;
readonly maxBatchingWindow?: cdk.Duration;
Expand Down Expand Up @@ -62,10 +49,10 @@ export class SqsToLambdaStage extends DataStage {

this.function = new lambda.Function(this, "Process Function", {
code: functionProps.code,
runtime: functionProps.runtime ?? lambda.Runtime.PYTHON_3_9,
runtime: functionProps.runtime,
handler: functionProps.handler,
timeout: functionProps.timeout,
memorySize: functionProps.memorySize?.toMebibytes(),
memorySize: functionProps.memorySize,
layers: functionProps.layers,
role: functionProps.role,
environment: {
Expand Down
2 changes: 2 additions & 0 deletions test/athena-sql-stage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,14 @@ test("AthenaToSQL stage with additional properties", () => {
}),
],
stateMachineInput: { foo: "bar" },
stateMachineName: "dummy-statemachine",
});

const template = Template.fromStack(stack);
template.hasResourceProperties("AWS::StepFunctions::StateMachine", {
DefinitionString: {
"Fn::Join": ["", Match.arrayWith([Match.stringLikeRegexp("Start Query Exec")])],
},
StateMachineName: "dummy-statemachine",
});
});
6 changes: 4 additions & 2 deletions test/cicd-pipeline-stack.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ test("Basic CICDPipeline", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(
devStack,
Expand Down Expand Up @@ -126,7 +127,8 @@ test("CICDPipeline with manual approval set", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(
devStack,
Expand Down
13 changes: 9 additions & 4 deletions test/data-pipelines.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ test("Basic DataPipeline", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(stack, "Layer", "arn:aws:lambda:us-east-1:222222222222:layer:dummy:1"),
],
Expand Down Expand Up @@ -65,6 +66,7 @@ test("DataPipeline cannot have a Stage without targets in the middle", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
runtime: lambda.Runtime.PYTHON_3_9,
},
dlqEnabled: true,
});
Expand All @@ -88,7 +90,8 @@ test("DataPipeline with Scheduled stage", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(stack, "Layer", "arn:aws:lambda:us-east-1:222222222222:layer:dummy:1"),
],
Expand Down Expand Up @@ -131,7 +134,8 @@ test("DataPipeline with override rule", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(stack, "Layer", "arn:aws:lambda:us-east-1:222222222222:layer:dummy:1"),
],
Expand Down Expand Up @@ -161,7 +165,8 @@ test("DataPipeline with skip rule", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(stack, "Layer", "arn:aws:lambda:us-east-1:222222222222:layer:dummy:1"),
],
Expand Down
11 changes: 9 additions & 2 deletions test/sqs-lambda-stage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ test("SQSToLambdaStage creates Lambda Function and SQS Queue", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(stack, "Layer", "arn:aws:lambda:us-east-1:222222222222:layer:dummy:1"),
],
Expand All @@ -40,6 +41,7 @@ test("SQSToLambdaStage has event source mapping", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
runtime: lambda.Runtime.PYTHON_3_9,
},
batchSize: 5,
});
Expand All @@ -57,6 +59,7 @@ test("SQSToLambdaStage does not use dead letter queue when not needed", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
runtime: lambda.Runtime.PYTHON_3_9,
},
});

Expand All @@ -78,6 +81,7 @@ test("SQSToLambdaStage creates dead letter queue when needed", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
runtime: lambda.Runtime.PYTHON_3_9,
},
dlqEnabled: true,
});
Expand All @@ -100,6 +104,7 @@ test("SQSToLambdaStage is able to reuse an existing queue", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
runtime: lambda.Runtime.PYTHON_3_9,
},
sqsQueue: new sqs.Queue(stack, "Queue", {
queueName: "custom-queue",
Expand Down Expand Up @@ -141,6 +146,7 @@ test("SQSToLambdaStage is able to create a CloudWatch alarm", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
runtime: lambda.Runtime.PYTHON_3_9,
errorsAlarmThreshold: 10,
errorsEvaluationPeriods: 3,
errorsComparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
Expand Down Expand Up @@ -177,7 +183,8 @@ test("SQSToLambda must have 'messageGroupId' when using a fifo queue", () => {
lambdaFunctionProps: {
code: lambda.Code.fromAsset(path.join(__dirname, "/../src/")),
handler: "commons.handlers.lambda_handler",
memorySize: cdk.Size.mebibytes(512),
memorySize: 512,
runtime: lambda.Runtime.PYTHON_3_9,
layers: [
lambda.LayerVersion.fromLayerVersionArn(
stack,
Expand Down