0.0.502 โ€ข Published 4 months ago

@awsless/awsless v0.0.502

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

npm version

npm downloads

Table of Contents

Features

๐Ÿชถ AWS development using JSON config with best practices baked in

โšก Deploy APIs, functions, databases, queues, and more โ€” all in one place

๐Ÿ”’ Secure by default with IAM-based permissions and least privilege

๐ŸŒ First-class support for AWS Lambda, DynamoDB, SQS, EventBridge, and more

๐Ÿงช Built-in local development and testing utilities

๐Ÿ”„ Automatic function bundling with support for ES modules and TypeScript

๐Ÿ”„ Types generatation for all resources that can be acessed anywhere in the code

Installing

Package manager

Using npm:

$ npm i @awsless/awsless

Using pnpm:

$ pnpm i @awsless/awsless

Getting Started

In an AWSless project, your infrastructure is organized into modular stack files, each with its own purpose, and a shared base configuration. Before you begin, make sure you have the AWS CLI installed.

Base Configuration

This is your shared app configuration, which acts as the base stack for the entire project. This should exist in the root of your project. app.json

{
  "name": "hello-world",
  "region": "eu-west-1",
  "profile": "test",
  "defaults": {
    "alerts": {
      "debug": "hello@gmail.com"
    }
  }
}

๐Ÿ”‘ Key Fields

  • name: Name of your application.

  • region: AWS region where you want to deploy your infrastructure.

  • profile: Your AWS CLI profile to use for deployment.

Modular Stacks

Each feature/module of your application can be defined as a separate stack file. These live in their own folders and are completely independent.

Example - auth/stack.json

{
	"name": "auth",
	"functions": {
		"verify": "./src/lambda.ts" // AWS Lambda
	},

}

Example - rate/stack.json

{
	"name": "rate",
	"functions": {
		"limit": "./src/lambda.ts" // AWS Lambda
	},

}

You can create as many stack files as needed, each targeting different parts of your application.

Deploying

Deploy all stacks

$ pnpm awsless deploy

Deploy individual stack

$ pnpm awsless deploy rate

Deploy multiple stacks

$ pnpm awsless deploy rate auth

Deploy base stack

$ pnpm awsless deploy base

Stack Updates

AWSless makes it simple to remove infrastructure when it's no longer needed.

๐Ÿงผ Delete a Specific Stack

$ pnpm awsless delete rate

๐Ÿ’ฃ Delete All Stacks

pnpm awsless delete

โš ๏ธ This will remove all deployed resources associated with your stacks. Use with caution!

โ™ป๏ธ Updating or Replacing Resources When you modify a stack file and run a deployment again, AWSless will:

  • Update existing resources if changes are detected.

  • Delete resources that are removed from the stack file.

  • Create new resources as needed.

  • This ensures your infrastructure always reflects the current state of your stack configuration โ€” no manual cleanup required.

Smart Helpers: Call Your Infra Like Functions

Once your stacks are defined, AWSless provides built-in helpers like Fn, Queue, and Task to let you interact with your infrastructure directly from your application code โ€” no wiring or manual setup needed.

To enable full type support for these resources, run:

$ pnpm run dev

This will watch your project and automatically generate type definitions for all the resources you've created.

You can then use them seamlessly inside your Lambda functions:

Now from one lambda function we can all any infra like

import { Queue, Fn } from '@awsless/awsless'

// Call a Lambda function from another stack
await Fn.rate.limit()

// Push a message to a queue
await Queue.notifications.send({ userId: 123 })

๐Ÿ’ก These helpers are fully typed and auto-wired, making your code clean, safe, and easy to maintain.

Testing Stacks

AWSless supports built-in testing for your stacks to ensure everything works as expected before deployment.

You can define test folder in each stack

{
    "name": "rate",
    "test": "./path/to/test/folder"
}

exmaple test case rate/test/utils.ts

describe('test', () => {
	it('hello world', async () => {
		expect(1 + 2).toStrictEqual(3)
	})
})

๐Ÿ” Run Tests Manually

$ pnpm awsless test rate

This will look for a defined test folder inside the rate stack directory and run any defined tests inside here.

๐Ÿ›ก๏ธ Tests Run Automatically Before Deploy Whenever you run pnpm awsless deploy, AWSless will automatically:

  • Check if a test/ folder exists for each stack

  • Run the tests for that stack

  • Block the deployment if any tests fail

Core Resources

Function - AWS Lambda

Basic usage

{
  "functions": {
    "FUNCTION_NAME": "/path/to/function"
  }
}

Advanced usage

You can also customize your Lambda function with additional parameters like memory size, timeout, environment variables, and more:

	"functions": {
		"test": {
			"code": "/path/to/function",
			"memorySize": 512
		}
	},

Task

A Task in AWSless is an asynchronous Lambda function designed for background processing. You can trigger a task and immediately move on โ€” AWSless handles the execution in the background, including retries and logging on failure.

Basic usage

{
  "tasks": {
    "FUNCTION_NAME": "/path/to/function"
  }
}

Advanced usage

You can also customize your Lambda function with additional parameters like memory size, timeout, environment variables, and more:

	"tasks": {
		"test": {
			"code": "/path/to/function",
			"memorySize": 512
		}
	},

Table

The tables feature in AWSless allows you to define fully managed, serverless DynamoDB tables directly in your stack configuration.

Usage

{
  "tables": {
    "TABLE_NAME": {
      "hash": "id",
      "sort": "user",
      	"indexes": {
				"list": {
					"hash": "createdAt",
					"sort": "id"
				}
		},
    }
  }
}

๐Ÿ”‘ Key Fields:

  • hash - Primary key
  • sort - Sort key
  • indexes - Define secondary index here

Queue

This allows you to define a queue along with the consumer lambda.

Usage

{
	"queues": {
		"sendMail": {
			"consumer": "/path/to/lambda/file",
			"maxConcurrency": 2,
			"batchSize": 5,
		}
	},
}

Topics

This allows you to define a topic along with the subscriber lambda.

Usage

{
	{
  "topics": [ "TOPIC_NAME" ],
  "subscribers": {
    "TOPIC_NAME": "topic-consumer.ts",
  }
}
}

Crons

AWSless uses AWS EventBridge to provide fully managed, serverless cron jobs โ€” perfect for running scheduled tasks like cleanups, reports, or recurring syncs.

Usage

{
  "crons": {
    "CRON_NAME": {
      "schedule": "1 day",
      "consumer": "cron-consumer.ts",
    }
  }
}

๐Ÿ”‘ Key Options:

  • schedule: The interval or cron expression to define when the job should run (e.g., "1 day" or "cron(0 12 * ? )").

  • consumer: Path to the Lambda function that should be triggered on schedule.

RPC

AWSless allows you to easily expose any Lambda function as a type-safe RPC (Remote Procedure Call) endpoint for your frontend.

The request and response types are automatically inferred from your Lambda function's payload and return value, giving you end-to-end type safety.

{
  "rpc": {
    "base": { // base resource defined in app.json
      "SendFriendRequest": "/path/to/lambda"
    }
  }
}

Smart Functions - Call your infra from code

With awsless, you can interact with your infrastructure directly from your code. awsless generates all necessary types for you, allowing seamless access to your resources.

To set up, define your stacks and run:

$ pnpm awsless dev

This command will generate the required types and mappings, enabling you to access infrastructure components in your code effortlessly.

Resources are accessible via their stack name and resource name. For instance, if a Lambda function exists within a stack named player, you can access its resources using:

player.{resourceName}

Examples

Lambda Function

Calling a function named limit inside the rate stack:

import { Fn } from '@awsless/awsless'

await Fn.rate.limit({userId: "test"})

Task

import { Task } from '@awsless/awsless'

await Task.mail.send({msg: "hi", userId: "test"})

Queue

Sending a message to a queue

import { Queue } from '@awsless/awsless'

await Queue.mail.send({msg: "hi", userId: "test"})

Topic

Publish a message to SNS topic

import { Topic } from '@awsless/awsless'

await Topic.transaction.credit({amount: 10, userId: "test"})

Config

Reading a secret configuration value:

import { Config } from '@awsless/awsless'

const key = await Config.API_KEY
0.0.436

8 months ago

0.0.435

8 months ago

0.0.434

8 months ago

0.0.433

8 months ago

0.0.439

8 months ago

0.0.438

8 months ago

0.0.437

8 months ago

0.0.432

8 months ago

0.0.431

8 months ago

0.0.430

8 months ago

0.0.447

6 months ago

0.0.446

6 months ago

0.0.445

8 months ago

0.0.444

8 months ago

0.0.449

6 months ago

0.0.448

6 months ago

0.0.443

8 months ago

0.0.442

8 months ago

0.0.441

8 months ago

0.0.440

8 months ago

0.0.458

6 months ago

0.0.457

6 months ago

0.0.456

6 months ago

0.0.455

6 months ago

0.0.459

6 months ago

0.0.450

6 months ago

0.0.454

6 months ago

0.0.453

6 months ago

0.0.451

6 months ago

0.0.469

5 months ago

0.0.468

5 months ago

0.0.467

5 months ago

0.0.466

5 months ago

0.0.461

6 months ago

0.0.460

6 months ago

0.0.465

5 months ago

0.0.464

5 months ago

0.0.463

6 months ago

0.0.462

6 months ago

0.0.403

11 months ago

0.0.402

11 months ago

0.0.401

11 months ago

0.0.400

11 months ago

0.0.407

9 months ago

0.0.406

9 months ago

0.0.405

9 months ago

0.0.404

11 months ago

0.0.414

9 months ago

0.0.413

9 months ago

0.0.412

9 months ago

0.0.411

9 months ago

0.0.418

9 months ago

0.0.417

9 months ago

0.0.416

9 months ago

0.0.415

9 months ago

0.0.410

9 months ago

0.0.409

9 months ago

0.0.408

9 months ago

0.0.425

8 months ago

0.0.424

8 months ago

0.0.423

8 months ago

0.0.422

9 months ago

0.0.429

8 months ago

0.0.428

8 months ago

0.0.427

8 months ago

0.0.426

8 months ago

0.0.421

9 months ago

0.0.420

9 months ago

0.0.419

9 months ago

0.0.502

4 months ago

0.0.501

4 months ago

0.0.500

4 months ago

0.0.395

11 months ago

0.0.394

11 months ago

0.0.393

11 months ago

0.0.392

11 months ago

0.0.399

11 months ago

0.0.398

11 months ago

0.0.397

11 months ago

0.0.396

11 months ago

0.0.391

11 months ago

0.0.390

11 months ago

0.0.479

5 months ago

0.0.478

5 months ago

0.0.477

5 months ago

0.0.472

5 months ago

0.0.471

5 months ago

0.0.470

5 months ago

0.0.476

5 months ago

0.0.475

5 months ago

0.0.473

5 months ago

0.0.489

5 months ago

0.0.488

5 months ago

0.0.483

5 months ago

0.0.482

5 months ago

0.0.481

5 months ago

0.0.480

5 months ago

0.0.487

5 months ago

0.0.486

5 months ago

0.0.485

5 months ago

0.0.379

12 months ago

0.0.499

4 months ago

0.0.378

12 months ago

0.0.494

5 months ago

0.0.373

12 months ago

0.0.493

5 months ago

0.0.372

12 months ago

0.0.492

5 months ago

0.0.491

5 months ago

0.0.498

4 months ago

0.0.377

12 months ago

0.0.497

5 months ago

0.0.376

12 months ago

0.0.496

5 months ago

0.0.375

12 months ago

0.0.495

5 months ago

0.0.374

12 months ago

0.0.490

5 months ago

0.0.389

11 months ago

0.0.383

11 months ago

0.0.382

11 months ago

0.0.388

11 months ago

0.0.387

11 months ago

0.0.386

11 months ago

0.0.385

11 months ago

0.0.380

12 months ago

0.0.369

12 months ago

0.0.368

12 months ago

0.0.371

12 months ago

0.0.370

12 months ago

0.0.367

12 months ago

0.0.359

1 year ago

0.0.358

1 year ago

0.0.357

1 year ago

0.0.356

1 year ago

0.0.355

1 year ago

0.0.354

1 year ago

0.0.353

1 year ago

0.0.352

1 year ago

0.0.362

1 year ago

0.0.361

1 year ago

0.0.360

1 year ago

0.0.366

1 year ago

0.0.365

1 year ago

0.0.364

1 year ago

0.0.363

1 year ago

0.0.315

1 year ago

0.0.314

1 year ago

0.0.313

1 year ago

0.0.312

1 year ago

0.0.319

1 year ago

0.0.318

1 year ago

0.0.317

1 year ago

0.0.316

1 year ago

0.0.311

1 year ago

0.0.310

1 year ago

0.0.309

1 year ago

0.0.326

1 year ago

0.0.325

1 year ago

0.0.323

1 year ago

0.0.329

1 year ago

0.0.328

1 year ago

0.0.327

1 year ago

0.0.322

1 year ago

0.0.321

1 year ago

0.0.320

1 year ago

0.0.337

1 year ago

0.0.336

1 year ago

0.0.335

1 year ago

0.0.334

1 year ago

0.0.339

1 year ago

0.0.338

1 year ago

0.0.333

1 year ago

0.0.332

1 year ago

0.0.331

1 year ago

0.0.330

1 year ago

0.0.348

1 year ago

0.0.347

1 year ago

0.0.346

1 year ago

0.0.345

1 year ago

0.0.229

1 year ago

0.0.349

1 year ago

0.0.228

1 year ago

0.0.340

1 year ago

0.0.344

1 year ago

0.0.343

1 year ago

0.0.342

1 year ago

0.0.341

1 year ago

0.0.304

1 year ago

0.0.303

1 year ago

0.0.302

1 year ago

0.0.301

1 year ago

0.0.308

1 year ago

0.0.307

1 year ago

0.0.306

1 year ago

0.0.305

1 year ago

0.0.300

1 year ago

0.0.274

1 year ago

0.0.273

1 year ago

0.0.272

1 year ago

0.0.271

1 year ago

0.0.278

1 year ago

0.0.277

1 year ago

0.0.275

1 year ago

0.0.270

1 year ago

0.0.285

1 year ago

0.0.284

1 year ago

0.0.283

1 year ago

0.0.282

1 year ago

0.0.289

1 year ago

0.0.288

1 year ago

0.0.287

1 year ago

0.0.286

1 year ago

0.0.281

1 year ago

0.0.280

1 year ago

0.0.296

1 year ago

0.0.295

1 year ago

0.0.294

1 year ago

0.0.293

1 year ago

0.0.299

1 year ago

0.0.298

1 year ago

0.0.297

1 year ago

0.0.292

1 year ago

0.0.291

1 year ago

0.0.290

1 year ago

0.0.238

1 year ago

0.0.237

1 year ago

0.0.236

1 year ago

0.0.235

1 year ago

0.0.239

1 year ago

0.0.351

1 year ago

0.0.230

1 year ago

0.0.350

1 year ago

0.0.234

1 year ago

0.0.233

1 year ago

0.0.232

1 year ago

0.0.231

1 year ago

0.0.249

1 year ago

0.0.248

1 year ago

0.0.247

1 year ago

0.0.246

1 year ago

0.0.241

1 year ago

0.0.240

1 year ago

0.0.245

1 year ago

0.0.244

1 year ago

0.0.243

1 year ago

0.0.242

1 year ago

0.0.259

1 year ago

0.0.258

1 year ago

0.0.257

1 year ago

0.0.252

1 year ago

0.0.251

1 year ago

0.0.250

1 year ago

0.0.256

1 year ago

0.0.255

1 year ago

0.0.254

1 year ago

0.0.253

1 year ago

0.0.268

1 year ago

0.0.263

1 year ago

0.0.262

1 year ago

0.0.261

1 year ago

0.0.260

1 year ago

0.0.267

1 year ago

0.0.266

1 year ago

0.0.265

1 year ago

0.0.264

1 year ago

0.0.216

1 year ago

0.0.215

1 year ago

0.0.219

1 year ago

0.0.218

1 year ago

0.0.217

1 year ago

0.0.227

1 year ago

0.0.226

1 year ago

0.0.225

1 year ago

0.0.224

1 year ago

0.0.223

1 year ago

0.0.222

1 year ago

0.0.221

1 year ago

0.0.220

1 year ago

0.0.214

1 year ago

0.0.213

1 year ago

0.0.212

1 year ago

0.0.211

1 year ago

0.0.210

1 year ago

0.0.209

1 year ago

0.0.205

1 year ago

0.0.204

1 year ago

0.0.203

1 year ago

0.0.208

1 year ago

0.0.207

1 year ago

0.0.206

1 year ago

0.0.202

1 year ago

0.0.201

1 year ago

0.0.200

1 year ago

0.0.195

1 year ago

0.0.199

1 year ago

0.0.198

1 year ago

0.0.194

1 year ago

0.0.193

1 year ago

0.0.192

1 year ago

0.0.191

1 year ago

0.0.190

1 year ago

0.0.186

1 year ago

0.0.189

1 year ago

0.0.188

1 year ago

0.0.187

1 year ago

0.0.185

1 year ago

0.0.184

1 year ago

0.0.183

1 year ago

0.0.182

1 year ago

0.0.175

2 years ago

0.0.174

2 years ago

0.0.179

2 years ago

0.0.178

2 years ago

0.0.177

2 years ago

0.0.176

2 years ago

0.0.180

2 years ago

0.0.173

2 years ago

0.0.172

2 years ago

0.0.171

2 years ago

0.0.170

2 years ago

0.0.169

2 years ago

0.0.168

2 years ago

0.0.167

2 years ago

0.0.166

2 years ago

0.0.164

2 years ago

0.0.163

2 years ago

0.0.162

2 years ago

0.0.161

2 years ago

0.0.165

2 years ago

0.0.159

2 years ago

0.0.160

2 years ago

0.0.158

2 years ago

0.0.157

2 years ago

0.0.156

2 years ago

0.0.153

2 years ago

0.0.152

2 years ago

0.0.155

2 years ago

0.0.154

2 years ago

0.0.150

2 years ago

0.0.149

2 years ago

0.0.148

2 years ago

0.0.147

2 years ago

0.0.146

2 years ago

0.0.145

2 years ago

0.0.144

2 years ago

0.0.143

2 years ago

0.0.139

2 years ago

0.0.142

2 years ago

0.0.141

2 years ago

0.0.140

2 years ago

0.0.129

2 years ago

0.0.138

2 years ago

0.0.137

2 years ago

0.0.136

2 years ago

0.0.131

2 years ago

0.0.130

2 years ago

0.0.135

2 years ago

0.0.134

2 years ago

0.0.133

2 years ago

0.0.132

2 years ago

0.0.128

2 years ago

0.0.127

2 years ago

0.0.126

2 years ago

0.0.125

2 years ago

0.0.124

2 years ago

0.0.123

2 years ago

0.0.122

2 years ago

0.0.119

2 years ago

0.0.120

2 years ago

0.0.121

2 years ago

0.0.118

2 years ago

0.0.117

2 years ago

0.0.116

2 years ago

0.0.115

2 years ago

0.0.114

2 years ago

0.0.113

2 years ago

0.0.112

2 years ago

0.0.111

2 years ago

0.0.106

2 years ago

0.0.105

2 years ago

0.0.104

2 years ago

0.0.103

2 years ago

0.0.109

2 years ago

0.0.108

2 years ago

0.0.107

2 years ago

0.0.102

2 years ago

0.0.101

2 years ago

0.0.100

2 years ago

0.0.110

2 years ago

0.0.99

2 years ago

0.0.86

2 years ago

0.0.87

2 years ago

0.0.88

2 years ago

0.0.89

2 years ago

0.0.95

2 years ago

0.0.96

2 years ago

0.0.97

2 years ago

0.0.98

2 years ago

0.0.90

2 years ago

0.0.91

2 years ago

0.0.92

2 years ago

0.0.93

2 years ago

0.0.94

2 years ago

0.0.84

2 years ago

0.0.85

2 years ago

0.0.80

2 years ago

0.0.81

2 years ago

0.0.82

2 years ago

0.0.83

2 years ago

0.0.77

2 years ago

0.0.78

2 years ago

0.0.79

2 years ago

0.0.76

2 years ago

0.0.75

2 years ago

0.0.74

2 years ago

0.0.73

2 years ago

0.0.72

2 years ago

0.0.71

2 years ago

0.0.70

2 years ago

0.0.69

2 years ago

0.0.68

2 years ago

0.0.67

2 years ago

0.0.66

2 years ago

0.0.65

2 years ago

0.0.64

2 years ago

0.0.63

2 years ago

0.0.62

2 years ago

0.0.61

2 years ago

0.0.60

2 years ago

0.0.59

2 years ago

0.0.58

2 years ago

0.0.57

2 years ago

0.0.56

2 years ago

0.0.55

2 years ago

0.0.54

2 years ago

0.0.53

2 years ago

0.0.52

2 years ago

0.0.51

2 years ago

0.0.50

2 years ago

0.0.49

2 years ago

0.0.48

2 years ago

0.0.47

2 years ago

0.0.46

2 years ago

0.0.45

2 years ago

0.0.44

2 years ago

0.0.43

2 years ago

0.0.42

2 years ago

0.0.41

2 years ago

0.0.40

2 years ago

0.0.39

2 years ago

0.0.38

2 years ago

0.0.37

2 years ago

0.0.36

2 years ago

0.0.35

2 years ago

0.0.34

2 years ago

0.0.33

2 years ago

0.0.32

2 years ago

0.0.31

2 years ago

0.0.30

2 years ago

0.0.29

2 years ago

0.0.28

2 years ago

0.0.27

2 years ago

0.0.26

2 years ago

0.0.25

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago