2.0.441 • Published 13 days ago

cdk-lambda-subminute v2.0.441

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
13 days ago

cdk-lambda-subminute

License Release npm downloads pypi downloads NuGet downloads repo languages

npm (JS/TS)PyPI (Python)Maven (Java)GoNuGet
LinkLinkLinkLinkLink

This construct creates a state machine that can invoke a Lambda function per time unit which can be less than one minute, such as invoking every 10 seconds. You only need to craft a Lambda function and then assign it as an argument into the construct. An example is included.

Serverless Architecture

Introduction

This construct library is reffered to thie AWS Architecture blog post, A serverless solution for invoking AWS Lambda at a sub-minute frequency, written by Emanuele Menga. I made it as a constrcut library where you only need to care about a target Lambda function, how frequent and how long you want to execute.

Example

Typescript

You could also refer to here.

$ cdk --init language typescript
$ yarn add cdk-lambda-subminute
class TypescriptStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const targetLabmda = new Function(this, 'targetFunction', {
      code: Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); })'), // It's just a simple function for demonstration purpose only.
      functionName: 'testTargetFunction',
      runtime: Runtime.NODEJS_18_X,
      handler: 'index.handler',
    });
    const cronJobExample = 'cron(50/1 15-17 ? * SUN-SAT *)';
    const subminuteMaster = new LambdaSubminute(this, 'LambdaSubminute', { targetFunction: targetLabmda, cronjobExpression: cronJobExample });

    new cdk.CfnOutput(this, 'OStateMachineArn', { value: subminuteMaster.stateMachineArn });
    new cdk.CfnOutput(this, 'OIteratorFunctionArn', { value: subminuteMaster.iteratorFunction.functionArn });
  }
}

const app = new cdk.App();
new TypescriptStack(app, 'TypescriptStack', {
});

Python

You could also refer to here.

# upgrading related Python packages
$ python -m ensurepip --upgrade
$ python -m pip install --upgrade pip
$ python -m pip install --upgrade virtualenv
# initialize a CDK Python project
$ cdk init --language python
# make packages installed locally instead of globally
$ source .venv/bin/activate
$ cat <<EOL > requirements.txt
aws-cdk.core
aws-cdk.aws-lambda
cdk-lambda-subminute
EOL
$ python -m pip install -r requirements.txt
from aws_cdk import core as cdk
from aws_cdk.aws_lambda import Code, Function, Runtime
from cdk_lambda_subminute import LambdaSubminute

class PythonStack(cdk.Stack):
    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        target_lambda = Function(
            self, "targetFunction",
            code=Code.from_inline(
                "exports.handler = function(event, ctx, cb) { return cb(null, \"hi\"); })"),
            function_name="testTargetFunction",
            runtime=Runtime.NODEJS_18_X,
            handler="index.handler"
        )
        cron_job_example = "cron(10/1 4-5 ? * SUN-SAT *)"
        subminute_master = LambdaSubminute(
            self, "LambdaSubminute",
            target_function=target_lambda,
            cronjob_expression=cron_job_example,
            frequency=7,
            interval_time=8)

        cdk.CfnOutput(self, "OStateMachineArn",
                      value=subminute_master.state_machine_arn)
        cdk.CfnOutput(self, "OIteratorFunctionArn",
                      value=subminute_master.iterator_function.function_arn)
$ deactivate

Java

You could also refer to here.

$ cdk init --language java
$ mvn package
.
.
<properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <cdk.version>2.87.0</cdk.version>
      <constrcut.verion>2.0.201</constrcut.verion>
      <junit.version>5.7.1</junit.version>
</properties>
 .
 .
 <dependencies>
     <!-- AWS Cloud Development Kit -->
      <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>core</artifactId>
            <version>${cdk.version}</version>
      </dependency>
      <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>lambda</artifactId>
            <version>${cdk.version}</version>
      </dependency>
      <dependency>
            <groupId>io.github.hsiehshujeng</groupId>
            <artifactId>cdk-lambda-subminute</artifactId>
            <version>${constrcut.verion}</version>
      </dependency>
     .
     .
     .
 </dependencies>
package com.myorg;

import software.amazon.awscdk.core.CfnOutput;
import software.amazon.awscdk.core.CfnOutputProps;
import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import software.amazon.awscdk.services.lambda.Code;
import software.amazon.awscdk.services.lambda.Function;
import software.amazon.awscdk.services.lambda.FunctionProps;
import software.amazon.awscdk.services.lambda.Runtime;
import io.github.hsiehshujeng.cdk.lambda.subminute.LambdaSubminute;
import io.github.hsiehshujeng.cdk.lambda.subminute.LambdaSubminuteProps;

public class JavaStack extends Stack {
    public JavaStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public JavaStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        Function targetLambda = new Function(this, "targetFunction", 
          FunctionProps.builder()
              .code(Code.fromInline("exports.handler = function(event, ctx, cb) { return cb(null, \"hi\"); })"))
              .functionName("estTargetFunction")
              .runtime(Runtime.NODEJS_18_X)
              .handler("index.handler")
              .build());
        String cronJobExample = "cron(50/1 4-5 ? * SUN-SAT *)";
        LambdaSubminute subminuteMaster = new LambdaSubminute(this, "LambdaSubminute", LambdaSubminuteProps.builder()
              .targetFunction(targetLambda)
              .cronjobExpression(cronJobExample)
              .frequency(6)
              .intervalTime(9)
              .build());

        new CfnOutput(this, "OStateMachineArn",
                CfnOutputProps.builder()
                  .value(subminuteMaster.getStateMachineArn())
                  .build());
        new CfnOutput(this, "OIteratorFunctionArn",
                CfnOutputProps.builder()
                  .value(subminuteMaster.getIteratorFunction().getFunctionName())
                  .build());
    }
}

C

You could also refer to here.

$ cdk init --language csharp
$ dotnet add src/Csharp package Amazon.CDK.AWS.Lambda
$ dotnet add src/Csharp package Lambda.Subminute --version 2.0.201
using Amazon.CDK;
using Amazon.CDK.AWS.Lambda;
using ScottHsieh.Cdk;

namespace Csharp
{
    public class CsharpStack : Stack
    {
        internal CsharpStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var targetLambda = new Function(this, "targetFunction", new FunctionProps
            {
                Code = Code.FromInline("exports.handler = function(event, ctx, cb) { return cb(null, \"hi\"); })"),
                FunctionName = "testTargetFunction",
                Runtime = Runtime.NODEJS_18_X,
                Handler = "index.handler"
            });
            string cronJobExample = "cron(50/1 6-7 ? * SUN-SAT *)";
            var subminuteMaster = new LambdaSubminute(this, "LambdaSubminute", new LambdaSubminuteProps
            {
                TargetFunction = targetLambda,
                CronjobExpression = cronJobExample,
                Frequency = 10,
                IntervalTime = 6,
            });
        
            new CfnOutput(this, "OStateMachineArn", new CfnOutputProps
            {
                Value = subminuteMaster.StateMachineArn
            });
            new CfnOutput(this, "OIteratorFunctionArn", new CfnOutputProps
            {
                Value = subminuteMaster.IteratorFunction.FunctionArn
            });
        }
    }
}

GO

# Initialize a new AWS CDK application in the current directory with the Go programming language
cdk init app -l go
# Add this custom CDK construct to your project
go get github.com/HsiehShuJeng/cdk-lambda-subminute-go/cdklambdasubminute/v2@v2.0.226
# Ensure all dependencies are properly listed in the go.mod file and remove any unused ones
go mod tidy
# Upgrade all Go modules in your project to their latest minor or patch versions
go get -u ./...

Statemachine Diagram

image

Known issue

Originally, I utilized PythonFuncion in the module of @aws-cdk/aws-lambda-python to build the iterator Lambda function. Every thing works fine, including test, on my local machine (MacBook Pro M1), until it comes to the CI in Github Actions, it awlays gave me the following message:

## cdk version: 1.105.0 (build 4813992)
Bundling did not produce any output. Check that content is written to /asset-output.

      64 |     }));
      65 |
    > 66 |     this.function = new PythonFunction(this, 'Iterator', {
         |                     ^
      67 |       functionName: 'lambda-subminute-iterator',
      68 |       description: 'A function for breaking the limit of 1 minute with the CloudWatch Rules.',
      69 |       logRetention: RetentionDays.THREE_MONTHS,

      at AssetStaging.bundle (node_modules/@aws-cdk/core/lib/asset-staging.ts:484:13)
      at AssetStaging.stageByBundling (node_modules/@aws-cdk/core/lib/asset-staging.ts:328:10)
      at stageThisAsset (node_modules/@aws-cdk/core/lib/asset-staging.ts:194:35)
      at Cache.obtain (node_modules/@aws-cdk/core/lib/private/cache.ts:24:13)
      at new AssetStaging (node_modules/@aws-cdk/core/lib/asset-staging.ts:219:44)
      at new Asset (node_modules/@aws-cdk/aws-s3-assets/lib/asset.ts:127:21)
      at AssetCode.bind (node_modules/@aws-cdk/aws-lambda/lib/code.ts:277:20)
      at new Function (node_modules/@aws-cdk/aws-lambda/lib/function.ts:583:29)
      at new PythonFunction (node_modules/@aws-cdk/aws-lambda-python/lib/function.ts:106:5)
      at new IteratorLambda (src/cdk-lambda-subminute.ts:66:21)
      at new LambdaSubminute (src/cdk-lambda-subminute.ts:25:22)
      at Object.<anonymous>.test (test/integ.test.ts:23:3)

I actually have tried many different methods according to the following threads but to no avail. I'll attempt to test some thoughts or just post the issue onto the CDK Github repo.

2.0.441

13 days ago

2.0.440

14 days ago

2.0.439

15 days ago

2.0.438

16 days ago

2.0.437

17 days ago

2.0.436

18 days ago

2.0.435

19 days ago

2.0.434

20 days ago

2.0.433

21 days ago

2.0.432

22 days ago

2.0.431

24 days ago

2.0.430

27 days ago

2.0.429

28 days ago

2.0.427

30 days ago

2.0.426

1 month ago

2.0.428

29 days ago

2.0.425

1 month ago

2.0.424

1 month ago

2.0.423

1 month ago

2.0.422

1 month ago

2.0.421

1 month ago

2.0.420

1 month ago

2.0.419

1 month ago

2.0.418

1 month ago

2.0.417

1 month ago

2.0.416

1 month ago

2.0.415

1 month ago

2.0.414

1 month ago

2.0.413

1 month ago

2.0.412

2 months ago

2.0.411

2 months ago

2.0.410

2 months ago

2.0.409

2 months ago

2.0.408

2 months ago

2.0.407

2 months ago

2.0.406

2 months ago

2.0.405

2 months ago

2.0.404

2 months ago

2.0.403

2 months ago

2.0.402

2 months ago

2.0.401

2 months ago

2.0.400

2 months ago

2.0.399

2 months ago

2.0.398

2 months ago

2.0.397

2 months ago

2.0.396

2 months ago

2.0.395

2 months ago

2.0.394

2 months ago

2.0.393

2 months ago

2.0.392

2 months ago

2.0.391

2 months ago

2.0.390

2 months ago

2.0.389

2 months ago

2.0.388

2 months ago

2.0.387

2 months ago

2.0.386

2 months ago

2.0.385

3 months ago

2.0.384

3 months ago

2.0.383

3 months ago

2.0.382

3 months ago

2.0.381

3 months ago

2.0.380

3 months ago

2.0.379

3 months ago

2.0.378

3 months ago

2.0.377

3 months ago

2.0.376

3 months ago

2.0.375

3 months ago

2.0.374

3 months ago

2.0.373

3 months ago

2.0.372

3 months ago

2.0.371

3 months ago

2.0.370

3 months ago

2.0.369

3 months ago

2.0.368

3 months ago

2.0.367

3 months ago

2.0.366

3 months ago

2.0.365

3 months ago

2.0.364

3 months ago

2.0.363

3 months ago

2.0.362

3 months ago

2.0.361

4 months ago

2.0.359

4 months ago

2.0.360

4 months ago

2.0.358

4 months ago

2.0.357

4 months ago

2.0.356

4 months ago

2.0.355

4 months ago

2.0.354

4 months ago

2.0.353

4 months ago

2.0.352

4 months ago

2.0.351

4 months ago

2.0.350

4 months ago

2.0.349

4 months ago

2.0.348

4 months ago

2.0.347

4 months ago

2.0.346

4 months ago

2.0.345

4 months ago

2.0.344

4 months ago

2.0.343

4 months ago

2.0.342

4 months ago

2.0.341

4 months ago

2.0.340

4 months ago

2.0.339

4 months ago

2.0.338

4 months ago

2.0.337

4 months ago

2.0.336

4 months ago

2.0.335

5 months ago

2.0.334

5 months ago

2.0.333

5 months ago

2.0.332

5 months ago

2.0.331

5 months ago

2.0.330

5 months ago

2.0.329

5 months ago

2.0.328

5 months ago

2.0.327

5 months ago

2.0.326

5 months ago

2.0.325

5 months ago

2.0.324

5 months ago

2.0.323

5 months ago

2.0.322

5 months ago

2.0.321

5 months ago

2.0.320

5 months ago

2.0.319

5 months ago

2.0.318

5 months ago

2.0.306

6 months ago

2.0.305

6 months ago

2.0.304

6 months ago

2.0.303

6 months ago

2.0.302

6 months ago

2.0.301

6 months ago

2.0.300

6 months ago

2.0.290

6 months ago

2.0.299

6 months ago

2.0.298

6 months ago

2.0.297

6 months ago

2.0.296

6 months ago

2.0.295

6 months ago

2.0.294

6 months ago

2.0.293

6 months ago

2.0.292

6 months ago

2.0.291

6 months ago

2.0.279

7 months ago

2.0.278

7 months ago

2.0.277

7 months ago

2.0.276

7 months ago

2.0.275

7 months ago

2.0.274

7 months ago

2.0.273

7 months ago

2.0.272

7 months ago

2.0.271

7 months ago

2.0.270

7 months ago

2.0.289

6 months ago

2.0.288

6 months ago

2.0.287

6 months ago

2.0.286

6 months ago

2.0.285

6 months ago

2.0.284

6 months ago

2.0.283

6 months ago

2.0.282

6 months ago

2.0.281

6 months ago

2.0.280

7 months ago

2.0.259

7 months ago

2.0.258

7 months ago

2.0.257

7 months ago

2.0.256

7 months ago

2.0.255

7 months ago

2.0.254

7 months ago

2.0.253

7 months ago

2.0.251

7 months ago

2.0.250

8 months ago

2.0.269

7 months ago

2.0.268

7 months ago

2.0.267

7 months ago

2.0.266

7 months ago

2.0.265

7 months ago

2.0.264

7 months ago

2.0.263

7 months ago

2.0.262

7 months ago

2.0.261

7 months ago

2.0.260

7 months ago

2.0.239

8 months ago

2.0.238

8 months ago

2.0.237

8 months ago

2.0.236

8 months ago

2.0.235

8 months ago

2.0.234

8 months ago

2.0.233

8 months ago

2.0.232

8 months ago

2.0.231

8 months ago

2.0.230

8 months ago

2.0.249

8 months ago

2.0.248

8 months ago

2.0.247

8 months ago

2.0.246

8 months ago

2.0.245

8 months ago

2.0.244

8 months ago

2.0.243

8 months ago

2.0.242

8 months ago

2.0.241

8 months ago

2.0.240

8 months ago

2.0.209

10 months ago

2.0.208

10 months ago

2.0.218

10 months ago

2.0.217

10 months ago

2.0.216

10 months ago

2.0.215

10 months ago

2.0.214

10 months ago

2.0.213

10 months ago

2.0.212

10 months ago

2.0.211

10 months ago

2.0.210

10 months ago

2.0.219

10 months ago

2.0.229

8 months ago

2.0.228

8 months ago

2.0.227

8 months ago

2.0.226

10 months ago

2.0.225

10 months ago

2.0.224

10 months ago

2.0.223

10 months ago

2.0.222

10 months ago

2.0.221

10 months ago

2.0.220

10 months ago

2.0.309

6 months ago

2.0.308

6 months ago

2.0.307

6 months ago

2.0.317

5 months ago

2.0.316

5 months ago

2.0.315

5 months ago

2.0.314

5 months ago

2.0.313

5 months ago

2.0.312

5 months ago

2.0.311

5 months ago

2.0.310

5 months ago

2.0.207

10 months ago

2.0.206

10 months ago

2.0.205

10 months ago

2.0.204

10 months ago

2.0.203

10 months ago

2.0.202

10 months ago

2.0.201

10 months ago

2.0.200

10 months ago

2.0.199

10 months ago

2.0.198

10 months ago

2.0.197

10 months ago

2.0.196

11 months ago

2.0.195

11 months ago

2.0.194

11 months ago

2.0.193

11 months ago

2.0.192

11 months ago

2.0.191

11 months ago

2.0.190

11 months ago

2.0.179

11 months ago

2.0.178

11 months ago

2.0.180

11 months ago

2.0.189

11 months ago

2.0.188

11 months ago

2.0.187

11 months ago

2.0.186

11 months ago

2.0.185

11 months ago

2.0.184

11 months ago

2.0.183

11 months ago

2.0.182

11 months ago

2.0.181

11 months ago

2.0.177

11 months ago

2.0.176

11 months ago

2.0.175

11 months ago

2.0.174

11 months ago

2.0.173

11 months ago

2.0.172

11 months ago

2.0.171

11 months ago

2.0.170

11 months ago

2.0.159

12 months ago

2.0.158

12 months ago

2.0.157

12 months ago

2.0.156

12 months ago

2.0.155

12 months ago

2.0.154

12 months ago

2.0.153

12 months ago

2.0.152

12 months ago

2.0.169

11 months ago

2.0.168

11 months ago

2.0.167

11 months ago

2.0.166

12 months ago

2.0.165

12 months ago

2.0.164

12 months ago

2.0.163

12 months ago

2.0.162

12 months ago

2.0.161

12 months ago

2.0.160

12 months ago

2.0.139

1 year ago

2.0.138

1 year ago

2.0.137

1 year ago

2.0.136

1 year ago

2.0.135

1 year ago

2.0.134

1 year ago

2.0.133

1 year ago

2.0.132

1 year ago

2.0.131

1 year ago

2.0.130

1 year ago

2.0.149

12 months ago

2.0.148

1 year ago

2.0.147

1 year ago

2.0.146

1 year ago

2.0.145

1 year ago

2.0.144

1 year ago

2.0.143

1 year ago

2.0.142

1 year ago

2.0.141

1 year ago

2.0.140

1 year ago

2.0.129

1 year ago

2.0.128

1 year ago

2.0.127

1 year ago

2.0.126

1 year ago

2.0.125

1 year ago

2.0.124

1 year ago

2.0.151

12 months ago

2.0.150

12 months ago

2.0.119

1 year ago

2.0.118

1 year ago

2.0.117

1 year ago

2.0.116

1 year ago

2.0.115

1 year ago

2.0.114

1 year ago

2.0.113

1 year ago

2.0.112

1 year ago

2.0.111

1 year ago

2.0.110

1 year ago

2.0.123

1 year ago

2.0.122

1 year ago

2.0.121

1 year ago

2.0.120

1 year ago

2.0.109

2 years ago

2.0.108

2 years ago

2.0.107

2 years ago

2.0.106

2 years ago

2.0.105

2 years ago

2.0.104

2 years ago

2.0.88

2 years ago

2.0.103

2 years ago

2.0.89

2 years ago

2.0.102

2 years ago

2.0.86

2 years ago

2.0.101

2 years ago

2.0.87

2 years ago

2.0.100

2 years ago

2.0.99

2 years ago

2.0.97

2 years ago

2.0.98

2 years ago

2.0.95

2 years ago

2.0.96

2 years ago

2.0.93

2 years ago

2.0.94

2 years ago

2.0.91

2 years ago

2.0.92

2 years ago

2.0.90

2 years ago

2.0.28

2 years ago

2.0.29

2 years ago

2.0.37

2 years ago

2.0.38

2 years ago

2.0.35

2 years ago

2.0.36

2 years ago

2.0.33

2 years ago

2.0.7

2 years ago

2.0.34

2 years ago

2.0.6

2 years ago

2.0.31

2 years ago

2.0.9

2 years ago

2.0.32

2 years ago

2.0.8

2 years ago

2.0.30

2 years ago

2.0.39

2 years ago

2.0.48

2 years ago

2.0.49

2 years ago

2.0.46

2 years ago

2.0.47

2 years ago

2.0.44

2 years ago

2.0.45

2 years ago

2.0.42

2 years ago

2.0.43

2 years ago

2.0.40

2 years ago

2.0.41

2 years ago

2.0.59

2 years ago

2.0.57

2 years ago

2.0.58

2 years ago

2.0.55

2 years ago

2.0.56

2 years ago

2.0.53

2 years ago

2.0.54

2 years ago

2.0.51

2 years ago

2.0.52

2 years ago

2.0.50

2 years ago

2.0.68

2 years ago

2.0.69

2 years ago

2.0.66

2 years ago

2.0.67

2 years ago

2.0.64

2 years ago

2.0.65

2 years ago

2.0.62

2 years ago

2.0.63

2 years ago

2.0.60

2 years ago

2.0.61

2 years ago

2.0.79

2 years ago

2.0.77

2 years ago

2.0.78

2 years ago

2.0.75

2 years ago

2.0.76

2 years ago

2.0.73

2 years ago

2.0.74

2 years ago

2.0.71

2 years ago

2.0.72

2 years ago

2.0.70

2 years ago

2.0.84

2 years ago

2.0.85

2 years ago

2.0.82

2 years ago

2.0.83

2 years ago

2.0.80

2 years ago

2.0.81

2 years ago

2.0.15

2 years ago

2.0.16

2 years ago

2.0.13

2 years ago

2.0.14

2 years ago

2.0.11

2 years ago

2.0.12

2 years ago

2.0.10

2 years ago

2.0.19

2 years ago

2.0.17

2 years ago

2.0.18

2 years ago

2.0.26

2 years ago

2.0.27

2 years ago

2.0.24

2 years ago

2.0.25

2 years ago

2.0.22

2 years ago

2.0.23

2 years ago

2.0.20

2 years ago

2.0.21

2 years ago

2.0.3

2 years ago

2.0.2

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

0.1.37

3 years ago

0.1.38

3 years ago

0.1.36

3 years ago

0.1.35

3 years ago

0.1.34

3 years ago

0.1.32

3 years ago

0.1.33

3 years ago

0.1.31

3 years ago

0.1.30

3 years ago

0.1.29

3 years ago

0.1.27

3 years ago

0.1.28

3 years ago

0.1.26

3 years ago

0.1.23

3 years ago

0.1.24

3 years ago

0.1.25

3 years ago

0.1.21

3 years ago

0.1.22

3 years ago

0.1.20

3 years ago

0.1.17

3 years ago

0.1.18

3 years ago

0.1.19

3 years ago

0.1.10

3 years ago

0.1.11

3 years ago

0.1.12

3 years ago

0.1.13

3 years ago

0.1.14

3 years ago

0.1.15

3 years ago

0.1.16

3 years ago

0.1.9

3 years ago

0.1.8

3 years ago

0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago