https://github.com/wheatstalk/aws-cdk-exec
A CLI tool to find and execute your CDK Lambdas and Step Functions in AWS
https://github.com/wheatstalk/aws-cdk-exec
aws aws-cdk aws-lambda lambda serverless
Last synced: 6 months ago
JSON representation
A CLI tool to find and execute your CDK Lambdas and Step Functions in AWS
- Host: GitHub
- URL: https://github.com/wheatstalk/aws-cdk-exec
- Owner: wheatstalk
- License: apache-2.0
- Created: 2022-02-14T02:23:04.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-13T01:07:28.000Z (over 1 year ago)
- Last Synced: 2024-04-14T00:42:11.334Z (over 1 year ago)
- Topics: aws, aws-cdk, aws-lambda, lambda, serverless
- Language: TypeScript
- Homepage:
- Size: 1.67 MB
- Stars: 19
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# AWS CDK Exec
Provides `cdk-exec`, an AWS CDK dev tool to quickly find and execute your
Lambdas and State Machines in AWS.```
$ cdk-exec integ-cdk-exec/Function --input '{"succeed":true}'
⚡ Executing integ-cdk-exec/Function/Resource (integ-cdk-exec-Function76856677-k5ehIzbG2T6S)✨ Final status of integ-cdk-exec/Function/Resource
Output:
{
"succeed": true,
"message": "Hello from Lambda"
}✅ Execution succeeded
```> WARNING: Do not rely on this tool to execute your functions in a production
> environment. Now that you have been warned, please read on.**Exporting Environment Variables**
If during local development you want to access the environment variables
configured for a Lambda Function, such as to see the arns of real resources,
you may use `cdk-exec --export-env integ-cdk-exec/Function`.```
$ cdk-exec --export-env integ-cdk-exec/Function
FOO=bar
SECRET_ARN=arn:aws:secretsmanager:REGION:000000000000:secret:SecretA720EF05-qa4X020B9S3f-UI3sIs
```## Usage
First, add `@wheatstalk/aws-cdk-exec` to your project's dev dependencies.
Then synthesize your app to a `cdk.out` directory. Once synthesized there, you
can execute one of your resources with `cdk-exec`.> If you're using `cdk watch`, the CDK will keep your `cdk.out` up to date, so
> when you use watch mode, you can run `cdk-exec` (roughly) at will.## Full Example
**app.ts**
```ts
import { App, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Choice, Condition, Fail, StateMachine, Succeed } from 'aws-cdk-lib/aws-stepfunctions';const app = new App();
const stack = new Stack(app, 'integ-cdk-exec');new StateMachine(stack, 'StateMachine', {
definition: new Choice(stack, 'Choice')
.when(Condition.isPresent('$.succeed'),
new Succeed(stack, 'ChoiceSucceed'))
.otherwise(
new Fail(stack, 'ChoiceFail')),
});new Function(stack, 'Function', {
runtime: Runtime.PYTHON_3_9,
handler: 'index.handler',
code: Code.fromInline(`
def handler(event, context):
if "succeed" in event:
return {"succeed": True, "message": "Hello from Lambda"}raise Exception('Error from lambda')
`),
});app.synth();
```**Synthesize your app**
The `cdk-exec` tool operates on a synthesized cloud assembly (your `cdk.out`
directory), so the first step is to synthesize your app:```console
$ cdk synth --output cdk.out
```**Execute a state machine with input**
```
$ cdk-exec integ-cdk-exec/StateMachine --input '{"succeed":true}'
⚡ Executing integ-cdk-exec/StateMachine/Resource (arn:aws:states:REGION:000000000000:stateMachine:StateMachine2E01A3A5-8z4XHXAvT3qq)✨ Final status of integ-cdk-exec/StateMachine/Resource
Output:
{
"succeed": true
}✅ Execution succeeded
```**Execute a lambda with input**
```
$ cdk-exec integ-cdk-exec/Function --input '{"succeed":true}'
⚡ Executing integ-cdk-exec/Function/Resource (integ-cdk-exec-Function76856677-k5ehIzbG2T6S)✨ Final status of integ-cdk-exec/Function/Resource (integ-cdk-exec-Function76856677-k5ehIzbG2T6S)
Output:
{
"succeed": true,
"message": "Hello from Lambda"
}✅ Execution succeeded
```**Use a custom cloud assembly directory**
```
$ cdk-exec --app path/to/cdkout integ-cdk-exec/Function --input '{"json":"here"}'
⚡ Executing integ-cdk-exec/Function/Resource (integ-cdk-exec-Function76856677-k5ehIzbG2T6S)✨ Final status of integ-cdk-exec/Function/Resource
Output:
{
"succeed": true,
"message": "Hello from Lambda"
}✅ Execution succeeded
```## Resource Matching
**Path matching**
`cdk-exec` searches for resources matching the exact path you provide and any
deeper nested resources. This is how we support both L1 & L2 constructs, but
is also a convenient shortcut when your app has only one executable resource.For example, if you have only one function or state machine in a stack, you
can type `cdk-exec my-stack` and your resource will be found. If your entire
app has only one executable resource, you can run `cdk-exec` without arguments
to run it.**Tag matching**
When running `cdk-exec --tag mytag=value`, cdk-exec will search for a resource
matching tags that you have defined in your CDK app. If more than one resource
would match, by default `cdk-exec` will produce an error message. But, if you
want to execute several resources simultaneously, `cdk-exec` provides `--all`.We have also added aliases and shorthands to streamline typing label-matching
commands. For example, `cdk-exec -at mytag` will try to run all resources with
a tag named `mytag`, regardless of the value of the tag. This has the same
effect as typing the longer `cdk-exec --all --tag mytag` command.**Metadata matching**
When running `cdk-exec --metadata mymeta=myvalue`, cdk-exec will search for and
run resources containing the given metadata. Same as for tag matching, you can
run one or more matching resources if you specify the `--all` option.## Notes
**Path metadata**
This tool requires path metadata to be enabled in your assembly.