A mini-project that lets the passenger create an account, book a bus ticket and schedule the trip. This project uses some AWS services such as API Gateway, DynamoDB, Lambda, SQS, and EventBridge. It also documents how this project is created. This serves as a familiarization for the AWS services.
-
Install all the dependencies and bootstrap your project
dev@dev:~:bus-ticketing$ make init
To initialize the project with specific AWS profile, you can pass a parameter called
profile
.dev@dev:~:bus-ticketing$ make init profile=profile_name
-
Deploy the project.
dev@dev:~:bus-ticketing$ make deploy # Deploying with specific AWS profile dev@dev:~:bus-ticketing$ make deploy profile=profile_name
npm install
install projects dependenciesnpm run build
compile typescript to jsnpm run watch
watch for changes and compilenpm run test
perform the jest unit testscdk deploy
deploy this stack to your default AWS account/regioncdk diff
compare deployed stack with current statecdk synth
emits the synthesized CloudFormation templatecdk bootstrap
deployment of AWS CloudFormation template to a specific AWS environment (account and region)cdk destroy
destroy this stack from your default AWS account/region
In the root directory, we have some configuration files, most of which are language specific.
cdk.json
: Tells the CDK Toolkit how to execute your app. It includes details such as the app entry point, context values, and runtime settings.package.json
: Manages our node packages and scripts. It defines the project's metadata, scripts for building, deploying, and running tests, as well as the required depdencies for the CDK and other project dependencies.node_modules
: Maintained by NPM and includes all your project's dependencies.tsconfig.json
: TypeScript compiler options and settings for the project.jest.config.js
: Used to configure Jest, the testing framework, for running testes related to our CDK application.root
: It allows us to specify one or more directories from which Jest will search for test files.testMatch
: Specifies the pattern or patterns to match the test files in the CDK application.transform
: Configures how Jest transforms different file types using the appropriate transformers.testEnvironment
: Allows us to specify the environment in which our tests will run.
The api
directory includes a schema
subdirectory that focuses on storing data-related structures or schemas. It contains files that define the structure or schema for the data used within the API layer of the application.
Every CDK App can consist of one or more stacks. You can think of a stack as a unit of deployment. All AWS resources defined within the scope of a stack, either directly or indirectly, are provisioned as a single unit. Because AWS CDK stacks are implemented through AWS CloudFormation stacks, they have the same limitations as in AWS CloudFormation.
If you don't specify env
, the stack will be environment-agnostic. Account/Region-dependent features and context lookups will not work, but a single synthesized template can be deployed anywhere.
To specialize the stack for the AWS Account and Region that are implied by the current CLI configuration:
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}
If you know exactly what account
and region
you want to deploy the stack to:
env: {
account: '012345678912',
region: 'us-east-1'
}
For more information, see Environments.
The app
key tells the CDK CLI how to run our code. The command points to the location of our CDK App.
npx ts-node --prefer-ts-exts bin/bus-ticketing.ts
The feature flags in the context
object give us the option to enable or disable some breaking changes that have been made by the AWS CDK team outside of majore version releases. It allow the AWS CDK team to push new features that cause breaking changes without having to wait for a major version release. They can just enable the new functionality for new projects, whereas old projects without the flags will continue to work.
The cmd
directory contains the Lambda functions main entry point. Each Lambda function should have its own directory within the cmd
, and the directory name should match the name of the executable file you want to have for that function.
It contains the private application and library code. The code inside the internal
directory is the code you don't want others importing into their application or libraries.
The lib/stacks
directory contains files that define your CDK stacks. Each stack is usually represented by a separate file and these define the infrastructure resources and configurations to be provisioned. When defining stacks, you'll need to use the AWS Construct Library, which provides higher-level abstractions for AWS resources and services.
For more information, see AWS Developer Guide Constructs and AWS CDK API Reference.